kordoc 4.14.2 → 4.14.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 +51 -6
- package/dist/{-AQKXLFIM.js → -Z4TJ3QGK.js} +13 -11
- package/dist/{chunk-QOMNEWCQ.cjs → chunk-5LAZQCUJ.cjs} +305 -31
- package/dist/chunk-5LAZQCUJ.cjs.map +1 -0
- package/dist/{chunk-7IAQ4HOK.js → chunk-6BWU6SQX.js} +1 -1
- package/dist/chunk-6BWU6SQX.js.map +1 -0
- package/dist/{chunk-FOJZNMMK.js → chunk-6CUIXJOC.js} +1 -1
- package/dist/chunk-6CUIXJOC.js.map +1 -0
- package/dist/{chunk-ZWD734EY.js → chunk-7SE4EZ45.js} +2 -2
- package/dist/{chunk-TSFS5VKD.js → chunk-D4U2TXDC.js} +332 -141
- package/dist/chunk-D4U2TXDC.js.map +1 -0
- package/dist/chunk-DPWWXUOG.js +2222 -0
- package/dist/chunk-DPWWXUOG.js.map +1 -0
- package/dist/{chunk-GDW4YP7K.js → chunk-GLSBEEZJ.js} +2 -2
- package/dist/{chunk-JQEFP45L.js → chunk-GUJ4Q73I.js} +2 -2
- package/dist/{chunk-ZWOFQRIB.js → chunk-HIJUKZHM.js} +3 -3
- package/dist/chunk-IMAAFSAX.cjs +1352 -0
- package/dist/chunk-IMAAFSAX.cjs.map +1 -0
- package/dist/{chunk-TNCKOL2O.js → chunk-LCW7SEPG.js} +2 -2
- package/dist/chunk-LFSQAMSM.js +1352 -0
- package/dist/chunk-LFSQAMSM.js.map +1 -0
- package/dist/chunk-MG6DJEX4.js +1299 -0
- package/dist/chunk-MG6DJEX4.js.map +1 -0
- package/dist/{chunk-QC5T6D4J.js → chunk-NLU6LBLY.js} +299 -25
- package/dist/chunk-NLU6LBLY.js.map +1 -0
- package/dist/{chunk-EQZI77PP.cjs → chunk-QEJUY6SK.cjs} +3 -3
- package/dist/{chunk-EQZI77PP.cjs.map → chunk-QEJUY6SK.cjs.map} +1 -1
- package/dist/{chunk-VQ5W4MYO.js → chunk-QIF2VXBQ.js} +298 -24
- package/dist/chunk-QIF2VXBQ.js.map +1 -0
- package/dist/{chunk-UET462HB.js → chunk-TITDJWVZ.js} +2 -2
- package/dist/{chunk-247ANM72.cjs → chunk-USHQCF5T.cjs} +870 -147
- package/dist/chunk-USHQCF5T.cjs.map +1 -0
- package/dist/{chunk-C7FQBSON.js → chunk-V3DX4DUF.js} +2 -2
- package/dist/{chunk-DOGPOY4B.js → chunk-VDN7LMPL.js} +2 -2
- package/dist/{chunk-EDNJLUSE.js → chunk-VJIL6PIL.js} +2 -2
- package/dist/{chunk-L7DMSMAG.cjs → chunk-VWUYVEFN.cjs} +1 -1
- package/dist/chunk-VWUYVEFN.cjs.map +1 -0
- package/dist/{chunk-HR2XNERB.cjs → chunk-WJHAU73B.cjs} +2 -2
- package/dist/{chunk-HR2XNERB.cjs.map → chunk-WJHAU73B.cjs.map} +1 -1
- package/dist/{chunk-NS55SM7A.js → chunk-WJJGW5PL.js} +2 -2
- package/dist/{chunk-EISO3POT.js → chunk-XVXHXQIO.js} +788 -194
- package/dist/chunk-XVXHXQIO.js.map +1 -0
- package/dist/{chunk-ILU76UF3.js → chunk-YAKC46HZ.js} +2 -2
- package/dist/chunk-YAKC46HZ.js.map +1 -0
- package/dist/{chunk-3DUADAY2.js → chunk-YAVHVFRY.js} +851 -128
- package/dist/chunk-YAVHVFRY.js.map +1 -0
- package/dist/{chunk-A7QC2ZVP.js → chunk-YT3GC62E.js} +851 -128
- package/dist/chunk-YT3GC62E.js.map +1 -0
- package/dist/chunks-CCMRL4MJ.js +10 -0
- package/dist/cli.js +228 -97
- package/dist/cli.js.map +1 -1
- package/dist/{formula-PJJ6S3Z2.cjs → formula-5LOVHAKE.cjs} +9 -9
- package/dist/{formula-PJJ6S3Z2.cjs.map → formula-5LOVHAKE.cjs.map} +1 -1
- package/dist/{formula-JGFTXWYT.js → formula-7RANCW5L.js} +3 -3
- package/dist/{formula-5S7WWXGH.js → formula-7UYJOVTB.js} +4 -4
- package/dist/{image-ocr-WCAYXLOA.js → image-ocr-I6JOCATS.js} +34 -16
- package/dist/image-ocr-I6JOCATS.js.map +1 -0
- package/dist/{image-ocr-ZTYAGV3W.cjs → image-ocr-NYBJEOH2.cjs} +36 -18
- package/dist/image-ocr-NYBJEOH2.cjs.map +1 -0
- package/dist/{image-ocr-FLIL7MGN.js → image-ocr-ZV6PDBUQ.js} +32 -14
- package/dist/image-ocr-ZV6PDBUQ.js.map +1 -0
- package/dist/index.cjs +4048 -1216
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +66 -28
- package/dist/index.d.ts +66 -28
- package/dist/index.js +3487 -655
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +74 -53
- package/dist/mcp.js.map +1 -1
- package/dist/{model-bundle-FSPZZ2EM.js → model-bundle-2C5IYDLE.js} +5 -5
- package/dist/{models-CJPAQK5R.js → models-SEQZHZFT.js} +5 -5
- package/dist/{parser-SCUTZAIJ.js → parser-3FNXEP6T.js} +708 -250
- package/dist/parser-3FNXEP6T.js.map +1 -0
- package/dist/{parser-A4TMPJAM.js → parser-FJBJXRJK.js} +708 -250
- package/dist/parser-FJBJXRJK.js.map +1 -0
- package/dist/{parser-VCXE4I5A.cjs → parser-HVEKF73B.cjs} +733 -275
- package/dist/parser-HVEKF73B.cjs.map +1 -0
- package/dist/pdf-ocr-JRDBJ6TA.cjs +14 -0
- package/dist/{pdf-ocr-MBZZ57LD.cjs.map → pdf-ocr-JRDBJ6TA.cjs.map} +1 -1
- package/dist/pdf-ocr-UUBWBEHL.js +16 -0
- package/dist/pdf-ocr-VJSF2SQC.js +13 -0
- package/dist/{profile-io-LBM263K7.js → profile-io-RUFZOZO6.js} +3 -3
- package/dist/{rasterize-46RG4ZF6.js → rasterize-IOYXR5SI.js} +3 -3
- package/dist/redact-NMIKVHMP.js +18 -0
- package/dist/redact-doc-QBHNJ2BU.js +1284 -0
- package/dist/redact-doc-QBHNJ2BU.js.map +1 -0
- package/dist/{render-NGP5T24S.js → render-YZ2TEC3N.js} +7 -7
- package/dist/seal-ECV44TUH.js +10 -0
- package/dist/{setup-AU4OCHNH.js → setup-MPIEP6XT.js} +3 -3
- package/dist/visual-ICMOWUCR.js +19 -0
- package/dist/{watch-MKPUCPXM.js → watch-RYO7MN5B.js} +12 -12
- package/package.json +2 -2
- package/dist/chunk-247ANM72.cjs.map +0 -1
- package/dist/chunk-3DUADAY2.js.map +0 -1
- package/dist/chunk-422427XJ.cjs +0 -571
- package/dist/chunk-422427XJ.cjs.map +0 -1
- package/dist/chunk-7IAQ4HOK.js.map +0 -1
- package/dist/chunk-A7QC2ZVP.js.map +0 -1
- package/dist/chunk-DZIXKL7E.js +0 -145
- package/dist/chunk-DZIXKL7E.js.map +0 -1
- package/dist/chunk-EISO3POT.js.map +0 -1
- package/dist/chunk-EP7KOI2V.js +0 -571
- package/dist/chunk-EP7KOI2V.js.map +0 -1
- package/dist/chunk-FOJZNMMK.js.map +0 -1
- package/dist/chunk-ILU76UF3.js.map +0 -1
- package/dist/chunk-KVWV4ULP.js +0 -516
- package/dist/chunk-KVWV4ULP.js.map +0 -1
- package/dist/chunk-L7DMSMAG.cjs.map +0 -1
- package/dist/chunk-QC5T6D4J.js.map +0 -1
- package/dist/chunk-QOMNEWCQ.cjs.map +0 -1
- package/dist/chunk-TSFS5VKD.js.map +0 -1
- package/dist/chunk-VQ5W4MYO.js.map +0 -1
- package/dist/chunks-SX77P5CV.js +0 -10
- package/dist/image-ocr-FLIL7MGN.js.map +0 -1
- package/dist/image-ocr-WCAYXLOA.js.map +0 -1
- package/dist/image-ocr-ZTYAGV3W.cjs.map +0 -1
- package/dist/parser-A4TMPJAM.js.map +0 -1
- package/dist/parser-SCUTZAIJ.js.map +0 -1
- package/dist/parser-VCXE4I5A.cjs.map +0 -1
- package/dist/pdf-ocr-76SAUXMZ.js +0 -13
- package/dist/pdf-ocr-CPU55CVF.js +0 -16
- package/dist/pdf-ocr-MBZZ57LD.cjs +0 -14
- package/dist/redact-7ILEAUTS.js +0 -12
- package/dist/seal-RGUPOLXD.js +0 -10
- package/dist/visual-NZLYIYEM.js +0 -19
- /package/dist/{-AQKXLFIM.js.map → -Z4TJ3QGK.js.map} +0 -0
- /package/dist/{chunk-ZWD734EY.js.map → chunk-7SE4EZ45.js.map} +0 -0
- /package/dist/{chunk-GDW4YP7K.js.map → chunk-GLSBEEZJ.js.map} +0 -0
- /package/dist/{chunk-JQEFP45L.js.map → chunk-GUJ4Q73I.js.map} +0 -0
- /package/dist/{chunk-ZWOFQRIB.js.map → chunk-HIJUKZHM.js.map} +0 -0
- /package/dist/{chunk-TNCKOL2O.js.map → chunk-LCW7SEPG.js.map} +0 -0
- /package/dist/{chunk-UET462HB.js.map → chunk-TITDJWVZ.js.map} +0 -0
- /package/dist/{chunk-C7FQBSON.js.map → chunk-V3DX4DUF.js.map} +0 -0
- /package/dist/{chunk-DOGPOY4B.js.map → chunk-VDN7LMPL.js.map} +0 -0
- /package/dist/{chunk-EDNJLUSE.js.map → chunk-VJIL6PIL.js.map} +0 -0
- /package/dist/{chunk-NS55SM7A.js.map → chunk-WJJGW5PL.js.map} +0 -0
- /package/dist/{chunks-SX77P5CV.js.map → chunks-CCMRL4MJ.js.map} +0 -0
- /package/dist/{formula-JGFTXWYT.js.map → formula-7RANCW5L.js.map} +0 -0
- /package/dist/{formula-5S7WWXGH.js.map → formula-7UYJOVTB.js.map} +0 -0
- /package/dist/{model-bundle-FSPZZ2EM.js.map → model-bundle-2C5IYDLE.js.map} +0 -0
- /package/dist/{models-CJPAQK5R.js.map → models-SEQZHZFT.js.map} +0 -0
- /package/dist/{pdf-ocr-76SAUXMZ.js.map → pdf-ocr-UUBWBEHL.js.map} +0 -0
- /package/dist/{pdf-ocr-CPU55CVF.js.map → pdf-ocr-VJSF2SQC.js.map} +0 -0
- /package/dist/{profile-io-LBM263K7.js.map → profile-io-RUFZOZO6.js.map} +0 -0
- /package/dist/{rasterize-46RG4ZF6.js.map → rasterize-IOYXR5SI.js.map} +0 -0
- /package/dist/{redact-7ILEAUTS.js.map → redact-NMIKVHMP.js.map} +0 -0
- /package/dist/{render-NGP5T24S.js.map → render-YZ2TEC3N.js.map} +0 -0
- /package/dist/{seal-RGUPOLXD.js.map → seal-ECV44TUH.js.map} +0 -0
- /package/dist/{setup-AU4OCHNH.js.map → setup-MPIEP6XT.js.map} +0 -0
- /package/dist/{visual-NZLYIYEM.js.map → visual-ICMOWUCR.js.map} +0 -0
- /package/dist/{watch-MKPUCPXM.js.map → watch-RYO7MN5B.js.map} +0 -0
package/dist/mcp.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
assertWithinRoot,
|
|
4
4
|
getAccessRoot,
|
|
5
5
|
isOfflineMode
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GLSBEEZJ.js";
|
|
7
7
|
import {
|
|
8
8
|
APPROVAL_MAX,
|
|
9
9
|
BODY_FONTS,
|
|
@@ -42,31 +42,31 @@ import {
|
|
|
42
42
|
resolveBuiltinTemplate,
|
|
43
43
|
unknownFontWarnings,
|
|
44
44
|
usesGaejosikMunche
|
|
45
|
-
} from "./chunk-
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-
|
|
45
|
+
} from "./chunk-XVXHXQIO.js";
|
|
46
|
+
import "./chunk-HIJUKZHM.js";
|
|
47
|
+
import "./chunk-DPWWXUOG.js";
|
|
48
|
+
import "./chunk-VJIL6PIL.js";
|
|
49
49
|
import {
|
|
50
50
|
detectFormat,
|
|
51
51
|
detectOle2Format,
|
|
52
52
|
detectZipFormat,
|
|
53
53
|
extractHwp5MetadataOnly
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-D4U2TXDC.js";
|
|
55
55
|
import "./chunk-7FCNOKOR.js";
|
|
56
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-6BWU6SQX.js";
|
|
57
57
|
import "./chunk-MOL7MDBG.js";
|
|
58
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-YAKC46HZ.js";
|
|
59
59
|
import {
|
|
60
60
|
blocksToMarkdown
|
|
61
|
-
} from "./chunk-
|
|
62
|
-
import "./chunk-
|
|
61
|
+
} from "./chunk-NLU6LBLY.js";
|
|
62
|
+
import "./chunk-V3DX4DUF.js";
|
|
63
63
|
import {
|
|
64
64
|
KordocError,
|
|
65
65
|
VERSION,
|
|
66
66
|
classifyError,
|
|
67
67
|
sanitizeError,
|
|
68
68
|
toArrayBuffer
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-TITDJWVZ.js";
|
|
70
70
|
|
|
71
71
|
// src/mcp.ts
|
|
72
72
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -322,7 +322,7 @@ ${markdown}`);
|
|
|
322
322
|
break;
|
|
323
323
|
case "pdf":
|
|
324
324
|
try {
|
|
325
|
-
const { extractPdfMetadataOnly } = await import("./parser-
|
|
325
|
+
const { extractPdfMetadataOnly } = await import("./parser-3FNXEP6T.js");
|
|
326
326
|
metadata = await extractPdfMetadataOnly(buffer);
|
|
327
327
|
} catch {
|
|
328
328
|
metadata = void 0;
|
|
@@ -498,7 +498,7 @@ ${tableMarkdown}` }]
|
|
|
498
498
|
if (!parsed.success) {
|
|
499
499
|
return { content: [{ type: "text", text: `\uD30C\uC2F1 \uC2E4\uD328: ${parsed.error}` }], isError: true };
|
|
500
500
|
}
|
|
501
|
-
const { blocksToChunks } = await import("./chunks-
|
|
501
|
+
const { blocksToChunks } = await import("./chunks-CCMRL4MJ.js");
|
|
502
502
|
const chunks = blocksToChunks(parsed.blocks, { granularity, includeTableCells: include_table_cells });
|
|
503
503
|
return { content: [{ type: "text", text: capResponseText(JSON.stringify(chunks, null, 2)) }] };
|
|
504
504
|
} catch (err) {
|
|
@@ -520,6 +520,15 @@ function buildFillInputs(fields, formats) {
|
|
|
520
520
|
}
|
|
521
521
|
return out;
|
|
522
522
|
}
|
|
523
|
+
async function isSameFile(a, b) {
|
|
524
|
+
if (a === b) return true;
|
|
525
|
+
try {
|
|
526
|
+
const [sa, sb] = await Promise.all([stat2(a), stat2(b)]);
|
|
527
|
+
return sa.ino === sb.ino && sa.dev === sb.dev;
|
|
528
|
+
} catch {
|
|
529
|
+
return false;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
523
532
|
function registerFormTools(server2) {
|
|
524
533
|
server2.tool(
|
|
525
534
|
"parse_form",
|
|
@@ -734,7 +743,7 @@ ${previewMd}` }]
|
|
|
734
743
|
}
|
|
735
744
|
const image = new Uint8Array(await readFile2(imgResolved));
|
|
736
745
|
const ext = extname2(imgResolved).slice(1).toLowerCase();
|
|
737
|
-
const { placeSealHwpx } = await import("./seal-
|
|
746
|
+
const { placeSealHwpx } = await import("./seal-ECV44TUH.js");
|
|
738
747
|
const result = await placeSealHwpx(buffer, [{
|
|
739
748
|
anchor,
|
|
740
749
|
occurrence,
|
|
@@ -824,60 +833,72 @@ ${previewMd}` }]
|
|
|
824
833
|
);
|
|
825
834
|
server2.tool(
|
|
826
835
|
"redact_document",
|
|
827
|
-
"\uBB38\uC11C\uC758 \uAC1C\uC778\uC815\uBCF4(\uC8FC\uBBFC\uBC88\uD638\xB7\uC804\uD654\xB7\uC774\uBA54\uC77C\xB7\uCE74\uB4DC\xB7\uACC4\uC88C)\uB97C \uD0D0\uC9C0\uD574 \uC11C\uC2DD \uBCF4\uC874 \uB9C8\uC2A4\uD0B9\uD569\uB2C8\uB2E4. HWPX/HWP\uB294 \uC6D0\uBCF8 \uC11C\uC2DD
|
|
836
|
+
"\uBB38\uC11C\uC758 \uAC1C\uC778\uC815\uBCF4(\uC8FC\uBBFC\xB7\uC678\uAD6D\uC778\uB4F1\uB85D\uBC88\uD638\xB7\uC804\uD654\xB7\uC774\uBA54\uC77C\xB7\uCE74\uB4DC\xB7\uACC4\uC88C\xB7\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638\xB7\uC5EC\uAD8C\xB7\uC6B4\uC804\uBA74\uD5C8, rules \uB85C \uC778\uBA85\xB7\uC8FC\uC18C opt-in)\uB97C \uD0D0\uC9C0\uD574 \uC11C\uC2DD \uBCF4\uC874 \uB9C8\uC2A4\uD0B9\uD569\uB2C8\uB2E4. HWPX/HWP\uB294 \uC6D0\uBCF8 \uC11C\uC2DD \uADF8\uB300\uB85C \uAC19\uC740 \uAE38\uC774\uB85C \uAC00\uB9B0 \uD30C\uC77C \u2014 \uBCF8\uBB38\xB7\uD45C\xB7\uC911\uCCA9\uD45C\xB7\uBA38\uB9AC\uB9D0/\uAF2C\uB9AC\uB9D0\xB7\uAC01\uC8FC\xB7\uAE00\uC0C1\uC790\xB7\uD544\uB4DC\xB7\uBBF8\uB9AC\uBCF4\uAE30(\uD14D\uC2A4\uD2B8\xB7\uC774\uBBF8\uC9C0)\xB7\uBB38\uC11C \uC815\uBCF4(\uC81C\uBAA9\xB7\uC791\uC131\uC790)\uAE4C\uC9C0 \uAC00\uB9AC\uACE0, \uC800\uC7A5 \uC804 \uACB0\uACFC \uD30C\uC77C\uC744 \uB2E4\uC2DC \uD6D1\uC5B4 \uB0A8\uC740 PII\uB97C \uBCF4\uACE0\uD569\uB2C8\uB2E4. \uADF8 \uC678 \uD3EC\uB9F7(PDF\xB7DOCX\xB7XLSX \uB4F1)\uC740 \uC6D0\uBCF8\uC744 \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uACE0 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4\uB9CC \uCD9C\uB825\uD569\uB2C8\uB2E4. \uC790\uB3D9 \uAC80\uCD9C \uBCF4\uC870 \uB3C4\uAD6C \u2014 \uACB0\uACFC \uB9AC\uD3EC\uD2B8\uB97C \uC0AC\uB78C\uC774 \uCD5C\uC885 \uD655\uC778\uD574\uC57C \uD558\uBA70 \uC774\uBBF8\uC9C0 \uC18D \uAE00\uC790\uB294 \uD0D0\uC9C0\uD558\uC9C0 \uBABB\uD569\uB2C8\uB2E4. \uB9C8\uC2A4\uD0B9 \uD6C4 render_document\uB85C \uB208\uC73C\uB85C \uD655\uC778\uD558\uB294 \uAC83\uC744 \uAD8C\uC7A5\uD569\uB2C8\uB2E4.",
|
|
828
837
|
{
|
|
829
838
|
file_path: z2.string().min(1).describe("\uB300\uC0C1 \uBB38\uC11C\uC758 \uC808\uB300 \uACBD\uB85C"),
|
|
830
|
-
rules: z2.array(z2.enum(["rrn", "phone", "email", "card", "account", "passport", "driver"])).optional().describe("\uC801\uC6A9 \uB8F0 (\uAE30\uBCF8: rrn\xB7phone\xB7email\xB7card\xB7account \u2014
|
|
839
|
+
rules: z2.array(z2.enum(["rrn", "phone", "email", "card", "account", "brn", "passport", "driver", "crn", "ip", "name", "address"])).optional().describe("\uC801\uC6A9 \uB8F0 (\uAE30\uBCF8: rrn\xB7phone\xB7email\xB7card\xB7account\xB7brn\xB7passport\xB7driver \u2014 crn(\uBC95\uC778\uB4F1\uB85D\uBC88\uD638)\xB7ip\xB7name(\uC778\uBA85, \uBB38\uB9E5 \uAC8C\uC774\uD2B8)\xB7address(\uC8FC\uC18C)\uB294 opt-in)"),
|
|
831
840
|
mask_char: z2.string().min(1).max(1).optional().describe("\uB9C8\uC2A4\uD06C \uBB38\uC790 1\uAE00\uC790 (\uAE30\uBCF8: \u25CF)"),
|
|
832
841
|
output_path: z2.string().min(1).optional().describe("\uCD9C\uB825 \uACBD\uB85C (HWPX/HWP\uB294 \uAC19\uC740 \uD655\uC7A5\uC790, \uADF8 \uC678\uB294 .md) \u2014 dry_run\uC774 \uC544\uB2C8\uBA74 \uD544\uC218"),
|
|
833
842
|
dry_run: z2.boolean().default(false).describe("\uD0D0\uC9C0 \uB9AC\uD3EC\uD2B8\uB9CC \uBC18\uD658, \uD30C\uC77C \uBBF8\uC0DD\uC131")
|
|
834
843
|
},
|
|
835
844
|
async ({ file_path, rules, mask_char, output_path, dry_run }) => {
|
|
836
845
|
try {
|
|
837
|
-
const { buffer } = await readValidatedFile(file_path);
|
|
838
|
-
|
|
846
|
+
const { buffer, resolved } = await readValidatedFile(file_path);
|
|
847
|
+
let format = detectFormat(buffer);
|
|
848
|
+
if (format === "hwpx") {
|
|
849
|
+
const z5 = await detectZipFormat(buffer);
|
|
850
|
+
if (z5 !== "unknown") format = z5;
|
|
851
|
+
} else if (format === "hwp") {
|
|
852
|
+
const o = detectOle2Format(buffer);
|
|
853
|
+
if (o !== "unknown") format = o;
|
|
854
|
+
}
|
|
839
855
|
const patchable = format === "hwpx" || format === "hwp";
|
|
840
856
|
if (!dry_run && !output_path) {
|
|
841
857
|
return { content: [{ type: "text", text: "output_path\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 (\uD0D0\uC9C0\uB9CC \uC6D0\uD558\uBA74 dry_run: true)." }], isError: true };
|
|
842
858
|
}
|
|
843
859
|
const outPath = !dry_run ? safeOutputPath(output_path, new Set(patchable ? [format === "hwp" ? ".hwp" : ".hwpx"] : [".md", ".markdown", ".txt"])) : void 0;
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
return { content: [{ type: "text", text: `\uD30C\uC2F1 \uC2E4\uD328: ${parsed.error}` }], isError: true };
|
|
860
|
+
if (outPath && await isSameFile(outPath, resolved)) {
|
|
861
|
+
return { content: [{ type: "text", text: "output_path\uAC00 \uC785\uB825 \uD30C\uC77C\uACFC \uAC19\uC2B5\uB2C8\uB2E4 \u2014 \uC6D0\uBCF8\uC744 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uB978 \uACBD\uB85C\uB97C \uC9C0\uC815\uD558\uC138\uC694." }], isError: true };
|
|
847
862
|
}
|
|
848
|
-
const {
|
|
849
|
-
const r =
|
|
863
|
+
const { redactDocument } = await import("./redact-doc-QBHNJ2BU.js");
|
|
864
|
+
const r = await redactDocument(buffer, { rules, maskChar: mask_char, filePath: file_path, dryRun: dry_run });
|
|
865
|
+
const MAX_LINES = 50;
|
|
866
|
+
const listed = r.fileHits.length > 0 ? r.fileHits.map((h) => ` - [${h.rule}] ${h.masked} (${h.where} @ ${h.part})`) : r.markdownHits.map((h) => ` - [${h.rule}] ${h.masked}`);
|
|
850
867
|
const byRule = /* @__PURE__ */ new Map();
|
|
851
|
-
for (const h of r.
|
|
868
|
+
for (const h of r.fileHits.length > 0 ? r.fileHits : r.markdownHits) byRule.set(h.rule, (byRule.get(h.rule) ?? 0) + 1);
|
|
869
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
870
|
+
for (const l of listed) grouped.set(l, (grouped.get(l) ?? 0) + 1);
|
|
871
|
+
const groupedLines = [...grouped].map(([l, n]) => n > 1 ? `${l} \xD7${n}` : l);
|
|
852
872
|
const lines = [
|
|
853
|
-
`\uD0D0\uC9C0: ${
|
|
854
|
-
...
|
|
873
|
+
`\uD0D0\uC9C0: ${[...byRule.values()].reduce((a, b) => a + b, 0)}\uAC74 (${[...byRule.entries()].map(([k, v]) => `${k} ${v}`).join(", ") || "\uC5C6\uC74C"})`,
|
|
874
|
+
...groupedLines.slice(0, MAX_LINES),
|
|
875
|
+
...groupedLines.length > MAX_LINES ? [` \u2026 \uC678 ${groupedLines.length - MAX_LINES}\uC904`] : []
|
|
855
876
|
];
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
return { content: [{ type: "text", text: `\uB9C8\uC2A4\uD0B9 \uD328\uCE58 \uC2E4\uD328: ${result.error ?? "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}` }], isError: true };
|
|
862
|
-
}
|
|
863
|
-
await mkdir(dirname2(outPath), { recursive: true });
|
|
864
|
-
await writeFile(outPath, Buffer.from(result.data));
|
|
877
|
+
const save = r.data ? r.changed : r.markdownHits.length > 0;
|
|
878
|
+
if (!dry_run && save) {
|
|
879
|
+
await mkdir(dirname2(outPath), { recursive: true });
|
|
880
|
+
if (r.data) {
|
|
881
|
+
await writeFile(outPath, Buffer.from(r.data));
|
|
865
882
|
lines.push(`\uC800\uC7A5: ${outPath} (\uC6D0\uBCF8 \uC11C\uC2DD \uBCF4\uC874)`);
|
|
866
|
-
if (result.skipped.length > 0) {
|
|
867
|
-
lines.push(`\u26A0\uFE0F \uBBF8\uC801\uC6A9 ${result.skipped.length}\uAC74 \u2014 \uD574\uB2F9 \uC704\uCE58\uB294 \uC6D0\uBB38\uC774 \uB0A8\uC544 \uC788\uC73C\uB2C8 \uBC18\uB4DC\uC2DC \uC218\uB3D9 \uD655\uC778:`);
|
|
868
|
-
for (const s of result.skipped) lines.push(` - ${s.reason}`);
|
|
869
|
-
}
|
|
870
|
-
lines.push("render_document\uB85C \uB9C8\uC2A4\uD0B9 \uACB0\uACFC\uB97C \uB208\uC73C\uB85C \uD655\uC778\uD558\uC138\uC694.");
|
|
871
883
|
} else {
|
|
872
|
-
await
|
|
873
|
-
|
|
874
|
-
lines.push(`\uC800\uC7A5: ${outPath} (${format}\uB294 \uC11C\uC2DD \uBCF4\uC874 \uBBF8\uC9C0\uC6D0 \u2014 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4)`);
|
|
884
|
+
await writeFile(outPath, r.markdown, "utf-8");
|
|
885
|
+
lines.push(`\uC800\uC7A5: ${outPath} (${r.format} \uC6D0\uBCF8\uC740 \uC218\uC815\uD558\uC9C0 \uC54A\uC74C \u2014 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4)`);
|
|
875
886
|
}
|
|
876
887
|
} else if (!dry_run) {
|
|
877
|
-
lines.push("\uD0D0\uC9C0 0\uAC74 \u2014 \uCD9C\uB825 \uD30C\uC77C\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
|
|
888
|
+
lines.push(listed.length > 0 ? "\u274C \uD30C\uC77C\uC5D0\uC11C \uAC00\uB9B0 \uACF3\uC774 \uC5C6\uC5B4 \uCD9C\uB825 \uD30C\uC77C\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4." : "\uD0D0\uC9C0 0\uAC74 \u2014 \uCD9C\uB825 \uD30C\uC77C\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
|
|
889
|
+
}
|
|
890
|
+
const failed = r.residual.length > 0 || r.unscanned.length > 0;
|
|
891
|
+
if (r.residual.length > 0) {
|
|
892
|
+
lines.push(`\u274C \uB9C8\uC2A4\uD0B9 \uD6C4 \uC7AC\uAC80\uC0AC\uC5D0\uC11C PII ${r.residual.length}\uAC74\uC774 \uB0A8\uC544 \uC788\uC2B5\uB2C8\uB2E4 \u2014 \uCD9C\uB825 \uD30C\uC77C\uC744 \uACF5\uAC1C\uD558\uC9C0 \uB9D0\uACE0 \uC218\uB3D9 \uD655\uC778\uD558\uC138\uC694:`);
|
|
893
|
+
for (const h of r.residual.slice(0, MAX_LINES)) lines.push(` - [${h.rule}] ${h.masked} (${h.where} @ ${h.part})`);
|
|
894
|
+
if (r.residual.length > MAX_LINES) lines.push(` \u2026 \uC678 ${r.residual.length - MAX_LINES}\uAC74`);
|
|
878
895
|
}
|
|
879
|
-
lines.push(
|
|
880
|
-
|
|
896
|
+
if (r.unscanned.length > 0) lines.push(`\u274C \uAE00\uC790\uB97C \uAC80\uC0AC\uD558\uC9C0 \uBABB\uD55C \uACF3\uC774 \uC788\uC2B5\uB2C8\uB2E4 \u2014 \uCD9C\uB825 \uD30C\uC77C\uC744 \uACF5\uAC1C\uD558\uC9C0 \uB9D0\uACE0 \uC218\uB3D9 \uD655\uC778\uD558\uC138\uC694: ${r.unscanned.join(", ")}`);
|
|
897
|
+
if (!failed && r.data && save) lines.push("\uC7AC\uAC80\uC0AC: \uACB0\uACFC \uD30C\uC77C \uC804\uCCB4(\uBCF8\uBB38\xB7\uBA38\uB9AC\uB9D0\xB7\uAC01\uC8FC\xB7\uBBF8\uB9AC\uBCF4\uAE30\xB7\uBA54\uD0C0\uB370\uC774\uD130\xB7\uBBF8\uD560\uB2F9 \uC601\uC5ED)\uC640 \uB2E4\uC2DC \uC77D\uC740 \uBCF8\uBB38\uC5D0\uC11C \uB0A8\uC740 PII 0\uAC74");
|
|
898
|
+
for (const w of r.warnings) lines.push(`\u26A0\uFE0F ${w}`);
|
|
899
|
+
if (r.data && save) lines.push("render_document\uB85C \uB9C8\uC2A4\uD0B9 \uACB0\uACFC\uB97C \uB208\uC73C\uB85C \uD655\uC778\uD558\uC138\uC694.");
|
|
900
|
+
lines.push("\uC8FC\uC758: \uC790\uB3D9 \uAC80\uCD9C\uC740 \uBCF4\uC870 \uC218\uB2E8\uC785\uB2C8\uB2E4. \uC774\uBBF8\uC9C0 \uC18D \uD14D\uC2A4\uD2B8\xB7\uD45C\uAE30 \uBCC0\uD615\xB7\uC774\uB984\xB7\uC8FC\uC18C\uB294 \uB193\uCE60 \uC218 \uC788\uC73C\uB2C8 \uCD5C\uC885 \uACF5\uAC1C \uC804 \uC0AC\uB78C \uAC80\uD1A0\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.");
|
|
901
|
+
return { content: [{ type: "text", text: capResponseText(lines.join("\n")) }], ...failed ? { isError: true } : {} };
|
|
881
902
|
} catch (err) {
|
|
882
903
|
return { content: [{ type: "text", text: `\uB9C8\uC2A4\uD0B9 \uC2E4\uD328: ${describeError(err)}` }], isError: true };
|
|
883
904
|
}
|
|
@@ -913,7 +934,7 @@ function registerRenderTools(server2) {
|
|
|
913
934
|
const { buffer, resolved } = await readValidatedFile(file_path, MAX_FILE_SIZE, /* @__PURE__ */ new Set([".hwpx", ".hwp"]));
|
|
914
935
|
const isHwp5 = resolved.toLowerCase().endsWith(".hwp");
|
|
915
936
|
if (!isHwp5 && !pages && (format === "png" || format === "svg")) {
|
|
916
|
-
const { renderHwpxToSvg } = await import("./render-
|
|
937
|
+
const { renderHwpxToSvg } = await import("./render-YZ2TEC3N.js");
|
|
917
938
|
const result = await renderHwpxToSvg(buffer, { highlights, reflow: true, reflowMode: reflow_mode });
|
|
918
939
|
const summary2 = [
|
|
919
940
|
`\uB80C\uB354 \uC644\uB8CC: ${result.pageCount}\uD398\uC774\uC9C0, ${Math.round(result.width)}x${Math.round(result.height)}pt (\uD14D\uC2A4\uD2B8 ${result.stats.texts}\xB7\uC774\uBBF8\uC9C0 ${result.stats.images}\xB7\uD45C ${result.stats.tables})`,
|
|
@@ -925,7 +946,7 @@ function registerRenderTools(server2) {
|
|
|
925
946
|
summary2.push(`\uC800\uC7A5: ${outPath}`);
|
|
926
947
|
return { content: [{ type: "text", text: summary2.join("\n") }] };
|
|
927
948
|
}
|
|
928
|
-
const { rasterizeSvg } = await import("./rasterize-
|
|
949
|
+
const { rasterizeSvg } = await import("./rasterize-IOYXR5SI.js");
|
|
929
950
|
const raster = await rasterizeSvg(result.svg, result.width, result.height, max_width_px ? { maxWidthPx: max_width_px } : void 0);
|
|
930
951
|
if (outPath) {
|
|
931
952
|
await mkdir2(dirname3(outPath), { recursive: true });
|
|
@@ -940,7 +961,7 @@ function registerRenderTools(server2) {
|
|
|
940
961
|
]
|
|
941
962
|
};
|
|
942
963
|
}
|
|
943
|
-
const { renderDocument } = await import("./render-
|
|
964
|
+
const { renderDocument } = await import("./render-YZ2TEC3N.js");
|
|
944
965
|
const { scene, assets } = await renderDocument(buffer, { format, pages, highlights, reflow: true, reflowMode: reflow_mode, maxWidthPx: max_width_px });
|
|
945
966
|
const summary = [
|
|
946
967
|
`\uB80C\uB354 \uC644\uB8CC: \uBB38\uC11C ${scene.pages.length}\uD398\uC774\uC9C0 \uC911 ${assets.filter((a) => a.page !== void 0).length || 1}\uAC74 (\uD14D\uC2A4\uD2B8 ${scene.stats.texts}\xB7\uC774\uBBF8\uC9C0 ${scene.stats.images}\xB7\uD45C ${scene.stats.tables}\xB7\uB3C4\uD615 ${scene.stats.shapes})`,
|
|
@@ -990,7 +1011,7 @@ function registerRenderTools(server2) {
|
|
|
990
1011
|
try {
|
|
991
1012
|
const { buffer } = await readValidatedFile(file_path, MAX_FILE_SIZE, /* @__PURE__ */ new Set([".hwpx", ".hwp"]));
|
|
992
1013
|
const dir = safeOutputPath(join(output_dir, "regions.json"), /* @__PURE__ */ new Set([".json"])).replace(/[\\/]regions\.json$/, "");
|
|
993
|
-
const { extractRenderedRegions } = await import("./render-
|
|
1014
|
+
const { extractRenderedRegions } = await import("./render-YZ2TEC3N.js");
|
|
994
1015
|
const regions = await extractRenderedRegions(buffer, { types: target, format, pages, paddingPt: padding_pt, reflow: true });
|
|
995
1016
|
await mkdir2(dir, { recursive: true });
|
|
996
1017
|
const ext = format === "jpeg" ? "jpg" : "png";
|
|
@@ -1026,7 +1047,7 @@ function registerRenderTools(server2) {
|
|
|
1026
1047
|
}
|
|
1027
1048
|
const { buffer } = await readValidatedFile(file_path, MAX_FILE_SIZE, /* @__PURE__ */ new Set([".hwpx", ".hwp"]));
|
|
1028
1049
|
const dir = output_dir ? safeOutputPath(join(output_dir, "tables.json"), /* @__PURE__ */ new Set([".json"])).replace(/[\\/]tables\.json$/, "") : void 0;
|
|
1029
|
-
const { extractTables } = await import("./visual-
|
|
1050
|
+
const { extractTables } = await import("./visual-ICMOWUCR.js");
|
|
1030
1051
|
const tables = await extractTables(buffer, { policy: visual, format, paddingPt: padding_pt });
|
|
1031
1052
|
if (dir) await mkdir2(dir, { recursive: true });
|
|
1032
1053
|
const ext = format === "jpeg" ? "jpg" : "png";
|
|
@@ -1083,7 +1104,7 @@ function registerGenerateTools(server2) {
|
|
|
1083
1104
|
try {
|
|
1084
1105
|
const out = safeOutputPath(output_path, PROFILE_EXTENSIONS);
|
|
1085
1106
|
const { buffer } = await readValidatedFile(hwpx_path);
|
|
1086
|
-
const { hwpxToProfile } = await import("./-
|
|
1107
|
+
const { hwpxToProfile } = await import("./-Z4TJ3QGK.js");
|
|
1087
1108
|
const profile = await hwpxToProfile(buffer);
|
|
1088
1109
|
await mkdir3(dirname4(out), { recursive: true });
|
|
1089
1110
|
await writeFile3(out, JSON.stringify(profile, null, 2));
|
|
@@ -1186,7 +1207,7 @@ function registerGenerateTools(server2) {
|
|
|
1186
1207
|
}
|
|
1187
1208
|
let profile;
|
|
1188
1209
|
if (profile_path) {
|
|
1189
|
-
const { parseFormatProfileJson } = await import("./profile-io-
|
|
1210
|
+
const { parseFormatProfileJson } = await import("./profile-io-RUFZOZO6.js");
|
|
1190
1211
|
profile = parseFormatProfileJson(await readFile3(safePath(profile_path, PROFILE_EXTENSIONS), "utf-8"));
|
|
1191
1212
|
}
|
|
1192
1213
|
const out = safeOutputPath(output_path, /* @__PURE__ */ new Set([".hwpx"]));
|