zai-cli 0.1.1__tar.gz → 0.1.2__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 (104) hide show
  1. {zai_cli-0.1.1 → zai_cli-0.1.2}/CHANGELOG.md +14 -0
  2. {zai_cli-0.1.1/zai_cli.egg-info → zai_cli-0.1.2}/PKG-INFO +1 -1
  3. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_input.py +1 -1
  4. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_interactive.py +3 -1
  5. zai_cli-0.1.2/zai/__init__.py +1 -0
  6. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/interactive.py +17 -12
  7. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/ui/input.py +1 -1
  8. {zai_cli-0.1.1 → zai_cli-0.1.2/zai_cli.egg-info}/PKG-INFO +1 -1
  9. zai_cli-0.1.1/zai/__init__.py +0 -1
  10. {zai_cli-0.1.1 → zai_cli-0.1.2}/LICENSE +0 -0
  11. {zai_cli-0.1.1 → zai_cli-0.1.2}/MANIFEST.in +0 -0
  12. {zai_cli-0.1.1 → zai_cli-0.1.2}/README.md +0 -0
  13. {zai_cli-0.1.1 → zai_cli-0.1.2}/pyproject.toml +0 -0
  14. {zai_cli-0.1.1 → zai_cli-0.1.2}/scripts/release_preflight.py +0 -0
  15. {zai_cli-0.1.1 → zai_cli-0.1.2}/setup.cfg +0 -0
  16. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_agent.py +0 -0
  17. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_browser.py +0 -0
  18. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_code_runner.py +0 -0
  19. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_config_main.py +0 -0
  20. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_core.py +0 -0
  21. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_errors.py +0 -0
  22. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_hooks_skills_session.py +0 -0
  23. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_integrations_cli.py +0 -0
  24. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_mcp.py +0 -0
  25. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_plugins.py +0 -0
  26. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_process.py +0 -0
  27. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_providers.py +0 -0
  28. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_release_preflight.py +0 -0
  29. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_search.py +0 -0
  30. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_security.py +0 -0
  31. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_settings_cli.py +0 -0
  32. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_storage.py +0 -0
  33. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_streaming.py +0 -0
  34. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_tool_schema.py +0 -0
  35. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_tools.py +0 -0
  36. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_undo.py +0 -0
  37. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_utilities.py +0 -0
  38. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_vision.py +0 -0
  39. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_watch.py +0 -0
  40. {zai_cli-0.1.1 → zai_cli-0.1.2}/tests/test_workflows.py +0 -0
  41. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/__main__.py +0 -0
  42. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/__init__.py +0 -0
  43. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/common.py +0 -0
  44. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/integrations.py +0 -0
  45. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/settings.py +0 -0
  46. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/utilities.py +0 -0
  47. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/cli/workflows.py +0 -0
  48. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/commands/commit.md +0 -0
  49. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/commands/explain.md +0 -0
  50. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/commands/feature.md +0 -0
  51. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/commands/fix.md +0 -0
  52. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/commands/review.md +0 -0
  53. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/config.py +0 -0
  54. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/__init__.py +0 -0
  55. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/agent.py +0 -0
  56. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/cancellation.py +0 -0
  57. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/commands.py +0 -0
  58. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/context.py +0 -0
  59. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/errors.py +0 -0
  60. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/fallback.py +0 -0
  61. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/hooks.py +0 -0
  62. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/memory.py +0 -0
  63. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/process.py +0 -0
  64. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/repomap.py +0 -0
  65. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/runtime.py +0 -0
  66. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/security.py +0 -0
  67. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/session.py +0 -0
  68. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/storage.py +0 -0
  69. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/streaming.py +0 -0
  70. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/tool_schema.py +0 -0
  71. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/undo.py +0 -0
  72. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/core/watch.py +0 -0
  73. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/main.py +0 -0
  74. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/mcp/__init__.py +0 -0
  75. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/mcp/client.py +0 -0
  76. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/mcp/manager.py +0 -0
  77. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/plugins/__init__.py +0 -0
  78. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/plugins/base.py +0 -0
  79. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/plugins/loader.py +0 -0
  80. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/__init__.py +0 -0
  81. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/anthropic.py +0 -0
  82. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/base.py +0 -0
  83. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/cerebras.py +0 -0
  84. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/gemini.py +0 -0
  85. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/groq.py +0 -0
  86. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/ollama.py +0 -0
  87. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/openai.py +0 -0
  88. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/openrouter.py +0 -0
  89. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/providers/qwen.py +0 -0
  90. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/skills/__init__.py +0 -0
  91. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/skills/registry.py +0 -0
  92. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/__init__.py +0 -0
  93. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/browser.py +0 -0
  94. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/code_runner.py +0 -0
  95. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/files.py +0 -0
  96. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/git.py +0 -0
  97. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/search.py +0 -0
  98. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/tools/vision.py +0 -0
  99. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai/ui/__init__.py +0 -0
  100. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai_cli.egg-info/SOURCES.txt +0 -0
  101. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai_cli.egg-info/dependency_links.txt +0 -0
  102. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai_cli.egg-info/entry_points.txt +0 -0
  103. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai_cli.egg-info/requires.txt +0 -0
  104. {zai_cli-0.1.1 → zai_cli-0.1.2}/zai_cli.egg-info/top_level.txt +0 -0
