deepy-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 (68) hide show
  1. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/PKG-INFO +2 -2
  2. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/README.md +1 -1
  3. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/pyproject.toml +1 -1
  4. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/__init__.py +1 -1
  5. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/update_check.py +5 -86
  6. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/__main__.py +0 -0
  7. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/cli.py +0 -0
  8. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/config/__init__.py +0 -0
  9. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/config/settings.py +0 -0
  10. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/__init__.py +0 -0
  11. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/AskUserQuestion.md +0 -0
  12. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/WebFetch.md +0 -0
  13. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/WebSearch.md +0 -0
  14. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/__init__.py +0 -0
  15. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/bash.md +0 -0
  16. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/edit.md +0 -0
  17. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/modify.md +0 -0
  18. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/read.md +0 -0
  19. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/data/tools/write.md +0 -0
  20. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/errors.py +0 -0
  21. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/__init__.py +0 -0
  22. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/agent.py +0 -0
  23. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/context.py +0 -0
  24. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/events.py +0 -0
  25. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/model_capabilities.py +0 -0
  26. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/provider.py +0 -0
  27. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/replay.py +0 -0
  28. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/runner.py +0 -0
  29. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/llm/thinking.py +0 -0
  30. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/__init__.py +0 -0
  31. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/compact.py +0 -0
  32. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/rules.py +0 -0
  33. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/runtime_context.py +0 -0
  34. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/system.py +0 -0
  35. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/prompts/tool_docs.py +0 -0
  36. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/sessions/__init__.py +0 -0
  37. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/sessions/jsonl.py +0 -0
  38. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/sessions/manager.py +0 -0
  39. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/skills.py +0 -0
  40. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/status.py +0 -0
  41. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/__init__.py +0 -0
  42. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/agents.py +0 -0
  43. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/builtin.py +0 -0
  44. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/file_state.py +0 -0
  45. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/result.py +0 -0
  46. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/tools/shell_utils.py +0 -0
  47. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/__init__.py +0 -0
  48. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/app.py +0 -0
  49. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/ask_user_question.py +0 -0
  50. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/exit_summary.py +0 -0
  51. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/loading_text.py +0 -0
  52. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/markdown.py +0 -0
  53. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/message_view.py +0 -0
  54. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/prompt_buffer.py +0 -0
  55. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/prompt_input.py +0 -0
  56. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/session_list.py +0 -0
  57. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/session_picker.py +0 -0
  58. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/slash_commands.py +0 -0
  59. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/styles.py +0 -0
  60. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/terminal.py +0 -0
  61. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/thinking_state.py +0 -0
  62. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/ui/welcome.py +0 -0
  63. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/usage.py +0 -0
  64. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/utils/__init__.py +0 -0
  65. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/utils/debug_logger.py +0 -0
  66. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/utils/error_logger.py +0 -0
  67. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/utils/json.py +0 -0
  68. {deepy_cli-0.1.1 → deepy_cli-0.1.2}/src/deepy/utils/notify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: deepy-cli
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Deepy - Vibe coding for DeepSeek models in your terminal
5
5
  Keywords: deepseek,coding-agent,terminal,cli,agents
6
6
  Author: kirineko
@@ -200,6 +200,6 @@ assets live outside the package directory and are not included in the wheel.
200
200
 
201
201
  ## Release Status
202
202
 
203
- Deepy is preparing its first public `0.1.1` release. The current release path is
203
+ Deepy is preparing its first public `0.1.2` release. The current release path is
204
204
  GitHub + PyPI. Standalone binaries and npm wrappers can be added later, but the
205
205
  primary distribution is the Python CLI.
@@ -172,6 +172,6 @@ assets live outside the package directory and are not included in the wheel.
172
172
 
173
173
  ## Release Status
174
174
 
175
- Deepy is preparing its first public `0.1.1` release. The current release path is
175
+ Deepy is preparing its first public `0.1.2` release. The current release path is
176
176
  GitHub + PyPI. Standalone binaries and npm wrappers can be added later, but the
177
177
  primary distribution is the Python CLI.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deepy-cli"
3
- version = "0.1.1"
3
+ version = "0.1.2"
4
4
  description = "Deepy - Vibe coding for DeepSeek models in your terminal"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.1.1"
3
+ __version__ = "0.1.2"
4
4
 
5
5
 
6
6
  def main() -> None:
@@ -9,7 +9,6 @@ from typing import Any, Callable
9
9
  from deepy.utils import json as json_utils
10
10
 
11
11
  DEFAULT_PYPI_PACKAGE = "deepy-cli"
12
- DEFAULT_GITHUB_REPO = "kirineko/deepy"
13
12
  DEFAULT_TIMEOUT_SECONDS = 0.8
14
13
 
15
14
  UrlOpen = Callable[..., Any]
@@ -35,19 +34,14 @@ def check_for_version_update(
35
34
  current_version: str,
36
35
  *,
37
36
  pypi_package: str = DEFAULT_PYPI_PACKAGE,
38
- github_repo: str = DEFAULT_GITHUB_REPO,
39
37
  timeout_seconds: float = DEFAULT_TIMEOUT_SECONDS,
40
38
  urlopen: UrlOpen = urllib.request.urlopen,
41
39
  ) -> VersionUpdate | None:
