Skip to content

optimize & update osx.md#1710

Closed
Icebitz wants to merge 2 commits intodimensionalOS:devfrom
Icebitz:dev
Closed

optimize & update osx.md#1710
Icebitz wants to merge 2 commits intodimensionalOS:devfrom
Icebitz:dev

Conversation

@Icebitz
Copy link
Copy Markdown

@Icebitz Icebitz commented Mar 30, 2026

Problem

Closes DIM-XXX

Solution

Breaking Changes

How to Test

Contributor License Agreement

  • I have read and approved the CLA.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 30, 2026

Greptile Summary

This PR restructures docs/installation/osx.md into a well-organised step-by-step guide and simultaneously performs a major simplification of pyproject.toml — collapsing dozens of extras, stripping extensive tool configuration, and removing several CLI entry points. While the documentation improvements are welcome, the pyproject.toml changes introduce several real defects that need to be addressed before merging.

Key issues found:

  • The dds extra was removed from pyproject.toml but uv sync --all-extras --no-extra dds still appears in osx.md (line 129) and at least 4 other docs/files — this command may fail in recent uv versions that validate extra names.
  • The manipulation extra lost its platform guards: pyrealsense2 has no macOS support, and drake has no Apple Silicon (aarch64) wheel. Installing this extra on a Mac will now fail.
  • rerun-sdk and dimos-viewer are duplicated between core dependencies and the visualization extra with mismatched dimos-viewer version floors (>=0.30.0a2 vs >=0.30.0a4).
  • Substantial [tool.pytest.ini_options], [tool.mypy], and [tool.ruff.lint] configuration has been stripped — async test mode, required env vars, mypy stub overrides, and the full ruff rule set are all gone, which will silently break CI.
  • Four CLI entry points (lcmspy, humancli, doclinks, dtop) were removed from [project.scripts] while their source modules remain in the repo.
  • Python 3.10/3.11 PyPI classifiers were dropped while requires-python = ">=3.10" still claims compatibility with those versions.
  • [project.urls] was removed entirely, which strips the homepage, repository, issues, and changelog links from the PyPI listing.

Confidence Score: 2/5

Not safe to merge — multiple P1 defects including broken macOS installs for the manipulation extra, a stale dds reference that may abort developer setup, and stripped CI tooling config that will silently break automated checks.

Three P1 issues remain: missing platform guards in manipulation will cause install failures on macOS (the exact target platform of the accompanying doc), the stale --no-extra dds reference in a widely-copied setup command, and duplicated/conflicting dimos-viewer version specs between core and the visualization extra. Combined with the stripped pytest/mypy/ruff config removing CI safety nets, the risk surface is significant enough to warrant a score of 2.

pyproject.toml requires the most attention — platform guards, deduplication, and restored tooling config. docs/installation/osx.md line 129 needs the --no-extra dds flag removed.

Important Files Changed

Filename Overview
docs/installation/osx.md Improved structure and zsh quoting guidance; stale --no-extra dds reference on line 129 will break dev setup now that the dds extra has been removed from pyproject.toml.
pyproject.toml Major restructuring of optional extras and tooling config: missing platform guards in manipulation extra will fail on macOS, dimos-viewer version conflict between core and visualization, dds extra removed while widely referenced in docs, stripped pytest/mypy/ruff config may break CI, and 4 CLI entry points removed without source cleanup.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    core_deps["Core dependencies\n(always installed)"]

    sim["sim\nmujoco, pygame"]
    visualization["visualization\nrerun-sdk, dimos-viewer"]
    agents["agents\nlangchain, openai, anthropic, whisper"]
    cpu["cpu\nonnxruntime, ctransformers"]
    web["web\nfastapi, uvicorn, sse-starlette"]
    perception["perception\nultralytics, transformers, Pillow"]
    manipulation["manipulation\n⚠️ drake (no aarch64 guard)\n⚠️ pyrealsense2 (no macOS guard)"]
    dev["dev\npytest, mypy, ruff, pre-commit"]
    unitree["unitree\nunitree-webrtc-connect-leshy"]
    full["full"]
    recommended["recommended"]
    ai["ai"]
    core_extra["core"]

    full --> sim
    full --> agents
    full --> web
    full --> perception
    full --> visualization

    unitree --> full

    recommended --> sim
    recommended --> agents
    recommended --> web
    recommended --> perception
    recommended --> visualization
    recommended --> cpu

    ai --> agents
    ai --> cpu

    core_extra --> sim
    core_extra --> visualization

    core_deps -->|"⚠️ also declares\nrerun-sdk & dimos-viewer"| visualization
