Pouzor
d49610163f
feat(zigbee): add MQTT TLS support with optional cert verify skip
...
- Schema: mqtt_tls + mqtt_tls_insecure flags on import + test-connection
requests; model_validator enforces insecure requires tls
- Service: _build_tls_context() using ssl.create_default_context();
logger.warning when verification disabled; tls_context plumbed into
aiomqtt.Client for both fetch_networkmap and test_mqtt_connection
- Route: passes tls flags through to service
- Frontend: TLS checkbox auto-toggles port 1883<->8883 unless user
edited; insecure checkbox disabled until TLS on, red-tinted; password
field marked autocomplete=new-password
- Tests: 7 new backend tests (TLS context build, client kwargs assertion,
router happy path, insecure-without-tls 422)
2026-05-06 16:30:23 +02:00
Pouzor
517130a9ef
fix(zigbee): add zigbee node types to icons and themes maps
...
TS build failed in smoke-and-integration: NODE_TYPE_DEFAULT_ICONS and
all theme nodeAccents were missing zigbee_coordinator, zigbee_router,
zigbee_enddevice entries required by NodeType union.
2026-05-06 15:41:29 +02:00
pranjal-joshi
67b0620be2
fix: resolve all mypy errors in zigbee_service
...
- Add dict[str, Any] type parameters throughout (mypy type-arg)
- Fix str | None returns with explicit 'or None' coercion (no-any-return)
- Remove unused type: ignore[import] comment (unused-ignore)
- Decode message.payload bytes before json.loads (arg-type)
- Use X | Y syntax in isinstance check (ruff UP038)
- All 33 tests still passing, ruff + mypy clean
Co-authored-by: CyberKeys <noreply@openclaw.ai >
2026-05-04 14:25:15 +00:00
pranjal-joshi
cc9c010002
fix: adhere to CONTRIBUTING.md — ruff clean + all tests passing
...
- Move aiomqtt to module-level import (enables proper patch() in tests)
- Remove unused variable (description) in zigbee_service — ruff F841
- Split long line (132 chars) to fit 120 char limit — ruff E501
- Fix import sort order in test files — ruff I001
- Remove unused imports (asyncio, AsyncMock, MagicMock) — ruff F401
- Rename test_mqtt_connection import alias to _test_mqtt_connection
to avoid pytest fixture name collision (ERROR at setup)
- All 33 backend tests now pass (21 service + 12 router)
- TypeScript typecheck: 0 errors
Co-authored-by: CyberKeys <noreply@openclaw.ai >
2026-05-04 14:12:38 +00:00
pranjal-joshi
103e24e5fa
feat: add Zigbee2MQTT network map importer
...
- Backend: async MQTT service (aiomqtt) to fetch Z2M networkmap via bridge API
- Backend: FastAPI router at /api/v1/zigbee with /import and /test-connection
- Backend: Pydantic v2 schemas for request/response validation
- Backend: coordinator → router → end-device parent_id hierarchy builder
- Frontend: ZigbeeImportModal with MQTT config form, Test Connection, Fetch Devices
- Frontend: device list grouped by type (coordinator/router/enddevice) with checkboxes
- Frontend: ZigbeeCoordinatorNode, ZigbeeRouterNode, ZigbeeEndDeviceNode canvas nodes
- Frontend: Zigbee Import button in sidebar alongside Scan Network
- Frontend: handleZigbeeAddToCanvas wires selected devices + edges onto canvas
- Tests: full unit test suite for parser, hierarchy builder, MQTT mocks
- Tests: API endpoint tests for /zigbee/import and /zigbee/test-connection
- Tests: Vitest component tests for ZigbeeImportModal
- Docs: docs/zigbee-import.md with full usage, MQTT config, troubleshooting guide
- Docs: README.md Zigbee2MQTT Import section
Co-authored-by: CyberKeys <noreply@openclaw.ai >
2026-05-04 13:58:58 +00:00
Remy
5fb77ab00b
Merge pull request #122 from Pouzor/1.12.1
...
1.12.1: firewall node + 1–48 bottom connection points
v1.13.0
2026-05-03 22:50:09 +02:00
Pouzor
56cfbd1e76
bump version 1.13.0
2026-05-03 22:44:38 +02:00
Pouzor
43761c60cb
feat(handles): allow 1-48 bottom connection points via slider
...
Replaces the 4-option dropdown with a 1..48 slider. Existing handle IDs
('bottom', 'bottom-2'..'bottom-4') are preserved and the hand-tuned pixel
positions for counts 1..4 are locked in (regression-tested) so saved
canvases render identically. Counts >=5 use uniform spacing; node card
auto-grows in width so handles stay clickable. Existing edge-remap on
shrink scales unchanged thanks to its index-based loop.
ha-relevant: yes
2026-05-03 21:09:14 +02:00
Pouzor
ad958feabd
fix(node-modal): keep modal open when delete confirm is cancelled
...
Bare if without braces meant onClose() ran unconditionally after the
window.confirm — clicking Cancel still closed the modal and dropped
unsaved edits. Wrap the confirm body so onClose only fires on accept.
2026-05-03 17:16:05 +02:00
Pouzor
e3876e934c
feat(nodes): add firewall node type
...
New 'firewall' NodeType with Flame icon. Wired through node registry,
icon registry, all six themes (red-tinted accent per palette), NodeModal
Hardware group, and CustomStyleModal editable types.
2026-05-03 16:48:15 +02:00
Pouzor
dfa4a9c849
fix(sidebar): unfreeze view after scan triggers history panel
...
forceView prop was overriding local activeView on every render. Once parent
set sidebarForceView='history' after starting a scan, it never cleared, so
clicks on other nav items were ignored. Treat forceView as a one-shot
trigger via the previous-prop pattern; user clicks afterward control view.
2026-05-03 16:03:30 +02:00
Remy
785be6a5dd
Create FUNDING.yml
2026-04-28 14:52:25 +02:00
Remy
39f8d16ef1
Merge pull request #113 from jackspiering/patch-1
...
Fix typo in 'optional' section header
2026-04-25 02:14:55 +02:00
Jack Spiering
0095bf8425
Fix typo in 'optional' section header
2026-04-24 22:43:26 +02:00
Pouzor
2cc97a6de9
bump: version 1.12.0
v1.12.0
2026-04-24 15:33:09 +02:00
Remy
29a2ef1b20
Merge pull request #94 from findthelorax/bug/bezier-label
...
fix: bezier label
2026-04-24 15:23:54 +02:00
Pouzor
0c836e0575
Merge remote-tracking branch 'origin/main' into bug/bezier-label
2026-04-24 15:04:05 +02:00
Remy
6518eb313b
Merge pull request #108 from findthelorax/fix/modal-accessibility
...
fix: modal accessibility
2026-04-24 14:48:52 +02:00
Pouzor
09a591f5f4
fix: move IP address comma-separated hint below input to prevent label wrapping
2026-04-24 12:08:56 +02:00
Pouzor
988b804b90
fix: subtle hover border (#8b949e) and remove redundant tabIndex on button elements
2026-04-24 12:01:30 +02:00
Pouzor
6fa0ada325
merge: resolve EdgeModal conflict — keep CSS module classes + SelectValue label fix
2026-04-24 11:50:30 +02:00
Pouzor
17613f42d1
fix: style apply-to-existing buttons as primary blue actions
2026-04-24 11:42:31 +02:00
Pouzor
0a44b69c4e
fix: add default size hint (min 140x50, auto) in custom style editor
2026-04-24 11:42:31 +02:00
Pouzor
84235d81bf
fix: show edge type label in select trigger after selection
2026-04-24 11:42:31 +02:00
Pouzor
31b61904ac
fix: add setCustomStyle to useEffect dependency array
2026-04-24 11:42:31 +02:00
Pouzor
babbcb1dc5
feat: add custom style theme with per-type node/edge style editor
...
- New 'custom' ThemeId with dedicated ThemeCard + pencil edit button
- CustomStyleModal: two-column editor for all node types (excl. groupRect/group) and edge types
- Per node: border, background, icon color + opacity, default size (w/h)
- Per edge: color + opacity, path style, animation
- 'Apply to existing [Type]' per type, 'Apply All to Canvas' footer action
- canvasStore: applyTypeNodeStyle, applyTypeEdgeStyle, applyAllCustomStyles actions
- themeStore: customStyle state + setCustomStyle action
- Backend: custom_style JSON column on canvas_state (ALTER TABLE migration), saved/loaded with canvas
- App.tsx: custom_style included in save payload, restored on load (API + standalone)
- Tests: +8 frontend (themeStore + canvasStore), +3 backend (canvas API)
2026-04-24 11:42:31 +02:00
findthelorax
12fde681ba
removed closeIconProps on edge modal
2026-04-23 22:57:36 -04:00
Brett Ferrante
63922f0841
Merge branch 'Pouzor:main' into bug/bezier-label
2026-04-23 20:06:50 -04:00
findthelorax
896cd4fa21
made a lot of accessibility fixes for the modalsincluding pointers, keyboard navigation and consistent border radius
2026-04-23 20:06:10 -04:00
findthelorax
18f9bb7bdf
allow the enter key to apply the currently selected style
2026-04-24 00:42:00 +02:00
findthelorax
da287d459c
allow for keyboard navigation and adjusted card height to match regardless of text inside
2026-04-24 00:42:00 +02:00
findthelorax
adb2088752
revert: restore workflow to upstream version
2026-04-24 00:42:00 +02:00
findthelorax
cd0e08fb91
fixed canvas style options to fit better and be max 50vw
2026-04-24 00:42:00 +02:00
Brett Ferrante
3ccdde0bea
Update Docker image references to use repository owner
2026-04-24 00:42:00 +02:00
Lucas Van Vonderen
d0a49d0a0d
fix(mcp): mount session manager via Starlette Mount to avoid double response.start
...
StreamableHTTPSessionManager is an ASGI app — it sends its own
http.response.start and http.response.body messages via the scope/receive/send
triple. Wrapping it inside a @app.api_route FastAPI handler causes FastAPI
to try to finalize the response after the handler returns, emitting a
second http.response.start. uvicorn rejects this with:
RuntimeError: Unexpected ASGI message 'http.response.start' sent,
after response already completed.
Every POST /mcp raises, making the server unreachable from any MCP client
(tested with Claude Code 2.x against mcp==1.27.0).
Fix: mount the session manager as a Starlette Mount so it owns the
response cycle directly. Auth middleware still applies because
add_middleware attaches at the app level, wrapping all mounted sub-apps.
2026-04-24 00:34:55 +02:00
findthelorax
31b5bc4515
fixed accessibility and keyboard navigation for edit node and connection modals
2026-04-23 16:00:55 -04:00
Brett Ferrante
b05d70663c
Merge branch 'Pouzor:main' into bug/bezier-label
2026-04-22 20:49:11 -04:00
Brett Ferrante
4e68af7cac
Merge branch 'Pouzor:main' into main
2026-04-22 20:48:47 -04:00
Pouzor
528c362633
bump: version 1.11.0
v1.11.0
2026-04-23 02:38:31 +02:00
Pouzor
bfe520cd49
fix: use absolute positioning for status dot to prevent IP truncation
2026-04-23 02:35:23 +02:00
Pouzor
29c97ae501
fix: align status dot to top and restore gap in ProxmoxGroupNode header
2026-04-23 02:35:23 +02:00
findthelorax
4ecd241bf4
enlarged node resizer border for easier resizing
2026-04-23 02:35:23 +02:00
findthelorax
96786f155b
aligned all status icon styling
2026-04-23 02:35:23 +02:00
Pouzor
1d6127fed3
fix(detail-panel): replace pixel math and fixed tooltip in ServiceBadge
...
- Remove magic-number width calculations (maxTotalWidth, nameCharWidth)
- Remove useState tooltip + position:fixed custom tooltip div
- Use CSS flex/truncate for layout and Shadcn Tooltip for path hover
- Add ServiceBadge rendering tests (name, port, path, link vs plain text)
2026-04-23 00:55:14 +02:00
findthelorax
26633f760d
aligned services and path styling
2026-04-23 00:55:14 +02:00
findthelorax
745002593f
reduces clickable space to the external link icon and the service name and added a tooltip to show truncated paths at the pointer
2026-04-23 00:55:14 +02:00
findthelorax
1a978c5e51
prioritize service name and port, truncate path or hide when necessary
2026-04-23 00:55:14 +02:00
findthelorax
16adff5cff
prioritize service name, truncate path or hide when necessary
2026-04-23 00:55:14 +02:00
findthelorax
45b0965fb7
path max width set to 80px
2026-04-23 00:55:14 +02:00
findthelorax
f1bcd6ef78
restore: tooltip.tsx
2026-04-23 00:55:14 +02:00