42
- candidates = [
43
- candidate
44
- for candidate in (
45
- fetch_latest_pypi_version(pypi_package, timeout_seconds=timeout_seconds, urlopen=urlopen),
46
- fetch_latest_github_version(github_repo, timeout_seconds=timeout_seconds, urlopen=urlopen),
47
- )
48
- if candidate is not None
49
- ]
50
- latest = _latest_candidate(candidates)
40
+ latest = fetch_latest_pypi_version(
41
+ pypi_package,
42
+ timeout_seconds=timeout_seconds,
43
+ urlopen=urlopen,
44
+ )
51
45
  if latest is None or compare_versions(latest.version, current_version) <= 0:
52
46
  return None
53
47
  return VersionUpdate(
@@ -78,18 +72,6 @@ def fetch_latest_pypi_version(
78
72
  return VersionCandidate(version=version.strip(), source="PyPI", url=f"https://pypi.org/project/{package_name}/")
79
73
 
80
74
 
81
- def fetch_latest_github_version(
82
- repo: str,
83
- *,
84
- timeout_seconds: float = DEFAULT_TIMEOUT_SECONDS,
85
- urlopen: UrlOpen = urllib.request.urlopen,
86
- ) -> VersionCandidate | None:
87
- release = _fetch_github_release_version(repo, timeout_seconds=timeout_seconds, urlopen=urlopen)
88
- if release is not None:
89
- return release
90
- return _fetch_github_tag_version(repo, timeout_seconds=timeout_seconds, urlopen=urlopen)
91
-
92
-
93
75
  def compare_versions(a: str, b: str) -> int:
94
76
  left = _version_parts(a)
95
77
  right = _version_parts(b)
@@ -104,60 +86,6 @@ def compare_versions(a: str, b: str) -> int:
104
86
  return 0
105
87
 
106
88
 
107
- def _fetch_github_release_version(
108
- repo: str,
109
- *,
110
- timeout_seconds: float,
111
- urlopen: UrlOpen,
112
- ) -> VersionCandidate | None:
113
- url = f"https://api.github.com/repos/{repo}/releases/latest"
114
- try:
115
- with urlopen(_request(url), timeout=timeout_seconds) as response:
116
- payload = _read_json_response(response)
117
- except (OSError, urllib.error.URLError, json_utils.JSONDecodeError):
118
- return None
119
- tag = payload.get("tag_name") if isinstance(payload, dict) else None
120
- version = _normalize_tag_version(tag)
121
- if version is None:
122
- return None
123
- html_url = payload.get("html_url") if isinstance(payload, dict) else None
124
- return VersionCandidate(
125
- version=version,
126
- source="GitHub",
127
- url=html_url if isinstance(html_url, str) and html_url else f"https://github.com/{repo}/releases/latest",
128
- )
129
-
130
-
131
- def _fetch_github_tag_version(
132
- repo: str,
133
- *,
134
- timeout_seconds: float,
135
- urlopen: UrlOpen,
136
- ) -> VersionCandidate | None:
137
- url = f"https://api.github.com/repos/{repo}/tags?per_page=1"
138
- try:
139
- with urlopen(_request(url), timeout=timeout_seconds) as response:
140
- payload = _read_json_response(response)
141
- except (OSError, urllib.error.URLError, json_utils.JSONDecodeError):
142
- return None
143
- if not isinstance(payload, list) or not payload:
144
- return None
145
- first = payload[0]
146
- tag = first.get("name") if isinstance(first, dict) else None
147
- version = _normalize_tag_version(tag)
148
- if version is None:
149
- return None
150
- return VersionCandidate(version=version, source="GitHub", url=f"https://github.com/{repo}/releases/tag/{tag}")
151
-
152
-
153
- def _latest_candidate(candidates: list[VersionCandidate]) -> VersionCandidate | None:
154
- latest: VersionCandidate | None = None
155
- for candidate in candidates:
156
- if latest is None or compare_versions(candidate.version, latest.version) > 0:
157
- latest = candidate
158
- return latest
159
-
160
-
161
89
  def _read_json_response(response: Any) -> dict[str, Any] | list[Any]:
162
90
  data = response.read()
163
91
  if isinstance(data, str):
@@ -179,15 +107,6 @@ def _request(url: str) -> urllib.request.Request:
179
107
  )
180
108
 
181
109
 
182
- def _normalize_tag_version(value: object) -> str | None:
183
- if not isinstance(value, str):
184
- return None
185
- stripped = value.strip()
186
- if stripped.startswith(("v", "V")):
187
- stripped = stripped[1:]
188
- return stripped if _version_parts(stripped) else None
189
-
190
-
191
110
  def _version_parts(value: str) -> list[int]:
192
111
  match = re.match(r"^\s*v?(\d+(?:\.\d+)*)", value, flags=re.IGNORECASE)
193
112
  if not match:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes