soothe-cli 0.7.10__tar.gz → 0.7.11__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.
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/PKG-INFO +1 -1
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/state/step_router.py +2 -3
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/preview_limits.py +1 -1
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/textual_adapter.py +15 -58
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_step.py +2 -37
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_step_activity.py +0 -17
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/.gitignore +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/README.md +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/pyproject.toml +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/autopilot_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/config_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/cron_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/loop_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/run_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/commands/status_cmd.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/daemon.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/daemon_errors.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/headless.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/headless_renderer.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/execution/launcher.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/cli/main.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/config/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/config/cli_config.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/config/loader.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/config/logging_setup.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/headless/processor.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/headless/processor_state.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/parse/message_processing.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/parse/tool_call_resolution.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/parse/tool_result.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/policy/display_policy.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/policy/essential_events.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/policy/tui_trace_log.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/duration_format.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/engine.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/renderer_base.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/renderer_protocol.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/subagent_task_display.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/state/file_tracker.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/state/session_stats.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/state/stream_accumulator.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/state/transcript.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/transport/session.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/turn/pipeline.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/turn/prepare.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/wire/chunk_filter.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/wire/message_text.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/wire/messages.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/_cli_context.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/_env_vars.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/_version.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_app.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_execution.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_history.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_messages_mixin.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_model.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_module_init.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_startup.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/_ui.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/app/app.tcss +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/binding.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/command_registry.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/commands/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/commands/command_router.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/commands/slash_commands.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/commands/subagent_routing.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/config.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/file_change_notify.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/file_change_renderers.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/hooks.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/input.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/markdown_theme.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/media_utils.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/model_config.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/path_utils.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/project_utils.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/sessions.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/shell_color.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/skills/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/skills/invocation.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/skills/load.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/spinner_labels.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/theme.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/tips.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/tool_display.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/unicode_security.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/update_check.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/_links.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/autocomplete.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/chat_input.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/clipboard.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/context_viewer.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/diff.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/editor.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/file_change_preview.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/help_screen.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/history.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/loading.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/loop_selector.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/mcp_viewer.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/message_store.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/__init__.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/_helpers.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/app.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/assistant.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/clarification.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_goal_tree.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_reason.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_subagent.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/diff_message.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/error.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/skill.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/user.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/model_selector.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/notification_settings.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/plan_quick_view_overlay.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/status.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/theme_selector.py +0 -0
- {soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/welcome.py +0 -0
|
@@ -174,9 +174,8 @@ class StepTaskRouter:
|
|
|
174
174
|
) -> None:
|
|
175
175
|
"""Promote a pending step card to running only when it is executing (RFC-628).
|
|
176
176
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
the active step is allowed only while no sibling step card is already running.
|
|
177
|
+
Future steps are not pre-mounted in the message list; only the active step
|
|
178
|
+
may transition to ``running`` before ``step.started`` when tools arrive early.
|
|
180
179
|
"""
|
|
181
180
|
if getattr(step_w, "_status", "") != "pending":
|
|
182
181
|
return
|
|
@@ -15,7 +15,7 @@ from typing import Final
|
|
|
15
15
|
STEP_CARD_SHOW_TOOL_ROW_DETAILS: Final[bool] = False
|
|
16
16
|
|
|
17
17
|
# Latest per-tool invocation lines on step and SubAgent cards (shared activity tree).
|
|
18
|
-
STEP_CARD_TOOL_ACTIVITY_PREVIEW_COUNT: Final[int] =
|
|
18
|
+
STEP_CARD_TOOL_ACTIVITY_PREVIEW_COUNT: Final[int] = 2
|
|
19
19
|
|
|
20
20
|
# Optional manual full tool-list folding threshold (not auto-collapse).
|
|
21
21
|
STEP_TASK_CARD_COLLAPSE_LINE_THRESHOLD: Final[int] = 3
|
|
@@ -298,9 +298,6 @@ class TextualUIAdapter:
|
|
|
298
298
|
self._execute_wave_completed: int = 0
|
|
299
299
|
"""Completed steps in the current execute batch."""
|
|
300
300
|
|
|
301
|
-
self._successful_step_ids: set[str] = set()
|
|
302
|
-
"""Step ids that finished successfully this loop (survives plan=keep replays)."""
|
|
303
|
-
|
|
304
301
|
self._clarification_input_by_step: dict[str, ClarificationInputMessage] = {}
|
|
305
302
|
"""Active inline ``ClarificationInputMessage`` widgets keyed by step id.
|
|
306
303
|
|
|
@@ -406,7 +403,7 @@ def _stream_end_pending_error_message(
|
|
|
406
403
|
if is_daemon_worker_thread_lost(err_msg) or is_daemon_worker_subprocess_lost(err_msg):
|
|
407
404
|
return "Worker stopped during stream"
|
|
408
405
|
if end_state == "idle" and any(
|
|
409
|
-
getattr(widget, "_status", "")
|
|
406
|
+
getattr(widget, "_status", "") == "running"
|
|
410
407
|
for widget in adapter._current_step_messages.values()
|
|
411
408
|
):
|
|
412
409
|
return "Stream ended before steps completed"
|
|
@@ -1448,12 +1445,16 @@ async def _ensure_goal_tree_message(
|
|
|
1448
1445
|
return widget
|
|
1449
1446
|
|
|
1450
1447
|
|
|
1451
|
-
async def
|
|
1448
|
+
async def cleanup_stale_plan_step_cards(
|
|
1452
1449
|
adapter: TextualUIAdapter,
|
|
1453
1450
|
*,
|
|
1454
1451
|
steps: list[dict[str, Any]],
|
|
1455
1452
|
) -> None:
|
|
1456
|
-
"""
|
|
1453
|
+
"""Drop stale pending step cards after replan; do not mount future steps.
|
|
1454
|
+
|
|
1455
|
+
Planned and queued steps appear only in the Ctrl+T plan quick view (goal tree).
|
|
1456
|
+
Step cards mount in the message list when ``step_started`` fires.
|
|
1457
|
+
"""
|
|
1457
1458
|
planned_ids = {
|
|
1458
1459
|
str(row.get("id", "")).strip()
|
|
1459
1460
|
for row in steps
|
|
@@ -1468,23 +1469,6 @@ async def sync_pending_step_cards_from_plan(
|
|
|
1468
1469
|
if bound is widget:
|
|
1469
1470
|
adapter._step_by_namespace.pop(ns, None)
|
|
1470
1471
|
|
|
1471
|
-
for row in steps:
|
|
1472
|
-
if not isinstance(row, dict):
|
|
1473
|
-
continue
|
|
1474
|
-
sid = str(row.get("id", "")).strip()
|
|
1475
|
-
if not sid or sid in adapter._current_step_messages:
|
|
1476
|
-
continue
|
|
1477
|
-
if _is_successful_step_id(adapter, sid):
|
|
1478
|
-
continue
|
|
1479
|
-
desc = str(row.get("description", "")).strip() or "(step)"
|
|
1480
|
-
step_widget = CognitionStepMessage(
|
|
1481
|
-
step_id=sid,
|
|
1482
|
-
description=desc,
|
|
1483
|
-
id=f"step-{uuid.uuid4().hex[:8]}",
|
|
1484
|
-
)
|
|
1485
|
-
await adapter._mount_message(step_widget)
|
|
1486
|
-
adapter._current_step_messages[sid] = step_widget
|
|
1487
|
-
|
|
1488
1472
|
|
|
1489
1473
|
def _step_card_lookup_keys(step_id: str) -> list[str]:
|
|
1490
1474
|
"""Return dict lookup keys for a step id (canonical and wire variants)."""
|
|
@@ -1501,17 +1485,6 @@ def _step_card_lookup_keys(step_id: str) -> list[str]:
|
|
|
1501
1485
|
return keys
|
|
1502
1486
|
|
|
1503
1487
|
|
|
1504
|
-
def _register_successful_step_id(adapter: TextualUIAdapter, step_id: str) -> None:
|
|
1505
|
-
"""Remember a step that completed successfully so plan=keep does not remount it."""
|
|
1506
|
-
for key in _step_card_lookup_keys(step_id):
|
|
1507
|
-
adapter._successful_step_ids.add(key)
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
def _is_successful_step_id(adapter: TextualUIAdapter, step_id: str) -> bool:
|
|
1511
|
-
"""True when this step already succeeded earlier in the current loop."""
|
|
1512
|
-
return any(key in adapter._successful_step_ids for key in _step_card_lookup_keys(step_id))
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
1488
|
def _lookup_step_card(
|
|
1516
1489
|
adapter: TextualUIAdapter,
|
|
1517
1490
|
step_id: str,
|
|
@@ -2856,7 +2829,6 @@ async def execute_task_textual(
|
|
|
2856
2829
|
router.reset_turn()
|
|
2857
2830
|
adapter._execute_wave_total = 0
|
|
2858
2831
|
adapter._execute_wave_completed = 0
|
|
2859
|
-
adapter._successful_step_ids.clear()
|
|
2860
2832
|
ui_coalesce = TurnToolUiCoalescer()
|
|
2861
2833
|
adapter._goal_completion_mounted_this_turn = False
|
|
2862
2834
|
adapter._goal_tree_message = None
|
|
@@ -3865,7 +3837,7 @@ async def execute_task_textual(
|
|
|
3865
3837
|
done_steps,
|
|
3866
3838
|
len(raw_steps),
|
|
3867
3839
|
)
|
|
3868
|
-
await
|
|
3840
|
+
await cleanup_stale_plan_step_cards(
|
|
3869
3841
|
adapter,
|
|
3870
3842
|
steps=raw_steps,
|
|
3871
3843
|
)
|
|
@@ -3883,26 +3855,13 @@ async def execute_task_textual(
|
|
|
3883
3855
|
if event_type == STRANGE_LOOP_STEP_QUEUED:
|
|
3884
3856
|
step_id = str(data.get("step_id", "")).strip()
|
|
3885
3857
|
description = str(data.get("description", "")).strip()
|
|
3886
|
-
if step_id:
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
)
|
|
3894
|
-
await adapter._mount_message(step_widget)
|
|
3895
|
-
adapter._current_step_messages[step_id] = step_widget
|
|
3896
|
-
elif description:
|
|
3897
|
-
step_widget.set_description(description)
|
|
3898
|
-
step_widget.set_queued()
|
|
3899
|
-
if not ns_key:
|
|
3900
|
-
_sync_goal_tree_step_phase(
|
|
3901
|
-
adapter,
|
|
3902
|
-
step_id,
|
|
3903
|
-
"queued",
|
|
3904
|
-
description=description,
|
|
3905
|
-
)
|
|
3858
|
+
if step_id and not ns_key:
|
|
3859
|
+
_sync_goal_tree_step_phase(
|
|
3860
|
+
adapter,
|
|
3861
|
+
step_id,
|
|
3862
|
+
"queued",
|
|
3863
|
+
description=description,
|
|
3864
|
+
)
|
|
3906
3865
|
continue
|
|
3907
3866
|
|
|
3908
3867
|
if event_type == STRANGE_LOOP_STEP_STARTED:
|
|
@@ -4018,8 +3977,6 @@ async def execute_task_textual(
|
|
|
4018
3977
|
pending_text_by_namespace[ns_key] = ""
|
|
4019
3978
|
assistant_message_by_namespace.pop(ns_key, None)
|
|
4020
3979
|
success = bool(data.get("success", True))
|
|
4021
|
-
if success:
|
|
4022
|
-
_register_successful_step_id(adapter, step_id)
|
|
4023
3980
|
duration_ms = int(data.get("duration_ms", 0))
|
|
4024
3981
|
tool_call_count = int(data.get("tool_call_count", 0))
|
|
4025
3982
|
summary = str(
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_step.py
RENAMED
|
@@ -135,7 +135,7 @@ class CognitionStepMessage(Vertical):
|
|
|
135
135
|
super().__init__(**kwargs)
|
|
136
136
|
self._step_id = step_id
|
|
137
137
|
self._description = description.strip()
|
|
138
|
-
self._status = "pending" # pending |
|
|
138
|
+
self._status = "pending" # pending | running | success | error
|
|
139
139
|
self._spinner_position = 0
|
|
140
140
|
self._start_time: float | None = None
|
|
141
141
|
self._animation_timer: Timer | None = None
|
|
@@ -217,7 +217,7 @@ class CognitionStepMessage(Vertical):
|
|
|
217
217
|
return
|
|
218
218
|
self._input_tokens += input_tokens
|
|
219
219
|
self._output_tokens += output_tokens
|
|
220
|
-
if self._status in ("running", "pending"
|
|
220
|
+
if self._status in ("running", "pending"):
|
|
221
221
|
self._sync_running_status_line()
|
|
222
222
|
|
|
223
223
|
def _token_budget_suffix(self) -> str:
|
|
@@ -283,8 +283,6 @@ class CognitionStepMessage(Vertical):
|
|
|
283
283
|
return
|
|
284
284
|
if self._status == "running":
|
|
285
285
|
self._ensure_running_ui()
|
|
286
|
-
elif self._status == "queued":
|
|
287
|
-
self._sync_step_card_surface()
|
|
288
286
|
elif self._status == "pending":
|
|
289
287
|
self._sync_step_card_surface()
|
|
290
288
|
|
|
@@ -466,8 +464,6 @@ class CognitionStepMessage(Vertical):
|
|
|
466
464
|
self._sync_running_status_text(index)
|
|
467
465
|
elif self._status == "pending":
|
|
468
466
|
self._refresh_pending_display(index)
|
|
469
|
-
elif self._status == "queued":
|
|
470
|
-
self._refresh_queued_display(index)
|
|
471
467
|
|
|
472
468
|
if STEP_CARD_SHOW_TOOL_ROW_DETAILS:
|
|
473
469
|
self._refresh_tools_display()
|
|
@@ -1156,37 +1152,6 @@ class CognitionStepMessage(Vertical):
|
|
|
1156
1152
|
)
|
|
1157
1153
|
self._status_widget.display = True
|
|
1158
1154
|
|
|
1159
|
-
def _refresh_queued_display(self, index: StepRowIndex | None = None) -> None:
|
|
1160
|
-
"""Show ready steps waiting for a concurrency slot (``max_parallel_steps``)."""
|
|
1161
|
-
if self._status != "queued" or self._status_widget is None:
|
|
1162
|
-
return
|
|
1163
|
-
if index is None:
|
|
1164
|
-
index = self._build_row_index()
|
|
1165
|
-
try:
|
|
1166
|
-
colors = theme.get_theme_colors(self)
|
|
1167
|
-
except Exception: # noqa: BLE001
|
|
1168
|
-
colors = theme.DARK_COLORS
|
|
1169
|
-
g = get_glyphs()
|
|
1170
|
-
gutter = f"{g.output_prefix} "
|
|
1171
|
-
self._status_widget.update(
|
|
1172
|
-
StepCardStatusLine.footer_queued(
|
|
1173
|
-
gutter=gutter,
|
|
1174
|
-
circle_empty=g.circle_empty,
|
|
1175
|
-
stats_suffix=stats_title_suffix(index),
|
|
1176
|
-
token_suffix=self._token_budget_suffix(),
|
|
1177
|
-
colors=colors,
|
|
1178
|
-
)
|
|
1179
|
-
)
|
|
1180
|
-
self._status_widget.display = True
|
|
1181
|
-
|
|
1182
|
-
def set_queued(self) -> None:
|
|
1183
|
-
"""Mark a ready step as waiting for an execute batch slot."""
|
|
1184
|
-
if self._status in ("running", "success", "error"):
|
|
1185
|
-
return
|
|
1186
|
-
self._status = "queued"
|
|
1187
|
-
self._refresh_header_title()
|
|
1188
|
-
self._sync_step_card_surface()
|
|
1189
|
-
|
|
1190
1155
|
def _maybe_start_running_timer(self) -> None:
|
|
1191
1156
|
"""Start the spinner timer when the step is running and mounted."""
|
|
1192
1157
|
if self._status != "running":
|
|
@@ -458,23 +458,6 @@ class StepCardStatusLine:
|
|
|
458
458
|
parts.append(Content.styled(tail, theme.SECONDARY_TEXT_STYLE))
|
|
459
459
|
return Content.assemble(*parts)
|
|
460
460
|
|
|
461
|
-
@staticmethod
|
|
462
|
-
def footer_queued(
|
|
463
|
-
*,
|
|
464
|
-
gutter: str,
|
|
465
|
-
circle_empty: str,
|
|
466
|
-
stats_suffix: str,
|
|
467
|
-
token_suffix: str = "",
|
|
468
|
-
colors: Any,
|
|
469
|
-
) -> Content:
|
|
470
|
-
"""Step card footer for ready steps waiting for a concurrency slot."""
|
|
471
|
-
head = f"{gutter}{circle_empty} Queued..."
|
|
472
|
-
tail = f"{stats_suffix}{token_suffix}"
|
|
473
|
-
parts: list[object] = [Content.styled(head, colors.cognition)]
|
|
474
|
-
if tail:
|
|
475
|
-
parts.append(Content.styled(tail, theme.SECONDARY_TEXT_STYLE))
|
|
476
|
-
return Content.assemble(*parts)
|
|
477
|
-
|
|
478
461
|
|
|
479
462
|
# Activity tree renderer
|
|
480
463
|
# ---------------------------------------------------------------------------
|
|
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
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/parse/tool_call_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/duration_format.py
RENAMED
|
File without changes
|
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/renderer_base.py
RENAMED
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/renderer_protocol.py
RENAMED
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/runtime/presentation/subagent_task_display.py
RENAMED
|
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
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/clarification.py
RENAMED
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_goal_tree.py
RENAMED
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_reason.py
RENAMED
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/messages/cognition_subagent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soothe_cli-0.7.10 → soothe_cli-0.7.11}/src/soothe_cli/tui/widgets/plan_quick_view_overlay.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|