xb-init 2.0.2__tar.gz → 2.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. {xb_init-2.0.2 → xb_init-2.0.3}/PKG-INFO +1 -1
  2. {xb_init-2.0.2 → xb_init-2.0.3}/pyproject.toml +1 -1
  3. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/dev.py.j2 +4 -0
  4. {xb_init-2.0.2 → xb_init-2.0.3}/.claude/settings.local.json +0 -0
  5. {xb_init-2.0.2 → xb_init-2.0.3}/.codegraph/.gitignore +0 -0
  6. {xb_init-2.0.2 → xb_init-2.0.3}/.codegraph/codegraph.db +0 -0
  7. {xb_init-2.0.2 → xb_init-2.0.3}/.gitignore +0 -0
  8. {xb_init-2.0.2 → xb_init-2.0.3}/README.md +0 -0
  9. {xb_init-2.0.2 → xb_init-2.0.3}/docs/screenshot.png +0 -0
  10. {xb_init-2.0.2 → xb_init-2.0.3}/tests/test_cli.py +0 -0
  11. {xb_init-2.0.2 → xb_init-2.0.3}/tests/test_upgrade.py +0 -0
  12. {xb_init-2.0.2 → xb_init-2.0.3}/uv.lock +0 -0
  13. {xb_init-2.0.2 → xb_init-2.0.3}/xb/__init__.py +0 -0
  14. {xb_init-2.0.2 → xb_init-2.0.3}/xb/cli.py +0 -0
  15. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/__init__.py +0 -0
  16. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/build.py +0 -0
  17. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/dev.py +0 -0
  18. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/doctor.py +0 -0
  19. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/init.py +0 -0
  20. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/upgrade.py +0 -0
  21. {xb_init-2.0.2 → xb_init-2.0.3}/xb/commands/version.py +0 -0
  22. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/api/__init__.py.j2 +0 -0
  23. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/api/config.py.j2 +0 -0
  24. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/api/ports.py.j2 +0 -0
  25. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/api/terminal/__init__.py.j2 +0 -0
  26. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/api/terminal/routes.py.j2 +0 -0
  27. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/backend_build.py.j2 +0 -0
  28. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/main.py.j2 +0 -0
  29. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/managers/__init__.py.j2 +0 -0
  30. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/managers/logger_manager.py.j2 +0 -0
  31. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/managers/path_manager.py.j2 +0 -0
  32. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/managers/sudoers_manager.py.j2 +0 -0
  33. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/backend/requirements.txt.j2 +0 -0
  34. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/configs/global_config.yaml.j2 +0 -0
  35. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/configs/secrets.yaml.example.j2 +0 -0
  36. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/configs/secrets.yaml.j2 +0 -0
  37. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/.npmrc.j2 +0 -0
  38. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/launcher.js.j2 +0 -0
  39. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/main.js.j2 +0 -0
  40. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/package.json.j2 +0 -0
  41. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/port_diagnostics.js.j2 +0 -0
  42. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/preload.js.j2 +0 -0
  43. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/prepare.js.j2 +0 -0
  44. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/resources/postinst.py.j2 +0 -0
  45. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/resources/postrm.py.j2 +0 -0
  46. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/electron/resources/uninstaller.nsh.j2 +0 -0
  47. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/.npmrc.j2 +0 -0
  48. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/index.html.j2 +0 -0
  49. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/package.json.j2 +0 -0
  50. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/App.vue.j2 +0 -0
  51. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/ConfigSetup.vue.j2 +0 -0
  52. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/DashboardHome.vue.j2 +0 -0
  53. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/FileManager.vue.j2 +0 -0
  54. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/GitVersionBadge.vue.j2 +0 -0
  55. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/RefreshButton.vue.j2 +0 -0
  56. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/TerminalPanel.vue.j2 +0 -0
  57. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/TerminalView.vue.j2 +0 -0
  58. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/components/ThemeToggle.vue.j2 +0 -0
  59. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/composables/useTerminalSessions.js.j2 +0 -0
  60. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/main.js.j2 +0 -0
  61. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/src/style.css.j2 +0 -0
  62. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/frontend/vite.config.js.j2 +0 -0
  63. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/.gitignore.j2 +0 -0
  64. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/AGENTS.md.j2 +0 -0
  65. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/README.md.j2 +0 -0
  66. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/build.py.j2 +0 -0
  67. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/root/pyproject.toml.j2 +0 -0
  68. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/scripts/example.py.j2 +0 -0
  69. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/version/hooks/pre-commit.py.j2 +0 -0
  70. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/version/scripts/gui_version_manager.py.j2 +0 -0
  71. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/version/scripts/install_hooks.py.j2 +0 -0
  72. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/version/scripts/version_manager.py.j2 +0 -0
  73. {xb_init-2.0.2 → xb_init-2.0.3}/xb/templates/version/scripts/web_version_manager.py.j2 +0 -0
  74. {xb_init-2.0.2 → xb_init-2.0.3}/xb/utils/__init__.py +0 -0
  75. {xb_init-2.0.2 → xb_init-2.0.3}/xb/utils/click_helpers.py +0 -0
  76. {xb_init-2.0.2 → xb_init-2.0.3}/xb/utils/template_engine.py +0 -0
  77. {xb_init-2.0.2 → xb_init-2.0.3}/xb/utils/validators.py +0 -0
  78. {xb_init-2.0.2 → xb_init-2.0.3}/xb/utils/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: xb-init
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: Project management tool for UV + FastAPI + Vue3 + Electron desktop applications
5
5
  Project-URL: Homepage, https://github.com/yourusername/xb
6
6
  Project-URL: Documentation, https://github.com/yourusername/xb#readme
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "xb-init"
7
- version = "2.0.2"
7
+ version = "2.0.3"
8
8
  description = "Project management tool for UV + FastAPI + Vue3 + Electron desktop applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -131,7 +131,11 @@ def port_is_free(port: int) -> bool:
131
131
  import socket
132
132
  with socket.socket() as sock:
133
133
  try:
134
+ # 服务关闭后 TCP 连接可能短暂保留在 TIME_WAIT。复用地址后再 listen,
135
+ # 可区分该回收状态与真正仍在监听的进程。
136
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
134
137
  sock.bind(("127.0.0.1", port))
138
+ sock.listen(1)
135
139
  return True
136
140
  except OSError:
137
141
  return False
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes