Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/claude-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ jobs:
"dream-server/installers/"
"dream-server/dream-cli"
"dream-server/config/"
"dream-server/extensions/services/dashboard-api/security.py"
"dream-server/extensions/services/dashboard-api/crates/dashboard-api/src/middleware.rs"
".github/workflows/"
".env"
"docker-compose"
Expand Down
23 changes: 13 additions & 10 deletions .github/workflows/dashboard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,21 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo registry and build
uses: actions/cache@v4
with:
python-version: "3.11"
path: |
~/.cargo/registry
~/.cargo/git
dream-server/extensions/services/dashboard-api/target
key: ${{ runner.os }}-cargo-${{ hashFiles('dream-server/extensions/services/dashboard-api/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-

- name: API Syntax Check
run: python -m py_compile main.py agent_monitor.py

- name: Install Dependencies
run: |
pip install -r requirements.txt
pip install -r tests/requirements-test.txt
run: cargo check --workspace

- name: Run Unit Tests
run: pytest tests/ -v --cov=. --cov-report=term --cov-report=lcov:coverage.lcov
run: cargo test --workspace -- --test-threads=1
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ dream-server/models/
dream-server/config/openclaw/workspace/
dream-server/**/node_modules/
dream-server/**/dist/
dream-server/**/target/
dream-server/**/.coverage
dream-server/preflight-*.log
dream-server/.current-mode
Expand Down
4 changes: 2 additions & 2 deletions dream-server/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ help: ## Show this help
lint: ## Syntax check all shell scripts + Python compile check
@echo "=== Shell syntax ==="
@fail=0; for f in $(SHELL_FILES); do bash -n "$$f" || fail=1; done; [ $$fail -eq 0 ]
@echo "=== Python compile ==="
@python3 -m py_compile extensions/services/dashboard-api/main.py extensions/services/dashboard-api/agent_monitor.py
@echo "=== Dashboard API (Rust) ==="
@cd extensions/services/dashboard-api && cargo check --workspace 2>&1 | tail -1
@echo "All lint checks passed."

test: ## Run unit and contract tests
Expand Down
12 changes: 6 additions & 6 deletions dream-server/docs/COMPOSABILITY-EXECUTION-BOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,14 @@ Effort: 3-5 days
Files:
- `extensions/schema/service-manifest.v1.json` (new)
- `extensions/services/*.yaml` (new examples)
- [`dashboard-api/main.py`](../extensions/services/dashboard-api/main.py)
- [`dashboard-api/crates/dashboard-api/src/config.rs`](../extensions/services/dashboard-api/crates/dashboard-api/src/config.rs)
Acceptance:
- API can load service definitions from manifests.
- Health checks and feature cards reference manifest data, not hardcoded lists.
Progress notes:
- Added `extensions/schema/service-manifest.v1.json`.
- Added example manifests in `extensions/services/` for inference, voice, workflows, vector DB, and image generation services.
- `dashboard-api/main.py` now loads and merges service/feature definitions from manifests with safe fallback defaults.
- `dashboard-api` (Rust/Axum rewrite) loads and merges service/feature definitions from manifests with safe fallback defaults.

Milestone W4-M2 (PR-7): Environment schema and validation
Status: `IN_PROGRESS`
Expand Down Expand Up @@ -189,7 +189,7 @@ Owner: Frontend + API
Effort: 2-3 days
Files:
- [`dashboard/src/pages/Dashboard.jsx`](../extensions/services/dashboard/src/pages/Dashboard.jsx)
- [`dashboard-api/main.py`](../extensions/services/dashboard-api/main.py)
- [`dashboard-api/crates/dashboard-api/src/main.rs`](../extensions/services/dashboard-api/crates/dashboard-api/src/main.rs)
Acceptance:
- Feature tiles derive from API metadata.
- Ports/URLs are not hardcoded in JSX.
Expand All @@ -207,13 +207,13 @@ Owner: API + Docs
Effort: 1-2 days
Files:
- `config/n8n/catalog.json` (planned; not yet created)
- [`dashboard-api/main.py`](../extensions/services/dashboard-api/main.py)
- [`dashboard-api/crates/dashboard-api/src/routes/workflows.rs`](../extensions/services/dashboard-api/crates/dashboard-api/src/routes/workflows.rs)
- [INTEGRATION-GUIDE.md](INTEGRATION-GUIDE.md)
Acceptance:
- One canonical workflow path in code/docs.
- Catalog supports both templates and metadata cleanly.
Progress notes:
- `dashboard-api/main.py` now resolves workflows from canonical `config/n8n` with legacy `workflows/` fallback.
- `dashboard-api` (Rust) resolves workflows from canonical `config/n8n` with legacy `workflows/` fallback.
- Workflow catalog loading now validates structure and returns normalized fallback data on malformed input.
- `docs/INTEGRATION-GUIDE.md` updated to reference `config/n8n/*.json` and `config/n8n/catalog.json`.

Expand Down Expand Up @@ -285,7 +285,7 @@ Owner: Release
Effort: 2-3 days
Files:
- `manifest.json` (new)
- [`dashboard-api/main.py`](../extensions/services/dashboard-api/main.py)
- [`dashboard-api/crates/dashboard-api/src/main.rs`](../extensions/services/dashboard-api/crates/dashboard-api/src/main.rs)
- [`dream-update.sh`](../dream-update.sh)
Acceptance:
- Update path validates version compatibility and rollback point.
Expand Down
2 changes: 1 addition & 1 deletion dream-server/docs/EXTENSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ AMD ROCm requires additional container configuration compared to NVIDIA:
## Testing Checklist (PR Gate)

- `bash -n` on changed shell files
- `python3 -m py_compile dashboard-api/main.py`
- `cargo check --workspace` (in `extensions/services/dashboard-api/`)
- `bash tests/integration-test.sh`
- relevant smoke scripts in `tests/smoke/`
- if dashboard code changed and Node is available:
Expand Down
2 changes: 1 addition & 1 deletion dream-server/docs/HOST-AGENT-API.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,6 @@ Protections in place:

## How the Dashboard API Calls It

The Dashboard API (`extensions/services/dashboard-api/routers/extensions.py`) communicates with the host agent via the `AGENT_URL` environment variable (constructed from `DREAM_AGENT_HOST` and `DREAM_AGENT_PORT` in `config.py`). It uses `DREAM_AGENT_KEY` for authentication. The connection flows through Docker's `host.docker.internal` DNS name by default, allowing the containerized API to reach the host-bound agent.
The Dashboard API (Rust binary at `extensions/services/dashboard-api/`) communicates with the host agent via the `DREAM_AGENT_URL` environment variable (constructed from `DREAM_AGENT_HOST` and `DREAM_AGENT_PORT`). It uses `DREAM_AGENT_KEY` for authentication. The connection flows through Docker's `host.docker.internal` DNS name by default, allowing the containerized API to reach the host-bound agent.

If the host agent is unreachable, mutation operations (install, enable, disable) still succeed at the file level but return `"restart_required": true` to signal that `dream restart` is needed.
3 changes: 3 additions & 0 deletions dream-server/extensions/services/dashboard-api/.dockerignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# Rust
target/

# Python
__pycache__/
*.py[cod]
Expand Down
Loading
Loading