pyfltr 3.24.2__tar.gz → 3.24.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.
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.github/workflows/ci.yaml +3 -3
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.github/workflows/docker-build.yaml +1 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.github/workflows/docs.yaml +1 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.github/workflows/release.yaml +1 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/AGENTS.md +3 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/PKG-INFO +1 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docker/Dockerfile +3 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/development/architecture.md +8 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/configuration.md +4 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/usage.md +13 -3
- {pyfltr-3.24.2 → pyfltr-3.24.4}/mise.lock +47 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/mise.toml +1 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/mcp_models.py +31 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/mcp_server.py +538 -272
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/dispatcher.py +10 -1
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/subproject_loop.py +4 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/targets.py +36 -24
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/tools.py +12 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/mcp_server_test.py +125 -3
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/subproject_loop_test.py +41 -0
- pyfltr-3.24.4/tests/integration/external_excludes_test.py +106 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/uv.lock +90 -87
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/grep-replace/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/implementation-test-constraints/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/output-format/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/pyfltr-add-tool/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/ssot/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.agents/skills/tool-resolution/SKILL.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/agents/error-parser-reviewer.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/agents/tool-compat-checker.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/rules/dogfooding.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/rules/order.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/rules/subprocess.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/rules/targets.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.claude/settings.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.codex/config.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.editorconfig +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.editorconfig-checker.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.gitattributes +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.github/workflows/audit.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.gitignore +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.gitlab-ci.yml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.gitmessage +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.markdownlint-cli2.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.npmrc +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.pre-commit-config.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.python-version +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.textlintignore +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.textlintrc.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.vscode/extensions.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.vscode/settings.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/.yamllint.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/LICENSE +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/Makefile +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/README.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/cliff.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/.markdownlint-cli2.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/development/development.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/configuration-tools.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/custom-commands.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/getting-started.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/grep-replace.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/index.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/recommended-nonpython.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/recommended.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/guide/troubleshooting.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/docs/index.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/mkdocs.yml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/__main__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/command_info.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/command_selection.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/config_subcmd.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/grep_replace_common.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/grep_subcmd.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/main.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/mcp_transport.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/mcp_worker.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/output_format.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/overrides.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/parser.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/pipeline.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/replace_subcmd.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/runs.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/shell_completion.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/cli/subproject_config.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/__main__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/check.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/cli.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/words.txt +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/colloquial/words_allow.txt +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/braces-3.0.3.patch +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/cache_policy.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/completion.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/core_.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/env.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/execution_slot.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/executor.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/glab.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/linter_fix.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/lychee.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/markdownlint_env.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/mise.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/only_failed.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/precommit.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/precommit_guidance.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/process.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/runner.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/slow_tests.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/snapshot.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/stage_runner.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/structured_output.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/subprojects.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/textlint_fix.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/tool_parallelism.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/tool_resolution.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/two_step/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/two_step/base.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/two_step/prettier.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/two_step/ruff.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/command/vitest.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/config.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/editing.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/model.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/operations.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/presets.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/selection.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/config/validation.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/diagnostics.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/file_lock.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/adaptive.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/history.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/jsonl_records.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/matcher.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/operations.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/preview.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/replacer.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/scanner.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/text_render.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/transaction.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/grep_/types.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/link_checks.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/auxiliary.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/code_quality.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/diagnostics.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/formatters.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/github_annotations.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/jsonl.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/logging_.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/positions.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/render.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/sarif.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/output/ui.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/common.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/entry.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/native.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/pytest.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/parsing/tools.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/paths.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/rule_urls.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/run_options.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/archive.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/cache.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/only_failed.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/retention.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/retry.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/state/runs.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/text/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/text/exclude_fence.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/text/fences.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/user_cache.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyfltr/warnings_.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/check_distribution.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/check_doc_codeblocks.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/distribution_probe.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/__main__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/collect.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/compare.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/parse_worker.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/process_tree.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/pytest_forms.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/scripts/parser_review/samples.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/command_info_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/command_selection_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/grep_subcmd_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/main_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/mcp_transport_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/pipeline_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/replace_subcmd_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/runs_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/cli/shell_completion_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/colloquial/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/colloquial/check_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/colloquial/cli_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/cache_policy_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/completion_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/conftest.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/core_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/dispatcher_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/env_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/execution_slot_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/executor_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/glab_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/linter_fix_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/markdownlint_env_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/mise_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/only_failed_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/precommit_guidance_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/precommit_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/process_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/runner_helpers.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/runner_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/slow_tests_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/stage_runner_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/structured_output_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/subprojects_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/targets_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/textlint_fix_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/tool_parallelism_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/tool_resolution_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/two_step/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/two_step/base_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/two_step/prettier_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/two_step/ruff_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/command/vitest_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/config/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/config/config_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/conftest.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/execution_request_helper.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/adaptive_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/history_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/matcher_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/preview_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/grep_/scanner_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/archive_retention_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/check_doc_codeblocks_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/cli_option_reference_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/concurrent_runs_helper.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/documentation_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/execution_slot_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/external_paths_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/layers_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/llmstxt_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/lychee_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/module_imports_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/only_failed_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/output_format_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/parser_registration_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/parser_review_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/pipeline_always_targets_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/pipeline_config_files_warning_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/pipeline_fast_targets_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/pipeline_monorepo_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/precommit_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/relative_work_dir_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/replace_failure_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/smoke_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/status_consistency_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/test_placement_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/integration/user_state_isolation_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/code_quality_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/diagnostics_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/github_annotations_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/jsonl_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/positions_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/sarif_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/output/ui_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/common_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/data/pytest_runs.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/data/registered_outputs.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/entry_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/native_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/pytest_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/parsing/tools_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/paths_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/rule_urls_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/.editorconfig +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/.github/workflows/ci.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/Dockerfile +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.sh +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.txt +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/basic/sample_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pinact_workspace/.github/workflows/pinned.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pinact_workspace/.github/workflows/unpinned.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pinact_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pre_commit_workspace/.pre-commit-config.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pre_commit_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/pre_commit_workspace/sample.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/prek_workspace/.pre-commit-config.yaml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/prek_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/prek_workspace/sample.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/textlint_workspace/package.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/textlint_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/textlint_workspace/sample.md +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/eslint.config.js +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/package.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/sample.test.ts +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/sample.ts +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/ts_workspace/tsconfig.json +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/smoke_data/uv_sort_workspace/pyproject.toml +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/state/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/state/archive_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/state/cache_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/state/only_failed_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/state/retry_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/text/__init__.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/text/exclude_fence_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/user_cache_test.py +0 -0
- {pyfltr-3.24.2 → pyfltr-3.24.4}/tests/warnings_test.py +0 -0
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
steps:
|
|
47
47
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
48
48
|
|
|
49
|
-
- uses: astral-sh/setup-uv@
|
|
49
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
50
50
|
with:
|
|
51
51
|
python-version: "3.14"
|
|
52
52
|
# 同一pushで先行するDocsと両matrixが同じキーを保存するとreservation警告になるため、
|
|
@@ -158,7 +158,7 @@ jobs:
|
|
|
158
158
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
159
159
|
|
|
160
160
|
- name: Install uv
|
|
161
|
-
uses: astral-sh/setup-uv@
|
|
161
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
162
162
|
with:
|
|
163
163
|
python-version: "3.15"
|
|
164
164
|
enable-cache: true
|
|
@@ -197,7 +197,7 @@ jobs:
|
|
|
197
197
|
restore-keys: pnpm-store-${{ runner.os }}-
|
|
198
198
|
|
|
199
199
|
- name: Setup mise
|
|
200
|
-
uses: jdx/mise-action@
|
|
200
|
+
uses: jdx/mise-action@6be3c7ed4c21d4f76b208d351d95aac273ebb76d # v5.2.4
|
|
201
201
|
|
|
202
202
|
- name: 実行アーカイブの保存先を設定
|
|
203
203
|
# `runner`コンテキストはジョブ直下`env`から参照できないため、ステップの`run`内で
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
34
34
|
|
|
35
35
|
- name: Install uv
|
|
36
|
-
uses: astral-sh/setup-uv@
|
|
36
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
37
37
|
with:
|
|
38
38
|
python-version: "3.14"
|
|
39
39
|
enable-cache: true
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
fetch-depth: 0
|
|
33
33
|
|
|
34
34
|
- name: Install uv
|
|
35
|
-
uses: astral-sh/setup-uv@
|
|
35
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
36
36
|
with:
|
|
37
37
|
python-version: "3.14"
|
|
38
38
|
enable-cache: true
|
|
@@ -129,7 +129,7 @@ jobs:
|
|
|
129
129
|
GITHUB_TOKEN=${{ github.token }}
|
|
130
130
|
|
|
131
131
|
- name: Install uv
|
|
132
|
-
uses: astral-sh/setup-uv@
|
|
132
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
133
133
|
with:
|
|
134
134
|
python-version: "3.14"
|
|
135
135
|
enable-cache: true
|
|
@@ -132,6 +132,9 @@ format別のlogger stream/level切替の詳細は[docs/development/architecture.
|
|
|
132
132
|
起点cwd全体を母数として構築した集合をそのまま対象へ渡さない。
|
|
133
133
|
`ExecutionContext`へファイル集合を保持する状態を追加する場合は、
|
|
134
134
|
対象の集合を`all_files`と交差させる処理を持たせる
|
|
135
|
+
- `subproject_aware=True`ツールは複数のサブプロジェクトで同時に起動されうる。
|
|
136
|
+
ツールを追加・変更するときは、同時起動したプロセス間で共有されうる永続状態(キャッシュ、データベース、設定の書込み先)を
|
|
137
|
+
同時に使えるかを確かめ、使えないツールは`subproject_concurrent=False`としてサブプロジェクト実行を直列にする
|
|
135
138
|
- subprocess・git・mise・ファイル走査などcwd依存処理はプロセスのcwdに依存しない実装にする。
|
|
136
139
|
`subprocess.Popen(cwd=...)`の引数、または`start_cwd`・`base_cwd`・`cwd`等の
|
|
137
140
|
明示引数でcwdを渡す。`os.chdir()`でグローバル状態を変更しない
|
|
@@ -92,6 +92,8 @@ ENV DEBIAN_FRONTEND=noninteractive \
|
|
|
92
92
|
# Debian 公式イメージは ``/etc/apt/apt.conf.d/docker-clean`` で apt キャッシュを
|
|
93
93
|
# 自動削除するため、キャッシュマウント有効時のみそれを除去する。
|
|
94
94
|
# Node.js は mise 管理 (root で導入) に集約し、pnpm はその npm 経由で導入するため APT には含めない。
|
|
95
|
+
# ``libatomic1`` は mise が導入する Node.js 26 系の公式バイナリが実行時に読み込む共有ライブラリであり、
|
|
96
|
+
# 欠けると ``node`` が起動できず後段の ``mise use --global node@lts`` が失敗する。
|
|
95
97
|
# hadolint ignore=DL3008
|
|
96
98
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
97
99
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
@@ -103,6 +105,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
|
103
105
|
git \
|
|
104
106
|
gnupg \
|
|
105
107
|
jq \
|
|
108
|
+
libatomic1 \
|
|
106
109
|
shellcheck
|
|
107
110
|
|
|
108
111
|
# uv を astral 公式インストーラ経由で導入する。
|
|
@@ -265,6 +265,11 @@ pnpmの設定は呼び出し元のcwdで解決し、値を導入プロセスへ
|
|
|
265
265
|
プロジェクトローカル設定・モジュール解決・lockfileをcwd起点で読むツール
|
|
266
266
|
(Python系・JS系・Rust系・.NET系のlinter/testerなど)は既定`True`。
|
|
267
267
|
リポジトリ単位で動作するツール(`typos`・`shellcheck`・`shfmt`・`pre-commit`・`prek`)は既定`False`
|
|
268
|
+
- 同一ツールのサブプロジェクト実行は`jobs`から導いた件数まで同時に開始する(`resolve_subproject_workers`)。
|
|
269
|
+
同時起動したプロセス間で共有されうる永続状態を同時に使えないツールは`CommandInfo.subproject_concurrent=False`とし、
|
|
270
|
+
サブプロジェクトを1件ずつ順に実行する。`mypy`は同じキャッシュ保存先の同時利用でSQLiteキャッシュの初期化が競合し
|
|
271
|
+
内部エラーで終了するため、これに該当する。キャッシュ保存先をpyfltrがサブプロジェクトごとに書き換える案は、
|
|
272
|
+
利用者が指定した共有保存先を無断で分割するため採らない
|
|
268
273
|
- サブプロジェクト別の設定は対象のディレクトリで `load_config(config_dir=cwd)` を解決する。
|
|
269
274
|
`pyproject.toml`を持たないサブプロジェクト(`Cargo.toml`単独・`*.csproj`単独等)は
|
|
270
275
|
`[tool.pyfltr]`の記述先が存在しない。
|
|
@@ -912,6 +917,9 @@ grep/replace系ツール(`grep`・`replace`・`replace_undo`・`replace_histor
|
|
|
912
917
|
完全な引数列は`pyfltr show-run <run_id> --commands=<name>`と実行アーカイブの`tool.json`から取得する。
|
|
913
918
|
|
|
914
919
|
保存ファイルの全文取得を目的とする`show_run_output`は本方針の対象外とし、`output.log`をそのまま返す。
|
|
920
|
+
大きな出力は`show_run_output`の行範囲と`show_run_diagnostics`の指摘範囲(`offset`・`limit`)で分割取得する。
|
|
921
|
+
範囲を省略した呼び出しは全文・全件を返し、既定の切り詰めは設けない。
|
|
922
|
+
既存の呼び出し側が全文・全件を前提とするためである。
|
|
915
923
|
`show_run`が返す`meta`も対象外とする。
|
|
916
924
|
`meta.json`の`argv`は利用者が起動時に渡した引数を保持し、
|
|
917
925
|
pyfltrが対象ファイルへ展開した結果を含まないためである。
|
|
@@ -190,6 +190,7 @@ pyfltr config list --all
|
|
|
190
190
|
- retry-on-oom : LinuxのOOM killer起因でツールが強制終了された場合に自動リトライするか(既定: `true`。後述)
|
|
191
191
|
- retry-max-attempts : OOM検知時の最大リトライ回数(既定: `1`。`0`でリトライ無効。後述)
|
|
192
192
|
- exclude : 除外するファイル名/ディレクトリ名パターン(既定値あり。ロックファイル・minify済みファイル・source mapも含む)
|
|
193
|
+
外部パスでは指定名と配下だけに適用([詳細](usage.md#external-paths))
|
|
193
194
|
- extend-exclude : 追加で除外するファイル名/ディレクトリ名パターン(既定は空)
|
|
194
195
|
- exclude-fence-under : Markdownの指定H2見出し配下でフェンス内側行を事前チェックから除く(既定は空。[CLIコマンド](usage.md#exclude-fence-under)を参照)
|
|
195
196
|
- respect-gitignore : `.gitignore`に記載されたファイルを除外するか否か(既定: `true`)。
|
|
@@ -504,6 +505,9 @@ CLIオプション`-j`でも指定でき、`pyproject.toml`より優先される
|
|
|
504
505
|
ツール自身のワーカー数との積が`jobs`を超えない。
|
|
505
506
|
|
|
506
507
|
`jobs`がツール自身のワーカー数の推定値以下になる場合は、サブプロジェクトを1件ずつ順に実行する。
|
|
508
|
+
`mypy`は`jobs`の値によらず、サブプロジェクトを常に1件ずつ順に実行する。
|
|
509
|
+
mypyは同じキャッシュ保存先を複数のmypyプロセスで同時に使う構成に対応せず、
|
|
510
|
+
同時に起動すると内部エラー(`INTERNAL ERROR`)で終了することがあるためである。
|
|
507
511
|
並列化しても報告順はサブプロジェクトの相対パスの昇順で安定する。
|
|
508
512
|
|
|
509
513
|
## fastエイリアス
|
|
@@ -256,8 +256,8 @@ MCPクライアントがstdinを閉じた時点でサーバーが終了する。
|
|
|
256
256
|
| --- | --- | --- |
|
|
257
257
|
| `list_runs` | `pyfltr list-runs` | run一覧を新しい順で返す。`limit`で件数制御(既定20件) |
|
|
258
258
|
| `show_run` | `pyfltr show-run <run_id>` | 指定runのmetaとツール別サマリを返す。前方一致・`latest`エイリアス可 |
|
|
259
|
-
| `show_run_diagnostics` | `pyfltr show-run <run_id> --commands=<name>` | 指定runのコマンドmeta情報とdiagnostics
|
|
260
|
-
| `show_run_output` | `pyfltr show-run <run_id> --commands=<name> --output` | 指定runのoutput.log
|
|
259
|
+
| `show_run_diagnostics` | `pyfltr show-run <run_id> --commands=<name>` | 指定runのコマンドmeta情報とdiagnostics全件を返す(複数指定可)。チェック対象ファイルの引数列は含めない。`offset`・`limit`で指摘の範囲を指定して分割取得できる |
|
|
260
|
+
| `show_run_output` | `pyfltr show-run <run_id> --commands=<name> --output` | 指定runのoutput.log全文を返す(複数指定可)。`offset`・`limit`で行範囲を指定して分割取得できる |
|
|
261
261
|
| `run` | `pyfltr run` / `fast` / `ci` | lint/format/testを実行しrun_id・失敗ツール名・retry_commands・警告(対処を含む)・次の操作の案内等を返す。`mode`で実行モードを選ぶ |
|
|
262
262
|
| `grep` | `pyfltr grep` | ファイル横断の正規表現検索(pyfltr exclude/.gitignore尊重) |
|
|
263
263
|
| `replace` | `pyfltr replace` | 横断置換。`dry_run`の既定値は`True`(CLI既定の`False`と異なりLLM暴発防止) |
|
|
@@ -266,6 +266,9 @@ MCPクライアントがstdinを閉じた時点でサーバーが終了する。
|
|
|
266
266
|
| `command_info` | `pyfltr command-info <command>` | ツール起動方式の解決結果を返す。`check=True`は副作用を伴う |
|
|
267
267
|
| `config` | `pyfltr config <action>` | 設定ファイルを操作する(get / set / delete / list) |
|
|
268
268
|
|
|
269
|
+
各ツールの引数の意味と選択肢は、MCPクライアントが取得するツール定義(引数スキーマ)に含まれる。
|
|
270
|
+
読み取りだけを行うツールには`readOnlyHint`、ファイルを書き換えうる`run`・`replace`・`replace_undo`・`config`には`destructiveHint`の注釈を付けており、クライアントはこれを承認の判断に使える。
|
|
271
|
+
|
|
269
272
|
コーディングエージェント側へのMCPサーバー登録例(JSON形式で設定ファイルに記載する場合):
|
|
270
273
|
|
|
271
274
|
```json
|
|
@@ -453,6 +456,12 @@ pyfltr generate-shell-completion powershell | Out-String | Invoke-Expression
|
|
|
453
456
|
### 外部パス指定時の挙動 {#external-paths}
|
|
454
457
|
|
|
455
458
|
起点cwd(`--work-dir`適用後の作業ディレクトリ)配下にない絶対パスを「外部パス」と呼ぶ。
|
|
459
|
+
`exclude`・`extend-exclude`・`{command}-exclude`のパターンは、外部ファイルの直接指定ではファイル名だけに適用する。
|
|
460
|
+
外部ディレクトリの指定では、そのディレクトリ名と配下の相対パスに適用する。
|
|
461
|
+
指定引数より上のディレクトリ名は除外の判定に含めないため、`.cache`配下の外部パスも指定できる。
|
|
462
|
+
指定した名前や配下の`.venv`・`*.min.js`などに一致する除外は適用される。
|
|
463
|
+
起点cwd配下のパスと、`..`を含む相対パスには、従来どおり起点cwdからの相対パスにパターンを適用する。
|
|
464
|
+
|
|
456
465
|
ツールの性質に応じて以下の3分類で扱う。
|
|
457
466
|
|
|
458
467
|
- `--config`系の明示注入: `markdownlint` ・ `textlint` ・ `bandit`
|
|
@@ -947,7 +956,8 @@ pyfltrからprekのhookを呼び出す統合は`prek = true`で有効化する
|
|
|
947
956
|
そのディレクトリで個別に解決して尊重する。
|
|
948
957
|
CLIオプション(`--jobs`・`--no-exclude`・`--no-gitignore`・`--human-readable`)は起点と同一に再適用する
|
|
949
958
|
- サブプロジェクトの並列実行: 同一ツールのサブプロジェクト実行は、`jobs`をそのツール自身のワーカー数の推定値で割った件数まで同時に開始する。
|
|
950
|
-
|
|
959
|
+
報告順はサブプロジェクトの相対パスの昇順で安定し、実行順に依存しない。
|
|
960
|
+
`mypy`は同じキャッシュ保存先を複数のmypyプロセスで同時に使う構成に対応しないため、`jobs`によらずサブプロジェクトを1件ずつ順に実行する
|
|
951
961
|
- 設定ファイルの探索起点: `config-files`(設定ファイル不在の警告)と`--config`系の自動注入は
|
|
952
962
|
常に起点cwd直下を基準に判定する。`.pre-commit-config.yaml`等をリポジトリルートに置く構成で、
|
|
953
963
|
サブプロジェクト側に同名ファイルが無いことを理由に警告することはない
|
|
@@ -223,6 +223,53 @@ url = "https://github.com/hadolint/hadolint/releases/download/v2.15.1/hadolint-w
|
|
|
223
223
|
url_api = "https://api.github.com/repos/hadolint/hadolint/releases/assets/496546508"
|
|
224
224
|
provenance = "github-attestations"
|
|
225
225
|
|
|
226
|
+
[[tools.pinact]]
|
|
227
|
+
version = "5.0.1"
|
|
228
|
+
backend = "aqua:suzuki-shunsuke/pinact"
|
|
229
|
+
specifiers = ["latest"]
|
|
230
|
+
|
|
231
|
+
[tools.pinact."platforms.linux-arm64"]
|
|
232
|
+
checksum = "sha256:fc1432004f378ae51d549a356195b4d2e3ee05935dbd20e3bbca66db1cdf6590"
|
|
233
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_linux_arm64.tar.gz"
|
|
234
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460182"
|
|
235
|
+
provenance = "github-attestations"
|
|
236
|
+
|
|
237
|
+
[tools.pinact."platforms.linux-arm64-musl"]
|
|
238
|
+
checksum = "sha256:fc1432004f378ae51d549a356195b4d2e3ee05935dbd20e3bbca66db1cdf6590"
|
|
239
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_linux_arm64.tar.gz"
|
|
240
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460182"
|
|
241
|
+
provenance = "github-attestations"
|
|
242
|
+
|
|
243
|
+
[tools.pinact."platforms.linux-x64"]
|
|
244
|
+
checksum = "sha256:12500c0fff5db94a0155e2e76ed959d1dc0e899056ee168d8fb7b4840e7c04f0"
|
|
245
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_linux_amd64.tar.gz"
|
|
246
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460175"
|
|
247
|
+
provenance = "github-attestations"
|
|
248
|
+
|
|
249
|
+
[tools.pinact."platforms.linux-x64-musl"]
|
|
250
|
+
checksum = "sha256:12500c0fff5db94a0155e2e76ed959d1dc0e899056ee168d8fb7b4840e7c04f0"
|
|
251
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_linux_amd64.tar.gz"
|
|
252
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460175"
|
|
253
|
+
provenance = "github-attestations"
|
|
254
|
+
|
|
255
|
+
[tools.pinact."platforms.macos-arm64"]
|
|
256
|
+
checksum = "sha256:58390ac843b7a14414df79762e2f64051158d00549762b1c49ded3d2f1746007"
|
|
257
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_darwin_arm64.tar.gz"
|
|
258
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460145"
|
|
259
|
+
provenance = "github-attestations"
|
|
260
|
+
|
|
261
|
+
[tools.pinact."platforms.macos-x64"]
|
|
262
|
+
checksum = "sha256:a8eb8dd4daecb7eefa660e1920ff65302714173be9c2f335a0ae77f053fd975a"
|
|
263
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_darwin_amd64.tar.gz"
|
|
264
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460144"
|
|
265
|
+
provenance = "github-attestations"
|
|
266
|
+
|
|
267
|
+
[tools.pinact."platforms.windows-x64"]
|
|
268
|
+
checksum = "sha256:d679bfd3ecb489f3d4242e54016f57181948980bf0ca7b98c6003c8d256c27f2"
|
|
269
|
+
url = "https://github.com/suzuki-shunsuke/pinact/releases/download/v5.0.1/pinact_windows_amd64.zip"
|
|
270
|
+
url_api = "https://api.github.com/repos/suzuki-shunsuke/pinact/releases/assets/664460186"
|
|
271
|
+
provenance = "github-attestations"
|
|
272
|
+
|
|
226
273
|
[[tools.shellcheck]]
|
|
227
274
|
version = "0.11.0"
|
|
228
275
|
backend = "aqua:koalaman/shellcheck"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""MCPツールスキーマ用Pydanticモデル群。
|
|
2
2
|
|
|
3
3
|
`mcp_server.py`が公開する11ツールの戻り値スキーマをまとめて定義する。
|
|
4
|
-
|
|
4
|
+
入力側は各ツール関数の型注釈と`pydantic.Field`の説明からJSONスキーマを自動生成する。
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
@@ -166,6 +166,36 @@ class CommandDiagnosticsModel(pydantic.BaseModel):
|
|
|
166
166
|
default=None,
|
|
167
167
|
description="rule ID → 短い修正ヒント文字列の辞書。ヒントを持つruleのみ含める。",
|
|
168
168
|
)
|
|
169
|
+
total_diagnostics: int | None = pydantic.Field(
|
|
170
|
+
default=None,
|
|
171
|
+
description="範囲指定時だけ返す、対象コマンドの個別指摘の総数。",
|
|
172
|
+
)
|
|
173
|
+
next_offset: int | None = pydantic.Field(
|
|
174
|
+
default=None,
|
|
175
|
+
description="範囲指定時だけ返す、続きを取得する`offset`。続きが無ければnull。",
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@pydantic.model_serializer(mode="wrap")
|
|
179
|
+
def _omit_range_fields_without_range(
|
|
180
|
+
self,
|
|
181
|
+
handler: pydantic.SerializerFunctionWrapHandler,
|
|
182
|
+
) -> dict[str, typing.Any]:
|
|
183
|
+
"""範囲指定の無い呼び出しでは範囲項目を省き、従来と同じ応答を保つ。"""
|
|
184
|
+
serialized = typing.cast(dict[str, typing.Any], handler(self))
|
|
185
|
+
for field_name in ("total_diagnostics", "next_offset"):
|
|
186
|
+
if field_name not in self.model_fields_set:
|
|
187
|
+
serialized.pop(field_name, None)
|
|
188
|
+
return serialized
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class OutputRangeModel(pydantic.BaseModel):
|
|
192
|
+
"""`show_run_output`へ範囲を指定した場合の、コマンド1件分の出力ログ。"""
|
|
193
|
+
|
|
194
|
+
text: str = pydantic.Field(description="範囲内の行を改行込みで連結した文字列。")
|
|
195
|
+
offset: int = pydantic.Field(description="返した最初の行の位置(0始まり)。")
|
|
196
|
+
returned_lines: int = pydantic.Field(description="返した行数。")
|
|
197
|
+
total_lines: int = pydantic.Field(description="出力ログ全体の行数。")
|
|
198
|
+
next_offset: int | None = pydantic.Field(description="続きを取得する`offset`。続きが無ければnull。")
|
|
169
199
|
|
|
170
200
|
|
|
171
201
|
class RunWarningModel(pydantic.BaseModel):
|