python-hwpx-automation 6.5.1__tar.gz → 6.6.4__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-6.5.1/src/python_hwpx_automation.egg-info → python_hwpx_automation-6.6.4}/PKG-INFO +13 -12
  2. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/README.md +11 -10
  3. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/pyproject.toml +2 -2
  4. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/capabilities.py +56 -1
  5. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/fastmcp_adapter.py +26 -0
  6. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/form_fill.py +26 -0
  7. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/quality_render.py +11 -0
  8. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/hwpx_ops.py +8 -0
  9. python_hwpx_automation-6.6.4/src/hwpx_automation/identity.json +263 -0
  10. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/form_fields.py +26 -0
  11. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/public-modules.json +5 -4
  12. python_hwpx_automation-6.6.4/src/hwpx_automation/resources.py +139 -0
  13. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/runtime.py +3 -0
  14. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/server.py +1 -0
  15. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/tool_bindings.py +1 -0
  16. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/tool_contract.py +15 -12
  17. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4/src/python_hwpx_automation.egg-info}/PKG-INFO +13 -12
  18. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/python_hwpx_automation.egg-info/SOURCES.txt +1 -0
  19. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/python_hwpx_automation.egg-info/requires.txt +1 -1
  20. python_hwpx_automation-6.5.1/src/hwpx_automation/identity.json +0 -263
  21. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/LICENSE +0 -0
  22. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/MANIFEST.in +0 -0
  23. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/NOTICE +0 -0
  24. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/setup.cfg +0 -0
  25. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/__init__.py +0 -0
  26. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/__init__.pyi +0 -0
  27. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/__main__.py +0 -0
  28. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/agent_document.py +0 -0
  29. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/api.py +0 -0
  30. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/blind_eval.py +0 -0
  31. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/compat.py +0 -0
  32. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/configuration.py +0 -0
  33. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/__init__.py +0 -0
  34. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/content.py +0 -0
  35. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/context.py +0 -0
  36. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/diff.py +0 -0
  37. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/document.py +0 -0
  38. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/formatting.py +0 -0
  39. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/handles.py +0 -0
  40. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/locations.py +0 -0
  41. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/locator.py +0 -0
  42. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/plan.py +0 -0
  43. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/resources.py +0 -0
  44. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/search.py +0 -0
  45. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/transactions.py +0 -0
  46. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/core/txn.py +0 -0
  47. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/document_state.py +0 -0
  48. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/errors.py +0 -0
  49. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/execution_lock.py +0 -0
  50. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/form_fill.py +0 -0
  51. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/form_output_models.py +0 -0
  52. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/__init__.py +0 -0
  53. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/_shared.py +0 -0
  54. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/agent_document.py +0 -0
  55. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/authoring.py +0 -0
  56. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/content_edit.py +0 -0
  57. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/layout_style.py +0 -0
  58. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/read_export.py +0 -0
  59. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/specialized.py +0 -0
  60. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/tracked_changes.py +0 -0
  61. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/handlers/workflow.py +0 -0
  62. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/hwp_converter.py +0 -0
  63. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/hwp_support.py +0 -0
  64. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/identity.py +0 -0
  65. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ingest_adapters.py +0 -0
  66. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/markdown_plan.py +0 -0
  67. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/mcp_cli.py +0 -0
  68. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/metadata/tools_meta.py +0 -0
  69. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/mixed_form.py +0 -0
  70. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/mutation_models.py +0 -0
  71. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/network_policy.py +0 -0
  72. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/__init__.py +0 -0
  73. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/__init__.py +0 -0
  74. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/_batch_verification.py +0 -0
  75. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/__init__.py +0 -0
  76. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/bundle.py +0 -0
  77. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/catalog.py +0 -0
  78. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/dump.py +0 -0
  79. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/mapping.py +0 -0
  80. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/model.py +0 -0
  81. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/native.py +0 -0
  82. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/blueprint/replay.py +0 -0
  83. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/catalog.py +0 -0
  84. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/cli.py +0 -0
  85. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/commands.py +0 -0
  86. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/document.py +0 -0
  87. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/form_plan.py +0 -0
  88. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/model.py +0 -0
  89. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/path.py +0 -0
  90. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/query.py +0 -0
  91. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/agent/story.py +0 -0
  92. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/__init__.py +0 -0
  93. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/advanced_generators.py +0 -0
  94. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/builder/__init__.py +0 -0
  95. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/builder/core.py +0 -0
  96. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/builder/report.py +0 -0
  97. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/__init__.py +0 -0
  98. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/_support.py +0 -0
  99. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/composer.py +0 -0
  100. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/harvest.py +0 -0
  101. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/plan.py +0 -0
  102. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profile.py +0 -0
  103. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/body.xml +0 -0
  104. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/heading.xml +0 -0
  105. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/info_table.xml +0 -0
  106. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/title.xml +0 -0
  107. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/profile.json +0 -0
  108. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/template.hwpx +0 -0
  109. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/body.xml +0 -0
  110. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/heading.xml +0 -0
  111. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/title.xml +0 -0
  112. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/profile.json +0 -0
  113. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/template.hwpx +0 -0
  114. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/body.xml +0 -0
  115. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/heading.xml +0 -0
  116. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/info_table.xml +0 -0
  117. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/title.xml +0 -0
  118. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/profile.json +0 -0
  119. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/template.hwpx +0 -0
  120. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/body.xml +0 -0
  121. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/heading.xml +0 -0
  122. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/info_table.xml +0 -0
  123. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/title.xml +0 -0
  124. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/profile.json +0 -0
  125. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/profiles/report/template.hwpx +0 -0
  126. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/design/validator.py +0 -0
  127. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/presets/__init__.py +0 -0
  128. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/presets/proposal.py +0 -0
  129. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/report_parser.py +0 -0
  130. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/style_profile.py +0 -0
  131. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/authoring/template_analyzer.py +0 -0
  132. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/charting/__init__.py +0 -0
  133. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/compliance/__init__.py +0 -0
  134. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/compliance/official_lint.py +0 -0
  135. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/compliance/pii.py +0 -0
  136. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/document_ops/__init__.py +0 -0
  137. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/document_ops/comparison.py +0 -0
  138. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/document_ops/mail_merge.py +0 -0
  139. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/document_ops/redline.py +0 -0
  140. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/evalplan/__init__.py +0 -0
  141. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/evalplan/runtime.py +0 -0
  142. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/__init__.py +0 -0
  143. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/compose.py +0 -0
  144. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/ir.py +0 -0
  145. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/measure.py +0 -0
  146. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/parser.py +0 -0
  147. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/exam/profile.py +0 -0
  148. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/__init__.py +0 -0
  149. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/classification.py +0 -0
  150. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fill_residue.py +0 -0
  151. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/__init__.py +0 -0
  152. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/apply.py +0 -0
  153. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/engine.py +0 -0
  154. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/measure.py +0 -0
  155. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/policy.py +0 -0
  156. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/report.py +0 -0
  157. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/seal.py +0 -0
  158. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/fit/wordbox.py +0 -0
  159. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/guidance.py +0 -0
  160. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/quality.py +0 -0
  161. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/split_run.py +0 -0
  162. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/form_fill/template_formfit.py +0 -0
  163. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/house_style/__init__.py +0 -0
  164. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/house_style/composition.py +0 -0
  165. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/house_style/data/bank.json +0 -0
  166. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/house_style/data/genres.json +0 -0
  167. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/house_style/org_chart.py +0 -0
  168. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/quality/__init__.py +0 -0
  169. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/quality/page_guard.py +0 -0
  170. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/__init__.py +0 -0
  171. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/_hancom_open_rate.ps1 +0 -0
  172. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/_refresh_hwpx_mac.applescript +0 -0
  173. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/_render_hwpx.ps1 +0 -0
  174. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/_render_hwpx_mac.applescript +0 -0
  175. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/block_splits.py +0 -0
  176. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/detectors.py +0 -0
  177. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/diff.py +0 -0
  178. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/fixture_corpus.py +0 -0
  179. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/oracle.py +0 -0
  180. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/page_qa.py +0 -0
  181. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/qa_contracts.py +0 -0
  182. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/qa_metrics.py +0 -0
  183. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/rendering/worker.py +0 -0
  184. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/utilities/__init__.py +0 -0
  185. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/office/utilities/table_compute.py +0 -0
  186. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/__init__.py +0 -0
  187. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/_border_fill.py +0 -0
  188. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/composition.py +0 -0
  189. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/content_layout.py +0 -0
  190. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/context.py +0 -0
  191. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/media.py +0 -0
  192. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/memo_style.py +0 -0
  193. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/package_validation.py +0 -0
  194. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/planning.py +0 -0
  195. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/preview_export.py +0 -0
  196. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/read_query.py +0 -0
  197. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/save_policy.py +0 -0
  198. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/tables.py +0 -0
  199. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/ops_services/transactions.py +0 -0
  200. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/preview_output_models.py +0 -0
  201. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/py.typed +0 -0
  202. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/quality.py +0 -0
  203. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/quality_generation.py +0 -0
  204. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/runtime_services.py +0 -0
  205. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/storage.py +0 -0
  206. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/upstream.py +0 -0
  207. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/utils/__init__.py +0 -0
  208. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/utils/helpers.py +0 -0
  209. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/visual_qa.py +0 -0
  210. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/__init__.py +0 -0
  211. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/adapters.py +0 -0
  212. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/dispatcher.py +0 -0
  213. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/models.py +0 -0
  214. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/policy.py +0 -0
  215. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/render_contracts.py +0 -0
  216. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/render_metrics.py +0 -0
  217. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/render_queue.py +0 -0
  218. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/render_security.py +0 -0
  219. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/render_transport.py +0 -0
  220. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/rendering.py +0 -0
  221. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/service.py +0 -0
  222. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/state_machine.py +0 -0
  223. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workflow/store.py +0 -0
  224. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/hwpx_automation/workspace.py +0 -0
  225. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/python_hwpx_automation.egg-info/dependency_links.txt +0 -0
  226. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/src/python_hwpx_automation.egg-info/entry_points.txt +0 -0
  227. {python_hwpx_automation-6.5.1 → python_hwpx_automation-6.6.4}/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: 6.5.1
