@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 +100 -65
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
|
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 "
|
|
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,
|
|
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 "
|
|
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,
|
|
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 "
|
|
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 "
|
|
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 "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
13122
|
-
|
|
13123
|
-
|
|
13124
|
-
|
|
13125
|
-
|
|
13126
|
-
|
|
13127
|
-
|
|
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
|
|
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
|
|
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
|
|
13534
|
-
|
|
13535
|
-
|
|
13536
|
-
|
|
13537
|
-
|
|
13538
|
-
|
|
13539
|
-
|
|
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
|
|
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
|
|
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
|
|
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.");
|