@kodocagent/cli 0.5.0 → 0.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/dist/index.js CHANGED
@@ -9944,11 +9944,13 @@ var DOCUMENT_RULES_SECTION = `## \uBB38\uC11C \uADDC\uCE59
9944
9944
  1. \uBB38\uC11C\uB97C \uC218\uC815\uD558\uAE30 \uC804\uC5D0 \uBC18\uB4DC\uC2DC \`read_document\` \uD234\uB85C \uB0B4\uC6A9\uC744 \uBA3C\uC800 \uC77D\uC73C\uC138\uC694.
9945
9945
  2. \uBAA8\uB4E0 \uD30C\uC77C \uC800\uC7A5\uC740 \`propose_*\` \uD234\uC744 \uD1B5\uD55C \uC2A4\uD14C\uC774\uC9D5\uACFC \uC0AC\uC6A9\uC790 \uC2B9\uC778\uC744 \uAC70\uCCD0\uC57C \uD569\uB2C8\uB2E4.
9946
9946
  3. \uC2B9\uC778\uC744 \uBC1B\uAE30 \uC804\uC5D0\uB294 \uC808\uB300 "\uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4", "\uC644\uB8CC\uD588\uC2B5\uB2C8\uB2E4"\uB77C\uACE0 \uB9D0\uD558\uC9C0 \uB9C8\uC138\uC694.
9947
- 4. \`.hwp\` \uD30C\uC77C\uC744 \uD3B8\uC9D1\uD55C \uACB0\uACFC\uB294 \`.hwpx\` \uD615\uC2DD\uC73C\uB85C \uC800\uC7A5\uB429\uB2C8\uB2E4. \uC774 \uBCC0\uD658 \uC0AC\uC2E4\uC744 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBBF8\uB9AC \uC548\uB0B4\uD558\uC138\uC694.
9947
+ 4. \`propose_edit\`\uB85C \`.hwp\`/\`.hwpx\`\uB97C \uD3B8\uC9D1\uD558\uBA74 \uC6D0\uBCF8 \uD615\uC2DD \uADF8\uB300\uB85C \uBB34\uC190\uC2E4 \uC800\uC7A5\uB429\uB2C8\uB2E4(.hwp\uB294 .hwp\uB85C \uC720\uC9C0). \uB2E8, \uD45C\xB7\uC140\xB7\uCC3E\uC544\uBC14\uAFB8\uAE30 \uB4F1 \uC77C\uBD80 \uAD6C\uC870 \uD3B8\uC9D1 \uD234\uC740 \`.hwpx\` \uAE30\uBC18\uC774\uBBC0\uB85C \`.hwp\` \uC785\uB825\uC774 \`.hwpx\`\uB85C \uC800\uC7A5\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD615\uC2DD \uBCC0\uD658\uC774 \uC548\uB0B4\uB418\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBBF8\uB9AC \uC54C\uB9AC\uC138\uC694.
9948
9948
  5. \uACBD\uB85C\uB294 \uD604\uC7AC \uC791\uC5C5 \uB514\uB809\uD130\uB9AC\uB97C \uAE30\uC900\uC73C\uB85C \uC0C1\uB300 \uACBD\uB85C \uB610\uB294 \uC808\uB300 \uACBD\uB85C\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
9949
9949
  6. \uC0AC\uC6A9\uC790\uAC00 \uC218\uC815\uC548\uC744 \uAC70\uC808\uD558\uBA74 \uAC19\uC740 \uC81C\uC548\uC744 \uC790\uB3D9\uC73C\uB85C \uBC18\uBCF5\uD558\uC9C0 \uB9D0\uACE0, \uC0AC\uC6A9\uC790\uC758 \uB2E4\uC74C \uC9C0\uC2DC\uB97C \uAE30\uB2E4\uB9AC\uC138\uC694.
9950
9950
  7. \uD070 \uBB38\uC11C\uB294 \uBA3C\uC800 \`outline\`\uC73C\uB85C \uAD6C\uC870\uB97C \uD30C\uC545\uD558\uACE0, \`search\`\uB098 \`pages\`\uB85C \uD544\uC694\uD55C \uBD80\uBD84\uB9CC \uC77D\uC5B4 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uC544\uB07C\uC138\uC694.
9951
- 8. \uC0AC\uC6A9\uC790\uAC00 \uC9C1\uC804 \uBCC0\uACBD\uC744 \uB418\uB3CC\uB9AC\uAE38 \uC6D0\uD558\uBA74 \`list_backups\`\uB85C \uBC31\uC5C5\uC744 \uD655\uC778\uD558\uACE0 \`restore_backup\`\uC73C\uB85C \uBCF5\uC6D0\uD558\uC138\uC694. \uBCF5\uC6D0\uB3C4 \uC2B9\uC778\uC744 \uAC70\uCE58\uBA70, \uBCF5\uC6D0 \uC804 \uD604\uC7AC \uC0C1\uD0DC\uAC00 \uC790\uB3D9 \uBC31\uC5C5\uB429\uB2C8\uB2E4.`;
9951
+ 8. \uC0AC\uC6A9\uC790\uAC00 \uC9C1\uC804 \uBCC0\uACBD\uC744 \uB418\uB3CC\uB9AC\uAE38 \uC6D0\uD558\uBA74 \`list_backups\`\uB85C \uBC31\uC5C5\uC744 \uD655\uC778\uD558\uACE0 \`restore_backup\`\uC73C\uB85C \uBCF5\uC6D0\uD558\uC138\uC694. \uBCF5\uC6D0\uB3C4 \uC2B9\uC778\uC744 \uAC70\uCE58\uBA70, \uBCF5\uC6D0 \uC804 \uD604\uC7AC \uC0C1\uD0DC\uAC00 \uC790\uB3D9 \uBC31\uC5C5\uB429\uB2C8\uB2E4.
9952
+ 9. \uC218\uC815\xB7\uAD50\uC815\xB7\uBCC0\uACBD \uC694\uCCAD\uC744 \uBC1B\uACE0 \uBB34\uC5C7\uC744 \uBC14\uAFD4\uC57C \uD560\uC9C0 \uBB38\uC11C\uC5D0\uC11C \uC2A4\uC2A4\uB85C \uD310\uB2E8\uD560 \uC218 \uC788\uC73C\uBA74, \uBC1C\uACAC\uD55C \uC624\uB958\xB7\uBCC0\uACBD\uC810\uC744 \uC124\uBA85\xB7\uBAA9\uB85D\uC73C\uB85C\uB9CC \uCD9C\uB825\uD558\uACE0 \uBA48\uCD94\uC9C0 \uB9D0\uACE0 **\uBC18\uB4DC\uC2DC \`propose_*\` \uB3C4\uAD6C\uB85C \uC2E4\uC81C \uC218\uC815\uC548\uC744 \uC81C\uC548**\uD558\uC138\uC694(\uC801\uC6A9\uC740 \uC2B9\uC778 \uD6C4). \uD544\uC694\uD55C \uC815\uBCF4\uAC00 \uC5C6\uC744 \uB54C\uB9CC \uC9C8\uBB38\uD569\uB2C8\uB2E4(\uD3B8\uC9D1 \uC548\uC804 \uADDC\uCE59 8).
9953
+ 10. "\uBAA8\uB450/\uC804\uBD80/\uC77C\uAD04"\uCC98\uB7FC \uC5EC\uB7EC \uD56D\uBAA9\xB7\uD328\uD134\uC744 \uD55C\uAEBC\uBC88\uC5D0 \uBC14\uAFB8\uB294 \uC694\uCCAD\uC740 \uC77C\uBD80\uB9CC \uCC98\uB9AC\uD558\uC9C0 \uB9D0\uACE0 **\uBE60\uC9D0\uC5C6\uC774 \uC804\uBD80** \uCC98\uB9AC\uD558\uACE0, \uC801\uC6A9 \uD6C4 \uB204\uB77D\uB41C \uD56D\uBAA9\uC774 \uC5C6\uB294\uC9C0 \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694(\uC608: \uB0A0\uC9DC \uD615\uC2DD\uC774 3\uAC00\uC9C0\uBA74 3\uAC00\uC9C0 \uBAA8\uB450).`;
9952
9954
  var EDIT_SAFETY_SECTION = `## \uD3B8\uC9D1 \uC548\uC804 \uADDC\uCE59
9953
9955
 
9954
9956
  1. \uC694\uCCAD\uBC1B\uC740 \uBD80\uBD84\uB9CC \uC218\uC815\uD558\uACE0, \uC694\uCCAD\uD558\uC9C0 \uC54A\uC740 \uBB38\uC7A5\xB7\uC11C\uC2DD\xB7\uAD6C\uC870\xB7\uD45C\uD604\uC740 \uADF8\uB300\uB85C \uB461\uB2C8\uB2E4. \uBB38\uC11C \uC804\uCCB4\uB97C \uC784\uC758\uB85C \uC7AC\uC791\uC131\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
@@ -9957,7 +9959,8 @@ var EDIT_SAFETY_SECTION = `## \uD3B8\uC9D1 \uC548\uC804 \uADDC\uCE59
9957
9959
  4. \uC804\uBB38 \uC6A9\uC5B4\uB294 \uC784\uC758\uB85C \uB2E4\uB978 \uD45C\uD604\uC73C\uB85C \uBC14\uAFB8\uC9C0 \uC54A\uACE0 \uBB38\uC11C \uC804\uCCB4\uC5D0\uC11C \uC77C\uAD00\uB418\uAC8C \uC720\uC9C0\uD569\uB2C8\uB2E4.