Loading

Reviews (1): Last reviewed commit: "optimize & update osx.md" | Re-trigger Greptile

Comment on lines 151 to 155
manipulation = [
# Planning (Drake)
"drake==1.45.0; sys_platform == 'darwin' and platform_machine != 'aarch64'",
"drake>=1.40.0; sys_platform != 'darwin' and platform_machine != 'aarch64'",

# Hardware SDKs
"piper-sdk",
"pyrealsense2; sys_platform != 'darwin'",
"xarm-python-sdk>=1.17.0",

# Visualization (Optional)
"kaleido>=0.2.1",
"plotly>=5.9.0",
"xacro",

# Other
"drake>=1.40.0",
"pyrealsense2",
"matplotlib>=3.7.1",
"pyyaml>=6.0",
]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing platform guards in manipulation extra will break macOS installs

Two packages in the new manipulation extra are missing platform conditions that existed in the previous version:

  1. pyrealsense2 — Intel RealSense SDK has no macOS support. The old definition included ; sys_platform != 'darwin' to guard against this. Without it, any macOS user who runs uv pip install 'dimos[manipulation]' will get a build/install failure.

  2. drake — The new spec drake>=1.40.0 has no platform condition. The original version explicitly excluded Apple Silicon (platform_machine != 'aarch64') because no Drake wheel exists for darwin/aarch64. M1/M2/M3/M4 Mac users will fail here.

Suggested fix:

manipulation = [
    "drake>=1.40.0; platform_machine != 'aarch64'",
    "pyrealsense2; sys_platform != 'darwin'",
    "matplotlib>=3.7.1",
]

cd dimos

# Project lockfile + all optional groups except DDS (DDS needs separate uv extra).
uv sync --all-extras --no-extra dds
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 dds extra no longer exists — --no-extra dds may fail

The dds extra was removed from pyproject.toml in this PR, but this command still passes --no-extra dds. Depending on the uv version in use, referencing an unknown extra name with --no-extra may produce an error (e.g., "Unknown extra: dds") and abort the sync entirely, breaking the developer onboarding workflow documented here.

The same stale reference also appears verbatim in docs/installation/ubuntu.md:32, docs/development/testing.md:6, AGENTS.md:13, and README.md:316, and the DDS transport doc at docs/usage/transports/dds.md still instructs users to install .[dds]. All of these need to be updated consistently.

Suggested change
uv sync --all-extras --no-extra dds
uv sync --all-extras

Comment on lines +79 to 84
# Runtime tools
"rerun-sdk>=0.20.0",
"dimos-viewer>=0.30.0a2",
"toolz>=1.1.0",
"protobuf>=6.33.5,<7",
"psutil>=7.0.0",
"sqlite-vec>=0.1.6",
"lz4>=4.4.5",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 rerun-sdk and dimos-viewer duplicated in core and visualization with mismatched version floors

rerun-sdk>=0.20.0 and dimos-viewer>=0.30.0a2 are already in the dependencies block (lines 80–81), and then rerun-sdk>=0.20.0 and dimos-viewer>=0.30.0a4 appear again in the visualization extra (lines 113–116).

The duplicate dimos-viewer entries carry different lower-bound versions (a2 vs a4). While a resolver will satisfy both by picking >=a4, it means the core package silently requires a lower version than the optional extra, which is misleading and could cause unexpected downgrades if the visualization extra is not installed. The packages should be declared once in the appropriate place.