@@ -5,6 +5,20 @@ All notable changes to this project are documented in this file.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and the project uses [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [0.1.2] - 2026-06-24
9
+
10
+ ### Changed
11
+
12
+ - Improved interactive slash-command discovery: typing `/` now shows the
13
+ commands menu.
14
+ - Improved interactive model discovery: bare `/model` now shows the model list.
15
+ - Clarified the interactive startup hint to point users at `/` and `/help`.
16
+
17
+ ### Fixed
18
+
19
+ - Prevented common help words such as `commands`, `setup`, and `model list`
20
+ from being sent to the AI as ordinary project requests.
21
+
8
22
  ## [0.1.1] - 2026-06-24
9
23
 
10
24
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zai-cli
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Your personal AI CLI — free, fast, and smart
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/HumaizaNaz/zai_cli
@@ -11,7 +11,7 @@ def test_slash_command_completion():
11
11
  {"resume", "review", "help"},
12
12
  )
13
13
 
14
- assert candidates == [("/resume", "/resume", "command")]
14
+ assert candidates == [("/resume", "/resume", "slash command")]
15
15
 
16
16
 
17
17
  def test_model_completion():
@@ -19,6 +19,7 @@ def test_slash_command_typo_is_corrected():
19
19
 
20
20
 
21
21
  def test_plain_command_aliases_do_not_go_to_ai():
22
+ assert _normalize_plain_command("/") == "/commands"
22
23
  assert _normalize_plain_command("commands") == "/commands"
23
24
  assert _normalize_plain_command("setup") == "/setup"
24
25
  assert _normalize_plain_command("model list") == "/model list"
@@ -34,7 +35,7 @@ def test_interactive_plain_commands_show_local_help(tmp_path, monkeypatch, capsy
34
35
  with patch("zai.cli.interactive._connect_mcp_servers"):
35
36
  with patch(
36
37
  "zai.cli.interactive.InteractiveInput.prompt",
37
- side_effect=["commands", "setup", EOFError()],
38
+ side_effect=["/", "commands", "setup", "/model", EOFError()],
38
39
  ):
39
40
  with patch("zai.cli.interactive.run_agent") as run_agent:
40
41
  run_interactive("groq")
@@ -42,6 +43,7 @@ def test_interactive_plain_commands_show_local_help(tmp_path, monkeypatch, capsy
42
43
  output = capsys.readouterr().out
43
44
  assert "Interactive slash commands" in output
44
45
  assert "API key setup" in output
46
+ assert "Available models" in output
45
47
  run_agent.assert_not_called()
46
48
 
47
49
 
@@ -0,0 +1 @@
1
+ __version__ = "0.1.2"
@@ -140,8 +140,21 @@ def _show_setup_hint() -> None:
140
140
  ))
141
141
 
142
142
 
143
+ def _show_models() -> None:
144
+ table = Table(title="Available models", border_style="cyan")
145
+ table.add_column("Name", style="cyan")
146
+ table.add_column("Model")
147
+ table.add_column("Key")
148
+ for key, data in get_models().items():
149
+ key_status = "ok" if get_api_key(data["provider"]) else "no key"
150
+ table.add_row(key, data["name"], key_status)
151
+ console.print(table)
152
+
153
+
143
154
  def _normalize_plain_command(message: str) -> str:
144
155
  stripped = message.strip()
156
+ if stripped == "/":
157
+ return "/commands"
145
158
  if stripped.startswith("/") or not stripped:
146
159
  return message
147
160
  return PLAIN_COMMAND_ALIASES.get(stripped.lower(), message)
@@ -244,7 +257,7 @@ def run_interactive(model: str = None) -> None:
244
257
  f"[dim]Folder: {cwd}[/dim]\n"
245
258
  f"[dim]Files: {', '.join(visible[:12])}"
246
259
  f"{'...' if len(visible) > 12 else ''}[/dim]\n"
247
- "[dim]Ctrl+C to exit | /help for commands[/dim]",
260
+ "[dim]Ctrl+C to exit | type / for commands | /help for help[/dim]",
248
261
  border_style="cyan",
249
262
  ))
250
263
 
@@ -338,18 +351,10 @@ def run_interactive(model: str = None) -> None:
338
351
  console.clear()
339
352
  elif stripped == "/files":
340
353
  _show_files(cwd)
341
- elif stripped.startswith("/model "):
342
- name = stripped.split(" ", 1)[1].strip()
354
+ elif stripped == "/model" or stripped.startswith("/model "):
355
+ name = stripped.split(" ", 1)[1].strip() if " " in stripped else "list"
343
356
  if name == "list":
344
- for key, data in get_models().items():
345
- key_status = (
346
- "[green]ok[/green]"
347
- if get_api_key(data["provider"])
348
- else "[red]no key[/red]"
349
- )
350
- console.print(
351
- f" [cyan]{key}[/cyan] — {data['name']} ({key_status})"
352
- )
357
+ _show_models()
353
358
  elif name in get_models():
354
359
  preferred = name
355
360
  session_context.set_model(name)
@@ -59,7 +59,7 @@ def completion_candidates(
59
59
  command_token = parts[0]
60
60
  if len(parts) == 1 and not before.endswith(" "):
61
61
  return [
62
- (f"/{name}", f"/{name}", "command")
62
+ (f"/{name}", f"/{name}", "slash command")
63
63
  for name in sorted(set(commands))
64
64
  if f"/{name}".startswith(command_token.lower())
65
65
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zai-cli
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Your personal AI CLI — free, fast, and smart
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/HumaizaNaz/zai_cli
@@ -1 +0,0 @@
1
- __version__ = "0.1.1"
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
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
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
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