9958
9960
  5. \uACC4\uC57D\uC11C\xB7\uC57D\uAD00\xB7\uACF5\uC2DC\xB7\uB17C\uBB38 \uB4F1 \uBC95\uC801\xB7\uACF5\uC2DD \uBB38\uC11C\uB294 \uB2E8\uC5B4 \uD558\uB098\uAC00 \uC758\uBBF8\uB97C \uBC14\uAFC0 \uC218 \uC788\uC73C\uBBC0\uB85C, \uD45C\uD604\uC744 \uC790\uB3D9\uC73C\uB85C \uB2E4\uB4EC\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C \uBCC0\uACBD\uB9CC \uC218\uD589\uD569\uB2C8\uB2E4.
9959
9961
  6. \uC758\uBBF8\uAC00 \uBC14\uB014 \uC218 \uC788\uB294 \uC218\uC815\uC740 \uC2E4\uD589 \uC804\uC5D0 \uADF8 \uC0AC\uC2E4\uC744 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC54C\uB9AC\uACE0, \uC218\uC815 \uC81C\uC548\uC758 \uC694\uC57D(summary)\uC5D0\uB294 \uBB34\uC5C7\uC744\xB7\uC65C \uBC14\uAFB8\uB294\uC9C0 \uD568\uAED8 \uC801\uC2B5\uB2C8\uB2E4.
