deepy-cli 0.2.19__tar.gz → 0.2.20__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.
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/PKG-INFO +2 -2
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/README.md +1 -1
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/pyproject.toml +1 -1
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/__init__.py +1 -1
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/cli.py +5 -6
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/config/settings.py +11 -5
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/app.py +2 -3
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/screens.py +1 -1
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/status_footer.py +1 -1
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/terminal.py +493 -356
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/theme_picker.py +1 -2
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/__main__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/background_tasks.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/config/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/skills/skill-creator/SKILL.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/skills/skill-installer/SKILL.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/AskUserQuestion.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/Search.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/WebFetch.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/WebSearch.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/apply_patch.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/edit_text.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/read_file.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/shell.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/task_list.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/task_output.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/task_stop.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/test_shell.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/todo_write.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/data/tools/write_file.md +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/errors.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/input_suggestions.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/agent.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/compaction.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/context.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/events.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/model_capabilities.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/provider.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/replay.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/runner.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/llm/thinking.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/mcp.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/compact.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/init_agents.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/rules.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/runtime_context.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/system.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/prompts/tool_docs.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/session_cost.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/sessions/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/sessions/jsonl.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/sessions/manager.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/skill_market.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/skills.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/status.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/subagents.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/todos.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/agents.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/builtin.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/file_state.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/result.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/search.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/shell_output.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/shell_utils.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tools/test_shell.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/commands.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/compat.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/diff.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/runner.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/state.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/tui/widgets.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/types/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/types/sdk.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/types/tool_payloads.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/app.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/ask_user_question.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/exit_summary.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/file_mentions.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/loading_text.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/local_command.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/markdown.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/message_view.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/model_picker.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/prompt_buffer.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/prompt_input.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/session_list.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/session_picker.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/skill_picker.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/slash_commands.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/styles.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/thinking_state.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/ui/welcome.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/update_check.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/usage.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/utils/__init__.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/utils/debug_logger.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/utils/error_logger.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/src/deepy/utils/json.py +0 -0
- {deepy_cli-0.2.19 → deepy_cli-0.2.20}/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.2.
|
|
3
|
+
Version: 0.2.20
|
|
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
|
|
@@ -306,7 +306,7 @@ reserved_context_tokens = 50000
|
|
|
306
306
|
compact_preserve_recent_messages = 2
|
|
307
307
|
|
|
308
308
|
[ui]
|
|
309
|
-
theme = "
|
|
309
|
+
theme = "dark" # dark or light
|
|
310
310
|
```
|
|
311
311
|
|
|
312
312
|
Set config without the interactive wizard:
|
|
@@ -61,13 +61,13 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
61
61
|
init_parser.add_argument("--model", help="Model name.")
|
|
62
62
|
init_parser.add_argument("--base-url", help="OpenAI-compatible base URL.")
|
|
63
63
|
init_parser.add_argument("--thinking", help="Thinking mode for the provider.")
|
|
64
|
-
init_parser.add_argument("--theme", default=DEFAULT_UI_THEME, help="UI theme:
|
|
64
|
+
init_parser.add_argument("--theme", default=DEFAULT_UI_THEME, help="UI theme: dark or light.")
|
|
65
65
|
init_parser.add_argument("--force", action="store_true", help="Overwrite existing config.")
|
|
66
66
|
setup_parser = config_sub.add_parser("setup", help="Interactively configure Deepy.")
|
|
67
67
|
setup_parser.add_argument("--force", action="store_true", help="Overwrite existing config.")
|
|
68
68
|
config_sub.add_parser("reset", help="Delete local config and run interactive setup again.")
|
|
69
69
|
theme_parser = config_sub.add_parser("theme", help="Show or update terminal UI theme.")
|
|
70
|
-
theme_parser.add_argument("theme", nargs="?", help="Theme to save:
|
|
70
|
+
theme_parser.add_argument("theme", nargs="?", help="Theme to save: dark or light.")
|
|
71
71
|
|
|
72
72
|
doctor_parser = subparsers.add_parser("doctor", help="Validate local Deepy setup.")
|
|
73
73
|
doctor_parser.add_argument("--json", action="store_true", help="Print JSON diagnostics.")
|
|
@@ -381,9 +381,8 @@ def _thinking_mode_from_selection(provider: str, value: str, *, default: str) ->
|
|
|
381
381
|
|
|
382
382
|
def _prompt_theme_value(*, default: str = DEFAULT_UI_THEME) -> str:
|
|
383
383
|
print("UI theme:")
|
|
384
|
-
print("1.
|
|
385
|
-
print("2.
|
|
386
|
-
print("3. light Optimized for light terminal backgrounds")
|
|
384
|
+
print("1. dark Optimized for dark terminal backgrounds")
|
|
385
|
+
print("2. light Optimized for light terminal backgrounds")
|
|
387
386
|
value = _prompt_config_value("UI theme number", default=ui_theme_number(default))
|
|
388
387
|
return ui_theme_from_selection(value, default=default)
|
|
389
388
|
|
|
@@ -417,7 +416,7 @@ def _cmd_config_theme(args: argparse.Namespace) -> int:
|
|
|
417
416
|
print(f"resolved: {palette.name}")
|
|
418
417
|
return 0
|
|
419
418
|
if args.theme not in UI_THEMES:
|
|
420
|
-
print("Invalid theme. Usage: deepy config theme [
|
|
419
|
+
print("Invalid theme. Usage: deepy config theme [dark|light]", file=sys.stderr)
|
|
421
420
|
return 1
|
|
422
421
|
config_path = settings.path or (args.config.expanduser() if args.config else Path.home() / ".deepy" / "config.toml")
|
|
423
422
|
update_config_theme(config_path, args.theme)
|
|
@@ -16,7 +16,7 @@ DEFAULT_COMPACT_TRIGGER_RATIO = 0.8
|
|
|
16
16
|
DEFAULT_RESERVED_CONTEXT_TOKENS = 50_000
|
|
17
17
|
DEFAULT_COMPACT_PRESERVE_RECENT_MESSAGES = 2
|
|
18
18
|
DEFAULT_WEB_SEARCH_SEARXNG_URL = "https://s.kirineko.tech/"
|
|
19
|
-
DEFAULT_UI_THEME = "
|
|
19
|
+
DEFAULT_UI_THEME = "dark"
|
|
20
20
|
DEFAULT_MCP_ENABLED = True
|
|
21
21
|
DEFAULT_MCP_CONNECT_TIMEOUT_SECONDS = 10.0
|
|
22
22
|
DEFAULT_MCP_CLEANUP_TIMEOUT_SECONDS = 10.0
|
|
@@ -45,8 +45,8 @@ SWITCH_ONLY_THINKING_MODES = ("disabled", "enabled")
|
|
|
45
45
|
REASONING_MODES = set(DEEPSEEK_REASONING_MODES)
|
|
46
46
|
THINKING_MODES = set(DEEPSEEK_REASONING_MODES) | set(SWITCH_ONLY_THINKING_MODES) | OPENROUTER_REASONING_EFFORTS
|
|
47
47
|
PROVIDERS = {"deepseek", "openrouter", "xiaomi"}
|
|
48
|
-
UI_THEMES = {"
|
|
49
|
-
UI_THEME_OPTIONS = (("1", "
|
|
48
|
+
UI_THEMES = {"dark", "light"}
|
|
49
|
+
UI_THEME_OPTIONS = (("1", "dark"), ("2", "light"))
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
@dataclass(frozen=True)
|
|
@@ -570,6 +570,12 @@ class UiConfig:
|
|
|
570
570
|
raw.get("input_suggestions_enabled"),
|
|
571
571
|
DEFAULT_INPUT_SUGGESTIONS_ENABLED,
|
|
572
572
|
)
|
|
573
|
+
if isinstance(theme, str) and theme.strip() == "auto":
|
|
574
|
+
return cls(
|
|
575
|
+
theme=DEFAULT_UI_THEME,
|
|
576
|
+
theme_configured=True,
|
|
577
|
+
input_suggestions_enabled=input_suggestions_enabled,
|
|
578
|
+
)
|
|
573
579
|
if isinstance(theme, str) and theme.strip() in UI_THEMES:
|
|
574
580
|
return cls(
|
|
575
581
|
theme=theme.strip(),
|
|
@@ -690,7 +696,7 @@ def write_config(
|
|
|
690
696
|
thinking_mode: str | None = None,
|
|
691
697
|
) -> None:
|
|
692
698
|
if not is_valid_ui_theme(theme):
|
|
693
|
-
raise ValueError("UI theme must be one of:
|
|
699
|
+
raise ValueError("UI theme must be one of: dark, light.")
|
|
694
700
|
if not is_supported_provider(provider):
|
|
695
701
|
raise ValueError("Provider must be one of: deepseek, openrouter, xiaomi.")
|
|
696
702
|
provider_info = provider_info_for(provider)
|
|
@@ -816,7 +822,7 @@ def update_config_model_settings(
|
|
|
816
822
|
|
|
817
823
|
def update_config_theme(config_path: Path, theme: str) -> None:
|
|
818
824
|
if not is_valid_ui_theme(theme):
|
|
819
|
-
raise ValueError("UI theme must be one of:
|
|
825
|
+
raise ValueError("UI theme must be one of: dark, light.")
|
|
820
826
|
path = config_path.expanduser()
|
|
821
827
|
if path.suffix == ".json":
|
|
822
828
|
raise ValueError("Deepy only supports TOML config files; JSON config is not supported.")
|
|
@@ -823,7 +823,6 @@ class DeepyTuiApp(App[None]):
|
|
|
823
823
|
ChoiceScreen(
|
|
824
824
|
"Select theme",
|
|
825
825
|
[
|
|
826
|
-
Choice("auto", "auto", "Follow saved/default theme behavior"),
|
|
827
826
|
Choice("dark", "dark", "Use Textual dark theme"),
|
|
828
827
|
Choice("light", "light", "Use Textual light theme"),
|
|
829
828
|
],
|
|
@@ -833,7 +832,7 @@ class DeepyTuiApp(App[None]):
|
|
|
833
832
|
self._update_status("Theme unchanged")
|
|
834
833
|
return
|
|
835
834
|
if not is_valid_ui_theme(theme):
|
|
836
|
-
await self._append_block(ErrorBlock("Usage: /theme
|
|
835
|
+
await self._append_block(ErrorBlock("Usage: /theme dark|light"))
|
|
837
836
|
return
|
|
838
837
|
if self.settings.path is None:
|
|
839
838
|
await self._append_block(ErrorBlock("Cannot persist theme: config path is unknown."))
|
|
@@ -2040,7 +2039,7 @@ def _reset_config_validation_error(result: ResetConfigResult) -> str:
|
|
|
2040
2039
|
if not result.theme:
|
|
2041
2040
|
return "Theme is required."
|
|
2042
2041
|
if not is_valid_ui_theme(result.theme):
|
|
2043
|
-
return "Usage: theme must be
|
|
2042
|
+
return "Usage: theme must be dark|light"
|
|
2044
2043
|
return ""
|
|
2045
2044
|
|
|
2046
2045
|
|
|
@@ -191,7 +191,7 @@ class ResetConfigScreen(ModalScreen[ResetConfigResult | None]):
|
|
|
191
191
|
yield Input(value=self.model, placeholder="Model", id="reset-model")
|
|
192
192
|
yield Input(value=self.base_url, placeholder="Base URL", id="reset-base-url")
|
|
193
193
|
yield Input(value=self.thinking, placeholder="Thinking", id="reset-thinking")
|
|
194
|
-
yield Input(value=self.theme, placeholder="Theme:
|
|
194
|
+
yield Input(value=self.theme, placeholder="Theme: dark|light", id="reset-theme")
|
|
195
195
|
yield Footer()
|
|
196
196
|
|
|
197
197
|
def on_mount(self) -> None:
|
|
@@ -83,7 +83,7 @@ def _help_parts(help_text: str) -> list[tuple[FooterPartRole, str]]:
|
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
def _known_title(text: str) -> str | None:
|
|
86
|
-
for title in ("provider", "model", "cwd", "mcp", "bg", "ctx", "newline"):
|
|
86
|
+
for title in ("provider", "model", "cwd", "mcp", "update", "bg", "ctx", "newline"):
|
|
87
87
|
if text == title or text.startswith(f"{title} ") or text.startswith(f"{title}:"):
|
|
88
88
|
return title
|
|
89
89
|
return None
|