boss-agent-cli 3.0.1__tar.gz → 3.1.0__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.
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/ci.yml +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/dependabot-auto-merge.yml +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.gitignore +3 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CHANGELOG.md +28 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTING.en.md +3 -3
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTING.md +3 -3
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTORS.svg +7 -7
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/PKG-INFO +12 -10
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/README.en.md +7 -7
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/README.md +6 -6
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/index.html +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/README.en.md +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/README.md +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/llms.txt +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/scenes.jsx +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-quickstart.en.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-quickstart.md +1 -1
- boss_agent_cli-3.1.0/docs/assets/star-history-dark.svg +44 -0
- boss_agent_cli-3.1.0/docs/assets/star-history.svg +44 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/capability-matrix.en.md +3 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/capability-matrix.md +3 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/commands.en.md +7 -4
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/commands.md +6 -3
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/cursor.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/python-sdk.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/windsurf.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/branch-protection.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/en-launch-story.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/zh-launch-story.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-risk.en.md +69 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-risk.md +58 -0
- boss_agent_cli-3.1.0/docs/research/upstream-antidetection-evaluation-2026-10-29.md +72 -0
- boss_agent_cli-3.1.0/docs/research/zhipin-cdp-free-read-path-2026-10-29.md +248 -0
- boss_agent_cli-3.1.0/docs/research/zhipin-request-identity-2026-10-29.md +263 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/troubleshooting.en.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/troubleshooting.md +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/llms.txt +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/README.en.md +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/README.md +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/pyproject.toml +17 -5
- boss_agent_cli-3.1.0/scripts/capture_request_identity.py +195 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/package_portable.py +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/__init__.py +1 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/_base_client.py +23 -6
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/boss.yaml +19 -11
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_client.py +191 -23
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_source.py +19 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/client.py +46 -19
- boss_agent_cli-3.1.0/src/boss_agent_cli/api/egress.py +193 -0
- boss_agent_cli-3.1.0/src/boss_agent_cli/api/httpx_helpers.py +143 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/models.py +10 -0
- boss_agent_cli-3.1.0/src/boss_agent_cli/api/proxy.py +86 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter.yaml +12 -6
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_client.py +11 -4
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/throttle.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/zhipin_errors.py +13 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/browser.py +58 -5
- boss_agent_cli-3.1.0/src/boss_agent_cli/auth/page_identity.py +102 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/adapters.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_doctor_checks.py +53 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_platform.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_recruiter_platform.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/agent.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/doctor.py +46 -15
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/jobs.py +3 -2
- boss_agent_cli-3.1.0/src/boss_agent_cli/commands/recruiter/whoami.py +67 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/register.py +2 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/wizard.py +2 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/config.py +7 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/service.py +19 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/display.py +49 -3
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/main.py +112 -6
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_args.py +5 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_tools.py +1 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/output.py +1 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/factory.py +3 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/recruiter_base.py +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/zhipin_recruiter.py +4 -4
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/data.py +16 -3
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/error_codes.py +10 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/tool_catalog.py +7 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_export.py +1 -1
- boss_agent_cli-3.1.0/src/boss_agent_cli/services/recruiter_identity.py +52 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/actions.py +3 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/renderer.py +2 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/runner.py +11 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_docs.py +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api.py +12 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api_client_methods.py +65 -9
- boss_agent_cli-3.1.0/tests/test_api_egress.py +177 -0
- boss_agent_cli-3.1.0/tests/test_api_httpx_helpers.py +170 -0
- boss_agent_cli-3.1.0/tests/test_api_proxy.py +65 -0
- boss_agent_cli-3.1.0/tests/test_auth_page_identity.py +81 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_browser_client.py +111 -11
- boss_agent_cli-3.1.0/tests/test_browser_client_account_guard.py +83 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cli_invariants.py +49 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_commands.py +1 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_compliance.py +3 -1
- boss_agent_cli-3.1.0/tests/test_dash_prefixed_security_id.py +53 -0
- boss_agent_cli-3.1.0/tests/test_default_headers_consistency.py +107 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_dependency_constraints.py +1 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_display.py +56 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_doctor_extended.py +83 -10
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_endpoints_loader.py +22 -1
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_exit_codes.py +1 -0
- boss_agent_cli-3.1.0/tests/test_httpx_accept_encoding.py +56 -0
- boss_agent_cli-3.1.0/tests/test_httpx_http2.py +69 -0
- boss_agent_cli-3.1.0/tests/test_httpx_only_channel.py +86 -0
- boss_agent_cli-3.1.0/tests/test_httpx_only_hint.py +29 -0
- boss_agent_cli-3.1.0/tests/test_login_stage_messaging.py +29 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_server.py +2 -2
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_output.py +2 -2
- boss_agent_cli-3.1.0/tests/test_recruiter_identity.py +109 -0
- boss_agent_cli-3.1.0/tests/test_recruiter_jobs_list.py +106 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_recommendations_and_read.py +17 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_contract.py +5 -2
- boss_agent_cli-3.1.0/tests/test_security_page_details.py +37 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_wizard.py +47 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/uv.lock +247 -352
- boss_agent_cli-3.0.1/docs/assets/star-history-dark.svg +0 -44
- boss_agent_cli-3.0.1/docs/assets/star-history.svg +0 -44
- boss_agent_cli-3.0.1/src/boss_agent_cli/api/httpx_helpers.py +0 -65
- boss_agent_cli-3.0.1/tests/test_api_httpx_helpers.py +0 -84
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.codecov.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.coderabbit.yaml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.devcontainer/devcontainer.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.dockerignore +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.gitattributes +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/CODEOWNERS +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/documentation.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/dependabot.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/labeler.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/social-preview.png +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/labeler.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/pages.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/release.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/stale.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/star-history.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/triage-cleanup.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/update-contributors.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.pre-commit-config.yaml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CODE_OF_CONDUCT.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/Dockerfile +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/LICENSE +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/ROADMAP.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/ROADMAP.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/SECURITY.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo-en.tape +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo-zh.tape +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo_showcase.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo_showcase_en.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/.gitignore +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/Inter-var.woff +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/LICENSES.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/NotoSansSC-500.woff +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/NotoSansSC-800.woff +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/OFL.txt +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/logo.png +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/directions.html +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/eras.js +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/export_showcase.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/index.html +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/output/soundtrack.m4a +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/player.js +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/render.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/render_directions.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/scenes.js +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/score.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/storyboard.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/verify.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/visuals.js +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/README.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/README.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/animations.jsx +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/app.jsx +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/boss-agent-cli-promo.html +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/lib.jsx +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/showcase/boss-agent-cli-showcase-thumb.jpg +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docker-compose.yml +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/adr/0001-default-low-risk-assistance-mode.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/adr/0002-explicit-research-operating-mode.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-hosts.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-hosts.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/assets/logo.png +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/getting-started.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/getting-started.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/ai-models.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/ai-models.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/claude-code.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/codex.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/docker.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/shell-agent.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/labels.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/release-checklist.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/awesome-submissions.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/promotion-article.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-abstraction.en.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-abstraction.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/readme-badge-policy.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/README.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/lagou.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/liepin.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/zhipin.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/smoke-testing.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/README.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/20260624T103356Z-fixture.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/README.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/necessary-conditions-2026-06-24.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/run_eval.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/scenarios.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/examples/opencode/opencode.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/glama.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/server.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/README.md +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/_release_probe.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/probe_recruiter_chat_frontend.ps1 +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/probe_recruiter_chat_frontend.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/quality_baseline.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/smoke_p0.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/update_contributors.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/verify_release.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/config.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/local_models.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/prompts.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/service.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_urls.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/cdp_risk_lock.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/endpoints.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/endpoints_loader.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_endpoints.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_resume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/request_budget.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/cookie_extract.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/curl_import.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/health.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/manager.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/qr_login.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/token_store.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/boss_adapter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/config.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/decision.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/events.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/execution.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/mock_adapter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/models.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/reply_ai.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/runner.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/safety.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/scoring.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/storage.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/cache/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/cache/store.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/chat_summary.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_contact_lookup.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_login_errors.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/ai_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/ai_local.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/apply.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chat.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chat_summary.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chatmsg.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/cities.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/clean.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/config_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/crawl.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/detail.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/digest.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/exchange.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/export.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/favorites.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/greet.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/history.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/interviews.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/login.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/logout.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/mark.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/me.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/pipeline.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/platforms.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/preset.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recommend.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/accept_resume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/applications.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/candidates.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/chat.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/download_resume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/recommendations.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/reply.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/request_resume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/resume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/resume_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/schema.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/search.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/shortlist.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/show.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/stats.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/status.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/watch.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/compliance.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/controls.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/exporter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/hooks.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/operations.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/transport.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/digest.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/hooks.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/index_cache.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/match_score.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_server.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/pipeline_state.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/base.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/zhipin.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/py.typed +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/export.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/models.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/store.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/templates.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/availability.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/formats.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/search_filters.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/browser_runtime.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_export.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_snapshot.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_utils.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/contact_lookup.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/friend_list_pages.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_card.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_identity.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/resume_parser.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/__init__.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/catalog.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/live_crawl.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/models.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/preflight.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/prompts.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/store.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/conftest.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/fixtures/favorites_card.json +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_automation.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_automation_cross_validation.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_crawl.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_error_contract.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_host_examples.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_commands.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_config.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_config_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_cover_letter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_fit.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_local.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_prompts.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_resume_optimize.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_service.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_suggest_keywords.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api_client_retry.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_apply.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_and_login_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_browser.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_manager_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_manager_flow.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_browser_source.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cache.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cache_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cdp_request_safety.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cdp_risk_lock_coverage.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_export_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_snapshot_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_summary.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_summary_command.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chatmsg_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chatmsg_uid_flow.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_clean_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_config_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_contact_lookup.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cookie_extract_regression.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_coverage_second_sprint.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_crawl.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_crawl_cli.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_curl_auth_import.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_digest.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_digest_command.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_eval_harness.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_export_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_favorites.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_greet_detail_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_greet_extended.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_hooks.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_index_cache.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_job_card_browser.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_job_item_lid.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_match_score.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_handler_registration.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_server_protocol.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_new_commands.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_open_source_docs.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_pipeline_commands.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_pipeline_state.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_base.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_cli.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_not_supported.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platforms_cmd.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_portable_package.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_preset.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_probe_script.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_public_api.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_qr_login.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_quality_baseline.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_chat_summary.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_client_retry.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_exchange_availability.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_exchange_confirm.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_last_msg_batching.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_resume_attachments.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_safety_regressions.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_release_verification.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_commands.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_export.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_import_compat.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_init_hints.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_models.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_store.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_templates.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_formats.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_mcp_tools.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_active_filter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_active_request_volume.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_filters.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_pipeline.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_shortlist.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_smoke_p0.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_stats.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_system_proxy.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_throttle.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_watch.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_watch_run_all.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_welfare_filter.py +0 -0
- {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_zhipin_errors.py +0 -0
|
@@ -2,9 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
本项目遵循 [Semantic Versioning](https://semver.org/)。
|
|
4
4
|
|
|
5
|
-
## [
|
|
5
|
+
## [3.1.0] - 2026-10-30
|
|
6
6
|
|
|
7
7
|
### Added
|
|
8
|
+
- 新增 `--browser-source httpx-only`:通道白名单为空,结构上不打开任何浏览器;`search` / `recommend` / `detail` / `friend_list` / `chat_history` 全部走 httpx,需要页面的能力返回 `BROWSER_DISABLED`。线上稳定性尚未证实,只作为显式选择,不做默认也不做自动降级;失败时 `hints.operator_actions` 提示回退 `auto`。
|
|
9
|
+
- 新增 `api/proxy.py` 的 `resolve_proxy()`:httpx 与每个 Chromium 启动点共用同一出口。此前 Chromium 完全忽略 `HTTPS_PROXY`/`ALL_PROXY`,登录走真实 IP 而请求走代理 IP。
|
|
10
|
+
- 新增 `auth/page_identity.py`:从真实页面请求采集 `token` / `zp_token` 并随会话加密落盘,httpx 与浏览器两条通道回放同一组值。
|
|
11
|
+
- 新增 `api/egress.py` 与 `BOSS_EGRESS_PROBE_URL`:出口地区与声明的语言/时区矛盾时 `CrawlService.create()` 拒绝开跑;未配置时不发任何探测流量,判为 `unknown` 且不阻断。
|
|
12
|
+
- `boss doctor` 新增 `request_delay` 检查:请求间隔下限低于 30 秒时 warn 并给出建议值。
|
|
13
|
+
- 新增三份研究文档:`docs/research/zhipin-request-identity-2026-10-29.md`(147 条业务请求的逐 header 规则)、`zhipin-cdp-free-read-path-2026-10-29.md`(只读链路脱离 CDP 的可行性、code 37 受控对照与恢复步骤)、`upstream-antidetection-evaluation-2026-10-29.md`(ruyijs / Safarier 的评估与不集成理由)。
|
|
14
|
+
|
|
15
|
+
- 搜索结果新增 `job_url`:由 `encryptJobId` 拼出 `https://www.zhipin.com/job_detail/<id>.html`,不额外请求平台。导出脱敏时与 `job_id` 一起替换为 `[REDACTED]`。
|
|
16
|
+
- 新增 `boss hr whoami` / MCP `boss_hr_whoami`:只读 `getUserInfo`,用 `identity` 判断当前登录态是否在招聘者侧。`identity` 为 1 时 `ready` 为 true;账号资料字段 `recruit` 只以 `profile_recruit` 回显,不参与判断。双身份账号停在求职者侧时返回 `ready: false` 和官方页面切换指引,命令本身不切换身份。
|
|
8
17
|
- 新增跨实例、CLI/MCP 子进程与 crawl 的本地共享请求预算:默认单个主动操作持锁至响应分类完成,滑动 60 秒最多 20 次,总等待上限 30 秒;`request_budget_dir` 可显式分组,组内采用统一限制并共享风险阻断。HTTP 429 / code 9 和有效 `Retry-After` 持久化冷却,进程退出只释放执行锁;预算超限返回 `REQUEST_BUDGET_EXHAUSTED`,保留 checkpoint 后显式恢复。主动操作计量不覆盖浏览器自主资源、轮询、自动重定向或认证内部的每条网络请求,不按公网 IP 自动合并任务。
|
|
9
18
|
- 招聘者 `agent run --resume` / MCP `boss_agent_run.resume` 提供显式恢复入口,保留确认结果与队列,普通运行不清除停止状态。
|
|
10
19
|
- 招聘者 `hr chat` 的 hints 新增 `total_unread`:聊天页显示的未读总数,读自页面 geek-list 组件的 `uncountTab$` 第 1 项(实测与页面 UI 一致,覆盖全部会话,不限于已加载的部分);同时给出原始分项计数 `unread_by_tab` 和来源 `total_unread_source`(`page.uncountTab$[1]`)。只读页面内存,不额外发请求;页面不可用(非 CDP 或没打开聊天页)时三项均为 `null`(Refs #456)。
|
|
@@ -17,12 +26,30 @@
|
|
|
17
26
|
- 新增全局 `--exit-codes {envelope,sysexits}`(默认 envelope,0/1 契约不变):sysexits 模式按错误类别返回语义化退出码(77 认证;75 限流/预算/超时;78 参数/配置;69 风控/平台不支持;其余 1),usage error 通过解析前预扫描同一选项;stdout 信封不受影响。
|
|
18
27
|
|
|
19
28
|
### Changed
|
|
29
|
+
- **行为变更:默认请求间隔 `--delay` 从 `1.5-3.0` 改为 `30-60`**(`config.DEFAULT_REQUEST_DELAY`,原先 10 处字面量收敛为一个常量)。受控对照:15 秒间隔连续 3 次 `search` 会在第 3 次命中 code 37「您的环境存在异常」,30 秒起两轮共 6/6 通过。单条只读命令只发一次请求、首次调用不等待(`boss status` 仍约 0.3 秒);受影响的是分页、批量详情与 crawl。该下限来自本机观测,不是平台公布阈值。
|
|
30
|
+
- 请求身份对齐真实页面抓包:`User-Agent`、`sec-ch-ua*`、`Accept-Language`、`Accept-Encoding`、`priority`,补上页面自带的 `token`、`zp_token`、`traceid` 与 `X-Requested-With`;`sec-ch-ua-platform` 改由 User-Agent 推导(原先按宿主操作系统,Windows 上会发出「UA 说 macOS、Client Hint 说 Windows」的矛盾组合)。
|
|
31
|
+
- `search` 改为真机的 `POST` + `application/x-www-form-urlencoded` 表单体,字段集合与顺序按抓包固定,缺省筛选项发空串而非省略;`recommend` 保持 GET。
|
|
32
|
+
- httpx 通道改用 HTTP/2(依赖改为 `httpx[socks,http2]`,新增 `brotli`、`zstandard`),`Accept-Encoding` 的声明与可解码能力保持一致。
|
|
33
|
+
- Chromium 启动加入 `--force-webrtc-ip-handling-policy=disable_non_proxied_udp` 与 `--enforce-webrtc-ip-permission-check`,避免 WebRTC 用真实地址发送 UDP。
|
|
34
|
+
|
|
35
|
+
- `boss doctor` 默认不再读取浏览器 Cookie,避免 macOS 钥匙串授权弹窗。需要核对浏览器登录态时使用 `boss doctor --probe-cookies`。`boss status` 与 `boss search` 本来就只看本地凭据。
|
|
36
|
+
- `hr jobs list` 改为读取职位管理页的 `data/list` 接口,并用 `--page` 分页。MCP `boss_hr_jobs` 的 `page` 只在 list 时传给该分页。`boss schema` 同步登记该选项。
|
|
37
|
+
- 招聘者 `chat_geek_info` 改为沟通页当前参数:`uid`、`securityId`,以及调用方提供时的 `geekSource`。没有命令调用这个方法。
|
|
38
|
+
- `boss doctor --live-probe` 复用 `hr whoami` 的身份判断:`identity` 为 0 时先记下求职者侧登录态,不继续请求招聘者接口;`identity` 为 1 时才做招聘者只读探测。命令不切换身份。
|
|
20
39
|
- MCP、OpenAI 和 Anthropic 工具格式统一使用不依赖 MCP SDK 的共享目录,工具导出由旧的不完整命令映射改为与运行时一致的 77 个工具;原生 schema 保留 39 个顶层命令。保留工具参数结构的脱敏例外仅限 schema 明确声明的内置参数路径,真实业务数据和敏感默认值/示例仍脱敏。
|
|
21
40
|
- 恢复面向 PR 的 `CI` 工作流(参照 Wholiver/metis 的 Test 工作流):`pull_request` 与推送 `master` 时运行 ruff、mypy、pre-commit、CLI/schema 冒烟和 Python 3.10 / 3.12 / 3.14 测试矩阵;只读权限、同一 PR 新推送取消旧运行、不使用任何 secret,外部贡献者的 fork PR 可直接运行。pre-commit 的 end-of-file-fixer 排除 star-history 自动生成的 SVG,并补上 `wizard/renderer.py` 结尾换行,使 `pre-commit run --all-files` 在 master 上可以通过;贡献指南同步更新 CI 说明,去掉已失效的 Codecov 描述。
|
|
22
41
|
- 同步项目站点中英文正文与 `llms.txt` 的 v3.0.0 版本、命令与 MCP 数量、双角色工作流及平台风险停止/显式恢复说明,移除过时的模式级阻断宣传;修正发布会源工程的本地预览服务目录。
|
|
23
42
|
- 文档对齐:`CLAUDE.md` 与 `docs/maintainer/branch-protection.md` 同步 2026-10-09 已恢复的 PR CI(lint + Python 3.10 / 3.12 / 3.14 测试矩阵;required status checks 仍未配置);`pyproject.toml` 注释改指本地 `scripts/verify_release.py --fresh-install`;中英文 README 与 `CLAUDE.md` 的测试计数更新为 2900+。
|
|
24
43
|
|
|
25
44
|
### Fixed
|
|
45
|
+
- 复用自动探测到的 CDP 浏览器前,先比对 `wt2` 与本地凭据:不同账号时拒绝复用其会话,改用本地凭据自建浏览器,避免拿 A 账号的登录态执行 B 账号的请求(实测会立刻得到 code 37)。
|
|
46
|
+
- `security_id` 可以合法以 `-` 开头(实测 328 字符的 base64url 取值),此前会被 Click 当成未知选项,`boss detail` 直接传时报 `No such option`;现在为未声明的横杠开头取值补 `--`。
|
|
47
|
+
- 候选者侧 referer 由 `/web/geek/job` 更正为真实页面 `/web/geek/jobs`(`web_pages` 与 5 处 referer 一并修正)。
|
|
48
|
+
- 抓包脚本判定目标页改用 host 解析,不再用子串匹配(CodeQL `py/incomplete-url-substring-sanitization`)。
|
|
49
|
+
|
|
50
|
+
- `boss login` 的中间提示不再宣称「检测到登录成功」:扫码确认到 `wt2` 出现只是**识别**,之后还要校验页面、等 3 秒、回首页提取,任一步命中官方验证页都会停下。现在统一为「已识别到扫码确认,正在校验并保存凭证…」,真正的「登录成功(…)」仍由命令层在凭据落盘后输出(#488)。
|
|
51
|
+
- `security_page` / 访问受限页的错误详情补上 `risk_source` 命中的页面路径(`error.details.path`):此前只有 `risk_source`,用户无法区分 `verify.html`(安全校验)与 `security.html`(风险页),维护者也拿不到定位依据(#488)。
|
|
52
|
+
- `boss search` 等浏览器通道在冷启动时只对首页做一次 15 秒 `page.goto`,首页卡住就以 `NETWORK_ERROR` 原样抛出 `Page.goto Timeout 15000ms`(Discussion #250)。现在与登录预热对齐:超时后若不是安全验证页,就跳到 `about:blank` 再试一次;仍然失败则返回 `BROWSER_NAV_TIMEOUT`,说明要先打开官网首页或刷新登录态。`--url` 仍只解析筛选条件,搜索请求之前还是要先打开首页。把 `--json` 等全局选项写在子命令后面时,`INVALID_PARAM` 会提示该选项必须写在子命令之前。
|
|
26
53
|
- 修正节流完成时间覆盖后续预约、高斯采样突破间隔下限及 crawl 分类别预算边界;使用单调时钟保持预约,crawl 首页种子导航、分页、页面 fetch 和 CDP fallback 分别申请预算。等待及发送前检查停止、风险和截止时间,停止信号不触发重试或通道降级;写后确认受阻保留 `ACTION_UNCONFIRMED` 和 `confirmation_stop`,失败下载仍记节流,429 下载不读正文或创建文件。crawl 在中断或清理失败前保存进度,清理异常保留原风险或预算停止状态。
|
|
27
54
|
- 校验 `--delay`、延迟范围和共享预算配置的有限数值、正整数及绝对路径约束;非法配置不落盘,保留配置修复入口。预算组有效风险状态进入 `status` / `doctor`,显式清风险锁保留预算及冷却,风险写盘失败仍阻断当前实例。
|
|
28
55
|
- 浏览器风险识别续查:聊天页 `/wapi/` 的 HTTP 403 在响应头事件立即停止,不等正文;错误/缺失 Content-Type 的受限 HTML 仍生成脱敏分类元数据。业务 JSON 先解析原码,避免成功响应中的 HTML 说明触发误锁;纯文本业务响应同样检查风险,外站和普通静态资源不误锁。
|
|
@@ -16,13 +16,13 @@ uv run pytest tests/ -v
|
|
|
16
16
|
uv run pre-commit install
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Python **≥ 3.
|
|
19
|
+
Python **≥ 3.11** is required. We use [`uv`](https://github.com/astral-sh/uv) for dependency management — `uv sync --all-extras` installs runtime + dev deps in a local `.venv`.
|
|
20
20
|
|
|
21
21
|
## Coding Standards
|
|
22
22
|
|
|
23
23
|
- Python source indentation uses **tabs**.
|
|
24
24
|
- `indent-width = 4` in `pyproject.toml` is the formatter display width. It does not mean Python files should switch to spaces.
|
|
25
|
-
- Use Python >= 3.
|
|
25
|
+
- Use Python >= 3.11 and `X | Y` union syntax.
|
|
26
26
|
- Command output must preserve the JSON envelope contract: stdout is agent-readable JSON only, stderr is logs and progress.
|
|
27
27
|
- Commit messages use the repository Chinese format `type: 中文描述`.
|
|
28
28
|
- Type checking is blocking in CI. New code must pass `uv run mypy src/boss_agent_cli`.
|
|
@@ -70,7 +70,7 @@ Before investing in promotion, examples, or integrations, check those passive si
|
|
|
70
70
|
```
|
|
71
71
|
5. **Commit** atomically — one logical change per commit.
|
|
72
72
|
6. **Push** and open a PR against `master`.
|
|
73
|
-
7. **CI green** is a hard prerequisite before merge: the `CI` workflow runs ruff / mypy / pre-commit and tests on Python 3.
|
|
73
|
+
7. **CI green** is a hard prerequisite before merge: the `CI` workflow runs ruff / mypy / pre-commit and tests on Python 3.11, 3.12 and 3.14 for every PR (fork PRs included, no secrets needed), plus CodeQL and GitGuardian scans. Tests are fully offline; don't add tests that need the network, a real browser or a real account.
|
|
74
74
|
|
|
75
75
|
Maintainers will `squash merge`, so the squash title must follow the commit convention above.
|
|
76
76
|
|
|
@@ -16,13 +16,13 @@ uv run pytest tests/ -v
|
|
|
16
16
|
uv run pre-commit install
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Python **≥ 3.
|
|
19
|
+
Python **≥ 3.11** 是最低要求。项目使用 [`uv`](https://github.com/astral-sh/uv) 管理依赖,`uv sync --all-extras` 会在本地 `.venv` 中安装运行时和开发依赖。
|
|
20
20
|
|
|
21
21
|
## 编码规范
|
|
22
22
|
|
|
23
23
|
- Python 源码缩进使用 **tab**。
|
|
24
24
|
- `pyproject.toml` 中的 `indent-width = 4` 表示格式工具的视觉宽度,不表示改为空格缩进。
|
|
25
|
-
- Python >= 3.
|
|
25
|
+
- Python >= 3.11,使用 `X | Y` 联合类型。
|
|
26
26
|
- 命令输出必须保持 JSON 信封契约:stdout 只输出 Agent 可读 JSON,stderr 输出日志和进度。
|
|
27
27
|
- commit message:`type: 中文描述`(feat / fix / refactor / docs / test / chore / ci)。
|
|
28
28
|
- 类型检查:`uv run mypy src/boss_agent_cli`,CI 阻塞式门禁,新代码必须零 mypy 错误。
|
|
@@ -70,7 +70,7 @@ git diff --check
|
|
|
70
70
|
```
|
|
71
71
|
5. **原子提交**:每个 commit 只做一件事。
|
|
72
72
|
6. **Push** 并向 `master` 发起 Pull Request。
|
|
73
|
-
7. **CI 全绿**才能合并:`CI` 工作流在 PR 上跑 ruff / mypy / pre-commit 和 Python 3.
|
|
73
|
+
7. **CI 全绿**才能合并:`CI` 工作流在 PR 上跑 ruff / mypy / pre-commit 和 Python 3.11、3.12、3.14 的测试(fork 的 PR 同样会跑,不需要任何 secret),另有 CodeQL 和 GitGuardian 安全扫描。测试全部离线,不要写需要网络、真实浏览器或真实账号的测试。
|
|
74
74
|
|
|
75
75
|
维护者会使用 squash merge,所以最终 squash 标题也要遵守上面的 commit 格式。
|
|
76
76
|
|