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.
Files changed (452) hide show
  1. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/ci.yml +1 -1
  2. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/dependabot-auto-merge.yml +1 -1
  3. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.gitignore +3 -0
  4. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CHANGELOG.md +28 -1
  5. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTING.en.md +3 -3
  6. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTING.md +3 -3
  7. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CONTRIBUTORS.svg +7 -7
  8. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/PKG-INFO +12 -10
  9. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/README.en.md +7 -7
  10. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/README.md +6 -6
  11. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/index.html +2 -2
  12. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/README.en.md +2 -2
  13. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/README.md +2 -2
  14. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/llms.txt +2 -2
  15. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/scenes.jsx +1 -1
  16. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-quickstart.en.md +1 -1
  17. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-quickstart.md +1 -1
  18. boss_agent_cli-3.1.0/docs/assets/star-history-dark.svg +44 -0
  19. boss_agent_cli-3.1.0/docs/assets/star-history.svg +44 -0
  20. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/capability-matrix.en.md +3 -2
  21. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/capability-matrix.md +3 -2
  22. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/commands.en.md +7 -4
  23. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/commands.md +6 -3
  24. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/cursor.md +1 -1
  25. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/python-sdk.md +1 -1
  26. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/windsurf.md +1 -1
  27. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/branch-protection.md +1 -1
  28. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/en-launch-story.md +1 -1
  29. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/zh-launch-story.md +1 -1
  30. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-risk.en.md +69 -0
  31. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-risk.md +58 -0
  32. boss_agent_cli-3.1.0/docs/research/upstream-antidetection-evaluation-2026-10-29.md +72 -0
  33. boss_agent_cli-3.1.0/docs/research/zhipin-cdp-free-read-path-2026-10-29.md +248 -0
  34. boss_agent_cli-3.1.0/docs/research/zhipin-request-identity-2026-10-29.md +263 -0
  35. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/troubleshooting.en.md +1 -1
  36. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/troubleshooting.md +1 -1
  37. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/llms.txt +1 -1
  38. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/README.en.md +2 -1
  39. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/README.md +2 -1
  40. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/pyproject.toml +17 -5
  41. boss_agent_cli-3.1.0/scripts/capture_request_identity.py +195 -0
  42. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/package_portable.py +1 -1
  43. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/__init__.py +1 -1
  44. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/_base_client.py +23 -6
  45. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/boss.yaml +19 -11
  46. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_client.py +191 -23
  47. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_source.py +19 -0
  48. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/client.py +46 -19
  49. boss_agent_cli-3.1.0/src/boss_agent_cli/api/egress.py +193 -0
  50. boss_agent_cli-3.1.0/src/boss_agent_cli/api/httpx_helpers.py +143 -0
  51. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/models.py +10 -0
  52. boss_agent_cli-3.1.0/src/boss_agent_cli/api/proxy.py +86 -0
  53. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter.yaml +12 -6
  54. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_client.py +11 -4
  55. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/throttle.py +2 -1
  56. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/zhipin_errors.py +13 -0
  57. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/browser.py +58 -5
  58. boss_agent_cli-3.1.0/src/boss_agent_cli/auth/page_identity.py +102 -0
  59. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/adapters.py +2 -1
  60. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_doctor_checks.py +53 -0
  61. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_platform.py +2 -1
  62. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_recruiter_platform.py +2 -1
  63. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/agent.py +2 -1
  64. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/doctor.py +46 -15
  65. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/jobs.py +3 -2
  66. boss_agent_cli-3.1.0/src/boss_agent_cli/commands/recruiter/whoami.py +67 -0
  67. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/register.py +2 -0
  68. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/wizard.py +2 -1
  69. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/config.py +7 -1
  70. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/service.py +19 -0
  71. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/display.py +49 -3
  72. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/main.py +112 -6
  73. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_args.py +5 -0
  74. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_tools.py +1 -0
  75. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/output.py +1 -0
  76. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/factory.py +3 -2
  77. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/recruiter_base.py +2 -2
  78. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/zhipin_recruiter.py +4 -4
  79. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/data.py +16 -3
  80. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/error_codes.py +10 -0
  81. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/tool_catalog.py +7 -1
  82. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_export.py +1 -1
  83. boss_agent_cli-3.1.0/src/boss_agent_cli/services/recruiter_identity.py +52 -0
  84. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/actions.py +3 -2
  85. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/renderer.py +2 -0
  86. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/runner.py +11 -0
  87. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_docs.py +2 -2
  88. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api.py +12 -1
  89. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api_client_methods.py +65 -9
  90. boss_agent_cli-3.1.0/tests/test_api_egress.py +177 -0
  91. boss_agent_cli-3.1.0/tests/test_api_httpx_helpers.py +170 -0
  92. boss_agent_cli-3.1.0/tests/test_api_proxy.py +65 -0
  93. boss_agent_cli-3.1.0/tests/test_auth_page_identity.py +81 -0
  94. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_browser_client.py +111 -11
  95. boss_agent_cli-3.1.0/tests/test_browser_client_account_guard.py +83 -0
  96. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cli_invariants.py +49 -0
  97. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_commands.py +1 -0
  98. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_compliance.py +3 -1
  99. boss_agent_cli-3.1.0/tests/test_dash_prefixed_security_id.py +53 -0
  100. boss_agent_cli-3.1.0/tests/test_default_headers_consistency.py +107 -0
  101. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_dependency_constraints.py +1 -0
  102. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_display.py +56 -0
  103. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_doctor_extended.py +83 -10
  104. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_endpoints_loader.py +22 -1
  105. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_exit_codes.py +1 -0
  106. boss_agent_cli-3.1.0/tests/test_httpx_accept_encoding.py +56 -0
  107. boss_agent_cli-3.1.0/tests/test_httpx_http2.py +69 -0
  108. boss_agent_cli-3.1.0/tests/test_httpx_only_channel.py +86 -0
  109. boss_agent_cli-3.1.0/tests/test_httpx_only_hint.py +29 -0
  110. boss_agent_cli-3.1.0/tests/test_login_stage_messaging.py +29 -0
  111. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_server.py +2 -2
  112. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_output.py +2 -2
  113. boss_agent_cli-3.1.0/tests/test_recruiter_identity.py +109 -0
  114. boss_agent_cli-3.1.0/tests/test_recruiter_jobs_list.py +106 -0
  115. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_recommendations_and_read.py +17 -0
  116. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_contract.py +5 -2
  117. boss_agent_cli-3.1.0/tests/test_security_page_details.py +37 -0
  118. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_wizard.py +47 -0
  119. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/uv.lock +247 -352
  120. boss_agent_cli-3.0.1/docs/assets/star-history-dark.svg +0 -44
  121. boss_agent_cli-3.0.1/docs/assets/star-history.svg +0 -44
  122. boss_agent_cli-3.0.1/src/boss_agent_cli/api/httpx_helpers.py +0 -65
  123. boss_agent_cli-3.0.1/tests/test_api_httpx_helpers.py +0 -84
  124. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.codecov.yml +0 -0
  125. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.coderabbit.yaml +0 -0
  126. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.devcontainer/devcontainer.json +0 -0
  127. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.dockerignore +0 -0
  128. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.gitattributes +0 -0
  129. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/CODEOWNERS +0 -0
  130. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  131. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  132. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/documentation.yml +0 -0
  133. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  134. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  135. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/dependabot.yml +0 -0
  136. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/labeler.yml +0 -0
  137. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/social-preview.png +0 -0
  138. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/labeler.yml +0 -0
  139. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/pages.yml +0 -0
  140. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/release.yml +0 -0
  141. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/stale.yml +0 -0
  142. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/star-history.yml +0 -0
  143. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/triage-cleanup.yml +0 -0
  144. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.github/workflows/update-contributors.yml +0 -0
  145. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/.pre-commit-config.yaml +0 -0
  146. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/CODE_OF_CONDUCT.md +0 -0
  147. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/Dockerfile +0 -0
  148. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/LICENSE +0 -0
  149. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/ROADMAP.en.md +0 -0
  150. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/ROADMAP.md +0 -0
  151. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/SECURITY.md +0 -0
  152. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo-en.tape +0 -0
  153. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo-zh.tape +0 -0
  154. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo_showcase.py +0 -0
  155. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/demo_showcase_en.py +0 -0
  156. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/.gitignore +0 -0
  157. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/Inter-var.woff +0 -0
  158. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/LICENSES.md +0 -0
  159. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/NotoSansSC-500.woff +0 -0
  160. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/NotoSansSC-800.woff +0 -0
  161. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/OFL.txt +0 -0
  162. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/assets/logo.png +0 -0
  163. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/directions.html +0 -0
  164. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/eras.js +0 -0
  165. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/export_showcase.py +0 -0
  166. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/index.html +0 -0
  167. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/output/soundtrack.m4a +0 -0
  168. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/player.js +0 -0
  169. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/render.py +0 -0
  170. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/render_directions.py +0 -0
  171. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/scenes.js +0 -0
  172. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/score.py +0 -0
  173. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/storyboard.json +0 -0
  174. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/verify.py +0 -0
  175. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/keynote-animation/visuals.js +0 -0
  176. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/README.en.md +0 -0
  177. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/README.md +0 -0
  178. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/animations.jsx +0 -0
  179. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/app.jsx +0 -0
  180. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/boss-agent-cli-promo.html +0 -0
  181. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/promo-showcase/lib.jsx +0 -0
  182. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/demo/showcase/boss-agent-cli-showcase-thumb.jpg +0 -0
  183. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docker-compose.yml +0 -0
  184. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/adr/0001-default-low-risk-assistance-mode.md +0 -0
  185. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/adr/0002-explicit-research-operating-mode.md +0 -0
  186. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-hosts.en.md +0 -0
  187. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/agent-hosts.md +0 -0
  188. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/assets/logo.png +0 -0
  189. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/getting-started.en.md +0 -0
  190. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/getting-started.md +0 -0
  191. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/ai-models.en.md +0 -0
  192. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/ai-models.md +0 -0
  193. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/claude-code.md +0 -0
  194. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/codex.md +0 -0
  195. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/docker.md +0 -0
  196. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/integrations/shell-agent.md +0 -0
  197. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/labels.md +0 -0
  198. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/maintainer/release-checklist.md +0 -0
  199. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/awesome-submissions.md +0 -0
  200. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/marketing/promotion-article.md +0 -0
  201. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-abstraction.en.md +0 -0
  202. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/platform-abstraction.md +0 -0
  203. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/readme-badge-policy.md +0 -0
  204. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/README.md +0 -0
  205. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/lagou.md +0 -0
  206. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/liepin.md +0 -0
  207. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/research/platforms/zhipin.md +0 -0
  208. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/docs/smoke-testing.md +0 -0
  209. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/README.md +0 -0
  210. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/20260624T103356Z-fixture.json +0 -0
  211. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/README.md +0 -0
  212. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/results/necessary-conditions-2026-06-24.json +0 -0
  213. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/run_eval.py +0 -0
  214. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/evals/scenarios.json +0 -0
  215. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/examples/opencode/opencode.json +0 -0
  216. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/glama.json +0 -0
  217. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/mcp-server/server.py +0 -0
  218. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/README.md +0 -0
  219. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/_release_probe.py +0 -0
  220. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/probe_recruiter_chat_frontend.ps1 +0 -0
  221. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/probe_recruiter_chat_frontend.py +0 -0
  222. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/quality_baseline.py +0 -0
  223. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/smoke_p0.py +0 -0
  224. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/update_contributors.py +0 -0
  225. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/scripts/verify_release.py +0 -0
  226. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/__init__.py +0 -0
  227. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/config.py +0 -0
  228. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/local_models.py +0 -0
  229. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/prompts.py +0 -0
  230. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/ai/service.py +0 -0
  231. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/__init__.py +0 -0
  232. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/browser_urls.py +0 -0
  233. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/cdp_risk_lock.py +0 -0
  234. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/endpoints.py +0 -0
  235. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/endpoints_loader.py +0 -0
  236. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_endpoints.py +0 -0
  237. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/recruiter_resume.py +0 -0
  238. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/api/request_budget.py +0 -0
  239. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/__init__.py +0 -0
  240. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/cookie_extract.py +0 -0
  241. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/curl_import.py +0 -0
  242. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/health.py +0 -0
  243. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/manager.py +0 -0
  244. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/qr_login.py +0 -0
  245. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/auth/token_store.py +0 -0
  246. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/__init__.py +0 -0
  247. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/boss_adapter.py +0 -0
  248. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/config.py +0 -0
  249. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/decision.py +0 -0
  250. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/events.py +0 -0
  251. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/execution.py +0 -0
  252. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/mock_adapter.py +0 -0
  253. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/models.py +0 -0
  254. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/reply_ai.py +0 -0
  255. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/runner.py +0 -0
  256. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/safety.py +0 -0
  257. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/scoring.py +0 -0
  258. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/automation/storage.py +0 -0
  259. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/cache/__init__.py +0 -0
  260. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/cache/store.py +0 -0
  261. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/chat_summary.py +0 -0
  262. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/__init__.py +0 -0
  263. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_contact_lookup.py +0 -0
  264. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/_login_errors.py +0 -0
  265. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/ai_cmd.py +0 -0
  266. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/ai_local.py +0 -0
  267. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/apply.py +0 -0
  268. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chat.py +0 -0
  269. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chat_summary.py +0 -0
  270. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/chatmsg.py +0 -0
  271. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/cities.py +0 -0
  272. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/clean.py +0 -0
  273. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/config_cmd.py +0 -0
  274. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/crawl.py +0 -0
  275. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/detail.py +0 -0
  276. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/digest.py +0 -0
  277. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/exchange.py +0 -0
  278. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/export.py +0 -0
  279. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/favorites.py +0 -0
  280. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/greet.py +0 -0
  281. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/history.py +0 -0
  282. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/interviews.py +0 -0
  283. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/login.py +0 -0
  284. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/logout.py +0 -0
  285. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/mark.py +0 -0
  286. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/me.py +0 -0
  287. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/pipeline.py +0 -0
  288. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/platforms.py +0 -0
  289. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/preset.py +0 -0
  290. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recommend.py +0 -0
  291. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/__init__.py +0 -0
  292. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/accept_resume.py +0 -0
  293. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/applications.py +0 -0
  294. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/candidates.py +0 -0
  295. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/chat.py +0 -0
  296. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/download_resume.py +0 -0
  297. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/recommendations.py +0 -0
  298. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/reply.py +0 -0
  299. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/request_resume.py +0 -0
  300. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/recruiter/resume.py +0 -0
  301. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/resume_cmd.py +0 -0
  302. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/schema.py +0 -0
  303. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/search.py +0 -0
  304. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/shortlist.py +0 -0
  305. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/show.py +0 -0
  306. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/stats.py +0 -0
  307. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/status.py +0 -0
  308. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/commands/watch.py +0 -0
  309. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/compliance.py +0 -0
  310. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/__init__.py +0 -0
  311. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/controls.py +0 -0
  312. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/exporter.py +0 -0
  313. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/hooks.py +0 -0
  314. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/operations.py +0 -0
  315. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/crawler/transport.py +0 -0
  316. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/digest.py +0 -0
  317. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/hooks.py +0 -0
  318. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/index_cache.py +0 -0
  319. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/match_score.py +0 -0
  320. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/mcp_server.py +0 -0
  321. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/pipeline_state.py +0 -0
  322. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/__init__.py +0 -0
  323. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/base.py +0 -0
  324. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/platforms/zhipin.py +0 -0
  325. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/py.typed +0 -0
  326. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/__init__.py +0 -0
  327. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/export.py +0 -0
  328. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/models.py +0 -0
  329. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/store.py +0 -0
  330. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/resume/templates.py +0 -0
  331. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/__init__.py +0 -0
  332. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/availability.py +0 -0
  333. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/schema/formats.py +0 -0
  334. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/search_filters.py +0 -0
  335. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/__init__.py +0 -0
  336. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/browser_runtime.py +0 -0
  337. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_export.py +0 -0
  338. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_snapshot.py +0 -0
  339. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/chat_utils.py +0 -0
  340. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/contact_lookup.py +0 -0
  341. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/friend_list_pages.py +0 -0
  342. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_card.py +0 -0
  343. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/job_identity.py +0 -0
  344. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/services/resume_parser.py +0 -0
  345. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/__init__.py +0 -0
  346. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/catalog.py +0 -0
  347. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/live_crawl.py +0 -0
  348. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/models.py +0 -0
  349. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/preflight.py +0 -0
  350. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/prompts.py +0 -0
  351. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/src/boss_agent_cli/wizard/store.py +0 -0
  352. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/conftest.py +0 -0
  353. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/fixtures/favorites_card.json +0 -0
  354. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_automation.py +0 -0
  355. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_automation_cross_validation.py +0 -0
  356. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_crawl.py +0 -0
  357. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_error_contract.py +0 -0
  358. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_agent_host_examples.py +0 -0
  359. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_commands.py +0 -0
  360. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_config.py +0 -0
  361. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_config_cmd.py +0 -0
  362. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_cover_letter.py +0 -0
  363. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_fit.py +0 -0
  364. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_local.py +0 -0
  365. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_prompts.py +0 -0
  366. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_resume_optimize.py +0 -0
  367. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_service.py +0 -0
  368. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_ai_suggest_keywords.py +0 -0
  369. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_api_client_retry.py +0 -0
  370. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_apply.py +0 -0
  371. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth.py +0 -0
  372. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_and_login_extended.py +0 -0
  373. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_browser.py +0 -0
  374. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_manager_extended.py +0 -0
  375. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_auth_manager_flow.py +0 -0
  376. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_browser_source.py +0 -0
  377. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cache.py +0 -0
  378. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cache_extended.py +0 -0
  379. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cdp_request_safety.py +0 -0
  380. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cdp_risk_lock_coverage.py +0 -0
  381. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_export_extended.py +0 -0
  382. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_snapshot_extended.py +0 -0
  383. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_summary.py +0 -0
  384. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chat_summary_command.py +0 -0
  385. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chatmsg_extended.py +0 -0
  386. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_chatmsg_uid_flow.py +0 -0
  387. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_clean_cmd.py +0 -0
  388. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_config_cmd.py +0 -0
  389. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_contact_lookup.py +0 -0
  390. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_cookie_extract_regression.py +0 -0
  391. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_coverage_second_sprint.py +0 -0
  392. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_crawl.py +0 -0
  393. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_crawl_cli.py +0 -0
  394. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_curl_auth_import.py +0 -0
  395. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_digest.py +0 -0
  396. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_digest_command.py +0 -0
  397. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_eval_harness.py +0 -0
  398. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_export_extended.py +0 -0
  399. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_favorites.py +0 -0
  400. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_greet_detail_extended.py +0 -0
  401. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_greet_extended.py +0 -0
  402. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_hooks.py +0 -0
  403. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_index_cache.py +0 -0
  404. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_job_card_browser.py +0 -0
  405. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_job_item_lid.py +0 -0
  406. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_match_score.py +0 -0
  407. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_handler_registration.py +0 -0
  408. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_mcp_server_protocol.py +0 -0
  409. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_new_commands.py +0 -0
  410. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_open_source_docs.py +0 -0
  411. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_pipeline_commands.py +0 -0
  412. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_pipeline_state.py +0 -0
  413. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_base.py +0 -0
  414. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_cli.py +0 -0
  415. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platform_not_supported.py +0 -0
  416. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_platforms_cmd.py +0 -0
  417. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_portable_package.py +0 -0
  418. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_preset.py +0 -0
  419. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_probe_script.py +0 -0
  420. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_public_api.py +0 -0
  421. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_qr_login.py +0 -0
  422. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_quality_baseline.py +0 -0
  423. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_chat_summary.py +0 -0
  424. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_client_retry.py +0 -0
  425. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_exchange_availability.py +0 -0
  426. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_exchange_confirm.py +0 -0
  427. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_last_msg_batching.py +0 -0
  428. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_resume_attachments.py +0 -0
  429. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_recruiter_safety_regressions.py +0 -0
  430. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_release_verification.py +0 -0
  431. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_commands.py +0 -0
  432. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_export.py +0 -0
  433. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_import_compat.py +0 -0
  434. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_init_hints.py +0 -0
  435. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_models.py +0 -0
  436. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_store.py +0 -0
  437. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_resume_templates.py +0 -0
  438. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_formats.py +0 -0
  439. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_schema_mcp_tools.py +0 -0
  440. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_active_filter.py +0 -0
  441. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_active_request_volume.py +0 -0
  442. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_filters.py +0 -0
  443. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_search_pipeline.py +0 -0
  444. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_shortlist.py +0 -0
  445. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_smoke_p0.py +0 -0
  446. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_stats.py +0 -0
  447. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_system_proxy.py +0 -0
  448. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_throttle.py +0 -0
  449. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_watch.py +0 -0
  450. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_watch_run_all.py +0 -0
  451. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_welfare_filter.py +0 -0
  452. {boss_agent_cli-3.0.1 → boss_agent_cli-3.1.0}/tests/test_zhipin_errors.py +0 -0