Comment on lines +163 to 169
# 🔹 Developer tools
dev = [
"ruff==0.14.3",
"mypy==1.19.0",
"pre_commit==4.2.0",
"pytest==8.3.5",
"pytest-asyncio==0.26.0",
"pytest-mock==3.15.0",
"pytest-env==1.1.5",
"pytest-timeout==2.4.0",
"coverage>=7.0",
"requests-mock==1.12.1",
"terminaltexteffects==0.12.2",
"watchdog>=3.0.0",

# docs
"md-babel-py==1.1.1",

# LSP
"python-lsp-server[all]==1.14.0",
"python-lsp-ruff==2.3.0",

# Types
"lxml-stubs>=0.5.1,<1",
"pandas-stubs>=2.3.2.250926,<3",
"scipy-stubs>=1.15.0",
"types-PySocks>=1.7.1.20251001,<2",
"types-PyYAML>=6.0.12.20250915,<7",
"types-colorama>=0.4.15.20250801,<1",
"types-defusedxml>=0.7.0.20250822,<1",
"types-gevent>=25.4.0.20250915,<26",
"types-greenlet>=3.2.0.20250915,<4",
"types-jmespath>=1.0.2.20250809,<2",
"types-requests>=2.32.4.20260107,<3",
"types-jsonschema>=4.25.1.20251009,<5",
"types-networkx>=3.5.0.20251001,<4",
"types-protobuf>=6.32.1.20250918,<7",
"types-psutil>=7.2.2.20260130,<8",
"types-psycopg2>=2.9.21.20251012",
"types-pytz>=2025.2.0.20250809,<2026",
"types-simplejson>=3.20.0.20250822,<4",
"types-tabulate>=0.9.0.20241207,<1",
"types-tensorflow>=2.18.0.20251008,<3",
"types-tqdm>=4.67.0.20250809,<5",

# Tools
"py-spy",
"pytest",
"mypy",
"ruff",
"pre-commit",
]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Significant tool configuration stripped from dev extra and [tool.*] sections

The dev extra previously pinned specific, tested versions of ruff, mypy, pytest, and related packages, plus the full [tool.ruff.lint], [tool.mypy.overrides], [tool.pytest.ini_options] (env vars, addopts, asyncio settings), and [tool.coverage] configurations. All of these have been removed.

Immediate practical side-effects:

  • [tool.pytest.ini_options] no longer sets asyncio_mode = "auto" — any async test using pytest-asyncio will now fail unless that fixture is set up individually.
  • [tool.pytest.ini_options] no longer sets GOOGLE_MAPS_API_KEY env var — tests depending on it will fail or need live credentials.
  • [tool.mypy] no longer has ignore_missing_imports overrides for third-party stubs (mujoco, scipy, ultralytics, …) — mypy CI will produce new errors on unchanged code.
  • ruff lint rule configuration (extend-select, ignore) is gone — the CI linting profile has changed silently.

If this is intentional (moving config to separate files), those files should be part of this PR.

Comment on lines 35 to 44
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Topic :: Scientific/Engineering :: Image Processing",
"Topic :: Scientific/Engineering :: Visualization",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Python 3.10/3.11 classifiers removed while requires-python = ">=3.10"

The Programming Language :: Python :: 3.10 and Programming Language :: Python :: 3.11 classifiers were dropped, but requires-python = ">=3.10" (line 25) still allows those versions. PyPI uses these classifiers to filter packages in search results — users on 3.10 or 3.11 may not discover the package, even though it claims to support them. Either update requires-python to ">=3.12" (if support is intentionally dropping), or restore the missing classifiers.

Also: "Programming Language :: Python :: 3 :: Only" was removed, which means the PyPI page will no longer explicitly signal that this is a Python 3-only package.

Comment on lines +87 to 94
# -----------------------
# CLI Entry Points
# -----------------------
[project.scripts]
lcmspy = "dimos.utils.cli.lcmspy.run_lcmspy:main"
foxglove-bridge = "dimos.utils.cli.foxglove_bridge.run_foxglove_bridge:main"
agentspy = "dimos.utils.cli.agentspy.agentspy:main"
humancli = "dimos.utils.cli.human.humanclianim:main"
dimos = "dimos.robot.cli.dimos:main"
agentspy = "dimos.utils.cli.agentspy.agentspy:main"
foxglove-bridge = "dimos.utils.cli.foxglove_bridge.run_foxglove_bridge:main"
rerun-bridge = "dimos.visualization.rerun.bridge:app"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Several CLI entry points removed while their source modules still exist

The following [project.scripts] entries were removed, but their implementation files still exist in the repository:

  • lcmspydimos/utils/cli/lcmspy/run_lcmspy.py
  • humanclidimos/utils/cli/human/humanclianim.py
  • doclinksdimos/utils/docs/doclinks.py
  • dtopdimos/utils/cli/dtop.py

Removing these from entry points without deleting (or explicitly deprecating) the source files leaves dead code and breaks any workflows or documentation that reference those commands. If the intent is to deprecate them, the source files should be removed or a migration note added.

@jeff-hykin
Copy link
Copy Markdown
Member

Sorry but closing until you've done the CLA and given some details

@jeff-hykin jeff-hykin closed this Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants