agent-toggle 0.11.1__tar.gz → 0.11.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 (90) hide show
  1. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/PKG-INFO +1 -1
  2. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/__init__.py +1 -1
  3. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/update_prompt.py +3 -1
  4. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/PKG-INFO +1 -1
  5. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_cli.py +14 -2
  6. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_update_prompt.py +12 -0
  7. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/LICENSE +0 -0
  8. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/README.md +0 -0
  9. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/__main__.py +0 -0
  10. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/backends/__init__.py +0 -0
  11. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/backends/flag_json.py +0 -0
  12. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/backends/mcp_json.py +0 -0
  13. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/backends/mcp_toml.py +0 -0
  14. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/backends/plugin_cli.py +0 -0
  15. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/cli.py +0 -0
  16. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/companions.py +0 -0
  17. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/config.py +0 -0
  18. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/cost.py +0 -0
  19. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/doctor.py +0 -0
  20. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/fs.py +0 -0
  21. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/harnesses.py +0 -0
  22. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/help.py +0 -0
  23. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/i18n.py +0 -0
  24. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/locales/__init__.py +0 -0
  25. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/locales/zh_tw_cli.py +0 -0
  26. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/locales/zh_tw_common.py +0 -0
  27. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/locales/zh_tw_config.py +0 -0
  28. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/locales/zh_tw_picker.py +0 -0
  29. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/mechanisms.py +0 -0
  30. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ops.py +0 -0
  31. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/output.py +0 -0
  32. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/profiles.py +0 -0
  33. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/settings.py +0 -0
  34. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/shims/claude.md.tmpl +0 -0
  35. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/shims/generic.md.tmpl +0 -0
  36. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/spinner.py +0 -0
  37. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/store.py +0 -0
  38. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/toml_check.py +0 -0
  39. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/__init__.py +0 -0
  40. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/config_menu.py +0 -0
  41. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/logo.py +0 -0
  42. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/menu.py +0 -0
  43. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/model.py +0 -0
  44. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/picker.py +0 -0
  45. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/ui/theme.py +0 -0
  46. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/undo.py +0 -0
  47. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle/update_check.py +0 -0
  48. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/SOURCES.txt +0 -0
  49. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/dependency_links.txt +0 -0
  50. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/entry_points.txt +0 -0
  51. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/requires.txt +0 -0
  52. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/agent_toggle.egg-info/top_level.txt +0 -0
  53. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/pyproject.toml +0 -0
  54. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/setup.cfg +0 -0
  55. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_alias.py +0 -0
  56. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_all_type.py +0 -0
  57. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_backends.py +0 -0
  58. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_cli_surface.py +0 -0
  59. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_color.py +0 -0
  60. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_companions.py +0 -0
  61. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_completions.py +0 -0
  62. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_config.py +0 -0
  63. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_config_menu.py +0 -0
  64. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_conformance.py +0 -0
  65. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_containment.py +0 -0
  66. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_cost.py +0 -0
  67. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_crash.py +0 -0
  68. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_doctor.py +0 -0
  69. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_encoding.py +0 -0
  70. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_fs.py +0 -0
  71. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_harnesses.py +0 -0
  72. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_help.py +0 -0
  73. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_i18n.py +0 -0
  74. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_install.py +0 -0
  75. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_logo.py +0 -0
  76. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_mechanisms.py +0 -0
  77. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_menu.py +0 -0
  78. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_mods.py +0 -0
  79. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_picker.py +0 -0
  80. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_platform.py +0 -0
  81. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_profiles.py +0 -0
  82. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_project.py +0 -0
  83. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_safety.py +0 -0
  84. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_same_name.py +0 -0
  85. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_secret_audit.py +0 -0
  86. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_settings.py +0 -0
  87. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_store.py +0 -0
  88. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_theme.py +0 -0
  89. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_undo.py +0 -0
  90. {agent_toggle-0.11.1 → agent_toggle-0.11.3}/tests/test_update_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-toggle
3
- Version: 0.11.1
3
+ Version: 0.11.3
4
4
  Summary: Temporarily disable / re-enable AI-agent skills, agents, commands, rules, plugins and MCP servers across harnesses (Claude Code, Codex, Grok, OpenCode, OpenClaw, Copilot, Vibe, Devin, Antigravity)
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/weskao/agent-toggle
@@ -1,3 +1,3 @@
1
1
  """agent-toggle: temporarily disable / re-enable AI-agent resources."""
2
2
 
3
- __version__ = "0.11.1"
3
+ __version__ = "0.11.3"
@@ -206,7 +206,9 @@ def offer(started: update_check.Started | None, *, json_mode: bool = False,
206
206
  def run(cmd, **kw): # their output must never reach stdout; no step may prompt
207
207
  if cmd[0] == "claude":
208
208
  cmd = [plugin_cli.claude_bin() or "claude", *cmd[1:]]
209
- return subprocess.run(cmd, stdout=sys.stderr, stdin=subprocess.DEVNULL, **kw)
209
+ # the install-shims step is agent-toggle itself: it must not re-check and print the hint again
210
+ env = {**os.environ, settings.DEFAULTS["update_check"].env: "0"}
211
+ return subprocess.run(cmd, stdout=sys.stderr, stdin=subprocess.DEVNULL, env=env, **kw)
210
212
  steps: list[list[str]] = []
211
213
  def upgrade(_found):
212
214
  steps.extend(upgrade_steps())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-toggle
3
- Version: 0.11.1
3
+ Version: 0.11.3
4
4
  Summary: Temporarily disable / re-enable AI-agent skills, agents, commands, rules, plugins and MCP servers across harnesses (Claude Code, Codex, Grok, OpenCode, OpenClaw, Copilot, Vibe, Devin, Antigravity)
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/weskao/agent-toggle
@@ -173,7 +173,8 @@ class UpdateCheckTest(CliCase):
173
173
  self.addCleanup(env.stop)
174
174
  os.environ.pop("AGENT_TOGGLE_UPDATE_CHECK", None)
175
175
  for target, kw in ((update_check, {"fetch_pypi": mock.Mock(return_value=PYPI_99)}),
176
- (update_prompt, {"is_interactive": mock.Mock(return_value=False)})):
176
+ (update_prompt, {"is_interactive": mock.Mock(return_value=False)}),
177
+ (fs, {"WIN": False})): # the panel/upgrade flow; Windows has its own test
177
178
  patch = mock.patch.multiple(target, **kw)
178
179
  patch.start()
179
180
  self.addCleanup(patch.stop)
@@ -234,11 +235,22 @@ class UpdateCheckTest(CliCase):
234
235
  rc, out, err = self.run_cli("--version") # runs no other subprocess
235
236
  self.assertEqual((rc, out.strip()), (0, f"agent-toggle {__version__}"))
236
237
  run.assert_called_once_with(["uv", "tool", "upgrade", "agent-toggle"], check=False,
237
- stdout=mock.ANY, stdin=subprocess.DEVNULL)
238
+ stdout=mock.ANY, stdin=subprocess.DEVNULL, env=mock.ANY)
238
239
  self.assertIn("did not finish", run.call_args.kwargs["stdout"].getvalue()) # = stderr
239
240
  self.assertIn("upgrade did not finish — run it yourself: uv tool upgrade agent-toggle"
240
241
  "\n agent-toggle install-shims", err)
241
242
 
243
+ def test_windows_tty_only_hints_and_never_upgrades(self) -> None:
244
+ update_prompt.is_interactive.return_value = True
245
+ with mock.patch.object(fs, "WIN", True), \
246
+ mock.patch.object(update_prompt, "ask") as ask, \
247
+ mock.patch.object(update_prompt.subprocess, "run") as run:
248
+ rc, _, err = self.run_cli("--version") # agent-toggle.exe cannot replace itself
249
+ self.assertEqual(rc, 0)
250
+ self.assertIn(HINT, err)
251
+ ask.assert_not_called()
252
+ run.assert_not_called()
253
+
242
254
  def test_tty_skip_version_and_ctrl_c(self) -> None:
243
255
  update_prompt.is_interactive.return_value = True
244
256
  with mock.patch.object(update_prompt, "ask", side_effect=KeyboardInterrupt):
@@ -34,6 +34,18 @@ class UpgradeStepsTest(unittest.TestCase):
34
34
  self.assertEqual(self.steps(None, []), [cli, shims])
35
35
 
36
36
 
37
+ class OfferRunTest(unittest.TestCase):
38
+ def test_upgrade_steps_run_with_the_update_check_off(self) -> None:
39
+ def offer(_started, ask, *, run, **_kw):
40
+ run(["agent-toggle", "install-shims"], check=False)
41
+ return update_check.UPDATE_NOW
42
+ with mock.patch.object(update_check, "offer", side_effect=offer), \
43
+ mock.patch.object(update_prompt.subprocess, "run") as sub, \
44
+ mock.patch.object(update_prompt, "cache_path", return_value="x"):
45
+ update_prompt.offer(mock.Mock())
46
+ self.assertEqual(sub.call_args.kwargs["env"]["AGENT_TOGGLE_UPDATE_CHECK"], "0")
47
+
48
+
37
49
  class CmdUpdateTest(unittest.TestCase):
38
50
  def run_update(self, latest):
39
51
  out = mock.Mock()
File without changes
File without changes
File without changes