9960
- 7. \uAC1C\uC778\uC815\uBCF4(\uC8FC\uBBFC\uB4F1\uB85D\uBC88\uD638\xB7\uC804\uD654\uBC88\uD638\xB7\uC774\uBA54\uC77C\xB7\uACC4\uC88C\xB7\uCE74\uB4DC\uBC88\uD638 \uB4F1) \uCC98\uB9AC: \uC0AC\uC6A9\uC790\uAC00 **\uD655\uC778\xB7\uC810\uAC80\uB9CC** \uC6D0\uD558\uBA74 \`scan_pii\`(\uC77D\uAE30 \uC804\uC6A9)\uB85C \uBCF4\uC5EC\uC8FC\uACE0, **\uAC00\uB9AC\uAE30\xB7\uB9C8\uC2A4\uD0B9\xB7\uBE44\uC2DD\uBCC4\xB7\uAC1C\uC778\uC815\uBCF4 \uC0AD\uC81C**\uB97C \uC6D0\uD558\uBA74 \`scan_pii\`\uC5D0\uC11C \uBA48\uCD94\uC9C0 \uB9D0\uACE0 \`propose_redact_pii\`\uB85C \uBC14\uB85C \uC218\uC815\uC548\uC744 \uC81C\uC548\uD558\uC138\uC694(\uC774 \uB3C4\uAD6C\uB3C4 \uC2B9\uC778\uC744 \uAC70\uCE58\uBBC0\uB85C \uC548\uC804\uD569\uB2C8\uB2E4).`;
9962
+ 7. \uAC1C\uC778\uC815\uBCF4(\uC8FC\uBBFC\uB4F1\uB85D\uBC88\uD638\xB7\uC804\uD654\uBC88\uD638\xB7\uC774\uBA54\uC77C\xB7\uACC4\uC88C\xB7\uCE74\uB4DC\uBC88\uD638 \uB4F1) \uCC98\uB9AC: \uC0AC\uC6A9\uC790\uAC00 **\uD655\uC778\xB7\uC810\uAC80\uB9CC** \uC6D0\uD558\uBA74 \`scan_pii\`(\uC77D\uAE30 \uC804\uC6A9)\uB85C \uBCF4\uC5EC\uC8FC\uACE0, **\uAC00\uB9AC\uAE30\xB7\uB9C8\uC2A4\uD0B9\xB7\uBE44\uC2DD\uBCC4\xB7\uAC1C\uC778\uC815\uBCF4 \uC0AD\uC81C**\uB97C \uC6D0\uD558\uBA74 \`scan_pii\`\uC5D0\uC11C \uBA48\uCD94\uC9C0 \uB9D0\uACE0 \`propose_redact_pii\`\uB85C \uBC14\uB85C \uC218\uC815\uC548\uC744 \uC81C\uC548\uD558\uC138\uC694(\uC774 \uB3C4\uAD6C\uB3C4 \uC2B9\uC778\uC744 \uAC70\uCE58\uBBC0\uB85C \uC548\uC804\uD569\uB2C8\uB2E4).
9963
+ 8. \uC694\uCCAD\uC774 \uBAA8\uB378\uC774 \uD655\uC2E4\uD788 \uC54C \uC218 \uC5C6\uB294 \uC815\uBCF4\uC5D0 \uC758\uC874\uD558\uBA74(\uD559\uC2B5 \uC2DC\uC810 \uC774\uD6C4\uC758 \uCD5C\uC2E0 \uBC95\uB839\xB7\uAE30\uC900\xB7\uACE0\uC2DC\xB7\uD1B5\uACC4 \uB4F1 \uC2DC\uC810 \uC758\uC874 \uC815\uBCF4, \uB610\uB294 \uBB38\uC11C\uC5D0 \uC5C6\uACE0 \uC0AC\uC6A9\uC790\uAC00 \uC8FC\uC9C0 \uC54A\uC740 \uAE30\uAD00\uBA85\xB7\uC870\uC9C1\uAC1C\uD3B8\xB7\uAE08\uC561 \uB4F1) \uCD94\uCE21\uD574 \uC9C4\uD589\uD558\uC9C0 \uB9D0\uACE0 **\uBB34\uC5C7\uC774 \uD544\uC694\uD55C\uC9C0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA3C\uC800 \uAD6C\uCCB4\uC801\uC73C\uB85C \uC9C8\uBB38**\uD558\uC138\uC694. \uD604\uD589 \uBC95\uB839\uC740 \`mcp__korean-law__*\`\uB85C, \uADF8 \uC678 \uC124\uC815\uB41C \uAC80\uC0C9 \uB3C4\uAD6C\uAC00 \uC788\uC73C\uBA74 \uADF8 \uB3C4\uAD6C\uB85C \uD655\uC778\uD574 \uCD9C\uCC98\uB97C \uBC1D\uD788\uACE0, \uD655\uC778 \uC218\uB2E8\uC774 \uC5C6\uC73C\uBA74 \uCD94\uC815\uC784\uC744 \uBA85\uC2DC\uD569\uB2C8\uB2E4. \uB418\uBB3C\uC744 \uC218 \uC5C6\uB294 \uBE44\uB300\uD654\uD615(\`-p\`) \uC2E4\uD589\uC5D0\uC120 \uAC00\uC815\uACFC \uBD88\uD655\uC2E4\uC131\uC744 \uACB0\uACFC\uC5D0 \uBA85\uC2DC\uD558\uC138\uC694.`;
9961
9964
  var LAW_RULES_SECTION = `## \uBC95\uB839 \uADDC\uCE59
9962
9965
 
9963
9966
  1. \uBC95\uB839 \uC778\uC6A9 \uD615\uC2DD: \u300C\uBC95\uB839\uBA85\u300D \uC81CN\uC870 \uC81CN\uD56D \uC81CN\uD638
@@ -10931,7 +10934,7 @@ var import_jszip3 = __toESM(require_lib3(), 1);
10931
10934
  var import_jszip4 = __toESM(require_lib3(), 1);
10932
10935
  import { z as z3 } from "zod";
10933
10936
  import { readFile as readFile32 } from "fs/promises";
10934
- import { blocksToMarkdown, compare } from "@clazic/kordoc";
10937
+ import { blocksToMarkdown, compare } from "kordoc";
10935
10938
  import { z as z22 } from "zod";
10936
10939
  import { readFile as readFile5 } from "fs/promises";
10937
10940
  import { extname as extname4 } from "path";
@@ -10947,7 +10950,7 @@ import { extname as extname6, join as join4, relative as relative2 } from "path"
10947
10950
  import { z as z6 } from "zod";
10948
10951
  import { readFile as readFile7 } from "fs/promises";
10949
10952
  import { extname as extname7 } from "path";
10950
- import { compare as compare2, markdownToHwpx, parse } from "@clazic/kordoc";
10953
+ import { compare as compare2, parse, patchHwp, patchHwpx } from "kordoc";
10951
10954
  import { z as z7 } from "zod";
10952
10955
  import {
10953
10956
  Document,
@@ -10962,11 +10965,11 @@ import {
10962
10965
  } from "docx";
10963
10966
  import { readFile as readFile8 } from "fs/promises";
10964
10967
  import { extname as extname8 } from "path";
10965
- import { parse as parse2 } from "@clazic/kordoc";
10968
+ import { parse as parse2 } from "kordoc";
10966
10969
  import { z as z8 } from "zod";
10967
10970
  import { readFile as readFile9 } from "fs/promises";
10968
10971
  import { extname as extname9 } from "path";
10969
- import { extractFormFields, markdownToHwpx as markdownToHwpx2, parse as parse3 } from "@clazic/kordoc";
10972
+ import { extractFormFields, parse as parse3, patchHwpx as patchHwpx2 } from "kordoc";
10970
10973
  import { z as z9 } from "zod";
10971
10974
  import { readFile as readFile10 } from "fs/promises";
10972
10975
  import { basename as basename4, extname as extname10 } from "path";
@@ -10979,26 +10982,40 @@ import ExcelJS from "exceljs";
10979
10982
  import { z as z11 } from "zod";
10980
10983
  import { readFile as readFile12 } from "fs/promises";
10981
10984
  import { extname as extname12 } from "path";
10982
- import { parse as parse4 } from "@clazic/kordoc";
10985
+ import { parse as parse4 } from "kordoc";
10983
10986
  import { z as z12 } from "zod";
10984
10987
  import { readFile as readFile13, stat as stat4 } from "fs/promises";
10985
10988
  import { extname as extname13 } from "path";
10986
- import { parse as parse5 } from "@clazic/kordoc";
10989
+ import { parse as parse5 } from "kordoc";
10987
10990
  import { z as z13 } from "zod";
10988
10991
  import { readFile as fsReadFile, stat as stat5 } from "fs/promises";
10989
10992
  import { z as z14 } from "zod";
10990
10993
  import { readFile as readFile14 } from "fs/promises";
10991
10994
  import { extname as extname14 } from "path";
10992
- import { parse as parse6 } from "@clazic/kordoc";
10995
+ import { parse as parse6 } from "kordoc";
10993
10996
  import { z as z15 } from "zod";
10994
10997
  import { stat as stat6 } from "fs/promises";
10995
10998
  import { extname as extname15 } from "path";
10996
- import { markdownToHwpx as markdownToHwpx3 } from "@clazic/kordoc";
10999
+ import { markdownToHwpx } from "kordoc";
10997
11000
  import { z as z16 } from "zod";
10998
11001
  import { stat as stat7 } from "fs/promises";
10999
11002
  import { extname as extname16 } from "path";
11000
11003
  import ExcelJS2 from "exceljs";
11001
11004
  import { z as z17 } from "zod";
11005
+ var OLE2_MAGIC = [208, 207, 17, 224, 161, 177, 26, 225];
11006
+ var ZIP_MAGIC_0 = 80;
11007
+ var ZIP_MAGIC_1 = 75;
11008
+ function isOle2Binary(bytes) {
11009
+ if (bytes.length < OLE2_MAGIC.length) return false;
11010
+ return OLE2_MAGIC.every((b, i) => bytes[i] === b);
11011
+ }
11012
+ function hwpStructuralGuard(ext, bytes) {
11013
+ const isHwpExt = ext === ".hwp";
11014
+ const isOle2 = isOle2Binary(bytes);
11015
+ if (!isHwpExt && !isOle2) return null;
11016
+ if (!isHwpExt && bytes[0] === ZIP_MAGIC_0 && bytes[1] === ZIP_MAGIC_1) return null;
11017
+ return "\uC774 \uC791\uC5C5(\uD45C\xB7\uC140\xB7\uC591\uC2DD\xB7\uCC3E\uAE30\uBC14\uAFB8\uAE30 \uB4F1 \uAD6C\uC870 \uD3B8\uC9D1)\uC740 `.hwpx` \uBB38\uC11C\uC5D0\uC11C \uC9C0\uC6D0\uB429\uB2C8\uB2E4. `.hwp`\uB294 OLE \uBC14\uC774\uB108\uB9AC\uB77C \uAD6C\uC870\uB97C \uBB34\uC190\uC2E4\uB85C \uD328\uCE58\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD574\uACB0: (1) \uBCF8\uBB38 \uD14D\uC2A4\uD2B8\uB9CC \uACE0\uCE58\uB824\uBA74 `propose_edit`\uC744 \uC0AC\uC6A9\uD558\uC138\uC694(.hwp \uC81C\uC790\uB9AC \uD3B8\uC9D1). (2) \uD45C\xB7\uC140\xB7\uC591\uC2DD \uD3B8\uC9D1\uC774 \uD544\uC694\uD558\uBA74 \uD55C\uAE00\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 HWPX(.hwpx)'\uB85C \uBCC0\uD658\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
11018
+ }
11002
11019
  async function resolveSafePath(cwd, p) {
11003
11020
  const normalizedCwd = normalize(cwd).normalize("NFC");
11004
11021
  const normalizedP = p.normalize("NFC");
@@ -11856,10 +11873,7 @@ var proposeCellEditTool = {
11856
11873
  }) => {
11857
11874
  const safePath = await resolveSafePath(ctx.cwd, input.path);
11858
11875
  const ext = extname3(safePath).toLowerCase();
11859
- if (ext === ".hwp") {
11860
- return "\uC624\uB958: propose_cell_edit\uC740 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. .hwp(\uAD6C\uD615 OLE \uBC14\uC774\uB108\uB9AC)\uB294 \uC9C1\uC811 \uD3B8\uC9D1\uC774 \uBD88\uAC00\uD569\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 .hwpx'\uB85C \uC800\uC7A5\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694. \uB610\uB294 propose_edit\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC73C\uB098, \uBCD1\uD569 \uC140\uC774 \uC18C\uC2E4\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.";
11861
- }
11862
- if (ext !== ".hwpx") {
11876
+ if (ext !== ".hwpx" && ext !== ".hwp") {
11863
11877
  return `\uC624\uB958: propose_cell_edit\uC740 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uD604\uC7AC \uD30C\uC77C: ${ext}. \uD45C \uC140 \uC9C1\uC811 \uD3B8\uC9D1\uC740 .hwpx \uD3EC\uB9F7\uC5D0\uC11C\uB9CC \uAC00\uB2A5\uD569\uB2C8\uB2E4.`;
11864
11878
  }
11865
11879
  let originalBuffer;
@@ -11868,6 +11882,11 @@ var proposeCellEditTool = {
11868
11882
  } catch {
11869
11883
  return `\uC624\uB958: \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input.path}. \uACBD\uB85C\uB97C \uD655\uC778\uD558\uAC70\uB098 read_document\uB85C \uBA3C\uC800 \uD655\uC778\uD558\uC138\uC694.`;
11870
11884
  }
11885
+ const originalBytes = new Uint8Array(originalBuffer.buffer);
11886
+ const structuralGuard = hwpStructuralGuard(ext, originalBytes);
11887
+ if (structuralGuard !== null) {
11888
+ return structuralGuard;
11889
+ }
11871
11890
  if (originalBuffer[0] !== 80 || originalBuffer[1] !== 75) {
11872
11891
  return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC785\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C .hwpx\uB85C \uC800\uC7A5 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
11873
11892
  }
@@ -12603,12 +12622,13 @@ async function listFormObjectsFromZip(zip) {
12603
12622
  return { objects, sectionFiles, sectionXmls };
12604
12623
  }
12605
12624
  function validateHwpxBuffer(ext, buffer) {
12606
- if (ext === ".hwp") {
12607
- return "\uC624\uB958: \uC774 \uD234\uC740 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. .hwp(\uAD6C\uD615 OLE \uBC14\uC774\uB108\uB9AC)\uB294 \uC9C1\uC811 \uD3B8\uC9D1\uC774 \uBD88\uAC00\uD569\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 .hwpx'\uB85C \uC800\uC7A5\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
12608
- }
12609
- if (ext !== ".hwpx") {
12625
+ if (ext !== ".hwpx" && ext !== ".hwp") {
12610
12626
  return `\uC624\uB958: \uC774 \uD234\uC740 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uD604\uC7AC \uD30C\uC77C \uD655\uC7A5\uC790: ${ext}`;
12611
12627
  }
12628
+ const structuralGuard = hwpStructuralGuard(ext, buffer);
12629
+ if (structuralGuard !== null) {
12630
+ return structuralGuard;
12631
+ }
12612
12632
  if (buffer[0] !== 80 || buffer[1] !== 75) {
12613
12633
  return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC785\uB2C8\uB2E4.";
12614
12634
  }
@@ -13118,15 +13138,21 @@ var proposeEditTool = {
13118
13138
  originalMarkdown = originalResult.markdown;
13119
13139
  }
13120
13140
  if (ext === ".hwpx" || ext === ".hwp") {
13121
- const kordocWarnings = [];
13122
- const hwpxBuffer = await markdownToHwpx(input.newMarkdown, {
13123
- templateArrayBuffer: originalBuffer.buffer,
13124
- warnings: kordocWarnings
13125
- });
13126
- if (kordocWarnings.length > 0) {
13127
- warnings.push(...kordocWarnings.map((w) => `kordoc \uACBD\uACE0: ${w}`));
13141
+ const origU8 = new Uint8Array(
13142
+ originalBuffer.buffer,
13143
+ originalBuffer.byteOffset,
13144
+ originalBuffer.byteLength
13145
+ );
13146
+ const patchResult = ext === ".hwp" ? await patchHwp(origU8, input.newMarkdown) : await patchHwpx(origU8, input.newMarkdown);
13147
+ if (!patchResult.success || !patchResult.data) {
13148
+ return `\uC624\uB958: \uD3B8\uC9D1\uC744 \uC801\uC6A9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: ${patchResult.error ?? "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}. read_document\uB85C \uC6D0\uBCF8\uC744 \uB2E4\uC2DC \uD655\uC778\uD558\uC138\uC694.`;
13149
+ }
13150
+ stagedData = patchResult.data;
13151
+ for (const s of patchResult.skipped) {
13152
+ warnings.push(
13153
+ `\uC77C\uBD80 \uBCC0\uACBD\uC774 \uC801\uC6A9\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4(${s.reason ?? "\uC0AC\uC720 \uBBF8\uC0C1"}). \uD45C \uAD6C\uC870 \uBCC0\uACBD\uC740 propose_table_structure, \uC140 \uAC12\uC740 propose_cell_edit\uC744 \uC0AC\uC6A9\uD558\uC138\uC694.`
13154
+ );
13128
13155
  }
