python-hwpx-automation 7.0.1__tar.gz → 7.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_hwpx_automation-7.0.1/src/python_hwpx_automation.egg-info → python_hwpx_automation-7.0.3}/PKG-INFO +12 -8
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/README.md +10 -6
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/pyproject.toml +2 -2
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/errors.py +3 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.json +9 -9
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/commands.py +10 -2
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/tables.py +2 -5
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/runtime.py +6 -1
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/tool_contract.py +2 -2
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workspace.py +13 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3/src/python_hwpx_automation.egg-info}/PKG-INFO +12 -8
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/requires.txt +1 -1
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/LICENSE +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/MANIFEST.in +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/NOTICE +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/setup.cfg +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.pyi +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__main__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/agent_document.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/api.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/blind_eval.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/capabilities.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/compat.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/configuration.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/content.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/context.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/diff.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/document.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/formatting.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/handles.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locations.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locator.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/plan.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/resources.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/search.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/transactions.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/txn.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/document_state.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/execution_lock.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/fastmcp_adapter.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/form_fill.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/form_output_models.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/_shared.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/agent_document.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/authoring.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/content_edit.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/form_fill.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/layout_style.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/quality_render.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/read_export.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/specialized.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/tracked_changes.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/handlers/workflow.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_converter.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_support.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwpx_ops.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ingest_adapters.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/markdown_plan.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mcp_cli.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/metadata/tools_meta.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mixed_form.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mutation_models.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/network_policy.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/_batch_verification.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/bundle.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/catalog.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/dump.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/mapping.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/model.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/native.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/blueprint/replay.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/catalog.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/cli.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/document.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/form_plan.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/model.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/path.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/query.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/agent/story.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/advanced_generators.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/core.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/builder/report.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/_support.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/composer.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/harvest.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/plan.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profile.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/profile.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/application_form/template.hwpx +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/profile.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/home_notice/template.hwpx +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/profile.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/official_notice/template.hwpx +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/body.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/heading.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/info_table.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/fragments/title.xml +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/profile.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/profiles/report/template.hwpx +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/design/validator.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/presets/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/presets/proposal.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/report_parser.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/style_profile.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/authoring/template_analyzer.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/charting/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/official_lint.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/compliance/pii.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/comparison.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/mail_merge.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/document_ops/redline.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/evalplan/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/evalplan/runtime.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/compose.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/ir.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/measure.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/parser.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/exam/profile.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/classification.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fill_residue.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/apply.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/engine.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/measure.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/policy.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/report.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/seal.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/fit/wordbox.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/guidance.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/quality.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/split_run.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/form_fill/template_formfit.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/composition.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/data/bank.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/data/genres.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/gianmun.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/house_style/org_chart.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/quality/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/quality/page_guard.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_hancom_open_rate.ps1 +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_refresh_hwpx_mac.applescript +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_render_hwpx.ps1 +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/_render_hwpx_mac.applescript +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/block_splits.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/detectors.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/diff.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/fixture_corpus.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/oracle.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/page_qa.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/qa_contracts.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/qa_metrics.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/rendering/worker.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/utilities/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/office/utilities/table_compute.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/_border_fill.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/composition.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/content_layout.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/context.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/form_fields.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/media.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/memo_style.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/package_validation.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/planning.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/preview_export.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/read_query.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/save_policy.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ops_services/transactions.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/preview_output_models.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/public-modules.json +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/py.typed +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/quality.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/quality_generation.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/resources.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/runtime_services.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/server.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/storage.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/tool_bindings.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/upstream.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/utils/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/utils/helpers.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/visual_qa.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/__init__.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/adapters.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/dispatcher.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/models.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/policy.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_contracts.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_metrics.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_queue.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_security.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/render_transport.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/rendering.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/service.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/state_machine.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workflow/store.py +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/SOURCES.txt +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/dependency_links.txt +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/entry_points.txt +0 -0
- {python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/python_hwpx_automation.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx-automation
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.3
|
|
4
4
|
Summary: Task-oriented HWPX document automation for Python, with an optional MCP adapter.
|
|
5
5
|
Author: Kohkyuhyun
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -20,7 +20,7 @@ Requires-Python: >=3.10
|
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
License-File: NOTICE
|
|
23
|
-
Requires-Dist: python-hwpx<7,>=6.0
|
|
23
|
+
Requires-Dist: python-hwpx<7,>=6.3.0
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.11
|
|
25
25
|
Requires-Dist: cryptography>=42.0
|
|
26
26
|
Requires-Dist: anyio>=4.0
|
|
@@ -74,11 +74,15 @@ Dynamic: license-file
|
|
|
74
74
|
|
|
75
75
|
<!-- release-state: release-approved -->
|
|
76
76
|
> [!NOTE]
|
|
77
|
-
> 공개 트레인: `python-hwpx
|
|
78
|
-
> hwpx-plugin 1
|
|
79
|
-
>
|
|
80
|
-
>
|
|
81
|
-
>
|
|
77
|
+
> 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2 →
|
|
78
|
+
> hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
|
|
79
|
+
> 승인 완료(`release-approved`), 원격 관찰 대기 중.
|
|
80
|
+
> (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
|
|
81
|
+
> Windows 저장 수리 패치 트레인 — 저장 수리 #98·업로드 경로 안내
|
|
82
|
+
> #75, core와 계약 `34a91560759dc47a` 불변).
|
|
83
|
+
> 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
|
|
84
|
+
> Release·marketplace·실제 marketplace 설치) 관찰 후에만
|
|
85
|
+
> 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
|
|
82
86
|
|
|
83
87
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
84
88
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -132,7 +136,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
132
136
|
"command": "uvx",
|
|
133
137
|
"args": [
|
|
134
138
|
"--from",
|
|
135
|
-
"python-hwpx-automation[mcp]==
|
|
139
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
136
140
|
"hwpx-automation-mcp"
|
|
137
141
|
],
|
|
138
142
|
"env": {
|
|
@@ -14,11 +14,15 @@
|
|
|
14
14
|
|
|
15
15
|
<!-- release-state: release-approved -->
|
|
16
16
|
> [!NOTE]
|
|
17
|
-
> 공개 트레인: `python-hwpx
|
|
18
|
-
> hwpx-plugin 1
|
|
19
|
-
>
|
|
20
|
-
>
|
|
21
|
-
>
|
|
17
|
+
> 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2 →
|
|
18
|
+
> hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
|
|
19
|
+
> 승인 완료(`release-approved`), 원격 관찰 대기 중.
|
|
20
|
+
> (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
|
|
21
|
+
> Windows 저장 수리 패치 트레인 — 저장 수리 #98·업로드 경로 안내
|
|
22
|
+
> #75, core와 계약 `34a91560759dc47a` 불변).
|
|
23
|
+
> 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
|
|
24
|
+
> Release·marketplace·실제 marketplace 설치) 관찰 후에만
|
|
25
|
+
> 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
|
|
22
26
|
|
|
23
27
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
24
28
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -72,7 +76,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
72
76
|
"command": "uvx",
|
|
73
77
|
"args": [
|
|
74
78
|
"--from",
|
|
75
|
-
"python-hwpx-automation[mcp]==
|
|
79
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
76
80
|
"hwpx-automation-mcp"
|
|
77
81
|
],
|
|
78
82
|
"env": {
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-hwpx-automation"
|
|
7
|
-
version = "7.0.
|
|
7
|
+
version = "7.0.3"
|
|
8
8
|
description = "Task-oriented HWPX document automation for Python, with an optional MCP adapter."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Kohkyuhyun" }]
|
|
@@ -31,7 +31,7 @@ dependencies = [
|
|
|
31
31
|
# breaking an already-published automation line. WP-F (engine surface 6.0):
|
|
32
32
|
# this line adapted to the new namespace surface (design §9 WP-F) — the dev0
|
|
33
33
|
# pre-release qualifier tracks core's own not-yet-tagged 6.0 identity.
|
|
34
|
-
"python-hwpx>=6.0
|
|
34
|
+
"python-hwpx>=6.3.0,<7", # HWPX object model, OXML/OPC, format-native primitives
|
|
35
35
|
|
|
36
36
|
"pydantic>=2.11,<3",
|
|
37
37
|
"cryptography>=42.0",
|
|
@@ -36,6 +36,7 @@ class CommonErrorModel(BaseModel):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
ERROR_CODE_TO_MCP_CODE: dict[str, int] = {
|
|
39
|
+
"CLIENT_UPLOAD_PATH_UNAVAILABLE": -32602,
|
|
39
40
|
"DOCUMENT_NOT_FOUND": -32044,
|
|
40
41
|
"PERMISSION_DENIED": -32043,
|
|
41
42
|
"TABLE_INDEX_OUT_OF_RANGE": -32042,
|
|
@@ -57,6 +58,7 @@ DEFAULT_ERROR_SUGGESTIONS: dict[str, str] = {
|
|
|
57
58
|
"AMBIGUOUS_TARGET": "검색 조건을 더 구체화하거나 limit=1로 미리보기를 다시 생성하세요.",
|
|
58
59
|
"BYTE_PATCH_OPEN_SAFETY_FAILED": "반환된 openSafety 진단을 확인하고 일반 저장/복구 경로로 다시 생성하세요.",
|
|
59
60
|
"CAPABILITY_SKEW": "core/automation/plugin ToolSpec 계약 불일치로 쓰기가 차단되었습니다. mcp_server_health의 최소 버전과 contract hash에 맞춰 다시 설치한 뒤 호스트를 재시작하세요.",
|
|
61
|
+
"CLIENT_UPLOAD_PATH_UNAVAILABLE": "대화에 업로드된 파일의 내부 경로는 로컬 MCP 서버에서 읽을 수 없습니다. 파일을 PC에 저장한 뒤 실제 로컬 경로를 전달하세요.",
|
|
60
62
|
"FIELD_OVERFLOW": "값이 칸에 넘칩니다. fitPolicy(mode=wrap_then_shrink/shrink/truncate_with_report) 또는 overflow=warn으로 다시 채우거나 값을 줄이세요. details.visualComplete.suggestedRetry 참고.",
|
|
61
63
|
"STALE_LINESEG_DETECTED": "오래된 lineseg 레이아웃 캐시가 남았습니다. 해당 문단을 다시 편집해 캐시를 무효화한 뒤 저장하세요.",
|
|
62
64
|
"VISUAL_COMPLETE_FAILED": "한컴 렌더에서 겹침/넘침 등 시각 결함이 감지되었습니다. details.visualComplete를 확인하고 수정 후 다시 저장하세요.",
|
|
@@ -120,6 +122,7 @@ def category_for_error(error_code: str) -> ErrorCategory:
|
|
|
120
122
|
if error_code.startswith("NETWORK_"):
|
|
121
123
|
return "network"
|
|
122
124
|
if error_code in {
|
|
125
|
+
"CLIENT_UPLOAD_PATH_UNAVAILABLE",
|
|
123
126
|
"INVALID_ARGUMENT",
|
|
124
127
|
"WORKSPACE_PATH_INVALID",
|
|
125
128
|
"DOCUMENT_LOCATOR_REQUIRED",
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.json
RENAMED
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
"releaseState": {
|
|
6
6
|
"status": "release-approved",
|
|
7
7
|
"candidate": {
|
|
8
|
-
"pythonHwpx": "6.0
|
|
8
|
+
"pythonHwpx": "6.3.0",
|
|
9
9
|
"canonicalDistribution": "python-hwpx-automation",
|
|
10
|
-
"canonicalAutomation": "7.0.
|
|
10
|
+
"canonicalAutomation": "7.0.3",
|
|
11
11
|
"compatibilityDistribution": "hwpx-mcp-server",
|
|
12
|
-
"compatibility": "7.0.
|
|
13
|
-
"plugin": "2.0.
|
|
14
|
-
"contractHash": "
|
|
12
|
+
"compatibility": "7.0.3",
|
|
13
|
+
"plugin": "2.0.2",
|
|
14
|
+
"contractHash": "8c278ebd5becba08"
|
|
15
15
|
},
|
|
16
16
|
"currentPublic": {
|
|
17
|
-
"pythonHwpx": "
|
|
17
|
+
"pythonHwpx": "6.2.1",
|
|
18
18
|
"primaryDistribution": "python-hwpx-automation",
|
|
19
|
-
"primaryApplication": "
|
|
20
|
-
"plugin": "
|
|
21
|
-
"contractHash": "
|
|
19
|
+
"primaryApplication": "7.0.2",
|
|
20
|
+
"plugin": "2.0.1",
|
|
21
|
+
"contractHash": "34a91560759dc47a"
|
|
22
22
|
},
|
|
23
23
|
"promotionGate": "Three states are mandatory: unreleased-candidate while auditing; release-approved only after separate owner approval and while currentPublic still names the previously observed coherent stack; released only in a follow-up commit after remote truth is observed for core, canonical automation, the compatibility distribution, the plugin GitHub release, the marketplace entry, and a real marketplace install. The automation tag workflow publishes only release-approved, leaves currentPublic unchanged, and hands an attached receipt to plugin publication."
|
|
24
24
|
},
|
|
@@ -1024,7 +1024,11 @@ def _identity_attribute_names(local: str, node: Any) -> tuple[str, ...]:
|
|
|
1024
1024
|
if local in {"p", "tbl", "pic", "memo", "fieldBegin", *_SHAPE_KINDS}:
|
|
1025
1025
|
return tuple(name for name in ("id", "instid", "instId") if node.get(name) is not None)
|
|
1026
1026
|
if local in {"footNote", "endNote"}:
|
|
1027
|
-
|
|
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()
|
|
@@ -211,11 +211,8 @@ class TableService:
|
|
|
211
211
|
new_id = header._allocate_border_fill_id(border_fills_element)
|
|
212
212
|
_build_border_fill_element(border_fills_element, new_id, spec)
|
|
213
213
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
else:
|
|
217
|
-
count = len(border_fills_element.findall(f"{HH_NS}borderFill"))
|
|
218
|
-
border_fills_element.set("itemCnt", str(count))
|
|
214
|
+
count = len(border_fills_element.findall(f"{HH_NS}borderFill"))
|
|
215
|
+
border_fills_element.set("itemCnt", str(count))
|
|
219
216
|
header.mark_dirty()
|
|
220
217
|
return new_id
|
|
221
218
|
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/runtime.py
RENAMED
|
@@ -89,9 +89,14 @@ def _classified_error_payload(exc: BaseException | None) -> dict[str, Any]:
|
|
|
89
89
|
message="문서 에이전트 계약을 안전하게 해석할 수 없습니다.",
|
|
90
90
|
)
|
|
91
91
|
if isinstance(item, WorkspacePathError):
|
|
92
|
+
message = (
|
|
93
|
+
"대화에 업로드된 파일의 내부 경로는 로컬 MCP 서버에서 접근할 수 없습니다."
|
|
94
|
+
if item.code == "CLIENT_UPLOAD_PATH_UNAVAILABLE"
|
|
95
|
+
else "요청한 경로가 허용된 HWPX 작업공간 경계를 벗어났습니다."
|
|
96
|
+
)
|
|
92
97
|
return build_error_payload(
|
|
93
98
|
code=item.code,
|
|
94
|
-
message=
|
|
99
|
+
message=message,
|
|
95
100
|
details=item.safe_details(),
|
|
96
101
|
)
|
|
97
102
|
if isinstance(item, WorkspaceConfigurationError):
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/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:
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/workspace.py
RENAMED
|
@@ -107,6 +107,9 @@ def _snapshot_target(
|
|
|
107
107
|
os.O_RDONLY
|
|
108
108
|
| getattr(os, "O_NOFOLLOW", 0)
|
|
109
109
|
| getattr(os, "O_NONBLOCK", 0)
|
|
110
|
+
# Windows os.open defaults to CRT text mode, which rewrites CRLF and
|
|
111
|
+
# stops reading at 0x1A; digests must hash the exact on-disk bytes.
|
|
112
|
+
| getattr(os, "O_BINARY", 0)
|
|
110
113
|
)
|
|
111
114
|
try:
|
|
112
115
|
descriptor = os.open(path, flags)
|
|
@@ -226,6 +229,7 @@ def _relative_file_snapshot(
|
|
|
226
229
|
os.O_RDONLY
|
|
227
230
|
| getattr(os, "O_NOFOLLOW", 0)
|
|
228
231
|
| getattr(os, "O_NONBLOCK", 0)
|
|
232
|
+
| getattr(os, "O_BINARY", 0)
|
|
229
233
|
)
|
|
230
234
|
descriptor = os.open(name, flags, dir_fd=parent_fd)
|
|
231
235
|
try:
|
|
@@ -459,6 +463,15 @@ class WorkspaceResolver:
|
|
|
459
463
|
code="WORKSPACE_PATH_INVALID",
|
|
460
464
|
reason="empty_or_invalid_path",
|
|
461
465
|
)
|
|
466
|
+
portable_path = text.replace("\\", "/").casefold().rstrip("/")
|
|
467
|
+
if portable_path == "/mnt/user-data" or portable_path.startswith(
|
|
468
|
+
"/mnt/user-data/"
|
|
469
|
+
):
|
|
470
|
+
raise WorkspacePathError(
|
|
471
|
+
"client-uploaded files are not accessible to the local MCP server",
|
|
472
|
+
code="CLIENT_UPLOAD_PATH_UNAVAILABLE",
|
|
473
|
+
reason="client_upload_path",
|
|
474
|
+
)
|
|
462
475
|
candidate = Path(text).expanduser()
|
|
463
476
|
return candidate if candidate.is_absolute() else self.primary_root / candidate
|
|
464
477
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-hwpx-automation
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.3
|
|
4
4
|
Summary: Task-oriented HWPX document automation for Python, with an optional MCP adapter.
|
|
5
5
|
Author: Kohkyuhyun
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -20,7 +20,7 @@ Requires-Python: >=3.10
|
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
License-File: NOTICE
|
|
23
|
-
Requires-Dist: python-hwpx<7,>=6.0
|
|
23
|
+
Requires-Dist: python-hwpx<7,>=6.3.0
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.11
|
|
25
25
|
Requires-Dist: cryptography>=42.0
|
|
26
26
|
Requires-Dist: anyio>=4.0
|
|
@@ -74,11 +74,15 @@ Dynamic: license-file
|
|
|
74
74
|
|
|
75
75
|
<!-- release-state: release-approved -->
|
|
76
76
|
> [!NOTE]
|
|
77
|
-
> 공개 트레인: `python-hwpx
|
|
78
|
-
> hwpx-plugin 1
|
|
79
|
-
>
|
|
80
|
-
>
|
|
81
|
-
>
|
|
77
|
+
> 공개 트레인: `python-hwpx 6.2.1 → python-hwpx-automation 7.0.2 →
|
|
78
|
+
> hwpx-plugin 2.0.1` — 7.0.3 트레인(core 6.3.0 · plugin 2.0.2)은 오너 발행
|
|
79
|
+
> 승인 완료(`release-approved`), 원격 관찰 대기 중.
|
|
80
|
+
> (automation 7.0.2 · plugin 2.0.1 released 2026-08-16,
|
|
81
|
+
> Windows 저장 수리 패치 트레인 — 저장 수리 #98·업로드 경로 안내
|
|
82
|
+
> #75, core와 계약 `34a91560759dc47a` 불변).
|
|
83
|
+
> 공개 좌표는 원격 진실(core·automation PyPI와 plugin GitHub
|
|
84
|
+
> Release·marketplace·실제 marketplace 설치) 관찰 후에만
|
|
85
|
+
> 승격됩니다 — [릴리스 runbook](docs/release-runbook.md)
|
|
82
86
|
|
|
83
87
|
[python-hwpx](https://github.com/airmang/python-hwpx) 엔진 위에서 문서 저작·
|
|
84
88
|
양식 채움·시험지 조판·안전한 에이전트 워크플로를 제공하는 응용 계층입니다.
|
|
@@ -132,7 +136,7 @@ Gemini CLI는 `~/.gemini/settings.json`, Cursor·Windsurf는 각 에디터의 MC
|
|
|
132
136
|
"command": "uvx",
|
|
133
137
|
"args": [
|
|
134
138
|
"--from",
|
|
135
|
-
"python-hwpx-automation[mcp]==
|
|
139
|
+
"python-hwpx-automation[mcp]==7.0.3",
|
|
136
140
|
"hwpx-automation-mcp"
|
|
137
141
|
],
|
|
138
142
|
"env": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__init__.pyi
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/__main__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/agent_document.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/blind_eval.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/capabilities.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/configuration.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/__init__.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/content.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/context.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/diff.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/document.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/formatting.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/handles.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locations.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/locator.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/plan.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/resources.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/search.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/core/txn.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/document_state.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/execution_lock.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/fastmcp_adapter.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/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
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_converter.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwp_support.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/hwpx_ops.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/identity.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/ingest_adapters.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/markdown_plan.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mcp_cli.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mixed_form.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/mutation_models.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/src/hwpx_automation/network_policy.py
RENAMED
|
File without changes
|
{python_hwpx_automation-7.0.1 → python_hwpx_automation-7.0.3}/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
|
|
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
|
|
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
|