soothe-cli 0.4.4__tar.gz → 0.4.6__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 (126) hide show
  1. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/.gitignore +1 -0
  2. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/PKG-INFO +1 -1
  3. soothe_cli-0.4.6/src/soothe_cli/__init__.py +10 -0
  4. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/file_ops.py +33 -1
  5. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/messages.py +11 -3
  6. soothe_cli-0.4.4/src/soothe_cli/__init__.py +0 -5
  7. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/README.md +0 -0
  8. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/pyproject.toml +0 -0
  9. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/__init__.py +0 -0
  10. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/commands/__init__.py +0 -0
  11. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/commands/autopilot_cmd.py +0 -0
  12. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/commands/loop_cmd.py +0 -0
  13. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/commands/run_cmd.py +0 -0
  14. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/commands/thread_cmd.py +0 -0
  15. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/execution/__init__.py +0 -0
  16. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/execution/daemon.py +0 -0
  17. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/execution/headless.py +0 -0
  18. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/execution/headless_renderer.py +0 -0
  19. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/execution/launcher.py +0 -0
  20. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/main.py +0 -0
  21. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/__init__.py +0 -0
  22. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/context.py +0 -0
  23. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/display_line.py +0 -0
  24. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/formatter.py +0 -0
  25. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/pipeline.py +0 -0
  26. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/cli/stream/task_scope.py +0 -0
  27. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/config/__init__.py +0 -0
  28. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/config/cli_config.py +0 -0
  29. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/plan/__init__.py +0 -0
  30. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/plan/rich_tree.py +0 -0
  31. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/__init__.py +0 -0
  32. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/commands/__init__.py +0 -0
  33. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/commands/command_router.py +0 -0
  34. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/commands/slash_commands.py +0 -0
  35. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/commands/subagent_routing.py +0 -0
  36. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/config_loader.py +0 -0
  37. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/core/__init__.py +0 -0
  38. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/core/event_processor.py +0 -0
  39. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/core/presentation_engine.py +0 -0
  40. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/core/processor_state.py +0 -0
  41. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/core/renderer_protocol.py +0 -0
  42. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/__init__.py +0 -0
  43. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/display_policy.py +0 -0
  44. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/essential_events.py +0 -0
  45. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/explore_task_display.py +0 -0
  46. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/stream_accumulator.py +0 -0
  47. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/events/tui_trace_log.py +0 -0
  48. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/presentation_engine.py +0 -0
  49. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/renderer_base.py +0 -0
  50. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/rendering/__init__.py +0 -0
  51. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/rendering/async_renderer_protocol.py +0 -0
  52. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/rendering/renderer_base.py +0 -0
  53. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/stream_accumulator.py +0 -0
  54. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/subagent_routing.py +0 -0
  55. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/__init__.py +0 -0
  56. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/message_processing.py +0 -0
  57. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/rendering.py +0 -0
  58. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_call_resolution.py +0 -0
  59. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_card_payload.py +0 -0
  60. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_card_visibility.py +0 -0
  61. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/__init__.py +0 -0
  62. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/base.py +0 -0
  63. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/execution.py +0 -0
  64. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/fallback.py +0 -0
  65. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/goal_formatter.py +0 -0
  66. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/media.py +0 -0
  67. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/structured.py +0 -0
  68. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/subagent.py +0 -0
  69. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_formatters/web.py +0 -0
  70. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_message_format.py +0 -0
  71. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/shared/tools/tool_output_formatter.py +0 -0
  72. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/__init__.py +0 -0
  73. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/_ask_user_types.py +0 -0
  74. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/_cli_context.py +0 -0
  75. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/_env_vars.py +0 -0
  76. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/_session_stats.py +0 -0
  77. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/_version.py +0 -0
  78. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/app.py +0 -0
  79. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/app.tcss +0 -0
  80. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/command_registry.py +0 -0
  81. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/config.py +0 -0
  82. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/daemon_session.py +0 -0
  83. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/file_ops.py +0 -0
  84. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/formatting.py +0 -0
  85. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/hooks.py +0 -0
  86. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/input.py +0 -0
  87. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/media_utils.py +0 -0
  88. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/message_display_filter.py +0 -0
  89. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/model_config.py +0 -0
  90. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/output.py +0 -0
  91. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/preview_limits.py +0 -0
  92. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/project_utils.py +0 -0
  93. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/sessions.py +0 -0
  94. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/skills/__init__.py +0 -0
  95. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/skills/invocation.py +0 -0
  96. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/skills/load.py +0 -0
  97. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/textual_adapter.py +0 -0
  98. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/theme.py +0 -0
  99. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/tool_display.py +0 -0
  100. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/unicode_security.py +0 -0
  101. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/update_check.py +0 -0
  102. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/__init__.py +0 -0
  103. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/_links.py +0 -0
  104. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/approval.py +0 -0
  105. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/ask_user.py +0 -0
  106. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/autocomplete.py +0 -0
  107. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/autopilot_dashboard.py +0 -0
  108. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/autopilot_screen.py +0 -0
  109. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/chat_input.py +0 -0
  110. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/clipboard.py +0 -0
  111. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/diff.py +0 -0
  112. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/editor.py +0 -0
  113. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/history.py +0 -0
  114. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/loading.py +0 -0
  115. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/loop_selector.py +0 -0
  116. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/mcp_viewer.py +0 -0
  117. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/message_store.py +0 -0
  118. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/model_selector.py +0 -0
  119. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/notification_settings.py +0 -0
  120. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/status.py +0 -0
  121. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/theme_selector.py +0 -0
  122. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/thread_selector.py +0 -0
  123. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/tool_renderers.py +0 -0
  124. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/tool_widgets.py +0 -0
  125. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/tools.py +0 -0
  126. {soothe_cli-0.4.4 → soothe_cli-0.4.6}/src/soothe_cli/tui/widgets/welcome.py +0 -0