13129
- stagedData = new Uint8Array(hwpxBuffer);
13130
13156
  } else if (ext === ".docx") {
13131
13157
  warnings.push("DOCX \uC7AC\uC0DD\uC131: \uBCF5\uC7A1\uD55C \uC11C\uC2DD(\uBA38\uB9AC\uAE00/\uAC01\uC8FC/\uC2A4\uD0C0\uC77C)\uC740 \uC190\uC2E4\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.");
13132
13158
  const docxBuffer = await markdownToDocx(input.newMarkdown);
@@ -13136,7 +13162,8 @@ var proposeEditTool = {
13136
13162
  } else {
13137
13163
  return `\uC624\uB958: \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD30C\uC77C \uD615\uC2DD\uC785\uB2C8\uB2E4: ${ext}. .hwp, .hwpx, .docx, .md, .txt\uB9CC \uC218\uC815 \uAC00\uB2A5\uD569\uB2C8\uB2E4.`;
13138
13164
  }
13139
- const { outputPath, willConvertFormat } = resolveOutputPath(safePath);
13165
+ const outputPath = ext === ".hwpx" || ext === ".hwp" ? safePath : resolveOutputPath(safePath).outputPath;
13166
+ const willConvertFormat = ext === ".hwpx" || ext === ".hwp" ? void 0 : resolveOutputPath(safePath).willConvertFormat;
13140
13167
  const stagedPath = await stageFile(ctx.sessionId, safePath, stagedData);
13141
13168
  let diff = markdownDiff(originalMarkdown, input.newMarkdown, safePath);
13142
13169
  if (ext === ".hwpx" || ext === ".hwp") {
@@ -13372,10 +13399,7 @@ var proposeFindReplaceTool = {
13372
13399
  }) => {
13373
13400
  const safePath = await resolveSafePath(ctx.cwd, input.path);
13374
13401
  const ext = extname8(safePath).toLowerCase();
13375
- if (ext === ".hwp") {
13376
- return "\uC624\uB958: propose_find_replace\uB294 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. .hwp(\uAD6C\uD615 OLE \uBC14\uC774\uB108\uB9AC)\uB294 XML \uC9C1\uC811 \uD3B8\uC9D1\uC774 \uBD88\uAC00\uD569\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 .hwpx'\uB85C \uC800\uC7A5\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
13377
- }
13378
- if (ext !== ".hwpx") {
13402
+ if (ext !== ".hwpx" && ext !== ".hwp") {
13379
13403
  return `\uC624\uB958: propose_find_replace\uB294 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uD604\uC7AC \uD30C\uC77C \uD655\uC7A5\uC790: ${ext}. .hwpx \uD30C\uC77C\uC744 \uC9C0\uC815\uD558\uC138\uC694.`;
13380
13404
  }
13381
13405
  let originalBuf;
@@ -13384,14 +13408,18 @@ var proposeFindReplaceTool = {
13384
13408
  } catch {
13385
13409
  return `\uC624\uB958: \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input.path}. \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC138\uC694.`;
13386
13410
  }
13387
- if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
13388
- return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C .hwpx\uB85C \uC800\uC7A5 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
13389
- }
13390
13411
  const originalBytes = new Uint8Array(
13391
13412
  originalBuf.buffer,
13392
13413
  originalBuf.byteOffset,
13393
13414
  originalBuf.byteLength
13394
13415
  );
13416
+ const structuralGuard = hwpStructuralGuard(ext, originalBytes);
13417
+ if (structuralGuard !== null) {
13418
+ return structuralGuard;
13419
+ }
13420
+ if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
13421
+ return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C .hwpx\uB85C \uC800\uC7A5 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
13422
+ }
13395
13423
  let newBytes;
13396
13424
  let replacedCount;
13397
13425
  let diffSamples;
@@ -13498,6 +13526,13 @@ var proposeFormFillTool = {
13498
13526
  } catch {
13499
13527
  return `\uC624\uB958: \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input.path}. \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC138\uC694.`;
13500
13528
  }
13529
+ const structuralGuard = hwpStructuralGuard(
13530
+ ext,
13531
+ new Uint8Array(originalBuffer.buffer, originalBuffer.byteOffset, originalBuffer.byteLength)
13532
+ );
13533
+ if (structuralGuard !== null) {
13534
+ return structuralGuard;
13535
+ }
13501
13536
  const parseResult = await parse3(originalBuffer.buffer);
13502
13537
  if (!parseResult.success) {
13503
13538
  const msg = kordocErrorMessage(
@@ -13530,15 +13565,19 @@ var proposeFormFillTool = {
13530
13565
  }
13531
13566
  }
13532
13567
  const diff = diffLines.join("\n");
13533
- const kordocWarnings = [];
13534
- const hwpxBuffer = await markdownToHwpx2(newMarkdown, {
13535
- templateArrayBuffer: originalBuffer.buffer,
13536
- warnings: kordocWarnings
13537
- });
13538
- if (kordocWarnings.length > 0) {
13539
- warnings.push(...kordocWarnings.map((w) => `kordoc \uACBD\uACE0: ${w}`));
13568
+ const origU8 = new Uint8Array(
13569
+ originalBuffer.buffer,
13570
+ originalBuffer.byteOffset,
13571
+ originalBuffer.byteLength
13572
+ );
13573
+ const patchResult = await patchHwpx2(origU8, newMarkdown);
13574
+ if (!patchResult.success || !patchResult.data) {
13575
+ return `\uC624\uB958: \uC591\uC2DD \uCC44\uC6B0\uAE30\uB97C \uC801\uC6A9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4: ${patchResult.error ?? "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958"}.`;
13576
+ }
13577
+ const stagedData = patchResult.data;
13578
+ for (const s of patchResult.skipped) {
13579
+ warnings.push(`\uC77C\uBD80 \uD56D\uBAA9\uC774 \uC801\uC6A9\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4(${s.reason ?? "\uC0AC\uC720 \uBBF8\uC0C1"}).`);
13540
13580
  }
13541
- const stagedData = new Uint8Array(hwpxBuffer);
13542
13581
  const { outputPath, willConvertFormat } = resolveOutputPath(safePath);
13543
13582
  const stagedPath = await stageFile(ctx.sessionId, safePath, stagedData);
13544
13583
  const proposalId = crypto.randomUUID();
@@ -13670,29 +13709,30 @@ var proposeRedactPiiTool = {
13670
13709
  }) => {
13671
13710
  const safePath = await resolveSafePath(ctx.cwd, input.path);
13672
13711
  const ext = extname10(safePath).toLowerCase();
13673
- if (ext === ".hwp") {
13674
- return "\uC624\uB958: propose_redact_pii\uB294 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. .hwp(\uAD6C\uD615 OLE \uBC14\uC774\uB108\uB9AC)\uB294 XML \uC9C1\uC811 \uD3B8\uC9D1\uC774 \uBD88\uAC00\uD569\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 .hwpx'\uB85C \uC800\uC7A5\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
13675
- }
13676
- if (ext !== ".hwpx" && ext !== ".md" && ext !== ".txt") {
13712
+ if (ext !== ".hwpx" && ext !== ".hwp" && ext !== ".md" && ext !== ".txt") {
13677
13713
  const hint = ext === ".docx" || ext === ".xlsx" ? " .hwpx/.md/.txt\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4." : " .hwpx/.md/.txt\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4.";
13678
13714
  return `\uC624\uB958: propose_redact_pii\uB294 .hwpx/.md/.txt \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uD604\uC7AC \uD30C\uC77C \uD655\uC7A5\uC790: ${ext}.${hint}`;
13679
13715
  }
13680
13716
  const { outputPath, willConvertFormat } = resolveOutputPath(safePath);
13681
- if (ext === ".hwpx") {
13717
+ if (ext === ".hwpx" || ext === ".hwp") {
13682
13718
  let originalBuf;
13683
13719
  try {
13684
13720
  originalBuf = await readFile10(safePath);
13685
13721
  } catch {
13686
13722
  return `\uC624\uB958: \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input.path}`;
13687
13723
  }
13688
- if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
13689
- return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.";
13690
- }
13691
13724
  const originalBytes = new Uint8Array(
13692
13725
  originalBuf.buffer,
13693
13726
  originalBuf.byteOffset,
13694
13727
  originalBuf.byteLength
13695
13728
  );
13729
+ const structuralGuard = hwpStructuralGuard(ext, originalBytes);
13730
+ if (structuralGuard !== null) {
13731
+ return structuralGuard;
13732
+ }
13733
+ if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
13734
+ return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.";
13735
+ }
13696
13736
  let patchResult;
13697
13737
  try {
13698
13738
  patchResult = await applyRedactToHwpx(originalBytes);
@@ -14598,10 +14638,7 @@ var proposeTableStructureTool = {
14598
14638
  }) => {
14599
14639
  const safePath = await resolveSafePath(ctx.cwd, input.path);
14600
14640
  const ext = extname12(safePath).toLowerCase();
14601
- if (ext === ".hwp") {
14602
- return "\uC624\uB958: propose_table_structure\uB294 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. .hwp(\uAD6C\uD615 OLE \uBC14\uC774\uB108\uB9AC)\uB294 XML \uC9C1\uC811 \uD3B8\uC9D1\uC774 \uBD88\uAC00\uD569\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C '\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5 \u2192 .hwpx'\uB85C \uC800\uC7A5\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
14603
- }
14604
- if (ext !== ".hwpx") {
14641
+ if (ext !== ".hwpx" && ext !== ".hwp") {
14605
14642
  return `\uC624\uB958: propose_table_structure\uB294 .hwpx \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uD604\uC7AC \uD30C\uC77C \uD655\uC7A5\uC790: ${ext}. .hwpx \uD30C\uC77C\uC744 \uC9C0\uC815\uD558\uC138\uC694.`;
14606
14643
  }
14607
14644
  let originalBuf;
@@ -14610,14 +14647,18 @@ var proposeTableStructureTool = {
14610
14647
  } catch {
14611
14648
  return `\uC624\uB958: \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${input.path}. \uACBD\uB85C\uB97C \uD655\uC778\uD558\uC138\uC694.`;
14612
14649
  }
14613
- if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
14614
- return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC785\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C .hwpx\uB85C \uC800\uC7A5 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
14615
- }
14616
14650
  const originalBytes = new Uint8Array(
14617
14651
  originalBuf.buffer,
14618
14652
  originalBuf.byteOffset,
14619
14653
  originalBuf.byteLength
14620
14654
  );
14655
+ const structuralGuard = hwpStructuralGuard(ext, originalBytes);
14656
+ if (structuralGuard !== null) {
14657
+ return structuralGuard;
14658
+ }
14659
+ if (originalBuf[0] !== 80 || originalBuf[1] !== 75) {
14660
+ return "\uC624\uB958: \uD30C\uC77C\uC774 \uC720\uD6A8\uD55C .hwpx(ZIP) \uD3EC\uB9F7\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD30C\uC77C\uC774 \uC190\uC0C1\uB418\uC5C8\uAC70\uB098 \uAD6C\uD615 .hwp(OLE \uBC14\uC774\uB108\uB9AC) \uD3EC\uB9F7\uC785\uB2C8\uB2E4. \uD55C\uAE00 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C .hwpx\uB85C \uC800\uC7A5 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.";
14661
+ }
14621
14662
  let originalBlocks = null;
14622
14663
  try {
14623
14664
  const origResult = await parse4(originalBuf.buffer);
@@ -15057,13 +15098,7 @@ var writeNewDocumentTool = {
15057
15098
  const warnings = [];
15058
15099
  let stagedData;
15059
15100
  if (ext === ".hwpx") {
15060
- const kordocWarnings = [];
15061
- const hwpxBuffer = await markdownToHwpx3(input.markdown, {
15062
- warnings: kordocWarnings
15063
- });
15064
- if (kordocWarnings.length > 0) {
15065
- warnings.push(...kordocWarnings.map((w) => `kordoc \uACBD\uACE0: ${w}`));
15066
- }
15101
+ const hwpxBuffer = await markdownToHwpx(input.markdown);
15067
15102
  stagedData = new Uint8Array(hwpxBuffer);
15068
15103
  } else if (ext === ".docx") {
15069
15104
  warnings.push("DOCX \uC0DD\uC131: \uBCF5\uC7A1\uD55C \uC11C\uC2DD(\uBA38\uB9AC\uAE00/\uAC01\uC8FC/\uC2A4\uD0C0\uC77C)\uC740 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.");