@@ -69,7 +69,7 @@ jobs:
69
69
  fail-fast: false
70
70
  matrix:
71
71
  # 最低支持版本、主力版本、最新版本
72
- python-version: ["3.10", "3.12", "3.14"]
72
+ python-version: ["3.11", "3.12", "3.14"]
73
73
  env:
74
74
  UV_PYTHON: ${{ matrix.python-version }}
75
75
  steps:
@@ -13,7 +13,7 @@ jobs:
13
13
  steps:
14
14
  - name: Fetch Dependabot metadata
15
15
  id: meta
16
- uses: dependabot/fetch-metadata@v2
16
+ uses: dependabot/fetch-metadata@v3
17
17
  with:
18
18
  github-token: ${{ secrets.GITHUB_TOKEN }}
19
19
 
@@ -46,3 +46,6 @@ docs/blog/linuxdo-promo.md
46
46
 
47
47
  # baoyu-design working dir (canonical promo source lives in demo/promo-showcase/)
48
48
  designs/
49
+
50
+ # 真实平台抓包的原始产物(含 Cookie 头与响应体,永不入库)
51
+ .capture/
@@ -2,9 +2,18 @@
2
2
 
3
3
  本项目遵循 [Semantic Versioning](https://semver.org/)。
4
4
 
5
- ## [Unreleased]
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.10** 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`.
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.10 and `X | Y` union syntax.
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.10, 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.
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.10** 是最低要求。项目使用 [`uv`](https://github.com/astral-sh/uv) 管理依赖,`uv sync --all-extras` 会在本地 `.venv` 中安装运行时和开发依赖。
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.10,使用 `X | Y` 联合类型。
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.10、3.12、3.14 的测试(fork 的 PR 同样会跑,不需要任何 secret),另有 CodeQL 和 GitGuardian 安全扫描。测试全部离线,不要写需要网络、真实浏览器或真实账号的测试。
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