@@ -219,3 +219,4 @@ checkpoint.json
219
219
  manifest.json
220
220
  _bmad
221
221
  __MACOSX
222
+ .qoder
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soothe-cli
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: Soothe CLI client - communicates with daemon via WebSocket
5
5
  Project-URL: Homepage, https://github.com/OpenSoothe/soothe
6
6
  Project-URL: Documentation, https://soothe.readthedocs.io
@@ -0,0 +1,10 @@
1
+ """Soothe CLI client - communicates with daemon via WebSocket."""
2
+
3
+ import importlib.metadata
4
+
5
+ try:
6
+ __version__ = importlib.metadata.version("soothe-cli")
7
+ except importlib.metadata.PackageNotFoundError:
8
+ __version__ = "0.0.0"
9
+
10
+ __all__ = []
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import re
5
6
  from typing import Any
6
7
 
7
8
  from soothe_cli.shared.tools.tool_formatters.base import BaseFormatter
@@ -12,7 +13,7 @@ class FileOpsFormatter(BaseFormatter):
12
13
  """Formatter for file operation tools.
13
14
 
14
15
  Handles: read_file, write_file, delete_file, list_files, search_files, glob,
15
- grep, ls
16
+ grep, ls, file_info
16
17
 
17
18
  Provides semantic summaries with size, line count, and item count metrics.
18
19
  """
@@ -54,9 +55,40 @@ class FileOpsFormatter(BaseFormatter):
54
55
  return self._format_glob(result)
55
56
  if normalized == "grep":
56
57
  return self._format_search_files(result)
58
+ if normalized == "file_info":
59
+ return self._format_file_info(result)
57
60
  msg = f"Unknown file operation tool: {tool_name}"
58
61
  raise ValueError(msg)
59
62
 
63
+ _SIZE_BYTES_LINE = re.compile(r"Size:\s*(\d+)\s*bytes", re.IGNORECASE)
64
+
65
+ def _format_file_info(self, result: str) -> ToolBrief:
66
+ """Format file_info metadata result (path, size, mtime, …)."""
67
+ if result.startswith("Error:"):
68
+ error_msg = result[6:].strip()
69
+ return ToolBrief(
70
+ icon="✗",
71
+ summary="File info failed",
72
+ detail=self._truncate_text(error_msg, 80),
73
+ metrics={"error": True},
74
+ )
75
+ m = self._SIZE_BYTES_LINE.search(result)
76
+ if m:
77
+ size_bytes = int(m.group(1))
78
+ size_str = self._format_size(size_bytes)
79
+ return ToolBrief(
80
+ icon="✓",
81
+ summary=f"Metadata {size_str}",
82
+ detail=None,
83
+ metrics={"size_bytes": size_bytes},
84
+ )
85
+ return ToolBrief(
86
+ icon="✓",
87
+ summary="File metadata",
88
+ detail=None,
89
+ metrics={},
90
+ )
91
+
60
92
  def _format_read_file(self, result: str) -> ToolBrief:
61
93
  r"""Format read_file result.
62
94
 
@@ -2392,13 +2392,21 @@ class CognitionGoalTreeMessage(_TimestampClickMixin, Vertical):
2392
2392
  self,
2393
2393
  *,
2394
2394
  status: str,
2395
- goal_progress: float,
2395
+ goal_progress: str, # IG-399: descriptive level instead of float
2396
2396
  completion_summary: str,
2397
2397
  total_steps: int,
2398
2398
  ) -> None:
2399
2399
  """Show a compact footer when the agentic loop completes."""
2400
- pct = int(float(goal_progress) * 100)
2401
- parts: list[str] = [str(status or "done"), f"{pct}%"]
2400
+ # IG-399: Map descriptive levels to percentage display
2401
+ progress_map = {
2402
+ "none": "0%",
2403
+ "low": "20%",
2404
+ "medium": "50%",
2405
+ "high": "80%",
2406
+ "complete": "100%",
2407
+ }
2408
+ pct_display = progress_map.get(goal_progress, "0%")
2409
+ parts: list[str] = [str(status or "done"), pct_display]
2402
2410
  if total_steps:
2403
2411
  parts.append(f"{total_steps} step(s)")
2404
2412
  cs = (completion_summary or "").strip()
@@ -1,5 +0,0 @@
1
- """Soothe CLI client - communicates with daemon via WebSocket."""
2
-
3
- __version__ = "0.1.0"
4
-
5
- __all__ = []
File without changes
File without changes