Skip to content

Desktop: blueprint view - #4506

Open
jeff-hykin wants to merge 540 commits into
mainfrom
jeff/feat/blueprint_view
Open

jeff-hykin wants to merge 540 commits into
mainfrom
jeff/feat/blueprint_view

Conversation

@jeff-hykin

@jeff-hykin jeff-hykin commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

Gateway API 9.0: catalog source routes, msgs.js, the cloud login page and login?after= (the blueprint view itself is now Desktop's).

@github-actions github-actions Bot left a comment •

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.

go2 replay realtime (arm64)

Details
Benchmark suite Current: 5eafc02 Previous: 5bc57a0 Ratio
peak memory 1744.953 MB 1776.91 MB 0.98
peak threads 367 threads 376 threads 0.98
network (transport) 2733.72 MB 2730.972 MB 1.00
disk write 1.828 MB 1.59 MB 1.15
instructions 137.199 G 138.52 G 0.99

This comment was automatically generated by workflow using github-action-benchmark.

@codecov

codecov Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

⚠️ JUnit XML file not found

The CLI was unable to find any JUnit XML files to upload.
For more help, visit our troubleshooting guide.

@jeff-hykin jeff-hykin changed the title dimos gateway: blueprint view, msgs.js and the cloud login page desktop: blueprint view Oct 15, 2026
@jeff-hykin
jeff-hykin changed the base branch from jeff/feat/dimos_server to jeff/feat/gateway_cloud October 15, 2026 21:01
…s nothing, dimos:visible pauses or refreshes + resumes the runs, topic-rate and log polls, and dimos:chrome says pausable (dimos-react 0.2.1)
# Conflicts:
#	.github/workflows/ci.yml
#	dimos.yaml
…eprint rescan, modules, skills, robots, msgs), /config, and /runs (module, skill, exec, live skills, logs)
# Conflicts:
#	dimos.yaml
#	experimental/gateway/README.md
#	experimental/gateway/app.py
# Conflicts:
#	experimental/gateway/app.py
The console-preview fixes (h264 cameras, opening an .mcap at all) landed here by accident of where
they were written. They are not about the cloud endpoints and they do not belong in this PR; they
continue on their own branch.
…ff/feat/blueprint_view

# Conflicts:
#	experimental/gateway/constants.py
…a missing schema shows lcm_codec's own error
…, so the login page waits instead of polling
…ments (CollectionModule's input_types answered 500)
Comment thread experimental/gateway/routes/web.py Fixed
@greptile-apps

greptile-apps Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 3/5

[Medium impact] The changes reach Desktop’s gateway pages and their supporting API workflows.

Fix the lost-settings race and Linux wheel build before merging.

Findings

  1. P1 Quick edits lose saved settings ▶
  2. P1 Linux wheels fail to build ▶

Summary

Adds the blueprint graph, configuration dialog, live logs and process details, plus source-file, message-decoder and embedded login routes.

  • Desktop can open a Blueprint view to explore and control a blueprint.
  • Apps can embed a page that starts or cancels a Dimensional cloud login.
  • Browser pages can load dimos LCM message decoders from the gateway.
  • Catalog entries now show the abilities linked to their modules.
  • Gateway pages refresh their data when runs, logs, or shared settings change.
  • A pinned gateway can inspect and run blueprints from a separate checkout.
  • Gateway builds now include the Blueprint view and its browser assets.

Reviews (2) · Last reviewed commit: "gateway: a run's logs say watched: false..." · Reviewed by Greptile

Comment thread dimos/cli/cloud.py Resolved
Comment thread pyproject.toml Resolved
Comment thread experimental/gateway/msgs.py Resolved
Comment thread experimental/gateway/routes/web.py Resolved
Comment thread experimental/gateway/events.py Resolved
# Conflicts:
#	docs/usage/gateway.md
#	experimental/gateway/app.py
#	experimental/gateway/responses.py
#	experimental/gateway/routes/cloud.py
#	experimental/gateway/shared_config.py
#	experimental/gateway/state.py
#	experimental/gateway/tests/test_cloud.py
#	experimental/gateway/uploads.py
…printView and ?loginNot= in dimos.yaml and the docs
…han launches.py's dimos imports can still list blueprint configs (DIM-630: every /config was a 500)
…ship, so a pip-installed gateway serves /blueprint_view and /msgs.js
… global overrides (they win at launch) instead of the shared value under them, and a module field saved as null shows null, not its default
… blueprint's live run came from, as the catalog reads its modules (Show code from a branch run)
…s/ folders the gateway watches (a third checkout), and the logs dialog polls those instead of waiting on log events; API 8.6.0
@mustafab0

Copy link
Copy Markdown
Contributor

@greptile review

Comment on lines +145 to +149
const setField = (spec: FieldSpec, value: unknown) =>
save(() => {
const atBase = sameValue(value, spec.base);
if (spec.scope === "module") {
return saveModules(withModule(savedModules, spec, atBase ? undefined : value));

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 Quick edits lose saved settings

Editing two settings before the first save finishes can silently discard the first edit. Each call builds a complete settings dictionary from the last server response, so the second request leaves out the first change. The next launch then uses settings the user did not intend.

Queue saves and apply each edit to the latest saved values, or block further edits until the save finishes.

Comment thread setup.py Outdated
Comment on lines +109 to +118
deno = shutil.which("deno")
if (app / "src").is_dir() and deno:
# built here every time: a dist left by an older checkout would ship stale
subprocess.run([deno, "install", "--frozen"], cwd=app, check=True)
subprocess.run(
[deno, "run", "--frozen", "-A", "npm:vite", "build"], cwd=app, check=True
)
if not (app / "dist" / "index.html").is_file():
if os.environ.get("DIMOS_ALLOW_MISSING_COCKPIT") != "1":
raise RuntimeError(

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 Linux wheels fail to build

The Linux release wheels now require Deno inside the build container, but the release workflow installs it only on the host. The existing build action builds web/sdk and web/cockpit, not blueprint_view. When cibuildwheel runs this hook in its manylinux container, neither Deno nor the new page's built files are available. This raises an error and stops the wheel build.

Build the page before entering the container and preserve its output, or install Deno inside the container.

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.

I agree with this.

My use of setup.py for the cockpit is also a mistake. I never got around to fixing that.

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.

Agreed—the same packaging concern applies to the cockpit build, so fixing only blueprint_view would leave the underlying setup.py coupling in place. Thanks for the context.

Comment thread experimental/gateway/web_view.py Outdated
if (app / "src").is_dir():
# the same lock file relay_process uses, held until another process's build ends however long it takes
with (app / ".build.lock").open("w") as lock_file:
fcntl.flock(lock_file, fcntl.LOCK_EX)

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.

Use filelock. We already have it installed.

Comment thread docs/usage/gateway.md
Decode dimos messages in a page with `msgs.js`:

```js
const app = new DimApp({ msgDecodeEndpoint: "../../dimos-gateway/msgs.js" }) // DimApp from ./dim-app/mod.js

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.

What is DimApp?

Comment thread dimos.yaml Outdated
/docs/search:
get:
summary: Redirects to the docs site with its search open on ?q= (for a new tab or an iframe)
/blueprint_view:

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.

View is an overloaded term is software development. I'd call it details to make it clearer.

In fact, it would probably be better as:

/blueprints/{identifier}/details

"react-dom/": "npm:/react-dom@^19.2.0/",
"@types/react": "npm:@types/react@^19.3.0",
"@types/react-dom": "npm:@types/react-dom@^19.3.0",
"dimos-react": "https://raw.githubusercontent.com/jeff-hykin/dimos-react/v0.3.6/src/index.ts",

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.

Again, package should be in dimensional

… /config or its config events; its timers are Desktop settings), GET /source becomes /catalog/blueprints/{name}/source and /catalog/modules/{name}/source?blueprint=, and /cloud/account?loginNot= becomes GET /cloud/login?after=, per the dimos-gateway plan; a blueprint's modules can be ?fields= picked; API 9.0.0
…copy of the module class lacks them (an RPC added in the run's checkout), and restart/stop no longer import the class; API 9.0.1
…ks (Desktop now runs the run's checkout's own gateway instead); API 9.0.2

This branch was successfully deployed

No deployments
cachix — 6c9e3ef3 Deployed Nov 10, 2026 by jeff-hykin via cachix-build-macos #16665
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.

4 participants