Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
366 commits
Select commit Hold shift + click to select a range
afc3a12
Merge branch 'jeff/feat/graph' of github.com:dimensionalOS/dimos into…
jeff-hykin Mar 7, 2026
2b4adae
misc
jeff-hykin Mar 7, 2026
fadabd9
misc
jeff-hykin Mar 7, 2026
cb83f9a
add docker_build_extra_args
jeff-hykin Mar 7, 2026
d6ec658
add docker_build_extra_args
jeff-hykin Mar 7, 2026
e3ad1f8
fixup docker onboard g1
jeff-hykin Mar 7, 2026
3e361b4
-
jeff-hykin Mar 7, 2026
02f43b2
add g1 agentic
jeff-hykin Mar 7, 2026
f4d2f30
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 7, 2026
b6b6ec2
rename topic
jeff-hykin Mar 7, 2026
e8c4cb0
fix offset, costmap still not rendering
jeff-hykin Mar 7, 2026
7ae8d89
Merge branch 'dev' into jeff/fix/docker3
jeff-hykin Mar 7, 2026
929229e
Merge branch 'dev' into jeff/fix/docker3
jeff-hykin Mar 7, 2026
c74c5b9
PR review fixes: better error messages, consistent API, restore insta…
jeff-hykin Mar 7, 2026
87cdcc0
PR review fixes: better error messages, consistent API, restore insta…
jeff-hykin Mar 7, 2026
45ee6fe
fix pull problem
jeff-hykin Mar 7, 2026
d7ef2db
fix pull problem
jeff-hykin Mar 7, 2026
8ad7540
rosnav working
jeff-hykin Mar 7, 2026
6b57455
voxel size
jeff-hykin Mar 7, 2026
84ff37e
fix websocket_viz for ssh
jeff-hykin Mar 7, 2026
2fe04da
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 7, 2026
029a863
fix reconnect edgecase and __getattr__ loop edgecase
jeff-hykin Mar 7, 2026
7639f3d
fix reconnect edgecase and __getattr__ loop edgecase
jeff-hykin Mar 7, 2026
5106445
change the ignore postfix
jeff-hykin Mar 7, 2026
14e3d1e
change the ignore postfix
jeff-hykin Mar 7, 2026
8ecc9d9
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 7, 2026
6355370
add blueprint
jeff-hykin Mar 7, 2026
bb0ca8f
improve error messages
jeff-hykin Mar 7, 2026
079c2b8
fix module RPC timeout system
jeff-hykin Mar 8, 2026
8829761
fix docker defaults, make deploy better
jeff-hykin Mar 8, 2026
7dc73b8
fix docker defaults, make deploy better
jeff-hykin Mar 8, 2026
433cd86
-
jeff-hykin Mar 8, 2026
8fe7b72
-
jeff-hykin Mar 8, 2026
bb8aa83
Revert "feat(cli): daemon mode, stop, status, per-run logs (DIM-681, …
jeff-hykin Mar 8, 2026
a3c0244
fix box location
jeff-hykin Mar 8, 2026
e600aa4
fix: restore RotatingFileHandler to prevent OOM from unbounded log gr…
spomichter Mar 8, 2026
068b0ad
misc
jeff-hykin Mar 8, 2026
0c29524
misc
jeff-hykin Mar 8, 2026
44c8bc1
Revert "Revert "feat(cli): daemon mode, stop, status, per-run logs (D…
jeff-hykin Mar 8, 2026
99d7b84
Merge branch 'fix/logging-oom-unbounded-file-handler' of github.com:d…
jeff-hykin Mar 8, 2026
a96eea9
fix the lidar offset
jeff-hykin Mar 8, 2026
75268de
fix mypy
jeff-hykin Mar 9, 2026
eb3d303
fix mypy
jeff-hykin Mar 9, 2026
0525d2d
camera render fix for simulator
jeff-hykin Mar 9, 2026
5524472
-
jeff-hykin Mar 9, 2026
46a9f26
fix missing dep
jeff-hykin Mar 9, 2026
6f45bf0
how was it working without this -.-
jeff-hykin Mar 9, 2026
d90d2c9
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/ro…
jeff-hykin Mar 9, 2026
5fd19d8
formatting and such
jeff-hykin Mar 9, 2026
c7f45a5
mypy fixes
jeff-hykin Mar 9, 2026
67d1abf
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 9, 2026
f38e4be
fix ExceptionGroup edgecase
jeff-hykin Mar 9, 2026
614dde8
fix ExceptionGroup edgecase
jeff-hykin Mar 9, 2026
6a08e30
Merge branch 'dev' into jeff/fix/docker3
jeff-hykin Mar 9, 2026
b19cd25
Merge branch 'dev' into jeff/fix/docker3
jeff-hykin Mar 9, 2026
9e31547
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 9, 2026
b31ce13
fixup .viewer_backend
jeff-hykin Mar 9, 2026
0c66b77
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/ro…
jeff-hykin Mar 10, 2026
f2811ca
g1 mujoco working
jeff-hykin Mar 10, 2026
39df404
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/do…
jeff-hykin Mar 11, 2026
2e895d0
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/do…
jeff-hykin Mar 11, 2026
56518bf
Merge pull request #1526 from dimensionalOS/dev
spomichter Mar 12, 2026
c1fa920
Merge pull request #1530 from dimensionalOS/dev
spomichter Mar 12, 2026
e986d38
Merge pull request #1532 from dimensionalOS/dev
spomichter Mar 12, 2026
f206464
Merge pull request #1537 from dimensionalOS/dev
spomichter Mar 12, 2026
d4040f2
better native module debugging
jeff-hykin Mar 12, 2026
c581f9c
add unity sim, part 1
jeff-hykin Mar 12, 2026
e135fa2
clean up
jeff-hykin Mar 12, 2026
c3cf3e6
cleaning
jeff-hykin Mar 12, 2026
d511bf9
improve binary downloading (google drive)
jeff-hykin Mar 12, 2026
d335685
feat(unity-sim): use LFS for sim binary, remove Google Drive download
jeff-hykin Mar 12, 2026
23e81f5
Module config tweaks (#1510)
Dreamsorcerer Mar 12, 2026
e26e771
Merge remote-tracking branch 'origin' into jeff/fix/docker3
jeff-hykin Mar 13, 2026
9b66c8e
Merge remote-tracking branch 'origin' into jeff/fix/docker3
jeff-hykin Mar 13, 2026
5bc5c7d
chore: resolve conflicts with dev
jeff-hykin Mar 13, 2026
47ebf5e
chore: resolve conflicts with dev
jeff-hykin Mar 13, 2026
985ecd7
fix: update Docker deployment to use ModuleSpec format
jeff-hykin Mar 13, 2026
bf8b429
fix: update Docker deployment to use ModuleSpec format
jeff-hykin Mar 13, 2026
5689a8c
add older blueprints
jeff-hykin Mar 13, 2026
9663102
Merge branch 'jeff/fix/docker3' into jeff/fix/rosnav3
jeff-hykin Mar 13, 2026
c346dc9
fixup
jeff-hykin Mar 14, 2026
8ff7377
chore(comments): remove section markers (#1546)
paul-nechifor Mar 14, 2026
c89ee5b
fix(imports): remove dunder init (#1545)
paul-nechifor Mar 14, 2026
65c98ae
fix vis_module arg
jeff-hykin Mar 14, 2026
bf466a7
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 14, 2026
3c595ae
rerun click working fine
jeff-hykin Mar 14, 2026
56f7ddc
chore: resolve conflicts with dev
jeff-hykin Mar 14, 2026
9802b28
chore: resolve conflicts with dev
jeff-hykin Mar 14, 2026
22b7729
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 14, 2026
77e5aae
fix(mypy): cover import-not-found for onnxruntime type: ignore
jeff-hykin Mar 14, 2026
5d994c1
fix(mypy): cover import-not-found for onnxruntime type: ignore
jeff-hykin Mar 14, 2026
5d71c5a
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 14, 2026
e1f91be
fix: remove section markers from hello_docker.py and untrack .venv
jeff-hykin Mar 14, 2026
dd3251e
fix: remove section markers from hello_docker.py and untrack .venv
jeff-hykin Mar 14, 2026
f83ed51
style: fix formatting in hello_docker.py
jeff-hykin Mar 14, 2026
9830a8e
style: fix formatting in hello_docker.py
jeff-hykin Mar 14, 2026
55620e8
fix for new config
jeff-hykin Mar 14, 2026
080f6af
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 14, 2026
f3b3808
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 14, 2026
e14bc06
fix positioning
jeff-hykin Mar 14, 2026
ea8edd1
Merge branch 'dev' into jeff/fix/rosnav3
jeff-hykin Mar 14, 2026
793d5dc
Revert jeff/feat/graph changes and apply auto-formatting
jeff-hykin Mar 14, 2026
85ed020
Fix mypy errors, remove disallowed __init__.py files, fix test failures
jeff-hykin Mar 14, 2026
a98cfe3
Fix demo_ros_navigation.py import after rosnav.py rename
jeff-hykin Mar 14, 2026
574ba56
fix: update test_rosnav_simulation imports, stream name, and Module API
jeff-hykin Mar 14, 2026
0082cca
fix: preserve RpcCall._timeout across pickle (rpc_calls)
jeff-hykin Mar 14, 2026
7f0dbd3
test: add goal navigation and agentic integration tests for ROSNav
jeff-hykin Mar 14, 2026
9ac3945
fix: mark start pose immediately in agentic test
jeff-hykin Mar 14, 2026
1ec4227
fix(deps): skip pyrealsense2 on macOS (#1556)
jeff-hykin Mar 14, 2026
cbc4617
fix: address review comments on hello_docker example
jeff-hykin Mar 15, 2026
b3177fd
Feat/memory2 (#1536)
leshy Mar 15, 2026
42366e1
fix: resolve merge conflict with dev (uv.lock)
jeff-hykin Mar 15, 2026
e6267e1
docs(readme): add Trendshift trending badge (#1563)
spomichter Mar 15, 2026
8b3bbc5
fixup agentic test
jeff-hykin Mar 15, 2026
780736c
make timeout not hardcoded
jeff-hykin Mar 15, 2026
66a6567
docs: add clarifying comment for deploy_parallel lambda tuple
jeff-hykin Mar 15, 2026
1d3f123
feat: port rpc_timeouts system from jeff/fix/rosnav3
jeff-hykin Mar 15, 2026
cc2212c
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 15, 2026
747bbe2
CI code cleanup
jeff-hykin Mar 15, 2026
c2d2643
fixup rpc timeouts, cause they matter for docker
jeff-hykin Mar 15, 2026
427949f
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/do…
jeff-hykin Mar 15, 2026
54d4592
better matching logic for rpc_timeouts
jeff-hykin Mar 15, 2026
1598545
enforce RPCSpec's to have rpc_timeouts in constructor
jeff-hykin Mar 15, 2026
8a36843
Remove pr-name-check from this branch
jeff-hykin Mar 15, 2026
7ad090f
fixup rpc timeouts
jeff-hykin Mar 15, 2026
d0563a8
mypy issue on dev
jeff-hykin Mar 15, 2026
639e90c
equality
jeff-hykin Mar 15, 2026
5a41e06
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 15, 2026
5c85dc2
fix: docker module init + rpc timeout bugs
jeff-hykin Mar 15, 2026
9668e3a
fix(example): use 'cowsay' not '/usr/games/cowsay' per review
jeff-hykin Mar 15, 2026
9486a90
fix(ci): limit tests to 60 minutes max (#1557)
paul-nechifor Mar 16, 2026
3a5f000
fix(old-scripts): remove (#1561)
paul-nechifor Mar 16, 2026
ab081c1
docs: add Spec issue template (#1574)
spomichter Mar 16, 2026
fba0a71
CI code cleanup
jeff-hykin Mar 16, 2026
e95e0d7
feat(patrol): add patrolling module (#1488)
paul-nechifor Mar 17, 2026
f6a5602
Merge origin/dev into jeff/fix/docker3
jeff-hykin Mar 17, 2026
6b6641d
Merge branch 'jeff/fix/docker3' into jeff/fix/rosnav3
jeff-hykin Mar 17, 2026
3afde01
fix: rename teleop blueprints, remove VisualizingTeleopModule (#1602)
ruthwikdasyam Mar 19, 2026
c6f1842
feat(test): add leaderboard (#1580)
paul-nechifor Mar 19, 2026
bdd06d4
fix(florence): fix text failure (#1582)
paul-nechifor Mar 19, 2026
b9cca6c
event based sub callback collector for tests (#1605)
leshy Mar 19, 2026
cb648f5
refactor: split control blueprints + added env variables (#1601)
ruthwikdasyam Mar 19, 2026
593c418
fix: address Paul's PR review comments
jeff-hykin Mar 17, 2026
4278166
fix(ci): fix _DummyRPC init and mypy type-ignore for rpc_transport kw…
jeff-hykin Mar 19, 2026
47737b0
fix(mypy): add __all__ to vl/create.py for explicit VlModelName export
jeff-hykin Mar 19, 2026
157ce93
fix(test): wrap coordinator in try/finally for proper cleanup on test…
jeff-hykin Mar 19, 2026
cdac06e
- (#1610)
jeff-hykin Mar 19, 2026
07b33dd
add build
jeff-hykin Mar 19, 2026
a5c7ecc
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/do…
jeff-hykin Mar 19, 2026
63f02cd
Merge remote-tracking branch 'origin/dev' into jeff/fix/rosnav3
jeff-hykin Mar 19, 2026
c8a7b7d
fix(cli): fix `dimos --help` (both bad imports and speed) (#1571)
jeff-hykin Mar 20, 2026
ffd65f1
Merge origin/dev into jeff/fix/docker3
jeff-hykin Mar 20, 2026
dc331b7
chore(blueprints): remove aliases (#1606)
paul-nechifor Mar 20, 2026
30793a5
Merge remote-tracking branch 'origin/dev' into jeff/fix/docker3
jeff-hykin Mar 20, 2026
97b7e0d
fix: thread leak in native module test + show docker pull output
jeff-hykin Mar 20, 2026
fbc146a
CI code cleanup
jeff-hykin Mar 20, 2026
53a2fce
Merge branch 'main' into dev
spomichter Mar 21, 2026
174fcb1
Merge branch 'jeff/fix/docker3' of https://github.com/dimensionalOS/d…
jeff-hykin Mar 21, 2026
d37401a
Merge branch 'dev' of https://github.com/dimensionalOS/dimos into jef…
jeff-hykin Mar 21, 2026
1924b61
Feature: go2 webrtc TwistBase adapter for control coordinator (#1362)
mustafab0 Mar 21, 2026
349fc0b
merge: resolve all_blueprints.py conflict with dev
jeff-hykin Mar 21, 2026
c24c51c
data: add sim assets for xArm6 and Piper (#1642)
ruthwikdasyam Mar 21, 2026
957c26e
switch to websocket
jeff-hykin Mar 21, 2026
bb16ea2
fix(unity-sim): use RerunBridgeModule.blueprint() after rerun_bridge …
jeff-hykin Mar 21, 2026
f5a35bb
cleanup
jeff-hykin Mar 21, 2026
e67ae72
improvements
jeff-hykin Mar 21, 2026
b7bfb40
fix: ruff formatting + consistent error handling in websocket_server
jeff-hykin Mar 21, 2026
885b729
fix: update all_blueprints.py to include unity-bridge-module
jeff-hykin Mar 21, 2026
fe46e82
Merge remote-tracking branch 'origin/dev' into jeff/feat/untiy_sim
jeff-hykin Mar 21, 2026
49c5142
merge: pull latest dev
jeff-hykin Mar 21, 2026
7cbe1b7
make it easy to use
jeff-hykin Mar 21, 2026
0fe29f0
fix: remove @dataclass from UnityBridgeConfig (Pydantic compat), clea…
jeff-hykin Mar 21, 2026
fa94c2e
cleanup
jeff-hykin Mar 21, 2026
42f2f38
consolidate viewer usage
jeff-hykin Mar 22, 2026
23d1d88
consolidate WebsocketVisModule
jeff-hykin Mar 22, 2026
7e69093
MuJoCo sim support for Manipulation (#1639)
ruthwikdasyam Mar 22, 2026
e693ca2
merge: resolve conflict with dev (test_sim_module.py deleted in #1639)
jeff-hykin Mar 22, 2026
b627eb3
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 22, 2026
fbb0ca7
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/ro…
jeff-hykin Mar 22, 2026
dd5ff29
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/rc…
jeff-hykin Mar 22, 2026
78f6582
style: auto-fix ruff format and json formatting
jeff-hykin Mar 22, 2026
645cb0d
fix: address greptile review comments
jeff-hykin Mar 22, 2026
27e66be
fix: address PR review - server ready race, path filter, skip guard
jeff-hykin Mar 22, 2026
fe84b4d
fix: set explicit ping interval/timeout on WebSocket server
jeff-hykin Mar 22, 2026
eca1705
chore: stage remaining files from dev merge
jeff-hykin Mar 22, 2026
c080036
Merge remote-tracking branch 'origin/jeff/fix/docker3' into jeff/fix/…
jeff-hykin Mar 22, 2026
5d461c6
fix: address all paul-review issues on unity simulator
jeff-hykin Mar 22, 2026
7f8bc12
fix: resolve broken blueprint aliases, RpcCall timeout, and rosnav bugs
jeff-hykin Mar 22, 2026
387b8f1
fix: remove __init__.py (project policy), fix section markers, update…
jeff-hykin Mar 22, 2026
fc65956
Merge remote-tracking branch 'origin/dev' into jeff/feat/untiy_sim
jeff-hykin Mar 22, 2026
d12407a
Merge remote-tracking branch 'origin/dev' into jeff/feat/untiy_sim
jeff-hykin Mar 22, 2026
ff34882
Merge remote-tracking branch 'origin/dev' into jeff/fix/docker3
jeff-hykin Mar 22, 2026
7f8401a
Merge remote-tracking branch 'origin/dev' into jeff/fix/rosnav3
jeff-hykin Mar 22, 2026
f09875c
chore: regenerate uv.lock after merge with dev
jeff-hykin Mar 22, 2026
ebaa672
chore: regenerate uv.lock after merge with dev
jeff-hykin Mar 22, 2026
002a419
fix: resolve merge conflicts + address Paul's review comments
jeff-hykin Mar 22, 2026
9c1a963
fix(g1): send Move() before starting timeout timer
jeff-hykin Mar 22, 2026
317c487
fix(docker): include stdout/stderr in pull error message
jeff-hykin Mar 22, 2026
91a13f1
fix(tests): import ExceptionGroup in test_parallel_deploy_cleanup
jeff-hykin Mar 22, 2026
a194cb9
docs: add changes.md with fix descriptions and revert instructions
jeff-hykin Mar 22, 2026
42f3797
docs: add changes.md with fix descriptions and revert instructions
jeff-hykin Mar 22, 2026
bbd1c27
merge in rconnect
jeff-hykin Mar 22, 2026
182cf28
refactor: remove unnecessary __getstate__/__setstate__ from UnityBrid…
jeff-hykin Mar 22, 2026
9b609bd
fix(unity): launch Unity in thread to avoid blocking start()
jeff-hykin Mar 22, 2026
47d99da
fix(unity): pipe Unity stderr to logger instead of discarding
jeff-hykin Mar 22, 2026
9f0f7b9
fix(unity): clear _unity_ready on disconnect
jeff-hykin Mar 22, 2026
0355176
Merge remote-tracking branch 'origin/jeff/feat/untiy_sim' into jeff/f…
jeff-hykin Mar 22, 2026
258b0cc
test: remove pickle test (follows __getstate__/__setstate__ removal)
jeff-hykin Mar 22, 2026
1503034
tele_cmd_vel is relayed to cmd_vel, but cmd_vel is ignored by the sim…
jeff-hykin Mar 22, 2026
66e1819
fix(unity): thread safety for _unity_process and stderr drain
jeff-hykin Mar 22, 2026
d6bf9fb
fix(lfs): repack unity_sim_x86 tarball with correct directory name
jeff-hykin Mar 22, 2026
be5666c
fix default environment
jeff-hykin Mar 22, 2026
830895e
works with external sim
jeff-hykin Mar 22, 2026
428f7f3
merge: accept incoming LFS pointer for unity_sim_x86.tar.gz
jeff-hykin Mar 22, 2026
cf99e6d
clean up wiring and terrain map
jeff-hykin Mar 22, 2026
11cc7b5
Merge branch 'jeff/fix/docker3' of github.com:dimensionalOS/dimos int…
jeff-hykin Mar 25, 2026
30d87a6
cleanup g passing
jeff-hykin Mar 25, 2026
89b2033
merge: pull latest dev, resolve conflict in test_native_module.py
jeff-hykin Mar 25, 2026
8f23d09
cleanup
jeff-hykin Mar 25, 2026
d37a922
combine docker_build and runner
jeff-hykin Mar 25, 2026
79d7817
rename docker_runner to module
jeff-hykin Mar 25, 2026
25f07b3
add ModuleCoordinator docstring
jeff-hykin Mar 26, 2026
2d321e3
use threading utils
jeff-hykin Mar 26, 2026
0bff0cf
proper design of WorkerManagers
jeff-hykin Mar 26, 2026
7eeee40
better module count handling
jeff-hykin Mar 26, 2026
6994dbc
revert changes to simplify PR
jeff-hykin Mar 26, 2026
8b627f8
formatting
jeff-hykin Mar 26, 2026
36f033a
revert worker_python.py rename back to worker.py
jeff-hykin Mar 26, 2026
0d58ab0
revert WorkerManager ratio
jeff-hykin Mar 26, 2026
affc851
rename DockerModuleOuter to DockerModuleProxy
jeff-hykin Mar 26, 2026
c764314
docker container survies if reconnect is true
jeff-hykin Mar 26, 2026
1896a58
test for prior change
jeff-hykin Mar 26, 2026
6380b84
use dimos_cluster and simplify tests
jeff-hykin Mar 26, 2026
506b1c9
remove fluff
jeff-hykin Mar 26, 2026
bdbdad7
fix printout
jeff-hykin Mar 26, 2026
25dc263
simplify
jeff-hykin Mar 26, 2026
4535c7b
important cleanup change
jeff-hykin Mar 26, 2026
66ccf91
show image pull progress
jeff-hykin Mar 26, 2026
d069a10
simplify dramatically
jeff-hykin Mar 26, 2026
0ee80ba
simplify
jeff-hykin Mar 26, 2026
a6e37b7
fixup
jeff-hykin Mar 26, 2026
95fc178
improve
jeff-hykin Mar 26, 2026
2fac566
-
jeff-hykin Mar 26, 2026
fff6a60
Merge branch 'jeff/fix/rosnav3' of github.com:dimensionalos/dimos int…
jeff-hykin Mar 26, 2026
5e7ca3f
merge docker3
jeff-hykin Mar 26, 2026
c1ad052
fix: auto-format lint fixes from pre-commit
jeff-hykin Mar 26, 2026
1a439e2
fix: correct docker_runner import and mypy ignore codes in rosnav_module
jeff-hykin Mar 26, 2026
4011e4e
make unity sim tests deterministic
jeff-hykin Mar 26, 2026
dfc4a23
Merge branch 'jeff/fix/unity_sim' of github.com:dimensionalOS/dimos i…
jeff-hykin Mar 26, 2026
5f86379
-
jeff-hykin Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,4 @@ CLAUDE.MD
htmlcov/
.coverage
.coverage.*
MUJOCO_LOG.TXT
69 changes: 69 additions & 0 deletions bin/pr-name-check
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/usr/bin/env bash

set -euo pipefail

branch="$(git rev-parse --abbrev-ref HEAD)"

# based on: https://github.com/dimensionalOS/wiki/wiki
allowed_types="feat fix chore refactor docs"
allowed_names="stash ivan paul alexl mustafa miguel christie ruthwik jalaj yashas yash matt jing juan jeff unknown"

if [[ "$branch" != */*/* ]]; then
echo "Invalid branch name: '$branch'"
echo "Expected format: <your_name>/<type>/<description>"
echo "Allowed names: $allowed_names"
echo "Allowed types: $allowed_types"
exit 1
fi

branch_name="${branch%%/*}"
rest="${branch#*/}"
branch_type="${rest%%/*}"
branch_description="${branch#*/*/}"

if [[ -z "$branch_description" || "$branch_description" == "$branch" ]]; then
echo "Invalid branch name: '$branch'"
echo "Expected format: <your_name>/<type>/<description>"
exit 1
fi

name_ok=0
for n in $allowed_names; do
if [[ "$branch_name" == "$n" ]]; then
name_ok=1
break
fi
done

type_ok=0
for t in $allowed_types; do
if [[ "$branch_type" == "$t" ]]; then
type_ok=1
break
fi
done

if [[ "$name_ok" -ne 1 || "$type_ok" -ne 1 ]]; then
echo
echo
echo
echo
echo
echo "Invalid branch name: '$branch'"
echo
echo " Expected format: <your_name>/<type>/<description>"
echo " Example: jeff/fix/ci-divergence"
echo " Parsed name: $branch_name"
echo " Allowed names: $allowed_names"
echo " Parsed type: $branch_type"
echo " Allowed types: $allowed_types"
echo
echo "Wait 4 seconds if you want to ignore this error"
sleep 1; echo 4
sleep 1; echo 3
sleep 1; echo 2
sleep 1; echo 1
exit 1
else
echo "Branch naming check passed: $branch"
fi
18 changes: 18 additions & 0 deletions changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# PR #1568 (rosnav) — Paul Review Fixes

## Commits (local, not pushed)

### 1. `9c1a963a8` — Send Move() before starting timeout timer
- Timer could fire before Move() was sent → stop-then-move race
- Now sends Move() first, then starts timer
- **Revert:** `git revert 9c1a963a8`

## Not addressed (need Jeff's input / bigger refactor)
- Container launch in `__init__` vs `start()` — lifecycle redesign
- Deterministic container naming collision across processes
- `_goal_reach` tristate without memory barrier — needs threading.Event refactor
- `_running` flag TOCTOU in ROSNav.start() / _spin_node
- `stop_navigation()` + new thread state ordering race
- Class-level mutable `rpc_timeouts: dict = {}`
- `docker pull` error missing stderr
- O(N) Python loops in slow-path pointcloud deserialization
269 changes: 269 additions & 0 deletions dimos/agents/agent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
# Copyright 2026 Dimensional Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import json
from queue import Empty, Queue
from threading import Event, RLock, Thread
from typing import TYPE_CHECKING, Any, Protocol
import uuid

from langchain_core.messages import HumanMessage
from langchain_core.messages.base import BaseMessage
from langchain_core.tools import StructuredTool
from langgraph.graph.state import CompiledStateGraph
from reactivex.disposable import Disposable

from dimos.agents.system_prompt import SYSTEM_PROMPT
from dimos.agents.utils import pretty_print_langchain_message
from dimos.core.core import rpc
from dimos.core.module import Module, ModuleConfig, SkillInfo
from dimos.core.rpc_client import RpcCall, RPCClient
from dimos.core.stream import In, Out
from dimos.protocol.rpc.spec import DEFAULT_RPC_TIMEOUT, RPCSpec
from dimos.spec.utils import Spec
from dimos.utils.logging_config import setup_logger

logger = setup_logger()

if TYPE_CHECKING:
from langchain_core.language_models import BaseChatModel


class AgentConfig(ModuleConfig):
system_prompt: str | None = SYSTEM_PROMPT
model: str = "gpt-4o"
model_fixture: str | None = None


class Agent(Module[AgentConfig]):
default_config = AgentConfig

# on_system_modules imports langchain, creates the agent graph, and calls
# get_skills() on every module via LCM RPC. This easily exceeds the default
# 120s, especially on first run when model weights may need to be loaded.
rpc_timeouts = {"on_system_modules": 180.0}

agent: Out[BaseMessage]
human_input: In[str]
agent_idle: Out[bool]

_lock: RLock
_state_graph: CompiledStateGraph[Any, Any, Any, Any] | None
_message_queue: Queue[BaseMessage]
_skill_registry: dict[str, SkillInfo]
_history: list[BaseMessage]
_thread: Thread
_stop_event: Event

def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self._lock = RLock()
self._state_graph = None
self._message_queue = Queue()
self._history = []
self._skill_registry = {}
self._thread = Thread(
target=self._thread_loop,
name=f"{self.__class__.__name__}-thread",
daemon=True,
)
self._stop_event = Event()

@rpc
def start(self) -> None:
super().start()

def _on_human_input(string: str) -> None:
self._message_queue.put(HumanMessage(content=string))

self._disposables.add(Disposable(self.human_input.subscribe(_on_human_input)))

@rpc
def stop(self) -> None:
self._stop_event.set()
if self._thread.is_alive():
self._thread.join(timeout=2.0)
super().stop()

@rpc
def on_system_modules(self, modules: list[RPCClient]) -> None:
assert self.rpc is not None

if self.config.model.startswith("ollama:"):
from dimos.agents.ollama_agent import ensure_ollama_model

ensure_ollama_model(self.config.model.removeprefix("ollama:"))

model: str | BaseChatModel = self.config.model
if self.config.model_fixture is not None:
from dimos.agents.testing import MockModel

model = MockModel(json_path=self.config.model_fixture)

skills = [skill for module in modules for skill in (module.get_skills() or [])]
self._skill_registry = {skill.func_name: skill for skill in skills}

with self._lock:
# Here to prevent unwanted imports in the file.
from langchain.agents import create_agent

self._state_graph = create_agent(
model=model,
tools=[_skill_to_tool(self, skill, self.rpc) for skill in skills],
system_prompt=self.config.system_prompt,
)
self._thread.start()

@rpc
def add_message(self, message: BaseMessage) -> None:
self._message_queue.put(message)

@rpc
def dispatch_continuation(
self, continuation: dict[str, Any], continuation_context: dict[str, Any]
) -> None:
"""Execute a tool continuation with detection data, bypassing the LLM.

Called by trigger tools (e.g. look_out_for) to immediately invoke a
follow-up tool when a detection fires, without waiting for the LLM to
reason about the next action.

Args:
continuation: ``{"tool": "<name>", "args": {…}}`` — the tool to
call and its arguments. Argument values that are strings
starting with ``$`` are treated as template variables and
resolved against *continuation_context* (e.g. ``"$bbox"``).
continuation_context: runtime detection data, e.g.
``{"bbox": [x1, y1, x2, y2], "label": "person"}``.
"""
tool_name = continuation.get("tool")
if not tool_name:
self._message_queue.put(
HumanMessage(f"Continuation failed: missing 'tool' key in {continuation}")
)
return

skill_info = self._skill_registry.get(tool_name)
if skill_info is None:
self._message_queue.put(
HumanMessage(f"Continuation failed: tool '{tool_name}' not found")
)
return

tool_args: dict[str, Any] = dict(continuation.get("args", {}))

# Substitute $-prefixed template variables from continuation_context
for key, value in tool_args.items():
if isinstance(value, str) and value.startswith("$"):
context_key = value[1:]
if context_key in continuation_context:
tool_args[key] = continuation_context[context_key]

rpc_call = RpcCall(None, self.rpc, skill_info.func_name, skill_info.class_name, [])
try:
result = rpc_call(**tool_args)
except Exception as e:
self._message_queue.put(
HumanMessage(f"Continuation '{tool_name}' failed with error: {e}")
)
return

label = continuation_context.get("label", "unknown")
self._message_queue.put(
HumanMessage(
f"Automatically executed '{tool_name}' as a continuation of lookout "
f"detection (detected: {label}). Result: {result or 'started'}"
)
)

def _thread_loop(self) -> None:
while not self._stop_event.is_set():
try:
message = self._message_queue.get(timeout=0.5)
except Empty:
continue

with self._lock:
if not self._state_graph:
raise ValueError("No state graph initialized")
self._process_message(self._state_graph, message)

def _process_message(
self, state_graph: CompiledStateGraph[Any, Any, Any, Any], message: BaseMessage
) -> None:
self.agent_idle.publish(False)
self._history.append(message)
pretty_print_langchain_message(message)
self.agent.publish(message)

for update in state_graph.stream({"messages": self._history}, stream_mode="updates"):
for node_output in update.values():
for msg in node_output.get("messages", []):
self._history.append(msg)
pretty_print_langchain_message(msg)
self.agent.publish(msg)

if self._message_queue.empty():
self.agent_idle.publish(True)


class AgentSpec(Spec, Protocol):
def add_message(self, message: BaseMessage) -> None: ...
def dispatch_continuation(
self, continuation: dict[str, Any], continuation_context: dict[str, Any]
) -> None: ...


def _skill_to_tool(agent: Agent, skill: SkillInfo, rpc: RPCSpec) -> StructuredTool:
rpc_call = RpcCall(
None, rpc, skill.func_name, skill.class_name, [], timeout=DEFAULT_RPC_TIMEOUT
)

def wrapped_func(*args: Any, **kwargs: Any) -> str | list[dict[str, Any]]:
result = None

try:
result = rpc_call(*args, **kwargs)
except Exception as e:
return f"Exception: Error: {e}"

if result is None:
return "It has started. You will be updated later."

if hasattr(result, "agent_encode"):
uuid_ = str(uuid.uuid4())
_append_image_to_history(agent, skill, uuid_, result)
return f"Tool call started with UUID: {uuid_}"

return str(result)

return StructuredTool(
name=skill.func_name,
func=wrapped_func,
args_schema=json.loads(skill.args_schema),
)


def _append_image_to_history(agent: Agent, skill: SkillInfo, uuid_: str, result: Any) -> None:
agent.add_message(
HumanMessage(
content=[
{
"type": "text",
"text": f"This is the artefact for the '{skill.func_name}' tool with UUID:={uuid_}.",
},
*result.agent_encode(),
]
)
)
8 changes: 7 additions & 1 deletion dimos/agents/mcp/mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from dimos.core.core import rpc
from dimos.core.module import Module
from dimos.core.rpc_client import RpcCall, RPCClient
from dimos.protocol.rpc.spec import DEFAULT_RPC_TIMEOUT
from dimos.utils.logging_config import setup_logger

if TYPE_CHECKING:
Expand Down Expand Up @@ -195,7 +196,12 @@ def on_system_modules(self, modules: list[RPCClient]) -> None:
]
app.state.rpc_calls = {
skill_info.func_name: RpcCall(
None, self.rpc, skill_info.func_name, skill_info.class_name, []
None,
self.rpc,
skill_info.func_name,
skill_info.class_name,
[],
timeout=DEFAULT_RPC_TIMEOUT,
)
for skill_info in app.state.skills
}
Expand Down
2 changes: 1 addition & 1 deletion dimos/agents_deprecated/memory/image_embedding.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def __init__(self, model_name: str = "clip", dimensions: int = 512) -> None:
def _initialize_model(self): # type: ignore[no-untyped-def]
"""Initialize the specified embedding model."""
try:
import onnxruntime as ort # type: ignore[import-untyped]
import onnxruntime as ort # type: ignore[import-untyped,import-not-found]
import torch # noqa: F401
from transformers import ( # type: ignore[import-untyped]
AutoFeatureExtractor,
Expand Down
Loading