3
+ Version: 6.6.4
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<6,>=5.5.0
23
+ Requires-Dist: python-hwpx<6,>=5.6.0
24
24
  Requires-Dist: pydantic<3,>=2.11
25
25
  Requires-Dist: cryptography>=42.0
26
26
  Requires-Dist: anyio>=4.0
@@ -74,16 +74,17 @@ Dynamic: license-file
74
74
 
75
75
  <!-- release-state: release-approved -->
76
76
  > [!NOTE]
77
- > 이 저장소의 main은 아직 공개되지 않은 6.5.1 후보 — release-approved 상태(운영계획 장르 저작 —
78
- > 표-기반 박스 조직도 `add_boxed_org_chart`·섹션칩 `compose_section_chip`·
79
- > 장르 문법 `get_genre_grammar`, 계약 `f61d2c60c0aa0413`, 133 도구)입니다.
80
- > 현재 공개 트레인은
81
- > `python-hwpx 5.5.0 → python-hwpx-automation 6.4.2 → hwpx-plugin 1.4.1`
82
- > (계약 `dbdbdfaac26148b7`, 2026-08-02 released)입니다. 공개 트레인은
83
- > core·automation PyPI와 plugin GitHub
84
- > Release·marketplace·실제 marketplace 설치까지 확인한 승격했으며, 기존
85
- > 5.x 설치는 별도 발행된 `hwpx-mcp-server 5.1.1`이 보호합니다. 절차와 상태
86
- > 머신: [릴리스 runbook](docs/release-runbook.md)
77
+ > 이 소스 트리는 **아직 공개되지 않은 6.6.4 후보**입니다(에이전트 계약 표면:
78
+ > `run_edit_plan` 선언적 편집 계획 실행기 + MCP resources +
79
+ > `describe_capabilities` 확장, 134 도구, core 바닥 5.6.0). 현재 공개
80
+ > 트레인은 여전히 `python-hwpx 5.5.0 → python-hwpx-automation 6.5.1 → hwpx-plugin 1.5.0`
81
+ > (계약 `f61d2c60c0aa0413`)이며, 후보는 core·automation
82
+ > PyPI와 plugin GitHub
83
+ > Release·marketplace·실제 marketplace 설치까지 확인한 뒤에만 승격합니다.
84
+ > 기존 5.x 설치는 별도 발행된 `hwpx-mcp-server 5.1.1`이 보호합니다. 절차와
85
+ > 상태 머신: [릴리스 runbook](docs/release-runbook.md)
86
+ > 현재 상태는 release-approved입니다 — 원격 진실(3스택·marketplace 설치) 관찰 전까지
87
+ > currentPublic은 그대로입니다.
87
88
 
