python-hwpx-automation 7.0.2__tar.gz → 7.0.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.
- {python_hwpx_automation-7.0.2/src/python_hwpx_automation.egg-info → python_hwpx_automation-7.0.4}/PKG-INFO +10 -9
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/README.md +8 -7
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/pyproject.toml +2 -2
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/quality_render.py +55 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/identity.json +9 -9
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/commands.py +10 -2
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/__init__.py +1 -1
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/wordbox.py +8 -8
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/quality.py +2 -2
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/diff.py +2 -2
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/worker.py +1 -1
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/tool_contract.py +2 -2
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4/src/python_hwpx_automation.egg-info}/PKG-INFO +10 -9
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/python_hwpx_automation.egg-info/requires.txt +1 -1
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/LICENSE +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/MANIFEST.in +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/NOTICE +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/setup.cfg +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__init__.pyi +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__main__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/agent_document.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/api.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/blind_eval.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/capabilities.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/compat.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/configuration.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/content.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/context.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/diff.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/document.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/formatting.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/handles.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/locations.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/locator.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/plan.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/resources.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/search.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/transactions.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/txn.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/document_state.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/errors.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/execution_lock.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/fastmcp_adapter.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/form_fill.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/form_output_models.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/_shared.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/agent_document.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/authoring.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/content_edit.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/form_fill.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/layout_style.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/read_export.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/specialized.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/tracked_changes.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/handlers/workflow.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwp_converter.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwp_support.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwpx_ops.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/identity.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ingest_adapters.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/markdown_plan.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mcp_cli.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/metadata/tools_meta.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mixed_form.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mutation_models.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/network_policy.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/_batch_verification.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/bundle.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/catalog.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/dump.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/mapping.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/model.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/native.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/blueprint/replay.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/catalog.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/cli.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/document.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/form_plan.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/model.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/path.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/query.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/agent/story.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/advanced_generators.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/builder/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/builder/core.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/builder/report.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/_support.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/composer.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/harvest.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/plan.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profile.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/profile.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/application_form/template.hwpx +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/profile.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/home_notice/template.hwpx +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/profile.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/official_notice/template.hwpx +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/profile.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/profiles/report/template.hwpx +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/design/validator.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/presets/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/presets/proposal.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/report_parser.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/style_profile.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/authoring/template_analyzer.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/charting/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/compliance/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/compliance/official_lint.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/compliance/pii.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/document_ops/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/document_ops/comparison.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/document_ops/mail_merge.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/document_ops/redline.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/evalplan/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/evalplan/runtime.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/compose.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/ir.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/measure.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/parser.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/exam/profile.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/classification.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fill_residue.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/apply.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/engine.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/measure.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/policy.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/report.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/fit/seal.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/guidance.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/split_run.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/form_fill/template_formfit.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/composition.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/data/bank.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/data/genres.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/gianmun.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/house_style/org_chart.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/quality/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/quality/page_guard.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/_hancom_open_rate.ps1 +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/_refresh_hwpx_mac.applescript +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/_render_hwpx.ps1 +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/_render_hwpx_mac.applescript +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/block_splits.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/detectors.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/fixture_corpus.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/oracle.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/page_qa.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/qa_contracts.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/rendering/qa_metrics.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/utilities/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/utilities/table_compute.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/_border_fill.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/composition.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/content_layout.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/context.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/form_fields.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/media.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/memo_style.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/package_validation.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/planning.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/preview_export.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/read_query.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/save_policy.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/tables.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ops_services/transactions.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/preview_output_models.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/public-modules.json +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/py.typed +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/quality.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/quality_generation.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/resources.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/runtime.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/runtime_services.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/server.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/storage.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/tool_bindings.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/upstream.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/utils/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/utils/helpers.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/visual_qa.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/__init__.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/adapters.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/dispatcher.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/models.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/policy.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/render_contracts.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/render_metrics.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/render_queue.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/render_security.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/render_transport.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/rendering.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/service.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/state_machine.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workflow/store.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/workspace.py +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/python_hwpx_automation.egg-info/SOURCES.txt +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/python_hwpx_automation.egg-info/dependency_links.txt +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/python_hwpx_automation.egg-info/entry_points.txt +0 -0
- {python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.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: 7.0.
|
|
3
|
+
Version: 7.0.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<7,>=6.0
|
|
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,12 +74,13 @@ Dynamic: license-file
|
|
|
74
74
|
|
|
75
75
|
<!-- release-state: release-approved -->
|
|
76
76
|
> [!NOTE]
|
|
77
|
-
>
|
|
78
|
-
> hwpx
|
|
79
|
-
>
|
|
80
|
-
>
|
|
81
|
-
>
|
|
82
|
-
>
|
|
77
|
+
> 아직 공개되지 않은 7.0.4 후보입니다.
|
|
78
|
+
> 후보 조합: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.4 → hwpx-plugin 2.1.0`.
|
|
79
|
+
> 공개 트레인: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.3 → hwpx-plugin 2.0.3`.
|
|
80
|
+
> 계약은 `8c278ebd5becba08`이며 도구 표면과 최소 호환 버전은 유지합니다.
|
|
81
|
+
> 공개 좌표는 core·automation PyPI와 plugin GitHub
|
|
82
|
+
> Release·marketplace·실제 marketplace 설치 관찰 후에만 승격합니다.
|
|
83
|
+
> [릴리스 runbook](docs/release-runbook.md)
|
|
83
84
|
|
|
84
85
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
85
86
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -133,7 +134,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
133
134
|
"command": "uvx",
|
|
134
135
|
"args": [
|
|
135
136
|
"--from",
|
|
136
|
-
"python-hwpx-automation[mcp]==
|
|
137
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
137
138
|
"hwpx-automation-mcp"
|
|
138
139
|
],
|
|
139
140
|
"env": {
|
|
@@ -14,12 +14,13 @@
|
|
|
14
14
|
|
|
15
15
|
<!-- release-state: release-approved -->
|
|
16
16
|
> [!NOTE]
|
|
17
|
-
>
|
|
18
|
-
> hwpx
|
|
19
|
-
>
|
|
20
|
-
>
|
|
21
|
-
>
|
|
22
|
-
>
|
|
17
|
+
> 아직 공개되지 않은 7.0.4 후보입니다.
|
|
18
|
+
> 후보 조합: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.4 → hwpx-plugin 2.1.0`.
|
|
19
|
+
> 공개 트레인: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.3 → hwpx-plugin 2.0.3`.
|
|
20
|
+
> 계약은 `8c278ebd5becba08`이며 도구 표면과 최소 호환 버전은 유지합니다.
|
|
21
|
+
> 공개 좌표는 core·automation PyPI와 plugin GitHub
|
|
22
|
+
> Release·marketplace·실제 marketplace 설치 관찰 후에만 승격합니다.
|
|
23
|
+
> [릴리스 runbook](docs/release-runbook.md)
|
|
23
24
|
|
|
24
25
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
25
26
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -73,7 +74,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
73
74
|
"command": "uvx",
|
|
74
75
|
"args": [
|
|
75
76
|
"--from",
|
|
76
|
-
"python-hwpx-automation[mcp]==
|
|
77
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
77
78
|
"hwpx-automation-mcp"
|
|
78
79
|
],
|
|
79
80
|
"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.
|
|
7
|
+
version = "7.0.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" }]
|
|
@@ -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
|
|
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",
|
|
@@ -272,6 +272,60 @@ def describe_capabilities(domain: str | None = None) -> dict:
|
|
|
272
272
|
return report
|
|
273
273
|
|
|
274
274
|
|
|
275
|
+
_STACK_UPDATE_STATE_SCHEMA = "hwpx.stack-update-state.v1"
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def _stack_update_block() -> dict[str, Any]:
|
|
279
|
+
"""Launcher-managed runtime update state (hwpx-plugins Feature 066).
|
|
280
|
+
|
|
281
|
+
The bundled launcher writes update-state.json and passes its path as
|
|
282
|
+
HWPX_STACK_UPDATE_STATE. Without it the runtime is not launcher-managed
|
|
283
|
+
(pip install, editable checkout, plain uvx) and the block says so; it
|
|
284
|
+
never guesses.
|
|
285
|
+
"""
|
|
286
|
+
path = os.environ.get("HWPX_STACK_UPDATE_STATE")
|
|
287
|
+
if not path:
|
|
288
|
+
return {"available": False, "reason": "NOT_MANAGED"}
|
|
289
|
+
try:
|
|
290
|
+
with open(path, encoding="utf-8") as handle:
|
|
291
|
+
state = json.load(handle)
|
|
292
|
+
except FileNotFoundError:
|
|
293
|
+
return {"available": False, "reason": "STATE_MISSING", "path": path}
|
|
294
|
+
except (OSError, UnicodeDecodeError, json.JSONDecodeError) as exc:
|
|
295
|
+
return {"available": False, "reason": "STATE_UNREADABLE", "path": path, "detail": str(exc)}
|
|
296
|
+
if not isinstance(state, dict) or state.get("schemaVersion") != _STACK_UPDATE_STATE_SCHEMA:
|
|
297
|
+
return {"available": False, "reason": "STATE_SCHEMA_UNKNOWN", "path": path}
|
|
298
|
+
runtime = state.get("runtime")
|
|
299
|
+
if not isinstance(runtime, dict):
|
|
300
|
+
return {"available": False, "reason": "STATE_INVALID", "path": path}
|
|
301
|
+
installed = runtime.get("installed")
|
|
302
|
+
if (
|
|
303
|
+
not isinstance(installed, dict)
|
|
304
|
+
or set(installed) != {"python-hwpx", "python-hwpx-automation"}
|
|
305
|
+
or not all(isinstance(value, str) and value for value in installed.values())
|
|
306
|
+
):
|
|
307
|
+
return {"available": False, "reason": "STATE_INVALID", "path": path}
|
|
308
|
+
running = {
|
|
309
|
+
"python-hwpx": _package_version("python-hwpx"),
|
|
310
|
+
"python-hwpx-automation": _package_version("python-hwpx-automation"),
|
|
311
|
+
}
|
|
312
|
+
runtime = {
|
|
313
|
+
**runtime,
|
|
314
|
+
"running": running,
|
|
315
|
+
"restartRequired": runtime["installed"] != running,
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
"available": True,
|
|
319
|
+
"path": path,
|
|
320
|
+
"checkedAt": state.get("checkedAt"),
|
|
321
|
+
"autoUpdate": state.get("autoUpdate"),
|
|
322
|
+
"channel": state.get("channel"),
|
|
323
|
+
"runtime": runtime,
|
|
324
|
+
"pluginBundle": state.get("pluginBundle"),
|
|
325
|
+
"lastError": state.get("lastError"),
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
|
|
275
329
|
def mcp_server_health() -> dict:
|
|
276
330
|
"""MCP 서버 transport와 timeout/keepalive 점검 정보를 반환합니다."""
|
|
277
331
|
transport = env_value("TRANSPORT", "stdio")
|
|
@@ -386,6 +440,7 @@ def mcp_server_health() -> dict:
|
|
|
386
440
|
),
|
|
387
441
|
},
|
|
388
442
|
"capability": _capability_block(skew_detected, surface_details),
|
|
443
|
+
"stackUpdate": _stack_update_block(),
|
|
389
444
|
"unitPolicy": {
|
|
390
445
|
"status": "audited",
|
|
391
446
|
"fontSize": "points",
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/identity.json
RENAMED
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
"releaseState": {
|
|
6
6
|
"status": "release-approved",
|
|
7
7
|
"candidate": {
|
|
8
|
-
"pythonHwpx": "6.
|
|
8
|
+
"pythonHwpx": "6.3.0",
|
|
9
9
|
"canonicalDistribution": "python-hwpx-automation",
|
|
10
|
-
"canonicalAutomation": "7.0.
|
|
10
|
+
"canonicalAutomation": "7.0.4",
|
|
11
11
|
"compatibilityDistribution": "hwpx-mcp-server",
|
|
12
|
-
"compatibility": "7.0.
|
|
13
|
-
"plugin": "2.
|
|
14
|
-
"contractHash": "
|
|
12
|
+
"compatibility": "7.0.4",
|
|
13
|
+
"plugin": "2.1.0",
|
|
14
|
+
"contractHash": "8c278ebd5becba08"
|
|
15
15
|
},
|
|
16
16
|
"currentPublic": {
|
|
17
|
-
"pythonHwpx": "6.
|
|
17
|
+
"pythonHwpx": "6.3.0",
|
|
18
18
|
"primaryDistribution": "python-hwpx-automation",
|
|
19
|
-
"primaryApplication": "7.0.
|
|
20
|
-
"plugin": "2.0.
|
|
21
|
-
"contractHash": "
|
|
19
|
+
"primaryApplication": "7.0.3",
|
|
20
|
+
"plugin": "2.0.3",
|
|
21
|
+
"contractHash": "8c278ebd5becba08"
|
|
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
|
-
|
|
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
|
-
|
|
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()
|
|
@@ -1292,7 +1292,7 @@ def inspect_document_authoring_quality(
|
|
|
1292
1292
|
_rendered = _mac.render_pdf(str(_hwpx), str(_pdf))
|
|
1293
1293
|
if _rendered and Path(_rendered).exists():
|
|
1294
1294
|
try:
|
|
1295
|
-
import
|
|
1295
|
+
import pymupdf as _fitz
|
|
1296
1296
|
|
|
1297
1297
|
_doc = _fitz.open(_rendered)
|
|
1298
1298
|
_has_text = any(
|
|
@@ -185,7 +185,7 @@ def fitz_available() -> bool:
|
|
|
185
185
|
"""True when PyMuPDF (``fitz``) can be imported (the extraction backend)."""
|
|
186
186
|
|
|
187
187
|
try: # pragma: no cover - trivial import probe
|
|
188
|
-
import fitz # noqa: F401
|
|
188
|
+
import pymupdf as fitz # noqa: F401
|
|
189
189
|
except Exception:
|
|
190
190
|
return False
|
|
191
191
|
return True
|
|
@@ -205,7 +205,7 @@ def extract_word_boxes(pdf_path: str, *, page: int | None = None) -> list[WordBo
|
|
|
205
205
|
|
|
206
206
|
if not fitz_available():
|
|
207
207
|
raise OracleUnavailable("PyMuPDF (fitz) is not installed")
|
|
208
|
-
import fitz
|
|
208
|
+
import pymupdf as fitz
|
|
209
209
|
|
|
210
210
|
boxes: list[WordBox] = []
|
|
211
211
|
try:
|
|
@@ -255,7 +255,7 @@ def extract_glyph_boxes(pdf_path: str, *, page: int | None = None) -> list[WordB
|
|
|
255
255
|
|
|
256
256
|
if not fitz_available():
|
|
257
257
|
raise OracleUnavailable("PyMuPDF (fitz) is not installed")
|
|
258
|
-
import fitz
|
|
258
|
+
import pymupdf as fitz
|
|
259
259
|
|
|
260
260
|
boxes: list[WordBox] = []
|
|
261
261
|
try:
|
|
@@ -709,7 +709,7 @@ def render_glyph_boxes(
|
|
|
709
709
|
if not pdf or not os.path.exists(pdf) or os.path.getsize(pdf) == 0:
|
|
710
710
|
raise OracleUnavailable("Hancom render produced no PDF")
|
|
711
711
|
boxes = extract_glyph_boxes(pdf, page=page)
|
|
712
|
-
import fitz
|
|
712
|
+
import pymupdf as fitz
|
|
713
713
|
|
|
714
714
|
with fitz.open(pdf) as doc:
|
|
715
715
|
if len(doc) == 0: # a 0-page render is a failed render, not a clean pass
|
|
@@ -742,7 +742,7 @@ def extract_cell_clips(pdf_path: str, *, page: int | None = None) -> list[Rect]:
|
|
|
742
742
|
|
|
743
743
|
if not fitz_available():
|
|
744
744
|
raise OracleUnavailable("PyMuPDF (fitz) is not installed")
|
|
745
|
-
import fitz
|
|
745
|
+
import pymupdf as fitz
|
|
746
746
|
|
|
747
747
|
clips: list[Rect] = []
|
|
748
748
|
try:
|
|
@@ -785,7 +785,7 @@ def extract_image_boxes(pdf_path: str, *, page: int | None = None) -> list[Rect]
|
|
|
785
785
|
|
|
786
786
|
if not fitz_available():
|
|
787
787
|
raise OracleUnavailable("PyMuPDF (fitz) is not installed")
|
|
788
|
-
import fitz
|
|
788
|
+
import pymupdf as fitz
|
|
789
789
|
|
|
790
790
|
boxes: list[Rect] = []
|
|
791
791
|
try:
|
|
@@ -843,7 +843,7 @@ def render_form_geometry(
|
|
|
843
843
|
raise OracleUnavailable("Hancom render produced no PDF")
|
|
844
844
|
glyphs = extract_glyph_boxes(rendered, page=page)
|
|
845
845
|
clips = extract_cell_clips(rendered, page=page)
|
|
846
|
-
import fitz
|
|
846
|
+
import pymupdf as fitz
|
|
847
847
|
|
|
848
848
|
with fitz.open(rendered) as doc:
|
|
849
849
|
if len(doc) == 0:
|
|
@@ -957,7 +957,7 @@ def extract_layout_signature(pdf_path: str) -> LayoutSignature:
|
|
|
957
957
|
|
|
958
958
|
if not fitz_available():
|
|
959
959
|
raise OracleUnavailable("PyMuPDF (fitz) is not installed")
|
|
960
|
-
import fitz
|
|
960
|
+
import pymupdf as fitz
|
|
961
961
|
|
|
962
962
|
try:
|
|
963
963
|
doc = fitz.open(pdf_path)
|
|
@@ -180,7 +180,7 @@ def detect_overflow_crossings(
|
|
|
180
180
|
PyMuPDF; raises ``RuntimeError`` if unavailable (caller degrades to unverified).
|
|
181
181
|
"""
|
|
182
182
|
try:
|
|
183
|
-
import fitz
|
|
183
|
+
import pymupdf as fitz
|
|
184
184
|
except Exception as exc: # pragma: no cover - env probe
|
|
185
185
|
raise RuntimeError(f"PyMuPDF unavailable: {exc}") from exc
|
|
186
186
|
|
|
@@ -266,7 +266,7 @@ def score_render(
|
|
|
266
266
|
[f"render imaging deps unavailable: {exc}"],
|
|
267
267
|
)
|
|
268
268
|
|
|
269
|
-
import fitz # already importable if we got here
|
|
269
|
+
import pymupdf as fitz # already importable if we got here
|
|
270
270
|
|
|
271
271
|
doc = fitz.open(pdf)
|
|
272
272
|
pages = doc.page_count
|
|
@@ -27,7 +27,7 @@ _TALL_BAND_REL = 1.0
|
|
|
27
27
|
|
|
28
28
|
def pymupdf_available() -> bool:
|
|
29
29
|
try: # pragma: no cover - trivial import probe
|
|
30
|
-
import fitz # noqa: F401
|
|
30
|
+
import pymupdf as fitz # noqa: F401
|
|
31
31
|
except Exception:
|
|
32
32
|
return False
|
|
33
33
|
return True
|
|
@@ -36,7 +36,7 @@ def pymupdf_available() -> bool:
|
|
|
36
36
|
def render_pdf_to_images(pdf_path: str | Path, dpi: int = 150) -> list["Image.Image"]:
|
|
37
37
|
"""Rasterize every page of ``pdf_path`` to a list of RGB ``PIL.Image``."""
|
|
38
38
|
|
|
39
|
-
import fitz # pymupdf
|
|
39
|
+
import pymupdf as fitz # pymupdf
|
|
40
40
|
from PIL import Image
|
|
41
41
|
|
|
42
42
|
pages: list[Image.Image] = []
|
|
@@ -255,7 +255,7 @@ class SerializedHancomWorker:
|
|
|
255
255
|
@staticmethod
|
|
256
256
|
def _rasterize(pdf: Path, destination: Path, dpi: int) -> list[Path]:
|
|
257
257
|
try:
|
|
258
|
-
import fitz
|
|
258
|
+
import pymupdf as fitz
|
|
259
259
|
except ImportError as exc:
|
|
260
260
|
raise RuntimeError("PyMuPDF is required for page PNG output") from exc
|
|
261
261
|
document = fitz.open(pdf)
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/tool_contract.py
RENAMED
|
@@ -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
|
|
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 = "
|
|
36
|
+
RELEASED_CONTRACT_HASH = "8c278ebd5becba08"
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def describe_callables(entries: Any) -> Any:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx-automation
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.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<7,>=6.0
|
|
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,12 +74,13 @@ Dynamic: license-file
|
|
|
74
74
|
|
|
75
75
|
<!-- release-state: release-approved -->
|
|
76
76
|
> [!NOTE]
|
|
77
|
-
>
|
|
78
|
-
> hwpx
|
|
79
|
-
>
|
|
80
|
-
>
|
|
81
|
-
>
|
|
82
|
-
>
|
|
77
|
+
> 아직 공개되지 않은 7.0.4 후보입니다.
|
|
78
|
+
> 후보 조합: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.4 → hwpx-plugin 2.1.0`.
|
|
79
|
+
> 공개 트레인: `python-hwpx 6.3.0 → python-hwpx-automation 7.0.3 → hwpx-plugin 2.0.3`.
|
|
80
|
+
> 계약은 `8c278ebd5becba08`이며 도구 표면과 최소 호환 버전은 유지합니다.
|
|
81
|
+
> 공개 좌표는 core·automation PyPI와 plugin GitHub
|
|
82
|
+
> Release·marketplace·실제 marketplace 설치 관찰 후에만 승격합니다.
|
|
83
|
+
> [릴리스 runbook](docs/release-runbook.md)
|
|
83
84
|
|
|
84
85
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
85
86
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -133,7 +134,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
133
134
|
"command": "uvx",
|
|
134
135
|
"args": [
|
|
135
136
|
"--from",
|
|
136
|
-
"python-hwpx-automation[mcp]==
|
|
137
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
137
138
|
"hwpx-automation-mcp"
|
|
138
139
|
],
|
|
139
140
|
"env": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__init__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__init__.pyi
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/__main__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/agent_document.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/blind_eval.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/capabilities.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/configuration.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/__init__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/content.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/context.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/diff.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/document.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/formatting.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/handles.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/locations.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/locator.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/plan.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/resources.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/search.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/core/txn.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/document_state.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/execution_lock.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/fastmcp_adapter.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/form_fill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwp_converter.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwp_support.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/hwpx_ops.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/identity.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/ingest_adapters.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/markdown_plan.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mcp_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mixed_form.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/mutation_models.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/network_policy.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.2 → python_hwpx_automation-7.0.4}/src/hwpx_automation/office/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|