python-hwpx-automation 7.0.1__tar.gz → 7.0.3__tar.gz

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 (227) hide show
  1. {python_hwpx_automation-7.0.1/src/python_hwpx_automation.egg-info → python_hwpx_automation-7.0.3}/PKG-INFO +12 -8
  2. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/README.md +10 -6
  3. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/pyproject.toml +2 -2
  4. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/errors.py +3 -0
  5. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.json +9 -9
  6. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/commands.py +10 -2
  7. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/tables.py +2 -5
  8. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/runtime.py +6 -1
  9. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/tool_contract.py +2 -2
  10. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workspace.py +13 -0
  11. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3/src/python_hwpx_automation.egg-info}/PKG-INFO +12 -8
  12. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/requires.txt +1 -1
  13. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/LICENSE +0 -0
  14. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/MANIFEST.in +0 -0
  15. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/NOTICE +0 -0
  16. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/setup.cfg +0 -0
  17. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.py +0 -0
  18. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.pyi +0 -0
  19. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__main__.py +0 -0
  20. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/agent_document.py +0 -0
  21. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/api.py +0 -0
  22. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/blind_eval.py +0 -0
  23. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/capabilities.py +0 -0
  24. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/compat.py +0 -0
  25. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/configuration.py +0 -0
  26. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/__init__.py +0 -0
  27. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/content.py +0 -0
  28. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/context.py +0 -0
  29. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/diff.py +0 -0
  30. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/document.py +0 -0
  31. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/formatting.py +0 -0
  32. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/handles.py +0 -0
  33. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locations.py +0 -0
  34. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locator.py +0 -0
  35. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/plan.py +0 -0
  36. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/resources.py +0 -0
  37. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/search.py +0 -0
  38. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/transactions.py +0 -0
  39. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/txn.py +0 -0
  40. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/document_state.py +0 -0
  41. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/execution_lock.py +0 -0
  42. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/fastmcp_adapter.py +0 -0
  43. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/form_fill.py +0 -0
  44. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/form_output_models.py +0 -0
  45. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/__init__.py +0 -0
  46. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/_shared.py +0 -0
  47. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/agent_document.py +0 -0
  48. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/authoring.py +0 -0
  49. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/content_edit.py +0 -0
  50. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/form_fill.py +0 -0
  51. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/layout_style.py +0 -0
  52. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/quality_render.py +0 -0
  53. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/read_export.py +0 -0
  54. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/specialized.py +0 -0
  55. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/tracked_changes.py +0 -0
  56. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/workflow.py +0 -0
  57. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_converter.py +0 -0
  58. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_support.py +0 -0
  59. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwpx_ops.py +0 -0
  60. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.py +0 -0
  61. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ingest_adapters.py +0 -0
  62. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/markdown_plan.py +0 -0
  63. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mcp_cli.py +0 -0
  64. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/metadata/tools_meta.py +0 -0
  65. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mixed_form.py +0 -0
  66. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mutation_models.py +0 -0
  67. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/network_policy.py +0 -0
  68. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/__init__.py +0 -0
  69. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/__init__.py +0 -0
  70. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/_batch_verification.py +0 -0
  71. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/__init__.py +0 -0
  72. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/bundle.py +0 -0
  73. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/catalog.py +0 -0
  74. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/dump.py +0 -0
  75. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/mapping.py +0 -0
  76. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/model.py +0 -0
  77. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/native.py +0 -0
  78. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/replay.py +0 -0
  79. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/catalog.py +0 -0
  80. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/cli.py +0 -0
  81. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/document.py +0 -0
  82. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/form_plan.py +0 -0
  83. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/model.py +0 -0
  84. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/path.py +0 -0
  85. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/query.py +0 -0
  86. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/story.py +0 -0
  87. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/__init__.py +0 -0
  88. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/advanced_generators.py +0 -0
  89. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/__init__.py +0 -0
  90. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/core.py +0 -0
  91. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/report.py +0 -0
  92. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/__init__.py +0 -0
  93. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/_support.py +0 -0
  94. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/composer.py +0 -0
  95. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/harvest.py +0 -0
  96. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/plan.py +0 -0
  97. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profile.py +0 -0
  98. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/body.xml +0 -0
  99. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/heading.xml +0 -0
  100. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/info_table.xml +0 -0
  101. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/title.xml +0 -0
  102. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/profile.json +0 -0
  103. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/template.hwpx +0 -0
  104. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/body.xml +0 -0
  105. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/heading.xml +0 -0
  106. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/title.xml +0 -0
  107. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/profile.json +0 -0
  108. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/template.hwpx +0 -0
  109. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/body.xml +0 -0
  110. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/heading.xml +0 -0
  111. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/info_table.xml +0 -0
  112. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/title.xml +0 -0
  113. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/profile.json +0 -0
  114. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/template.hwpx +0 -0
  115. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/body.xml +0 -0
  116. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/heading.xml +0 -0
  117. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/info_table.xml +0 -0
  118. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/title.xml +0 -0
  119. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/profile.json +0 -0
  120. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/template.hwpx +0 -0
  121. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/validator.py +0 -0
  122. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/presets/__init__.py +0 -0
  123. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/presets/proposal.py +0 -0
  124. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/report_parser.py +0 -0
  125. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/style_profile.py +0 -0
  126. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/template_analyzer.py +0 -0
  127. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/charting/__init__.py +0 -0
  128. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/__init__.py +0 -0
  129. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/official_lint.py +0 -0
  130. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/pii.py +0 -0
  131. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/__init__.py +0 -0
  132. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/comparison.py +0 -0
  133. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/mail_merge.py +0 -0
  134. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/redline.py +0 -0
  135. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/evalplan/__init__.py +0 -0
  136. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/evalplan/runtime.py +0 -0
  137. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/__init__.py +0 -0
  138. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/compose.py +0 -0
  139. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/ir.py +0 -0
  140. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/measure.py +0 -0
  141. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/parser.py +0 -0
  142. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/profile.py +0 -0
  143. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/__init__.py +0 -0
  144. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/classification.py +0 -0
  145. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fill_residue.py +0 -0
  146. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/__init__.py +0 -0
  147. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/apply.py +0 -0
  148. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/engine.py +0 -0
  149. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/measure.py +0 -0
  150. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/policy.py +0 -0
  151. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/report.py +0 -0
  152. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/seal.py +0 -0
  153. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/wordbox.py +0 -0
  154. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/guidance.py +0 -0
  155. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/quality.py +0 -0
  156. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/split_run.py +0 -0
  157. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/template_formfit.py +0 -0
  158. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/__init__.py +0 -0
  159. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/composition.py +0 -0
  160. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/data/bank.json +0 -0
  161. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/data/genres.json +0 -0
  162. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/gianmun.py +0 -0
  163. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/org_chart.py +0 -0
  164. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/quality/__init__.py +0 -0
  165. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/quality/page_guard.py +0 -0
  166. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/__init__.py +0 -0
  167. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_hancom_open_rate.ps1 +0 -0
  168. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_refresh_hwpx_mac.applescript +0 -0
  169. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_render_hwpx.ps1 +0 -0
  170. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_render_hwpx_mac.applescript +0 -0
  171. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/block_splits.py +0 -0
  172. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/detectors.py +0 -0
  173. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/diff.py +0 -0
  174. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/fixture_corpus.py +0 -0
  175. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/oracle.py +0 -0
  176. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/page_qa.py +0 -0
  177. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/qa_contracts.py +0 -0
  178. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/qa_metrics.py +0 -0
  179. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/worker.py +0 -0
  180. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/utilities/__init__.py +0 -0
  181. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/utilities/table_compute.py +0 -0
  182. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/__init__.py +0 -0
  183. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/_border_fill.py +0 -0
  184. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/composition.py +0 -0
  185. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/content_layout.py +0 -0
  186. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/context.py +0 -0
  187. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/form_fields.py +0 -0
  188. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/media.py +0 -0
  189. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/memo_style.py +0 -0
  190. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/package_validation.py +0 -0
  191. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/planning.py +0 -0
  192. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/preview_export.py +0 -0
  193. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/read_query.py +0 -0
  194. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/save_policy.py +0 -0
  195. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/transactions.py +0 -0
  196. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/preview_output_models.py +0 -0
  197. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/public-modules.json +0 -0
  198. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/py.typed +0 -0
  199. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/quality.py +0 -0
  200. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/quality_generation.py +0 -0
  201. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/resources.py +0 -0
  202. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/runtime_services.py +0 -0
  203. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/server.py +0 -0
  204. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/storage.py +0 -0
  205. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/tool_bindings.py +0 -0
  206. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/upstream.py +0 -0
  207. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/utils/__init__.py +0 -0
  208. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/utils/helpers.py +0 -0
  209. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/visual_qa.py +0 -0
  210. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/__init__.py +0 -0
  211. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/adapters.py +0 -0
  212. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/dispatcher.py +0 -0
  213. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/models.py +0 -0
  214. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/policy.py +0 -0
  215. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_contracts.py +0 -0
  216. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_metrics.py +0 -0
  217. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_queue.py +0 -0
  218. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_security.py +0 -0
  219. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_transport.py +0 -0
  220. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/rendering.py +0 -0
  221. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/service.py +0 -0
  222. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/state_machine.py +0 -0
  223. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/store.py +0 -0
  224. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/SOURCES.txt +0 -0
  225. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/dependency_links.txt +0 -0
  226. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/entry_points.txt +0 -0
  227. {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-hwpx-automation
3
- Version: 7.0.1
3
+ Version: 7.0.3
4
4
  Summary: Task-oriented HWPX document automation for Python, with an optional MCP adapter.
5
5
  Author: Kohkyuhyun
6
6
  License-Expression: Apache-2.0
@@ -20,7 +20,7 @@ Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  License-File: NOTICE
23
- Requires-Dist: python-hwpx<7,>=6.0.2
23
+ Requires-Dist: python-hwpx<7,>=6.3.0
24
24
  Requires-Dist: pydantic<3,>=2.11
25
25
  Requires-Dist: cryptography>=42.0
26
26
  Requires-Dist: anyio>=4.0
@@ -74,11 +74,15 @@ Dynamic: license-file
74
74
 
75
75
  <!-- release-state: release-approved -->
76
76
  > [!NOTE]
77
- > 공개 트레인: `python-hwpx 5.7.0 → python-hwpx-automation 6.7.1
78
- > hwpx-plugin 1.7.0`. 트리는 release-approved 후보이며, 원격
79
- > 진실(core·automation PyPI와 plugin GitHub
80
- > Release·marketplace·실제 marketplace 설치) 관찰 전까지 공개 좌표를
81
- > 승격하지 않습니다[릴리스 runbook](docs/release-runbook.md)
77
+ > 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2
78
+ > hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
79
+ > 승인 완료(`release-approved`), 원격 관찰 대기 중.
80
+ > (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
81
+ > Windows 저장 수리 패치 트레인 저장 수리 #98·업로드 경로 안내
82
+ > #75, core와 계약 `34a91560759dc47a` 불변).
83
+ > 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
84
+ > Release·marketplace·실제 marketplace 설치) 관찰 후에만
85
+ > 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
82
86
 
83
87
  [python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
84
88
  양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
@@ -132,7 +136,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
132
136
  "command": "uvx",
133
137
  "args": [
134
138
  "--from",
135
- "python-hwpx-automation[mcp]==6.1.3",
139
+ "python-hwpx-automation[mcp]==7.0.3",
136
140
  "hwpx-automation-mcp"
137
141
  ],
138
142
  "env": {
@@ -14,11 +14,15 @@
14
14
 
15
15
  <!-- release-state: release-approved -->
16
16
  > [!NOTE]
17
- > 공개 트레인: `python-hwpx 5.7.0 → python-hwpx-automation 6.7.1
18
- > hwpx-plugin 1.7.0`. 트리는 release-approved 후보이며, 원격
19
- > 진실(core·automation PyPI와 plugin GitHub
20
- > Release·marketplace·실제 marketplace 설치) 관찰 전까지 공개 좌표를
21
- > 승격하지 않습니다[릴리스 runbook](docs/release-runbook.md)
17
+ > 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2
18
+ > hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
19
+ > 승인 완료(`release-approved`), 원격 관찰 대기 중.
20
+ > (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
21
+ > Windows 저장 수리 패치 트레인 저장 수리 #98·업로드 경로 안내
22
+ > #75, core와 계약 `34a91560759dc47a` 불변).
23
+ > 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
24
+ > Release·marketplace·실제 marketplace 설치) 관찰 후에만
25
+ > 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
22
26
 
23
27
  [python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
24
28
  양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
@@ -72,7 +76,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
72
76
  "command": "uvx",
73
77
  "args": [
74
78
  "--from",
75
- "python-hwpx-automation[mcp]==6.1.3",
79
+ "python-hwpx-automation[mcp]==7.0.3",
76
80
  "hwpx-automation-mcp"
77
81
  ],
78
82
  "env": {
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-hwpx-automation"
7
- version = "7.0.1"
7
+ version = "7.0.3"
8
8
  description = "Task-oriented HWPX document automation for Python, with an optional MCP adapter."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Kohkyuhyun" }]
@@ -31,7 +31,7 @@ dependencies = [
31
31
  # breaking an already-published automation line. WP-F (engine surface 6.0):
32
32
  # this line adapted to the new namespace surface (design §9 WP-F) — the dev0
33
33
  # pre-release qualifier tracks core's own not-yet-tagged 6.0 identity.
34
- "python-hwpx>=6.0.2,<7", # HWPX object model, OXML/OPC, format-native primitives
34
+ "python-hwpx>=6.3.0,<7", # HWPX object model, OXML/OPC, format-native primitives
35
35
 
36
36
  "pydantic>=2.11,<3",
37
37
  "cryptography>=42.0",
@@ -36,6 +36,7 @@ class CommonErrorModel(BaseModel):
36
36
 
37
37
 
38
38
  ERROR_CODE_TO_MCP_CODE: dict[str, int] = {
39
+ "CLIENT_UPLOAD_PATH_UNAVAILABLE": -32602,
39
40
  "DOCUMENT_NOT_FOUND": -32044,
40
41
  "PERMISSION_DENIED": -32043,
41
42
  "TABLE_INDEX_OUT_OF_RANGE": -32042,
@@ -57,6 +58,7 @@ DEFAULT_ERROR_SUGGESTIONS: dict[str, str] = {
57
58
  "AMBIGUOUS_TARGET": "검색 조건을 더 구체화하거나 limit=1로 미리보기를 다시 생성하세요.",
58
59
  "BYTE_PATCH_OPEN_SAFETY_FAILED": "반환된 openSafety 진단을 확인하고 일반 저장/복구 경로로 다시 생성하세요.",
59
60
  "CAPABILITY_SKEW": "core/automation/plugin ToolSpec 계약 불일치로 쓰기가 차단되었습니다. mcp_server_health의 최소 버전과 contract hash에 맞춰 다시 설치한 뒤 호스트를 재시작하세요.",
61
+ "CLIENT_UPLOAD_PATH_UNAVAILABLE": "대화에 업로드된 파일의 내부 경로는 로컬 MCP 서버에서 읽을 수 없습니다. 파일을 PC에 저장한 뒤 실제 로컬 경로를 전달하세요.",
60
62
  "FIELD_OVERFLOW": "값이 칸에 넘칩니다. fitPolicy(mode=wrap_then_shrink/shrink/truncate_with_report) 또는 overflow=warn으로 다시 채우거나 값을 줄이세요. details.visualComplete.suggestedRetry 참고.",
61
63
  "STALE_LINESEG_DETECTED": "오래된 lineseg 레이아웃 캐시가 남았습니다. 해당 문단을 다시 편집해 캐시를 무효화한 뒤 저장하세요.",
62
64
  "VISUAL_COMPLETE_FAILED": "한컴 렌더에서 겹침/넘침 등 시각 결함이 감지되었습니다. details.visualComplete를 확인하고 수정 후 다시 저장하세요.",
@@ -120,6 +122,7 @@ def category_for_error(error_code: str) -> ErrorCategory:
120
122
  if error_code.startswith("NETWORK_"):
121
123
  return "network"
122
124
  if error_code in {
125
+ "CLIENT_UPLOAD_PATH_UNAVAILABLE",
123
126
  "INVALID_ARGUMENT",
124
127
  "WORKSPACE_PATH_INVALID",
125
128
  "DOCUMENT_LOCATOR_REQUIRED",
@@ -5,20 +5,20 @@
5
5
  "releaseState": {
6
6
  "status": "release-approved",
7
7
  "candidate": {
8
- "pythonHwpx": "6.0.2",
8
+ "pythonHwpx": "6.3.0",
9
9
  "canonicalDistribution": "python-hwpx-automation",
10
- "canonicalAutomation": "7.0.1",
10
+ "canonicalAutomation": "7.0.3",
11
11
  "compatibilityDistribution": "hwpx-mcp-server",
12
- "compatibility": "7.0.1",
13
- "plugin": "2.0.0",
14
- "contractHash": "34a91560759dc47a"
12
+ "compatibility": "7.0.3",
13
+ "plugin": "2.0.2",
14
+ "contractHash": "8c278ebd5becba08"
15
15
  },
16
16
  "currentPublic": {
17
- "pythonHwpx": "5.7.0",
17
+ "pythonHwpx": "6.2.1",
18
18
  "primaryDistribution": "python-hwpx-automation",
19
- "primaryApplication": "6.7.1",
20
- "plugin": "1.7.0",
21
- "contractHash": "98510af22d13899c"
19
+ "primaryApplication": "7.0.2",
20
+ "plugin": "2.0.1",
21
+ "contractHash": "34a91560759dc47a"
22
22
  },
23
23
  "promotionGate": "Three states are mandatory: unreleased-candidate while auditing; release-approved only after separate owner approval and while currentPublic still names the previously observed coherent stack; released only in a follow-up commit after remote truth is observed for core, canonical automation, the compatibility distribution, the plugin GitHub release, the marketplace entry, and a real marketplace install. The automation tag workflow publishes only release-approved, leaves currentPublic unchanged, and hands an attached receipt to plugin publication."
24
24
  },
@@ -1024,7 +1024,11 @@ def _identity_attribute_names(local: str, node: Any) -> tuple[str, ...]:
1024
1024
  if local in {"p", "tbl", "pic", "memo", "fieldBegin", *_SHAPE_KINDS}:
1025
1025
  return tuple(name for name in ("id", "instid", "instId") if node.get(name) is not None)
1026
1026
  if local in {"footNote", "endNote"}:
1027
- return tuple(name for name in ("instId", "id") if node.get(name) is not None)
1027
+ # 정본 속성명은 실한컴이 쓰는 소문자 "instid"; "instId" 과거 코어
1028
+ # 저작이 방출한 카멜케이스 산출물 호환(재발급 대상 유지). #101
1029
+ return tuple(
1030
+ name for name in ("instid", "instId", "id") if node.get(name) is not None
1031
+ )
1028
1032
  return ()
1029
1033
 
1030
1034
 
@@ -1036,7 +1040,11 @@ def _refresh_one_identity(
1036
1040
  field_ids: dict[str, str],
1037
1041
  ) -> None:
1038
1042
  names = _identity_attribute_names(local, node)
1039
- paired_identity = allocate() if len(names) > 1 and local in {"pic", *_SHAPE_KINDS} else None
1043
+ # 요소에 실린 여러 식별 속성(id+instid, 또는 instid/instId 별칭 쌍)은
1044
+ # 같은 정체성이다 — 하나의 새 값을 페어로 재발급한다. 노트(footNote/endNote)
1045
+ # 는 정본 instid와 과거 산출물 instId가 공존할 수 있어 #101에서 편입.
1046
+ paired_kinds = {"pic", "footNote", "endNote", *_SHAPE_KINDS}
1047
+ paired_identity = allocate() if len(names) > 1 and local in paired_kinds else None
1040
1048
  for name in names:
1041
1049
  old = str(node.get(name))
1042
1050
  new = paired_identity or allocate()
@@ -211,11 +211,8 @@ class TableService:
211
211
  new_id = header._allocate_border_fill_id(border_fills_element)
212
212
  _build_border_fill_element(border_fills_element, new_id, spec)
213
213
 
214
- if hasattr(header, "_update_border_fills_item_count"):
215
- header._update_border_fills_item_count(border_fills_element)
216
- else:
217
- count = len(border_fills_element.findall(f"{HH_NS}borderFill"))
218
- border_fills_element.set("itemCnt", str(count))
214
+ count = len(border_fills_element.findall(f"{HH_NS}borderFill"))
215
+ border_fills_element.set("itemCnt", str(count))
219
216
  header.mark_dirty()
220
217
  return new_id
221
218
 
@@ -89,9 +89,14 @@ def _classified_error_payload(exc: BaseException | None) -> dict[str, Any]:
89
89
  message="문서 에이전트 계약을 안전하게 해석할 수 없습니다.",
90
90
  )
91
91
  if isinstance(item, WorkspacePathError):
92
+ message = (
93
+ "대화에 업로드된 파일의 내부 경로는 로컬 MCP 서버에서 접근할 수 없습니다."
94
+ if item.code == "CLIENT_UPLOAD_PATH_UNAVAILABLE"
95
+ else "요청한 경로가 허용된 HWPX 작업공간 경계를 벗어났습니다."
96
+ )
92
97
  return build_error_payload(
93
98
  code=item.code,
94
- message="요청한 경로가 허용된 HWPX 작업공간 경계를 벗어났습니다.",
99
+ message=message,
95
100
  details=item.safe_details(),
96
101
  )
97
102
  if isinstance(item, WorkspaceConfigurationError):
@@ -20,7 +20,7 @@ from dataclasses import dataclass
20
20
  from enum import Enum
21
21
  from typing import Any, Callable, Mapping
22
22
 
23
- MIN_PYTHON_HWPX = "6.0.2"
23
+ MIN_PYTHON_HWPX = "6.3.0"
24
24
  # The 5.0 train: core drops the workflow surfaces and the `hwpx` console name,
25
25
  # this package picks the name up, and the plugin pins both. The three move
26
26
  # together — a mixed set is what "no valid install has two declarers" rules out.
@@ -33,7 +33,7 @@ MIN_SKILL_VERSION = "2.0.0"
33
33
  # recomputes and verifies the bound callable/schema contract through
34
34
  # ``contract_hash()``; this constant prevents those services from importing the
35
35
  # runtime composer merely to stamp the approved release receipt.
36
- RELEASED_CONTRACT_HASH = "34a91560759dc47a"
36
+ RELEASED_CONTRACT_HASH = "8c278ebd5becba08"
37
37
 
38
38
 
39
39
  def describe_callables(entries: Any) -> Any:
@@ -107,6 +107,9 @@ def _snapshot_target(
107
107
  os.O_RDONLY
108
108
  | getattr(os, "O_NOFOLLOW", 0)
109
109
  | getattr(os, "O_NONBLOCK", 0)
110
+ # Windows os.open defaults to CRT text mode, which rewrites CRLF and
111
+ # stops reading at 0x1A; digests must hash the exact on-disk bytes.
112
+ | getattr(os, "O_BINARY", 0)
110
113
  )
111
114
  try:
112
115
  descriptor = os.open(path, flags)
@@ -226,6 +229,7 @@ def _relative_file_snapshot(
226
229
  os.O_RDONLY
227
230
  | getattr(os, "O_NOFOLLOW", 0)
228
231
  | getattr(os, "O_NONBLOCK", 0)
232
+ | getattr(os, "O_BINARY", 0)
229
233
  )
230
234
  descriptor = os.open(name, flags, dir_fd=parent_fd)
231
235
  try:
@@ -459,6 +463,15 @@ class WorkspaceResolver:
459
463
  code="WORKSPACE_PATH_INVALID",
460
464
  reason="empty_or_invalid_path",
461
465
  )
466
+ portable_path = text.replace("\\", "/").casefold().rstrip("/")
467
+ if portable_path == "/mnt/user-data" or portable_path.startswith(
468
+ "/mnt/user-data/"
469
+ ):
470
+ raise WorkspacePathError(
471
+ "client-uploaded files are not accessible to the local MCP server",
472
+ code="CLIENT_UPLOAD_PATH_UNAVAILABLE",
473
+ reason="client_upload_path",
474
+ )
462
475
  candidate = Path(text).expanduser()
463
476
  return candidate if candidate.is_absolute() else self.primary_root / candidate
464
477
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-hwpx-automation
3
- Version: 7.0.1
3
+ Version: 7.0.3
4
4
  Summary: Task-oriented HWPX document automation for Python, with an optional MCP adapter.
5
5
  Author: Kohkyuhyun
6
6
  License-Expression: Apache-2.0
@@ -20,7 +20,7 @@ Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  License-File: NOTICE
23
- Requires-Dist: python-hwpx<7,>=6.0.2
23
+ Requires-Dist: python-hwpx<7,>=6.3.0
24
24
  Requires-Dist: pydantic<3,>=2.11
25
25
  Requires-Dist: cryptography>=42.0
26
26
  Requires-Dist: anyio>=4.0
@@ -74,11 +74,15 @@ Dynamic: license-file
74
74
 
75
75
  <!-- release-state: release-approved -->
76
76
  > [!NOTE]
77
- > 공개 트레인: `python-hwpx 5.7.0 → python-hwpx-automation 6.7.1
78
- > hwpx-plugin 1.7.0`. 트리는 release-approved 후보이며, 원격
79
- > 진실(core·automation PyPI와 plugin GitHub
80
- > Release·marketplace·실제 marketplace 설치) 관찰 전까지 공개 좌표를
81
- > 승격하지 않습니다[릴리스 runbook](docs/release-runbook.md)
77
+ > 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2
78
+ > hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
79
+ > 승인 완료(`release-approved`), 원격 관찰 대기 중.
80
+ > (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
81
+ > Windows 저장 수리 패치 트레인 저장 수리 #98·업로드 경로 안내
82
+ > #75, core와 계약 `34a91560759dc47a` 불변).
83
+ > 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
84
+ > Release·marketplace·실제 marketplace 설치) 관찰 후에만
85
+ > 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
82
86
 
83
87
  [python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
84
88
  양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
@@ -132,7 +136,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
132
136
  "command": "uvx",
133
137
  "args": [
134
138
  "--from",
135
- "python-hwpx-automation[mcp]==6.1.3",
139
+ "python-hwpx-automation[mcp]==7.0.3",
136
140
  "hwpx-automation-mcp"
137
141
  ],
138
142
  "env": {
@@ -1,4 +1,4 @@
1
- python-hwpx<7,>=6.0.2
1
+ python-hwpx<7,>=6.3.0
2
2
  pydantic<3,>=2.11
3
3
  cryptography>=42.0
4
4
  anyio>=4.0