88
89
  [python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
89
90
  양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
@@ -14,16 +14,17 @@
14
14
 
15
15
  <!-- release-state: release-approved -->
16
16
  > [!NOTE]
17
- > 이 저장소의 main은 아직 공개되지 않은 6.5.1 후보 — release-approved 상태(운영계획 장르 저작 —
18
- > 표-기반 박스 조직도 `add_boxed_org_chart`·섹션칩 `compose_section_chip`·
19
- > 장르 문법 `get_genre_grammar`, 계약 `f61d2c60c0aa0413`, 133 도구)입니다.
20
- > 현재 공개 트레인은
21
- > `python-hwpx 5.5.0 → python-hwpx-automation 6.4.2 → hwpx-plugin 1.4.1`
22
- > (계약 `dbdbdfaac26148b7`, 2026-08-02 released)입니다. 공개 트레인은
23
- > core·automation PyPI와 plugin GitHub
24
- > Release·marketplace·실제 marketplace 설치까지 확인한 승격했으며, 기존
25
- > 5.x 설치는 별도 발행된 `hwpx-mcp-server 5.1.1`이 보호합니다. 절차와 상태
26
- > 머신: [릴리스 runbook](docs/release-runbook.md)
17
+ > 이 소스 트리는 **아직 공개되지 않은 6.6.4 후보**입니다(에이전트 계약 표면:
18
+ > `run_edit_plan` 선언적 편집 계획 실행기 + MCP resources +
19
+ > `describe_capabilities` 확장, 134 도구, core 바닥 5.6.0). 현재 공개
20
+ > 트레인은 여전히 `python-hwpx 5.5.0 → python-hwpx-automation 6.5.1 → hwpx-plugin 1.5.0`
21
+ > (계약 `f61d2c60c0aa0413`)이며, 후보는 core·automation
22
+ > PyPI와 plugin GitHub
23
+ > Release·marketplace·실제 marketplace 설치까지 확인한 뒤에만 승격합니다.
24
+ > 기존 5.x 설치는 별도 발행된 `hwpx-mcp-server 5.1.1`이 보호합니다. 절차와
25
+ > 상태 머신: [릴리스 runbook](docs/release-runbook.md)
26
+ > 현재 상태는 release-approved입니다 — 원격 진실(3스택·marketplace 설치) 관찰 전까지
27
+ > currentPublic은 그대로입니다.
27
28
 
28
29
  [python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
29
30
  양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-hwpx-automation"
7
- version = "6.5.1"
7
+ version = "6.6.4"
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" }]
@@ -29,7 +29,7 @@ dependencies = [
29
29
  # the bounded major here is what makes "no valid install has two declarers"
30
30
  # true rather than hopeful, and prevents the next core major from silently
31
31
  # breaking an already-published automation line.
32
- "python-hwpx>=5.5.0,<6", # HWPX object model, OXML/OPC, format-native primitives
32
+ "python-hwpx>=5.6.0,<6", # HWPX object model, OXML/OPC, format-native primitives
33
33
 
34
34
  "pydantic>=2.11,<3",
35
35
  "cryptography>=42.0",
@@ -107,4 +107,59 @@ def tool_domain(name: str) -> str | None:
107
107
  return None
108
108
 
109
109
 
110
- __all__ = ["DOMAINS", "build_capability_report", "coverage_against", "tool_domain"]
110
+ def core_self_description() -> dict[str, Any]:
111
+ """설치된 core의 `hwpx.capabilities/v1` 자기서술 — 없으면 정직 degrade.
112
+
113
+ core 5.6+가 제공한다. 구버전 core 위에서는 없다는 사실 자체를 보고하지,
114
+ 자기서술을 지어내지 않는다.
115
+ """
116
+
117
+ try:
118
+ from hwpx.experimental import describe_capabilities as core_caps
119
+ except ImportError:
120
+ return {
121
+ "available": False,
122
+ "reason": (
123
+ "installed python-hwpx does not expose hwpx.capabilities "
124
+ "(needs >= 5.6.0)"
125
+ ),
126
+ }
127
+ report = dict(core_caps())
128
+ report["available"] = True
129
+ return report
130
+
131
+
132
+ def render_oracle_availability() -> dict[str, Any]:
133
+ """실한컴 렌더 오라클 가용성 — **무실행 프로브만**(세션·렌더 발사 없음).
134
+
135
+ resolve_oracle 캐스케이드(Windows COM → Mac GUI → Null; STRUCTURAL_ONLY는
136
+ Null 단락)와 imaging/pymupdf 프로브를 그대로 보고한다. available=False는
137
+ 결함이 아니라 이 환경의 사실이며, 그때 render 게이트는 renderChecked=false
138
+ 로 정직하게 degrade한다.
139
+ """
140
+
141
+ from .office.rendering import detectors, diff
142
+ from .office.rendering.oracle import resolve_oracle
143
+
144
+ oracle = resolve_oracle()
145
+ try:
146
+ available = bool(oracle.available())
147
+ except Exception:
148
+ available = False
149
+ return {
150
+ "oracle": type(oracle).__name__,
151
+ "available": available,
152
+ "imaging": bool(detectors.imaging_available()),
153
+ "pymupdf": bool(diff.pymupdf_available()),
154
+ "note": "probe-only — 어떤 렌더 세션도 시작하지 않는다",
155
+ }
156
+
157
+
158
+ __all__ = [
159
+ "DOMAINS",
160
+ "build_capability_report",
161
+ "core_self_description",
162
+ "coverage_against",
163
+ "render_oracle_availability",
164
+ "tool_domain",
165
+ ]
@@ -616,6 +616,32 @@ def register_canonical_tool(
616
616
  return _register(mcp, name=name, func=func, description=description, meta=meta)
617
617
 
618
618
 
619
+ def register_canonical_resource(
620
+ mcp: Any,
621
+ *,
622
+ uri: str,
623
+ name: str,
624
+ description: str,
625
+ mime_type: str,
626
+ func: Callable[[], str],
627
+ ) -> None:
628
+ """Register one canonical read-only resource through the public SDK hook.
629
+
630
+ 이 어댑터가 유일한 FastMCP 호환 seam이라는 계약(모듈 docstring)은 리소스
631
+ 표면에도 그대로 적용된다 — 다른 모듈은 이 함수를 부르지, SDK의
632
+ ``resource`` 데코레이터를 직접 만지지 않는다.
633
+ """
634
+
635
+ try:
636
+ mcp.resource(uri, name=name, description=description, mime_type=mime_type)(
637
+ func
638
+ )
639
+ except Exception as exc: # pragma: no cover - SDK 계약 위반은 등록 시점 하드 실패
640
+ raise FastMcpAdapterError(
641
+ f"failed to register canonical resource {uri!r}: {exc}"
642
+ ) from exc
643
+
644
+
619
645
  def snapshot_runtime_tools(mcp: Any) -> Mapping[str, FastMcpToolSnapshot]:
620
646
  """Return an insertion-ordered, read-only snapshot of the live registry."""
621
647
 
@@ -136,6 +136,32 @@ def apply_template_formfit(
136
136
  )
137
137
 
138
138
 
139
+ def run_edit_plan(
140
+ plan: dict,
141
+ dry_run: bool = False,
142
+ ) -> dict:
143
+ """선언적 편집 계획(hwpx.edit-plan/v1)을 all-or-nothing으로 실행합니다.
144
+
145
+ plan.steps는 기존 바이트-스플라이스 op 이름 그대로(fill_cells·
146
+ apply_table_ops·apply_body_ops·paragraph_patch·recolor_runs_by_color·
147
+ strip_runs_by_color·strip_trailing_table_captions)를 지시합니다. 실행은
148
+ 정적 선검증→전 체인 인메모리→최종 open-safety 검증→단 1회 원자 쓰기 —
149
+ 중간 step 실패 시 output·source는 바이트 불변이고 ok=false 리포트
150
+ (failedStepId·step error)가 돌아옵니다. dry_run=true는 동일 체인을 전부
151
+ 실행하되 쓰기만 생략합니다(미리보기=실행 정의상 동일). 반환은
152
+ hwpx.plan-report/v1(step별+원본→최종 mutation-report/v1 실측 사영 포함).
153
+ 스키마는 hwpx://schemas/edit-plan-v1 리소스로 구독 가능합니다."""
154
+
155
+ resolved = dict(plan) if plan else {}
156
+ for key in ("source", "output", "journalPath"):
157
+ value = resolved.get(key)
158
+ if isinstance(value, str) and value:
159
+ resolved[key] = resolve_path(value)
160
+ if not dry_run:
161
+ quality_contract.assert_write_capability()
162
+ return RUNTIME_SERVICES.ops.run_edit_plan(resolved, dry_run=dry_run)
163
+
164
+
139
165
  def apply_table_ops(
140
166
  filename: str,
141
167
  ops: list[TableOperation],
@@ -258,6 +258,17 @@ def describe_capabilities(domain: str | None = None) -> dict:
258
258
  advanced=advanced,
259
259
  registry_validation=validation,
260
260
  )
261
+ # additive(6.6): core 자기서술·오라클 가용성·리소스 카탈로그를 합성한다 —
262
+ # 자기서술 도구를 둘로 쪼개지 않는다(진실 이원화 방지).
263
+ from ..capabilities import core_self_description, render_oracle_availability
264
+ from ..resources import CANONICAL_RESOURCES
265
+
266
+ report["core"] = core_self_description()
267
+ report["renderOracle"] = render_oracle_availability()
268
+ report["resources"] = [
269
+ {"uri": spec.uri, "name": spec.name, "mimeType": spec.mime_type}
270
+ for spec in CANONICAL_RESOURCES
271
+ ]
261
272
  return report
262
273
 
263
274
 
@@ -939,6 +939,14 @@ class HwpxOps:
939
939
  publication_sink=publication_sink,
940
940
  )
941
941
 
942
+ def run_edit_plan(
943
+ self,
944
+ plan: Dict[str, Any],
945
+ *,
946
+ dry_run: bool = False,
947
+ ) -> Dict[str, Any]:
948
+ return self._services.form_fields.run_edit_plan(plan, dry_run=dry_run)
949
+
942
950
  def apply_table_ops(
943
951
  self,
944
952
  path: str,
@@ -0,0 +1,263 @@
1
+ {
2
+ "schemaVersion": "python-hwpx-automation.identity/v1",
3
+ "product": "python-hwpx-automation",
4
+ "releaseMajor": 6,
5
+ "releaseState": {
6
+ "status": "release-approved",
7
+ "candidate": {
8
+ "pythonHwpx": "5.6.0",
9
+ "canonicalDistribution": "python-hwpx-automation",
10
+ "canonicalAutomation": "6.6.4",
11
+ "compatibilityDistribution": "hwpx-mcp-server",
12
+ "compatibility": "6.6.4",
13
+ "plugin": "1.6.0",
14
+ "contractHash": "19898dba41495c47"
15
+ },
16
+ "currentPublic": {
17
+ "pythonHwpx": "5.5.0",
18
+ "primaryDistribution": "python-hwpx-automation",
19
+ "primaryApplication": "6.5.1",
20
+ "plugin": "1.5.0",
21
+ "contractHash": "f61d2c60c0aa0413"
22
+ },
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
+ },
25
+ "identifiers": [
26
+ {
27
+ "surface": "repository",
28
+ "value": "airmang/python-hwpx-automation",
29
+ "classification": "canonical"
30
+ },
31
+ {
32
+ "surface": "distribution",
33
+ "value": "python-hwpx-automation",
34
+ "classification": "canonical"
35
+ },
36
+ {
37
+ "surface": "import-namespace",
38
+ "value": "hwpx_automation",
39
+ "classification": "canonical"
40
+ },
41
+ {
42
+ "surface": "task-console",
43
+ "value": "hwpx",
44
+ "classification": "canonical"
45
+ },
46
+ {
47
+ "surface": "mcp-console",
48
+ "value": "hwpx-automation-mcp",
49
+ "classification": "canonical"
50
+ },
51
+ {
52
+ "surface": "fastmcp-server-info-name",
53
+ "value": "python-hwpx-automation",
54
+ "classification": "canonical"
55
+ },
56
+ {
57
+ "surface": "host-config-key",
58
+ "value": "hwpx",
59
+ "classification": "host-local-alias"
60
+ },
61
+ {
62
+ "surface": "environment-prefix",
63
+ "value": "HWPX_AUTOMATION_",
64
+ "classification": "canonical"
65
+ },
66
+ {
67
+ "surface": "distribution",
68
+ "value": "hwpx-mcp-server",
69
+ "classification": "compatibility"
70
+ },
71
+ {
72
+ "surface": "import-namespace",
73
+ "value": "hwpx_mcp_server",
74
+ "classification": "compatibility"
75
+ },
76
+ {
77
+ "surface": "mcp-console",
78
+ "value": "hwpx-mcp-server",
79
+ "classification": "compatibility"
80
+ },
81
+ {
82
+ "surface": "environment-prefix",
83
+ "value": "HWPX_MCP_",
84
+ "classification": "compatibility"
85
+ },
86
+ {
87
+ "surface": "capability-version-field",
88
+ "value": "versions.automation",
89
+ "classification": "canonical"
90
+ },
91
+ {
92
+ "surface": "capability-version-field",
93
+ "value": "versions.mcp",
94
+ "classification": "compatibility-preserved"
95
+ },
96
+ {
97
+ "surface": "capability-floor-field",
98
+ "value": "minAutomationVersion",
99
+ "classification": "canonical"
100
+ },
101
+ {
102
+ "surface": "capability-floor-field",
103
+ "value": "minMcpVersion",
104
+ "classification": "compatibility-preserved"
105
+ },
106
+ {
107
+ "surface": "contract-floor-constant",
108
+ "value": "MIN_AUTOMATION_VERSION",
109
+ "classification": "canonical"
110
+ },
111
+ {
112
+ "surface": "contract-floor-constant",
113
+ "value": "MIN_MCP_VERSION",
114
+ "classification": "compatibility-preserved"
115
+ },
116
+ {
117
+ "surface": "protocol-error-schema",
118
+ "value": "hwpx.mcp-error/v1",
119
+ "classification": "compatibility-preserved"
120
+ },
121
+ {
122
+ "surface": "frozen-receipt-schema",
123
+ "value": "hwpx-mcp.authoring-runtime-owner/v1",
124
+ "classification": "compatibility-preserved"
125
+ },
126
+ {
127
+ "surface": "frozen-receipt-schema",
128
+ "value": "hwpx-mcp.compliance-quality-utilities-owner/v1",
129
+ "classification": "compatibility-preserved"
130
+ },
131
+ {
132
+ "surface": "frozen-receipt-schema",
133
+ "value": "hwpx-mcp.document-operations-owner/v1",
134
+ "classification": "compatibility-preserved"
135
+ },
136
+ {
137
+ "surface": "frozen-receipt-schema",
138
+ "value": "hwpx-mcp.evalplan-runtime-owner/v1",
139
+ "classification": "compatibility-preserved"
140
+ },
141
+ {
142
+ "surface": "frozen-receipt-schema",
143
+ "value": "hwpx-mcp.exam-runtime-owner/v1",
144
+ "classification": "compatibility-preserved"
145
+ },
146
+ {
147
+ "surface": "frozen-receipt-schema",
148
+ "value": "hwpx-mcp.form-fill-runtime-owner/v1",
149
+ "classification": "compatibility-preserved"
150
+ },
151
+ {
152
+ "surface": "frozen-receipt-schema",
153
+ "value": "hwpx-mcp.form-fill-runtime-parity/v1",
154
+ "classification": "compatibility-preserved"
155
+ },
156
+ {
157
+ "surface": "frozen-receipt-schema",
158
+ "value": "hwpx-mcp.visual-runtime-owner/v1",
159
+ "classification": "compatibility-preserved"
160
+ },
161
+ {
162
+ "surface": "frozen-parity-receipt-field",
163
+ "value": "mcpRuntimeMembers",
164
+ "classification": "compatibility-preserved"
165
+ },
166
+ {
167
+ "surface": "workflow-state-environment",
168
+ "value": "HWPX_AUTOMATION_WORKFLOW_STORE",
169
+ "classification": "canonical"
170
+ },
171
+ {
172
+ "surface": "workflow-state-environment",
173
+ "value": "HWPX_WORKFLOW_STORE",
174
+ "classification": "compatibility-preserved"
175
+ },
176
+ {
177
+ "surface": "workflow-state-path",
178
+ "value": "${XDG_STATE_HOME:-~/.local/state}/hwpx-mcp-server/workflows.sqlite3",
179
+ "classification": "compatibility-preserved"
180
+ },
181
+ {
182
+ "surface": "render-queue-principal",
183
+ "value": "hwpx-mcp-server",
184
+ "classification": "compatibility-preserved"
185
+ },
186
+ {
187
+ "surface": "render-integration-environment",
188
+ "value": "HWPX_RENDER_QUEUE_ROOT",
189
+ "classification": "integration-preserved"
190
+ },
191
+ {
192
+ "surface": "render-integration-environment",
193
+ "value": "HWPX_RENDER_QUEUE_URL",
194
+ "classification": "integration-preserved"
195
+ },
196
+ {
197
+ "surface": "render-integration-environment",
198
+ "value": "HWPX_RENDER_QUEUE_SECRET",
199
+ "classification": "integration-preserved"
200
+ },
201
+ {
202
+ "surface": "render-integration-environment",
203
+ "value": "HWPX_RENDER_TRANSPORT_AUTH",
204
+ "classification": "integration-preserved"
205
+ },
206
+ {
207
+ "surface": "render-integration-environment",
208
+ "value": "HWPX_RENDER_CA_FILE",
209
+ "classification": "integration-preserved"
210
+ },
211
+ {
212
+ "surface": "render-integration-environment",
213
+ "value": "HWPX_RENDER_CLIENT_CERT_FILE",
214
+ "classification": "integration-preserved"
215
+ },
216
+ {
217
+ "surface": "render-integration-environment",
218
+ "value": "HWPX_RENDER_CLIENT_KEY_FILE",
219
+ "classification": "integration-preserved"
220
+ },
221
+ {
222
+ "surface": "workflow-security-environment",
223
+ "value": "HWPX_WORKFLOW_ENCRYPTION_KEY",
224
+ "classification": "capability-preserved"
225
+ },
226
+ {
227
+ "surface": "oracle-capability-environment",
228
+ "value": "HWPX_ORACLE_STRUCTURAL_ONLY",
229
+ "classification": "capability-preserved"
230
+ },
231
+ {
232
+ "surface": "oracle-capability-environment",
233
+ "value": "HWPX_ORACLE_BUDGET_SECONDS",
234
+ "classification": "capability-preserved"
235
+ },
236
+ {
237
+ "surface": "plugin-integration-environment",
238
+ "value": "HWPX_SKILL_VERSION",
239
+ "classification": "integration-preserved"
240
+ },
241
+ {
242
+ "surface": "plugin-integration-environment",
243
+ "value": "HWPX_PLUGIN_ROOT",
244
+ "classification": "integration-preserved"
245
+ }
246
+ ],
247
+ "compatibilityPolicy": {
248
+ "supportedThroughMajor": 6,
249
+ "removalNotBeforeMajor": 7,
250
+ "minimumPublicNoticeDays": 90,
251
+ "requiresObservedUsageWindow": true,
252
+ "requiresSeparateOwnerApproval": true,
253
+ "statePathMigrationInMajor6": false
254
+ },
255
+ "notes": {
256
+ "hostConfigKey": "The key is a host-local alias, not the MCP protocol identity.",
257
+ "environmentPrecedence": "HWPX_AUTOMATION_* wins; HWPX_MCP_* remains a 6.x fallback.",
258
+ "preservedWireIdentifiers": "The public hwpx.mcp-error/v1 schema, versions.mcp/minMcpVersion/MIN_MCP_VERSION aliases, frozen hwpx-mcp.* architecture receipt IDs, and mcpRuntimeMembers parity-receipt field remain exact in 6.x. They are compatibility identifiers, not statements that MCP owns the automation product.",
259
+ "preservedIntegrationEnvironment": "Product-neutral HWPX_RENDER_*, HWPX_WORKFLOW_ENCRYPTION_KEY, HWPX_ORACLE_*, HWPX_SKILL_VERSION, and HWPX_PLUGIN_ROOT names do not encode the former MCP product identity. They remain unchanged and are not aliases in the HWPX_AUTOMATION_ transition.",
260
+ "statePath": "HWPX_AUTOMATION_WORKFLOW_STORE wins over the prior HWPX_WORKFLOW_STORE override; the existing hwpx-mcp-server on-disk default remains in 6.x to avoid silent workflow loss.",
261
+ "renderQueuePrincipal": "The signed queue principal remains hwpx-mcp-server in 6.x so queued work and worker authorization do not split during the rename."
262
+ }
263
+ }
@@ -151,6 +151,32 @@ class FormFieldService:
151
151
  result, document, resolved, dry_run=dry_run
152
152
  )
153
153
 
154
+ def run_edit_plan(
155
+ self,
156
+ plan: dict[str, Any],
157
+ *,
158
+ dry_run: bool = False,
159
+ ) -> dict[str, Any]:
160
+ """선언적 편집 계획(hwpx.edit-plan/v1)을 core 실행기로 위임한다.
161
+
162
+ 원자성(전 step 성공+최종 검증 후 단 1회 쓰기, 실패 시 무접촉)은 core
163
+ `hwpx.plan`이 소유한다 — 여기서는 typed 오류 어휘로만 감싼다. 실행
164
+ 실패는 예외가 아니라 ok=False 리포트로 돌아온다(failedStepId 참조).
165
+ """
166
+
167
+ from hwpx.plan import PlanValidationError, apply_edit_plan
168
+
169
+ try:
170
+ report = apply_edit_plan(plan, dry_run=dry_run)
171
+ except PlanValidationError as exc:
172
+ raise self._context._new_error(
173
+ "EDIT_PLAN_INVALID",
174
+ exc.message,
175
+ details=exc.to_dict(),
176
+ hint=exc.suggestion,
177
+ ) from exc
178
+ return report.to_dict()
179
+
154
180
  def apply_table_ops(
155
181
  self,
156
182
  path: str,
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schemaVersion": "python-hwpx-automation.public-modules/v1",
3
3
  "scope": "All Python modules shipped by the canonical 6.x distribution. Base-public modules must import without the optional MCP SDK; the five adapter modules require the mcp extra by design.",
4
- "moduleCount": 179,
5
- "moduleSha256": "8704da9bdf1b43f3e82eb2c069ab3ca3756595b6c673107cd379c4d6754ae340",
6
- "basePublicModuleCount": 174,
7
- "basePublicModuleSha256": "bbadfb6a59bd069ff721b441f2482b0fe44e72be3b08bbc445b5f78928cd5f15",
4
+ "moduleCount": 180,
5
+ "moduleSha256": "4000174b39f93c6f8fd8e03420e58f1552ae2a37dd7b3d2b4716e654e66eac38",
6
+ "basePublicModuleCount": 175,
7
+ "basePublicModuleSha256": "6ebeb5b691f132b21a544122df3b825f4b708251fe8d3c22f2cc7c9947a84635",
8
8
  "basePublicModules": [
9
9
  "hwpx_automation",
10
10
  "hwpx_automation.__main__",
@@ -158,6 +158,7 @@
158
158
  "hwpx_automation.preview_output_models",
159
159
  "hwpx_automation.quality",
160
160
  "hwpx_automation.quality_generation",
161
+ "hwpx_automation.resources",
161
162
  "hwpx_automation.runtime_services",
162
163
  "hwpx_automation.storage",
163
164
  "hwpx_automation.tool_contract",