gitwise-cli 0.26.1__py3-none-any.whl → 0.27.0__py3-none-any.whl

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.
gitwise/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.26.1"
1
+ __version__ = "0.27.0"
2
2
 
3
3
 
4
4
  def get_version() -> str:
gitwise/__main__.py CHANGED
@@ -32,12 +32,36 @@ def _install_rich_traceback() -> None:
32
32
  return
33
33
 
34
34
 
35
+ def _ensure_utf8_stdio() -> None:
36
+ """Force stdout/stderr to UTF-8.
37
+
38
+ Windows defaults to a system codepage (often cp1252) for the Python
39
+ embedded in console apps. That codepage cannot encode characters like
40
+ U+2713 (✓) used throughout gitwise's status output, causing
41
+ UnicodeEncodeError when the user is not running through a wrapper that
42
+ sets PYTHONIOENCODING. macOS/Linux are already UTF-8 by default, so
43
+ this reconfigure is a no-op there.
44
+ """
45
+ for stream_name in ("stdout", "stderr"):
46
+ stream = getattr(sys, stream_name, None)
47
+ # TextIOWrapper.reconfigure exists on Python 3.7+; guard just in case
48
+ # the stream has been replaced with something non-standard.
49
+ reconfigure = getattr(stream, "reconfigure", None)
50
+ if callable(reconfigure):
51
+ try:
52
+ reconfigure(encoding="utf-8", errors="replace")
53
+ except (TypeError, ValueError):
54
+ # Stream does not accept these kwargs or is closed; ignore.
55
+ pass
56
+
57
+
35
58
  def main() -> int:
36
59
  import os
37
60
 
38
61
  from ._runtime_config import reset_runtime_config
39
62
  from .i18n import set_locale
40
63
 
64
+ _ensure_utf8_stdio()
41
65
  _install_rich_traceback()
42
66
 
43
67
  parser = build_parser()
@@ -93,6 +117,13 @@ def main() -> int:
93
117
  except Exception:
94
118
  if _should_show_rich_traceback():
95
119
  raise
120
+ # No Rich traceback available (CI / non-tty / LOG_JSON mode).
121
+ # Still emit the raw traceback to stderr so CI logs are
122
+ # diagnostic. Otherwise the user only sees "unexpected error"
123
+ # and has no way to identify the root cause.
124
+ import traceback as _traceback
125
+
126
+ _traceback.print_exc()
96
127
  from .output import error as _error
97
128
 
98
129
  _error(t("unexpected_error"))
@@ -385,6 +385,37 @@ def run_setup_agents(
385
385
  adapters_legacy_used: bool = False,
386
386
  ) -> int:
387
387
  """Dispatcher: global mode (default) or per-repo mode (--local)."""
388
+ import platform
389
+
390
+ if platform.system() == "Windows":
391
+ if not local:
392
+ # Global mode creates symlinks in ~/.claude/ (skills, CLAUDE.md
393
+ # pointer, etc.). Windows does not support POSIX-style symlinks
394
+ # without Developer Mode, and even with it the semantics around
395
+ # relative targets differ enough that the existing setup_agents
396
+ # code produces broken links. Fail fast with a clear workaround
397
+ # instead of letting the user hit a confusing traceback.
398
+ if as_json:
399
+ print_json(
400
+ {
401
+ "ok": False,
402
+ "error": "windows_global_unsupported",
403
+ "message": t("setup_agents_windows_global_unsupported"),
404
+ "workaround": "gitwise setup-agents --local --no-symlinks",
405
+ }
406
+ )
407
+ else:
408
+ error(t("setup_agents_windows_global_unsupported"))
409
+ info(t("setup_agents_windows_workaround_local"))
410
+ return 1
411
+ if not no_symlinks:
412
+ # Local mode auto-enables --no-symlinks on Windows. Same root
413
+ # cause: os.symlink() either errors out (no Developer Mode) or
414
+ # produces links that do not behave like POSIX symlinks for our
415
+ # sandbox check (os.path.realpath over a not-yet-existing target).
416
+ warn(t("setup_agents_windows_auto_no_symlinks"))
417
+ no_symlinks = True
418
+
388
419
  if local:
389
420
  return _run_setup_local(
390
421
  target,
gitwise/_i18n_data.json CHANGED
@@ -519,6 +519,18 @@
519
519
  "es": "fsmonitor integrado no está soportado en Linux (solo macOS y Windows)",
520
520
  "en": "built-in fsmonitor not supported on Linux (macOS and Windows only)"
521
521
  },
522
+ "setup_agents_windows_global_unsupported": {
523
+ "es": "setup-agents en modo global no está soportado en Windows (requiere symlinks POSIX en ~/.claude/).",
524
+ "en": "setup-agents global mode is not supported on Windows (requires POSIX symlinks in ~/.claude/)."
525
+ },
526
+ "setup_agents_windows_workaround_local": {
527
+ "es": "Workaround: usá 'gitwise setup-agents --local --no-symlinks' dentro del repo donde quieras configurar los agentes.",
528
+ "en": "Workaround: use 'gitwise setup-agents --local --no-symlinks' inside the repo where you want to set up agents."
529
+ },
530
+ "setup_agents_windows_auto_no_symlinks": {
531
+ "es": "Windows detectado: activando --no-symlinks automáticamente (los symlinks POSIX no son confiables en Windows).",
532
+ "en": "Windows detected: auto-enabling --no-symlinks (POSIX symlinks are not reliable on Windows)."
533
+ },
522
534
  "gc_already_running": {
523
535
  "es": "git gc/maintenance ya está en ejecución — esperá a que termine",
524
536
  "en": "git gc/maintenance already running — wait for it to finish"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitwise-cli
3
- Version: 0.26.1
3
+ Version: 0.27.0
4
4
  Summary: Python CLI for optimizing git workflows and Claude Code integration
5
5
  Project-URL: Homepage, https://github.com/drzioner/gitwise
6
6
  Project-URL: Repository, https://github.com/drzioner/gitwise
@@ -89,11 +89,19 @@ uv sync
89
89
  uv run python -m gitwise doctor
90
90
  ```
91
91
 
92
+ **Windows** (PowerShell 5.1+, auto-installs `uv` if missing):
93
+
94
+ ```powershell
95
+ irm https://raw.githubusercontent.com/drzioner/gitwise/main/install.ps1 | iex
96
+ ```
97
+
98
+ For a version-pinned install (e.g. for reproducible setups), see `Get-Help .\install.ps1 -Detailed` after download.
99
+
92
100
  Update an existing installation:
93
101
 
94
102
  ```bash
95
- brew upgrade gitwise # if installed via Homebrew
96
- uv tool upgrade gitwise-cli # if installed via uv
103
+ brew upgrade gitwise # if installed via Homebrew (macOS/Linux)
104
+ uv tool upgrade gitwise-cli # if installed via uv (any OS)
97
105
  # or re-run the curl | bash installer, which always pulls latest
98
106
  ```
99
107
 
@@ -101,7 +109,7 @@ Uninstall:
101
109
 
102
110
  ```bash
103
111
  brew uninstall gitwise # if installed via Homebrew
104
- uv tool uninstall gitwise-cli # if installed via uv
112
+ uv tool uninstall gitwise-cli # if installed via uv (any OS)
105
113
  ```
106
114
 
107
115
  ## Quick Start
@@ -1,11 +1,11 @@
1
- gitwise/__init__.py,sha256=vb6mU0ejpsGIxVpTATFOpP1e4epI4zui-CcfIrWMgQs,267
2
- gitwise/__main__.py,sha256=2GuRJ3LysuDIHrMYryXqJCKFe6EtxgmGwg7nXQEmGyw,2897
1
+ gitwise/__init__.py,sha256=EQSJ5WQ_IAB7iTOoK5-l-JbxMSiHJCjMzGaA9gW00QE,267
2
+ gitwise/__main__.py,sha256=3cDMMDJlua0qyW_nGj8w2YigbPy4QdrM3weMkQp5Qcs,4309
3
3
  gitwise/_cli_completions.py,sha256=85-aF5I-SFFehbSDvrj22eFb3DYiHiNxpwr6GxW0B4Q,3091
4
4
  gitwise/_cli_dispatch.py,sha256=x75GaHWYS_Hcem0XvKVL1cB-dS0Q_d6_u3k00KZk6GU,12150
5
5
  gitwise/_cli_introspection.py,sha256=wlRMcRrGpitUGs5Sm1g-Eyf0avLeHpYhsBs48PCC2eI,9112
6
6
  gitwise/_cli_parser.py,sha256=eN-LCksh-Fhp4UUyDTLaHJlC7YviFPcf4PamRQLTrdM,13702
7
- gitwise/_cli_setup_agents.py,sha256=kgMnzIZ4t9r-YV3ANCAQhx8cKxdkK_pkopCtFq14ew8,13419
8
- gitwise/_i18n_data.json,sha256=VJjWJXIdKi0PFJgBPTQ6WH0TEkOj8ums_Ea7ryLUVrM,60751
7
+ gitwise/_cli_setup_agents.py,sha256=HC65Y3lzSvzKOz5Rdl9zMOpM5Rc-HS0YU7q8re09RBg,14926
8
+ gitwise/_i18n_data.json,sha256=muH3yzVlGp8FUgq5f5JCqtL2lqSofYR86TYKyX3qGw4,61600
9
9
  gitwise/_paths.py,sha256=VRkql9HQ5_OjwbpcX-18fwe_lMpuQffP4AiBV6suSFg,658
10
10
  gitwise/_runtime_config.py,sha256=G3MqJwPoKWMak3dZkPHXqCeJPph2_9KBEomQ5YT2RHI,7176
11
11
  gitwise/audit.py,sha256=mdovDdJ2PQ4dSTBBNujA0KrYzdqZaOQZt6GrbSW7vfA,10507
@@ -118,8 +118,8 @@ gitwise/share/schemas/v1/input/tag.json,sha256=KmrCyqcJsJU_uDhNba_KYpAkYg7vIlQac
118
118
  gitwise/share/schemas/v1/input/undo.json,sha256=PRab96r2e1iU2FN8yBV_njgly_-7lm7Vy4KcMh3NMQ4,1406
119
119
  gitwise/share/schemas/v1/input/update.json,sha256=OmuSgSp_USg2f45mywnSpxUB0NMSn_lQDLC4yDzCopo,911
120
120
  gitwise/share/schemas/v1/input/worktree.json,sha256=rKKOtWyAgARIa-b-Raw7ZNPqKkO7DlPd7PE1c0flRDs,1063
121
- gitwise_cli-0.26.1.dist-info/METADATA,sha256=dEvqV_EYMSzdfIESpe6vHp7zcBh8KPv4ssscZNh7ic0,6783
122
- gitwise_cli-0.26.1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
123
- gitwise_cli-0.26.1.dist-info/entry_points.txt,sha256=rGwxSDmUHtzlY6yp7KeMJhRARijXkSE6OKuOJ8PF51E,50
124
- gitwise_cli-0.26.1.dist-info/licenses/LICENSE,sha256=vfJO-ThMtWhZOD9MsArN2yul1EJmxAXxfeGHKnEk9QQ,1063
125
- gitwise_cli-0.26.1.dist-info/RECORD,,
121
+ gitwise_cli-0.27.0.dist-info/METADATA,sha256=LQ05aRRUBgHYiK4xG48KvMqstjK6dyMmwg7EkjKJ1LU,7092
122
+ gitwise_cli-0.27.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
123
+ gitwise_cli-0.27.0.dist-info/entry_points.txt,sha256=rGwxSDmUHtzlY6yp7KeMJhRARijXkSE6OKuOJ8PF51E,50
124
+ gitwise_cli-0.27.0.dist-info/licenses/LICENSE,sha256=vfJO-ThMtWhZOD9MsArN2yul1EJmxAXxfeGHKnEk9QQ,1063
125
+ gitwise_cli-0.27.0.dist-info/RECORD,,