Skip to content

fix: add back required package#2551

Merged
leshy merged 1 commit into
mainfrom
paul/fix/add-required-package
Jun 21, 2026
Merged

fix: add back required package#2551
leshy merged 1 commit into
mainfrom
paul/fix/add-required-package

Conversation

@paul-nechifor

Copy link
Copy Markdown
Contributor

Add back required package.

@paul-nechifor paul-nechifor force-pushed the paul/fix/add-required-package branch from 281bae5 to 7af3097 Compare June 20, 2026 23:32
@greptile-apps

greptile-apps Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR restores textual-serve as a required dependency and cleans up the two CLI entry points that depend on it. The import refactoring moves os and sys from inline inside main() to module-level, with no behavioural change.

  • pyproject.toml / uv.lock: Adds textual-serve>=1.1.1,<2 (resolved to 1.1.3) and its transitive dependency aiohttp-jinja2 1.6.
  • agentspy.py / humancli.py: Promotes import os and import sys to module-level; removes now-stale # type: ignore[import-not-found] opportunity and drops main() docstrings.

Confidence Score: 5/5

Safe to merge — restores a missing dependency and tidies up imports with no logic changes.

The change is a straightforward dependency restoration. Both CLI files compile and behave identically before and after; the only observable difference is that textual-serve is now always installed, making the web-serve mode actually functional.

No files require special attention. The two # type: ignore[import-not-found] comments in agentspy.py and humancli.py are now stale and could be cleaned up, but they are harmless.

Important Files Changed

Filename Overview
pyproject.toml Adds textual-serve>=1.1.1,<2 as a core dependency; lock file resolves it to 1.1.3 which satisfies the constraint.
dimos/utils/cli/agentspy/agentspy.py Hoists import os and import sys from inside main() to module-level; removes main() docstring. Logic is unchanged.
dimos/utils/cli/human/humancli.py Same refactoring as agentspy.py: top-level os/sys imports, docstring dropped from main().
uv.lock Adds textual-serve 1.1.3 and its transitive dependency aiohttp-jinja2 1.6 to the lock file.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant EntryPoint as main entry point
    participant TextualApp as Textual TUI App
    participant TextualServe as textual-serve Server

    User->>EntryPoint: run CLI
    alt web mode
        EntryPoint->>TextualServe: Server(python __file__)
        TextualServe->>User: serve over HTTP browser UI
    else default TUI mode
        EntryPoint->>TextualApp: app.run()
        TextualApp->>User: terminal UI
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant EntryPoint as main entry point
    participant TextualApp as Textual TUI App
    participant TextualServe as textual-serve Server

    User->>EntryPoint: run CLI
    alt web mode
        EntryPoint->>TextualServe: Server(python __file__)
        TextualServe->>User: serve over HTTP browser UI
    else default TUI mode
        EntryPoint->>TextualApp: app.run()
        TextualApp->>User: terminal UI
    end
Loading

Reviews (1): Last reviewed commit: "fix: add back required package" | Re-trigger Greptile

Comment thread dimos/utils/cli/agentspy/agentspy.py
Comment thread dimos/utils/cli/human/humancli.py
@codecov

codecov Bot commented Jun 20, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
2263 1 2262 84
View the full list of 1 ❄️ flaky test(s)
dimos.e2e_tests.test_dimsim_walk_forward::test_walk_forward

Flake rate in main: 33.33% (Passed 16 times, Failed 8 times)

Stack Traces | 205s run time
lcm_spy = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>
start_blueprint = <function start_blueprint.<locals>.set_name_and_start at 0x722bb0f159e0>
human_input = <function human_input.<locals>.send_human_input at 0x722bb0f17380>
dim_sim = <dimos.e2e_tests.dim_sim_client.DimSimClient object at 0x722bb2d991c0>

    @pytest.mark.self_hosted_large
    def test_walk_forward(lcm_spy, start_blueprint, human_input, dim_sim) -> None:
        start_blueprint(
            "run",
            "--disable",
            "spatial-memory",
            "--disable",
            "security-module",
            "unitree-go2-agentic",
            simulator="dimsim",
        )
        lcm_spy.save_topic(".../McpClient/on_system_modules/res")
        lcm_spy.wait_for_saved_topic(".../McpClient/on_system_modules/res", timeout=1200.0)
    
        origin_x, origin_y = 1, 2
        dim_sim.set_agent_position(origin_x, origin_y)
    
        human_input("move forward 3 meter")
    
>       lcm_spy.wait_until_odom_position(origin_x + 3, origin_y, threshold=0.4, timeout=120)

dim_sim    = <dimos.e2e_tests.dim_sim_client.DimSimClient object at 0x722bb2d991c0>
human_input = <function human_input.<locals>.send_human_input at 0x722bb0f17380>
lcm_spy    = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>
origin_x   = 1
origin_y   = 2
start_blueprint = <function start_blueprint.<locals>.set_name_and_start at 0x722bb0f159e0>

dimos/e2e_tests/test_dimsim_walk_forward.py:37: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/e2e_tests/lcm_spy.py:182: in wait_until_odom_position
    self.wait_for_message_result(
        predicate  = <function LcmSpy.wait_until_odom_position.<locals>.predicate at 0x722bb0f17100>
        self       = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>
        threshold  = 0.4
        timeout    = 120
        x          = 4
        y          = 2
dimos/e2e_tests/lcm_spy.py:168: in wait_for_message_result
    self.wait_until(
        event      = <threading.Event at 0x722bb2d9ad80: unset>
        fail_message = 'Failed to get to position x=4, y=2'
        listener   = <function LcmSpy.wait_for_message_result.<locals>.listener at 0x722bb0f171a0>
        predicate  = <function LcmSpy.wait_until_odom_position.<locals>.predicate at 0x722bb0f17100>
        self       = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>
        timeout    = 120
        topic      = '/odom#geometry_msgs.PoseStamped'
        type       = <class 'dimos.msgs.geometry_msgs.PoseStamped.PoseStamped'>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>

    def wait_until(
        self,
        *,
        condition: Callable[[], bool],
        timeout: float,
        error_message: str,
        poll_interval: float = 0.1,
    ) -> None:
        start_time = time.time()
        while time.time() - start_time < timeout:
            if condition():
                return
            time.sleep(poll_interval)
>       raise TimeoutError(error_message)
E       TimeoutError: Failed to get to position x=4, y=2

condition  = <bound method Event.is_set of <threading.Event at 0x722bb2d9ad80: unset>>
error_message = 'Failed to get to position x=4, y=2'
poll_interval = 0.1
self       = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x722bb336b5c0>
start_time = 1782000467.233514
timeout    = 120

dimos/e2e_tests/lcm_spy.py:105: TimeoutError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@leshy leshy enabled auto-merge (squash) June 20, 2026 23:47
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Jun 21, 2026
@leshy leshy merged commit e23511f into main Jun 21, 2026
25 of 27 checks passed
@leshy leshy deleted the paul/fix/add-required-package branch June 21, 2026 00:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Required CI checks have passed on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants