Files
Dario Gabriel LipicarandClaude Opus 5 ca8f22a714 feat: Basecamp panel for the verified proxy
A ui_qml module — QML view over a small C++ backend, with the QML-facing
surface declared as a QtRO .rep contract, matching storage-ui/wallet-ui/chat-ui.
(QML-only was the other option and is rejected: an empty manifest `main`
installs fine and then shows RETRY forever.)

Three things are deliberate rather than incidental:

* State is POLLED, not event-subscribed. A UI plugin's event subscription is
  one-shot and is refused if armed before the registry handshake, with no
  retry, so a panel built on subscriptions silently shows nothing when it loses
  that race. status() is cheap and never touches the proxy thread, so a 2s poll
  is both simpler and strictly more robust.

* Every module call goes through the generated *AsyncResult twins. start()
  blocks in the module until the light client bootstraps — up to 120s — so a
  synchronous call would freeze the UI for that long. Consumer-side timeouts are
  set LONGER than the module's own (150s vs 120s for start, 45s vs 30s for
  calls) so the module's real error wins rather than a bare transport timeout.

* The form constrains what can be typed. `network` is a dropdown of exactly the
  three the library supports, because any other value reaches a quit() inside
  Nim and takes the host process down — a text field here would be a footgun
  wired to the host's life. keepAlive never preselects "off" and warns when it
  is chosen, since without a heartbeat the verified head goes BACKWARDS.

The view avoids Logos.Theme and every other optional import: one unresolved
import takes down the WHOLE view, and the host routes that qWarning somewhere
easy to miss, so the failure looks like an empty pane.

Icon is generated at exactly 256x256 — the .lgx build enforces it — and the
package round-trips with assets/icon.png staged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 14:09:59 -03:00

29 lines
772 B
JSON

{
"name": "verified_proxy_ui",
"display_name": "Verified Proxy",
"version": "0.1.0",
"type": "ui_qml",
"interface": "universal",
"category": "wallet",
"description": "Configure and operate the light-client-verified Ethereum proxy",
"author": "Logos Core Team",
"main": "verified_proxy_ui_plugin",
"icon": "src/icons/verified-proxy.png",
"view": "qml/Main.qml",
"dependencies": ["verified_proxy_module"],
"codegen": {
"rep": "src/VerifiedProxyBackend.rep",
"backend_class": "VerifiedProxyBackend",
"backend_header": "VerifiedProxyBackend.h"
},
"nix": {
"packages": {
"build": [],
"runtime": ["qt6.qtdeclarative"]
},
"external_libraries": [],
"cmake": { "find_packages": [], "extra_sources": [] }
}
}