kordoc 4.9.2 → 4.10.0

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.
Files changed (127) hide show
  1. package/README.md +44 -0
  2. package/dist/{-Z4LCTGQR.js → -AN4MKOOO.js} +9 -9
  3. package/dist/{chunk-BAJVZXC7.cjs → chunk-2FNQN23O.cjs} +3 -3
  4. package/dist/chunk-2FNQN23O.cjs.map +1 -0
  5. package/dist/{chunk-WLZX2HTC.js → chunk-34IBS3JN.js} +3 -3
  6. package/dist/{chunk-6WYMV73J.js → chunk-4EJLRZ7A.js} +50 -16
  7. package/dist/chunk-4EJLRZ7A.js.map +1 -0
  8. package/dist/{chunk-KATZTHWA.cjs → chunk-4SIKWOLQ.cjs} +2 -2
  9. package/dist/chunk-4SIKWOLQ.cjs.map +1 -0
  10. package/dist/{chunk-OOT54JF2.js → chunk-7UUQXASL.js} +2 -2
  11. package/dist/{chunk-OOT54JF2.js.map → chunk-7UUQXASL.js.map} +1 -1
  12. package/dist/{chunk-LJP3PK2S.js → chunk-AOTA4XTU.js} +2 -2
  13. package/dist/{chunk-LUY46O7O.js → chunk-B4MQXOU5.js} +2 -2
  14. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  15. package/dist/{chunk-JHPEDWJX.js → chunk-EWUFLCRP.js} +3 -3
  16. package/dist/{chunk-OYQL3D4B.js → chunk-F3OPGGQ2.js} +2 -2
  17. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  18. package/dist/{chunk-PIUPP3FL.js → chunk-HO7N6T36.js} +3 -3
  19. package/dist/{chunk-PKCDYIIJ.js → chunk-JAY6BXZ6.js} +2 -2
  20. package/dist/{chunk-TK7WUS47.js → chunk-KEF4UQYI.js} +2 -2
  21. package/dist/{chunk-XINP35F4.js → chunk-N3DLQ2YH.js} +1 -1
  22. package/dist/{chunk-XINP35F4.js.map → chunk-N3DLQ2YH.js.map} +1 -1
  23. package/dist/{chunk-GL6BCNJV.js → chunk-NE7GR65O.js} +3 -3
  24. package/dist/{chunk-5ZPXRDS2.js → chunk-NMXDXHHW.js} +2 -2
  25. package/dist/{chunk-5ZPXRDS2.js.map → chunk-NMXDXHHW.js.map} +1 -1
  26. package/dist/{chunk-BN33O25L.js → chunk-ONQHGZTS.js} +1 -1
  27. package/dist/{chunk-BN33O25L.js.map → chunk-ONQHGZTS.js.map} +1 -1
  28. package/dist/{chunk-NIQ4JCQF.cjs → chunk-OQNZCCJI.cjs} +6 -6
  29. package/dist/chunk-OQNZCCJI.cjs.map +1 -0
  30. package/dist/{chunk-Y7QB4IB6.js → chunk-PDXRLQD6.js} +2 -2
  31. package/dist/{chunk-NOEYLJGJ.js → chunk-QYXQJPB7.js} +3 -3
  32. package/dist/{chunk-NIBRVLGS.js → chunk-SV2YYPBO.js} +3 -3
  33. package/dist/{chunk-L5CDTOC3.cjs → chunk-T7GRHAIW.cjs} +1 -1
  34. package/dist/chunk-T7GRHAIW.cjs.map +1 -0
  35. package/dist/{chunk-V3Q6I2AQ.cjs → chunk-V7F5765M.cjs} +4 -4
  36. package/dist/chunk-V7F5765M.cjs.map +1 -0
  37. package/dist/{chunk-VYGNPB2X.js → chunk-VR3ECURZ.js} +2 -2
  38. package/dist/{chunk-LKZQ4564.js → chunk-WLUDCIOK.js} +2 -2
  39. package/dist/{chunk-LREEDIEF.js → chunk-YVPYCQOG.js} +2 -2
  40. package/dist/{chunk-SHBVD23C.cjs → chunk-ZOLKTMBS.cjs} +11 -11
  41. package/dist/chunk-ZOLKTMBS.cjs.map +1 -0
  42. package/dist/chunks-JUBR2TW7.js +10 -0
  43. package/dist/cli.js +37 -33
  44. package/dist/cli.js.map +1 -1
  45. package/dist/{formula-JVBJ6QRG.cjs → formula-4QA6ZSFP.cjs} +9 -9
  46. package/dist/formula-4QA6ZSFP.cjs.map +1 -0
  47. package/dist/{formula-LFWZG7T7.js → formula-LFDXPFQH.js} +4 -4
  48. package/dist/{formula-77TJPACH.js → formula-UYS7Z7IH.js} +3 -3
  49. package/dist/{image-ocr-YZ56O63S.js → image-ocr-3YP5I2H4.js} +6 -6
  50. package/dist/{image-ocr-6SY623KL.js → image-ocr-NOU6O7ZY.js} +8 -8
  51. package/dist/{image-ocr-YTGAUHEP.cjs → image-ocr-POPCJGL5.cjs} +12 -12
  52. package/dist/image-ocr-POPCJGL5.cjs.map +1 -0
  53. package/dist/index.cjs +222 -189
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.cts +2 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +45 -12
  58. package/dist/index.js.map +1 -1
  59. package/dist/mcp.js +16 -16
  60. package/dist/{model-bundle-W7B3BIYS.js → model-bundle-AUKJF6GA.js} +5 -5
  61. package/dist/{models-FUKPEVPE.js → models-QKSQSUWJ.js} +5 -5
  62. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  63. package/dist/{parser-6UL2HLDH.js → parser-6HKVNDZM.js} +7 -7
  64. package/dist/{parser-WIRWVN5E.cjs → parser-VAIMONF2.cjs} +27 -27
  65. package/dist/parser-VAIMONF2.cjs.map +1 -0
  66. package/dist/{parser-GDYZDBZI.js → parser-VVGAZIAX.js} +7 -7
  67. package/dist/pdf-ocr-4CWHKKTX.cjs +14 -0
  68. package/dist/pdf-ocr-4CWHKKTX.cjs.map +1 -0
  69. package/dist/pdf-ocr-D6HR23OB.js +13 -0
  70. package/dist/pdf-ocr-WIMNTEVH.js +16 -0
  71. package/dist/{profile-io-4EE64K6Y.js → profile-io-PYCSBITE.js} +3 -3
  72. package/dist/{rasterize-QW7SSKHB.js → rasterize-TUBHYALD.js} +2 -2
  73. package/dist/render-QW5Z4IMW.js +10 -0
  74. package/dist/seal-OTOP5CLA.js +10 -0
  75. package/dist/{setup-JS7E2HFM.js → setup-6EUKBDMC.js} +3 -3
  76. package/dist/{watch-YISVPGW3.js → watch-JVGXPTCI.js} +10 -10
  77. package/package.json +1 -1
  78. package/dist/chunk-6WYMV73J.js.map +0 -1
  79. package/dist/chunk-BAJVZXC7.cjs.map +0 -1
  80. package/dist/chunk-KATZTHWA.cjs.map +0 -1
  81. package/dist/chunk-L5CDTOC3.cjs.map +0 -1
  82. package/dist/chunk-NIQ4JCQF.cjs.map +0 -1
  83. package/dist/chunk-SHBVD23C.cjs.map +0 -1
  84. package/dist/chunk-V3Q6I2AQ.cjs.map +0 -1
  85. package/dist/chunks-TRJGNO4N.js +0 -10
  86. package/dist/formula-JVBJ6QRG.cjs.map +0 -1
  87. package/dist/image-ocr-YTGAUHEP.cjs.map +0 -1
  88. package/dist/parser-WIRWVN5E.cjs.map +0 -1
  89. package/dist/pdf-ocr-O373AAN6.cjs +0 -14
  90. package/dist/pdf-ocr-O373AAN6.cjs.map +0 -1
  91. package/dist/pdf-ocr-OHUAQQMN.js +0 -16
  92. package/dist/pdf-ocr-XTE234WC.js +0 -13
  93. package/dist/render-2NID54BX.js +0 -10
  94. package/dist/seal-PTP4TWYR.js +0 -10
  95. /package/dist/{-Z4LCTGQR.js.map → -AN4MKOOO.js.map} +0 -0
  96. /package/dist/{chunk-WLZX2HTC.js.map → chunk-34IBS3JN.js.map} +0 -0
  97. /package/dist/{chunk-LJP3PK2S.js.map → chunk-AOTA4XTU.js.map} +0 -0
  98. /package/dist/{chunk-LUY46O7O.js.map → chunk-B4MQXOU5.js.map} +0 -0
  99. /package/dist/{chunk-JHPEDWJX.js.map → chunk-EWUFLCRP.js.map} +0 -0
  100. /package/dist/{chunk-OYQL3D4B.js.map → chunk-F3OPGGQ2.js.map} +0 -0
  101. /package/dist/{chunk-PIUPP3FL.js.map → chunk-HO7N6T36.js.map} +0 -0
  102. /package/dist/{chunk-PKCDYIIJ.js.map → chunk-JAY6BXZ6.js.map} +0 -0
  103. /package/dist/{chunk-TK7WUS47.js.map → chunk-KEF4UQYI.js.map} +0 -0
  104. /package/dist/{chunk-GL6BCNJV.js.map → chunk-NE7GR65O.js.map} +0 -0
  105. /package/dist/{chunk-Y7QB4IB6.js.map → chunk-PDXRLQD6.js.map} +0 -0
  106. /package/dist/{chunk-NOEYLJGJ.js.map → chunk-QYXQJPB7.js.map} +0 -0
  107. /package/dist/{chunk-NIBRVLGS.js.map → chunk-SV2YYPBO.js.map} +0 -0
  108. /package/dist/{chunk-VYGNPB2X.js.map → chunk-VR3ECURZ.js.map} +0 -0
  109. /package/dist/{chunk-LKZQ4564.js.map → chunk-WLUDCIOK.js.map} +0 -0
  110. /package/dist/{chunk-LREEDIEF.js.map → chunk-YVPYCQOG.js.map} +0 -0
  111. /package/dist/{chunks-TRJGNO4N.js.map → chunks-JUBR2TW7.js.map} +0 -0
  112. /package/dist/{formula-LFWZG7T7.js.map → formula-LFDXPFQH.js.map} +0 -0
  113. /package/dist/{formula-77TJPACH.js.map → formula-UYS7Z7IH.js.map} +0 -0
  114. /package/dist/{image-ocr-YZ56O63S.js.map → image-ocr-3YP5I2H4.js.map} +0 -0
  115. /package/dist/{image-ocr-6SY623KL.js.map → image-ocr-NOU6O7ZY.js.map} +0 -0
  116. /package/dist/{model-bundle-W7B3BIYS.js.map → model-bundle-AUKJF6GA.js.map} +0 -0
  117. /package/dist/{models-FUKPEVPE.js.map → models-QKSQSUWJ.js.map} +0 -0
  118. /package/dist/{parser-6UL2HLDH.js.map → parser-6HKVNDZM.js.map} +0 -0
  119. /package/dist/{parser-GDYZDBZI.js.map → parser-VVGAZIAX.js.map} +0 -0
  120. /package/dist/{pdf-ocr-OHUAQQMN.js.map → pdf-ocr-D6HR23OB.js.map} +0 -0
  121. /package/dist/{pdf-ocr-XTE234WC.js.map → pdf-ocr-WIMNTEVH.js.map} +0 -0
  122. /package/dist/{profile-io-4EE64K6Y.js.map → profile-io-PYCSBITE.js.map} +0 -0
  123. /package/dist/{rasterize-QW7SSKHB.js.map → rasterize-TUBHYALD.js.map} +0 -0
  124. /package/dist/{render-2NID54BX.js.map → render-QW5Z4IMW.js.map} +0 -0
  125. /package/dist/{seal-PTP4TWYR.js.map → seal-OTOP5CLA.js.map} +0 -0
  126. /package/dist/{setup-JS7E2HFM.js.map → setup-6EUKBDMC.js.map} +0 -0
  127. /package/dist/{watch-YISVPGW3.js.map → watch-JVGXPTCI.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ blocksToChunks
4
+ } from "./chunk-F3OPGGQ2.js";
5
+ import "./chunk-B4MQXOU5.js";
6
+ import "./chunk-NMXDXHHW.js";
7
+ export {
8
+ blocksToChunks
9
+ };
10
+ //# sourceMappingURL=chunks-JUBR2TW7.js.map
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  parseFormatProfileJson
4
- } from "./chunk-LREEDIEF.js";
4
+ } from "./chunk-YVPYCQOG.js";
5
5
  import {
6
6
  BODY_FONTS,
7
7
  BULLET2_CHARS,
@@ -12,6 +12,7 @@ import {
12
12
  BUILTIN_TEMPLATES,
13
13
  PRESET_ALIAS,
14
14
  detectFormat,
15
+ detectImageMime,
15
16
  detectZipFormat,
16
17
  extractClickHereFields,
17
18
  extractFormFields,
@@ -30,24 +31,24 @@ import {
30
31
  resolveBuiltinTemplate,
31
32
  unknownFontWarnings,
32
33
  usesGaejosikMunche
33
- } from "./chunk-6WYMV73J.js";
34
+ } from "./chunk-4EJLRZ7A.js";
34
35
  import "./chunk-7FCNOKOR.js";
35
- import "./chunk-XINP35F4.js";
36
+ import "./chunk-N3DLQ2YH.js";
36
37
  import "./chunk-MOL7MDBG.js";
37
- import "./chunk-JHPEDWJX.js";
38
+ import "./chunk-EWUFLCRP.js";
38
39
  import "./chunk-DZIXKL7E.js";
39
- import "./chunk-OYQL3D4B.js";
40
+ import "./chunk-F3OPGGQ2.js";
40
41
  import {
41
42
  blocksToMarkdown
42
- } from "./chunk-LUY46O7O.js";
43
- import "./chunk-NOEYLJGJ.js";
44
- import "./chunk-PKCDYIIJ.js";
43
+ } from "./chunk-B4MQXOU5.js";
44
+ import "./chunk-QYXQJPB7.js";
45
+ import "./chunk-JAY6BXZ6.js";
45
46
  import {
46
47
  VERSION,
47
48
  classifyError,
48
49
  sanitizeError,
49
50
  toArrayBuffer
50
- } from "./chunk-5ZPXRDS2.js";
51
+ } from "./chunk-NMXDXHHW.js";
51
52
 
52
53
  // src/cli.ts
53
54
  import { readFileSync, writeFileSync, mkdirSync, statSync } from "fs";
@@ -111,9 +112,7 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
111
112
  `);
112
113
  process.stderr.write(` \u2192 ${result.error}
113
114
  `);
114
- if (opts.format === "json") {
115
- process.stdout.write(JSON.stringify(result, null, 2) + "\n");
116
- }
115
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
117
116
  process.exitCode = 1;
118
117
  continue;
119
118
  }
@@ -144,7 +143,7 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
144
143
  `);
145
144
  }
146
145
  } else if (opts.format === "chunks") {
147
- const { blocksToChunks } = await import("./chunks-TRJGNO4N.js");
146
+ const { blocksToChunks } = await import("./chunks-JUBR2TW7.js");
148
147
  output = JSON.stringify(blocksToChunks(result.blocks), null, 2);
149
148
  } else {
150
149
  output = markdown;
@@ -156,7 +155,14 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
156
155
  for (const img of result.images) {
157
156
  writeFileSync(resolve(imgDir, img.filename), img.data);
158
157
  }
159
- if (!opts.silent) process.stderr.write(` \u2192 ${result.images.length}\uAC1C \uC774\uBBF8\uC9C0 \u2192 ${imgDir}
158
+ const manifest = result.images.map((img) => ({
159
+ name: img.filename,
160
+ mimeType: detectImageMime(img.data) ?? img.mimeType,
161
+ bytes: img.data.length,
162
+ ...img.source ? { source: img.source } : {}
163
+ }));
164
+ writeFileSync(resolve(imgDir, "manifest.json"), JSON.stringify(manifest, null, 2), "utf-8");
165
+ if (!opts.silent) process.stderr.write(` \u2192 ${result.images.length}\uAC1C \uC774\uBBF8\uC9C0 \u2192 ${imgDir} (manifest.json \uD3EC\uD568)
160
166
  `);
161
167
  };
162
168
  if (opts.output && files.length === 1) {
@@ -179,14 +185,12 @@ program.name("kordoc").description("\uBAA8\uB450 \uD30C\uC2F1\uD574\uBC84\uB9AC\
179
185
  process.stderr.write(`
180
186
  [kordoc] ERROR: ${fileName} \u2014 ${sanitizeError(err)}
181
187
  `);
182
- if (opts.format === "json") {
183
- process.stdout.write(JSON.stringify({
184
- success: false,
185
- fileType: detectedFormat,
186
- error: sanitizeError(err),
187
- code: classifyError(err)
188
- }, null, 2) + "\n");
189
- }
188
+ process.stdout.write(JSON.stringify({
189
+ success: false,
190
+ fileType: detectedFormat,
191
+ error: sanitizeError(err),
192
+ code: classifyError(err)
193
+ }, null, 2) + "\n");
190
194
  process.exitCode = 1;
191
195
  }
192
196
  }
@@ -199,7 +203,7 @@ program.command("watch <dir>").description("\uB514\uB809\uD1A0\uB9AC \uAC10\uC2D
199
203
  if (command.getOptionValueSource("format") === "default" && program.getOptionValueSource("format") === "cli") {
200
204
  opts.format = rootOpts.format;
201
205
  }
202
- const { watchDirectory } = await import("./watch-YISVPGW3.js");
206
+ const { watchDirectory } = await import("./watch-JVGXPTCI.js");
203
207
  await watchDirectory({
204
208
  dir,
205
209
  outDir: opts.outDir,
@@ -421,7 +425,7 @@ program.command("fill [file]").description("\uC11C\uC2DD \uBB38\uC11C\uC758 \uBE
421
425
  });
422
426
  program.command("seal <file>").description('\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBBF8\uC9C0\uB97C \uC575\uCEE4 \uBB38\uAD6C \uC704\uC5D0 \uBD80\uC720 \uBC30\uCE58 (\uD45C/\uD398\uC774\uC9C0 \uBD88\uD655\uC7A5) \u2014 kordoc seal \uC2E0\uCCAD\uC11C.hwpx --image \uB3C4\uC7A5.png --anchor "(\uC778)" -o \uACB0\uACFC.hwpx').requiredOption("--image <path>", "\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBBF8\uC9C0 (\uD22C\uBA85 \uBC30\uACBD PNG \uAD8C\uC7A5)").option("--anchor <text>", "\uC575\uCEE4 \uBB38\uAD6C", "(\uC778)").option("-n, --occurrence <num>", "\uAC19\uC740 \uC575\uCEE4\uAC00 \uC5EC\uB7FF\uC77C \uB54C 0-based \uC120\uD0DD", "0").option("--size-mm <num>", "\uB3C4\uC7A5 \uD55C \uBCC0 \uD06C\uAE30 mm (\uAE30\uBCF8: \uC904\uB192\uC774\xD71.6, 7~18 \uD074\uB7A8\uD504)").option("--mode <mode>", "overlap(\uBB38\uAD6C \uC704 \uACB9\uCE68) | right(\uC624\uB978\uCABD \uC606) | auto", "auto").option("--dx <mm>", "x \uBBF8\uC138\uC870\uC815 mm", "0").option("--dy <mm>", "y \uBBF8\uC138\uC870\uC815 mm", "0").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uAE30\uBCF8: <\uC785\uB825>.sealed.hwpx)").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (file, opts) => {
423
427
  try {
424
- const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-Z4LCTGQR.js");
428
+ const { placeSealHwpx, detectFormat: detectFormat2 } = await import("./-AN4MKOOO.js");
425
429
  const rootOpts = program.opts();
426
430
  const output = opts.output ?? rootOpts.output;
427
431
  const silent = opts.silent ?? rootOpts.silent;
@@ -499,7 +503,7 @@ program.command("seal <file>").description('\uB3C4\uC7A5/\uC11C\uBA85 \uC774\uBB
499
503
  });
500
504
  program.command("patch <original> <edited>").description("\uC11C\uC2DD \uBCF4\uC874 \uB77C\uC6B4\uB4DC\uD2B8\uB9BD \uD328\uCE58 \u2014 \uD3B8\uC9D1\uB41C \uB9C8\uD06C\uB2E4\uC6B4\uC744 \uC6D0\uBCF8 HWPX/HWP\uC5D0 in-place \uBC18\uC601 (kordoc patch \uC6D0\uBCF8.hwpx \uD3B8\uC9D1.md -o \uCD9C\uB825.hwpx). \uBBF8\uC801\uC6A9(skip) \uD3B8\uC9D1\uC774 \uC788\uC73C\uBA74 exit 2").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uAE30\uBCF8: <\uC6D0\uBCF8>.patched.hwpx|.hwp)").option("--no-verify", "\uD328\uCE58 \uD6C4 \uC7AC\uD30C\uC2F1 \uC790\uB3D9 \uAC80\uC99D \uC0DD\uB7B5").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (original, edited, opts) => {
501
505
  try {
502
- const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-Z4LCTGQR.js");
506
+ const { patchHwpx, patchHwp, detectFormat: detectFormat2 } = await import("./-AN4MKOOO.js");
503
507
  const rootOpts = program.opts();
504
508
  const output = opts.output ?? rootOpts.output;
505
509
  const silent = opts.silent ?? rootOpts.silent;
@@ -540,7 +544,7 @@ program.command("patch <original> <edited>").description("\uC11C\uC2DD \uBCF4\uC
540
544
  });
541
545
  program.command("validate <file>").description("HWPX \uAD6C\uC870 \uAC80\uC99D \u2014 ZIP\xB7mimetype\xB7\uD544\uC218 \uD30C\uC77C\xB7XML \uC6F0\uD3FC\uB4DC\xB7secCnt\xB7manifest \uCC38\uC870 (\uD55C\uCEF4\uB3C5\uC2A4 \uAC70\uBD80 \uC694\uC778 \uC0AC\uC804 \uCC28\uB2E8)").option("--json", "\uACB0\uACFC\uB97C JSON\uC73C\uB85C stdout\uC5D0 \uCD9C\uB825").action(async (file, opts) => {
542
546
  try {
543
- const { validateHwpx } = await import("./-Z4LCTGQR.js");
547
+ const { validateHwpx } = await import("./-AN4MKOOO.js");
544
548
  const buf = new Uint8Array(readFileSync(resolve(file)));
545
549
  const result = await validateHwpx(buf);
546
550
  if (opts.json) {
@@ -785,7 +789,7 @@ program.command("lint <file>").description("\uACF5\uBB38\uC11C \uD45C\uAE30\uBC9
785
789
  }
786
790
  });
787
791
  program.command("redact <files...>").description("\uAC1C\uC778\uC815\uBCF4 \uC11C\uC2DD \uBCF4\uC874 \uB9C8\uC2A4\uD0B9 \u2014 \uC8FC\uBBFC\uBC88\uD638\xB7\uC804\uD654\xB7\uC774\uBA54\uC77C\xB7\uCE74\uB4DC\xB7\uACC4\uC88C\uB97C \uD0D0\uC9C0\uD574 HWPX/HWP\uB294 \uC6D0\uBCF8 \uC11C\uC2DD \uADF8\uB300\uB85C patch, \uADF8 \uC678 \uD3EC\uB9F7\uC740 \uB9C8\uC2A4\uD0B9\uB41C \uB9C8\uD06C\uB2E4\uC6B4 \uCD9C\uB825. \uC790\uB3D9 \uAC80\uCD9C \uBCF4\uC870 \uB3C4\uAD6C\uC774\uBBC0\uB85C \uACB0\uACFC\uB294 \uBC18\uB4DC\uC2DC \uC0AC\uB78C\uC774 \uCD5C\uC885 \uD655\uC778\uD558\uC138\uC694 (\uC774\uBBF8\uC9C0 \uC548 \uD14D\uC2A4\uD2B8\uB294 \uD0D0\uC9C0 \uBD88\uAC00)").option("--rules <csv>", "\uC801\uC6A9 \uB8F0 (\uAE30\uBCF8: rrn,phone,email,card,account \u2014 passport,driver\uB294 opt-in)").option("--mask-char <ch>", "\uB9C8\uC2A4\uD06C \uBB38\uC790 1\uAE00\uC790 (\uAE30\uBCF8: \u25CF)").option("-o, --output <path>", "\uCD9C\uB825 \uACBD\uB85C (\uB2E8\uC77C \uD30C\uC77C \uC2DC)").option("-d, --out-dir <dir>", "\uCD9C\uB825 \uB514\uB809\uD1A0\uB9AC (\uB2E4\uC911 \uD30C\uC77C \uC2DC)").option("--dry-run", "\uD0D0\uC9C0 \uB9AC\uD3EC\uD2B8\uB9CC \uCD9C\uB825, \uD30C\uC77C \uBBF8\uC0DD\uC131").option("--json", "\uB9AC\uD3EC\uD2B8\uB97C JSON\uC73C\uB85C stdout \uCD9C\uB825").option("--silent", "\uC9C4\uD589 \uBA54\uC2DC\uC9C0 \uC228\uAE30\uAE30").action(async (files, opts) => {
788
- const { redactMarkdown, DEFAULT_REDACT_RULES, patchHwpx, patchHwp } = await import("./-Z4LCTGQR.js");
792
+ const { redactMarkdown, DEFAULT_REDACT_RULES, patchHwpx, patchHwp } = await import("./-AN4MKOOO.js");
789
793
  const rootOpts = program.opts();
790
794
  const output = opts.output ?? rootOpts.output;
791
795
  const silent = opts.silent ?? rootOpts.silent;
@@ -874,7 +878,7 @@ program.command("render <file>").description("\uB808\uC774\uC544\uC6C3 \uBCF4\uC
874
878
  const rootOpts = program.opts();
875
879
  const output = opts.output ?? rootOpts.output;
876
880
  const silent = opts.silent ?? rootOpts.silent;
877
- const { renderHwpxToSvg } = await import("./render-2NID54BX.js");
881
+ const { renderHwpxToSvg } = await import("./render-QW5Z4IMW.js");
878
882
  const absPath = resolve(file);
879
883
  const buffer = readFileSync(absPath);
880
884
  const highlights = opts.highlight ? String(opts.highlight).split(",") : void 0;
@@ -896,7 +900,7 @@ program.command("render <file>").description("\uB808\uC774\uC544\uC6C3 \uBCF4\uC
896
900
  });
897
901
  program.command("render-worker").description("persistent \uB80C\uB354 \uC6CC\uCEE4 \u2014 stdin NDJSON \uC694\uCCAD \u2192 \uC870\uD310 SVG \uD30C\uC77C \uCD9C\uB825 (\uD504\uB85C\uC138\uC2A4 \uC720\uC9C0, \uCF5C\uB4DC\uC2A4\uD0C0\uD2B8 \uC81C\uAC70)").action(async () => {
898
902
  const { createInterface } = await import("readline");
899
- const { renderHwpxToSvg } = await import("./render-2NID54BX.js");
903
+ const { renderHwpxToSvg } = await import("./render-QW5Z4IMW.js");
900
904
  const rl = createInterface({ input: process.stdin });
901
905
  const write = (o) => void process.stdout.write(JSON.stringify(o) + "\n");
902
906
  write({ ready: true, version: VERSION });
@@ -941,12 +945,12 @@ program.command("mcp").description("MCP \uC11C\uBC84 \uC2E4\uD589 (Claude / Curs
941
945
  await startMcpServer();
942
946
  });
943
947
  program.command("setup").description("\uB300\uD654\uD615 \uC124\uCE58 \uB9C8\uBC95\uC0AC \u2014 AI \uD074\uB77C\uC774\uC5B8\uD2B8 \uC790\uB3D9 \uB4F1\uB85D (Mac/Win/Linux)").action(async () => {
944
- const { runSetup } = await import("./setup-JS7E2HFM.js");
948
+ const { runSetup } = await import("./setup-6EUKBDMC.js");
945
949
  await runSetup();
946
950
  });
947
951
  program.command("check-formula-models").description("PDF \uC218\uC2DD OCR \uBAA8\uB378(MFD + MFR + tokenizer, ~155MB) \uC0C1\uD0DC \uD655\uC778 \u2014 \uC5C6\uAC70\uB098 SHA \uBD88\uC77C\uCE58\uBA74 \uB2E4\uC6B4\uB85C\uB4DC").option("--status-only", "\uC0C1\uD0DC\uB9CC JSON \uC73C\uB85C \uCD9C\uB825 (\uB2E4\uC6B4\uB85C\uB4DC \uC548 \uD568)").action(async (opts) => {
948
952
  try {
949
- const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-LFWZG7T7.js");
953
+ const { getFormulaModelStatus, ensureFormulaModels, getFormulaModelsDir } = await import("./formula-LFDXPFQH.js");
950
954
  const dir = getFormulaModelsDir();
951
955
  if (opts.statusOnly) {
952
956
  const status = await getFormulaModelStatus();
@@ -1000,7 +1004,7 @@ program.command("check-formula-models").description("PDF \uC218\uC2DD OCR \uBAA8
1000
1004
  });
1001
1005
  program.command("check-ocr-models").description("\uD14D\uC2A4\uD2B8 OCR \uBAA8\uB378(PP-OCRv5 korean det+rec, ~18MB) \uC0C1\uD0DC \uD655\uC778 \u2014 \uC5C6\uAC70\uB098 SHA \uBD88\uC77C\uCE58\uBA74 \uB2E4\uC6B4\uB85C\uB4DC").option("--status-only", "\uC0C1\uD0DC\uB9CC JSON \uC73C\uB85C \uCD9C\uB825 (\uB2E4\uC6B4\uB85C\uB4DC \uC548 \uD568)").action(async (opts) => {
1002
1006
  try {
1003
- const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-FUKPEVPE.js");
1007
+ const { getOcrModelStatus, ensureOcrModels, getOcrModelsDir } = await import("./models-QKSQSUWJ.js");
1004
1008
  const dir = getOcrModelsDir();
1005
1009
  if (opts.statusOnly) {
1006
1010
  const status = await getOcrModelStatus();
@@ -1054,7 +1058,7 @@ program.command("check-ocr-models").description("\uD14D\uC2A4\uD2B8 OCR \uBAA8\u
1054
1058
  });
1055
1059
  program.command("models").description("OCR/\uC218\uC2DD \uBAA8\uB378 \uC624\uD504\uB77C\uC778 \uC0AC\uC774\uB4DC\uB85C\uB4DC \u2014 \uD3D0\uC1C4\uB9DD \uBC18\uC785\uC6A9 \uB0B4\uBCF4\uB0B4\uAE30/\uAC00\uC838\uC624\uAE30 (SHA-256 \uAC80\uC99D)").option("--status", "\uCE90\uC2DC\uC5D0 \uC124\uCE58\uB41C \uBAA8\uB378 \uC0C1\uD0DC\uB97C JSON \uC73C\uB85C \uCD9C\uB825").option("--export <dir>", "\uB85C\uCEEC \uCE90\uC2DC \u2192 \uBC88\uB4E4 \uB514\uB809\uD1A0\uB9AC\uB85C \uB0B4\uBCF4\uB0B4\uAE30 (\uC628\uB77C\uC778 PC\uC5D0\uC11C \uC2E4\uD589)").option("--import <dir>", "\uBC88\uB4E4 \uB514\uB809\uD1A0\uB9AC \u2192 \uB85C\uCEEC \uCE90\uC2DC\uB85C \uC124\uCE58 (\uB0B4\uBD80\uB9DD PC\uC5D0\uC11C \uC2E4\uD589)").action(async (opts) => {
1056
1060
  try {
1057
- const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-W7B3BIYS.js");
1061
+ const { exportModels, importModels, modelCacheStatus } = await import("./model-bundle-AUKJF6GA.js");
1058
1062
  if (opts.status) {
1059
1063
  process.stdout.write(JSON.stringify(await modelCacheStatus(), null, 2) + "\n");
1060
1064
  return;