Skip to content

feat: decentralized skill marketplace — publish, discover, rank, auto-adopt#169

Open
jimmy-claw wants to merge 9 commits into
masterfrom
jimmy/lmao-issue-140-20260417
Open

feat: decentralized skill marketplace — publish, discover, rank, auto-adopt#169
jimmy-claw wants to merge 9 commits into
masterfrom
jimmy/lmao-issue-140-20260417

Conversation

@jimmy-claw

Copy link
Copy Markdown
Owner

Summary

Implements the core infrastructure for a decentralized skill marketplace (LMAO #140):

  • Core types: SkillDescriptor, SkillRating, SkillAnnouncement in logos-messaging-a2a-core
  • Skill registry: SkillRegistry trait + InMemorySkillRegistry with tag search, rating management, and author-only updates
  • Wire protocol: New A2AEnvelope::SkillAnnouncement variant and /lmao/1/skills/proto topic
  • Node marketplace: SkillMarketplace struct with trust set management, subjective ranking via trusted peers, auto-adopt candidate detection, and pub/sub skill announcements over Waku

Architecture

  • Publish: Agents announce skill bundles (pinned to Codex content hashes) on the skills topic
  • Discover: Agents subscribe to skill announcements and query the registry by tag
  • Rank: Each agent maintains a trust set; effective rank = average of ratings from trusted peers only (no global authority)
  • Auto-adopt: adoption_candidates() returns skills above a configurable threshold that aren't yet installed

Test plan

  • All existing workspace tests pass (cargo test --workspace)
  • New unit tests for SkillDescriptor, SkillRating, SkillAnnouncement serialization
  • New unit tests for InMemorySkillRegistry (register, update, deregister, find_by_tag, rate, get_ratings)
  • New unit tests for SkillMarketplace (trust set, ranking, adoption candidates, announce/discover)
  • Envelope variant produces distinct skill_announcement type tag

Fixes #140

🤖 Generated with Claude Code

jimmy-claw and others added 9 commits April 16, 2026 04:06
Comprehensive analysis of replacing OpenClaw with a Logos Core module.
Maps existing LMAO capabilities against OpenClaw features, identifies
critical gaps (lifecycle manager, scheduler, tool sandbox, LLM layer),
and recommends a 3-phase approach starting with hybrid integration.

Fixes #51

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add DeliveryTransport C++ class that obtains a QtRO replica of
delivery_module via logosAPI->getClient() and exposes send/subscribe/
unsubscribe methods. Wire it into LmaoComponent and LmaoBackend so
the module uses QtRO inter-module calls for message transport when
running inside Logos Core, with FFI fallback when QtRO is unavailable.

- DeliveryTransport: QtRO bridge to delivery_module (send, subscribe,
  unsubscribe, createNode, start, messageReceived event handling)
- LmaoComponent: stores logosAPI, initializes DeliveryTransport
- LmaoBackend: accepts DeliveryTransport, adds deliverySend() method
- module.yaml: declares delivery_module dependency
- CMakeLists.txt: adds DeliveryTransport.cpp to build

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add tabbed UI plugin with Dashboard, Fleet, Metrics, and Task History views.

FFI layer:
- Add lmao_get_info() for agent identity, topics, and encryption status
- Add lmao_get_metrics() for 17 operational counters (tasks, messages, etc.)
- Add tests for both new FFI functions (98 total tests pass)

C++ backend:
- Add getInfo() and getMetrics() Q_INVOKABLE methods to LmaoBackend

QML UI:
- DashboardView: agent status, public key (click to copy), Waku topics,
  encryption status, QtRO transport status
- MetricsView: grouped counter tiles with auto-refresh (5s), covering tasks,
  messages, discovery, sessions, streaming, and retries
- TaskHistoryView: in-memory task log with expandable details, status badges,
  timestamps, and clear functionality
- LmaoView: tabbed navigation (Dashboard/Fleet/Metrics/History) replacing
  the single fleet view

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire up LogosCoreDeliveryTransport in the FFI layer so the Logos Core
plugin uses delivery_module IPC (via logos_core_call_plugin_method_async)
instead of the nwaku REST transport.

- Add `logos-core` feature to lmao-ffi that switches NodeTransport from
  LogosMessagingTransport (REST) to LogosCoreDeliveryTransport (IPC)
- Enable `logos-core` feature in the Nix flake build so the plugin
  automatically uses delivery_module when running inside Logos Core
- Update architecture docs to reflect transport availability

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add logos-co/logos-delivery-module as a Nix flake dependency and wire
the QtRO inter-module call path for task sending.

Changes:
- flake.nix: add logos-delivery-module input, include in build deps
- lmao-ffi: add lmao_build_task_envelope() FFI function that creates
  A2A Task envelope (topic + base64 payload) without sending, so C++
  can route through QtRO delivery_module directly
- LmaoBackend: add sendTaskViaDelivery() that prefers QtRO when
  connected, falls back to FFI transport otherwise
- LmaoView.qml: use sendTaskViaDelivery for task sending
- Headers: declare lmao_build_task_envelope in both FFI headers
- Tests: 5 new tests for lmao_build_task_envelope (103 total pass)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a new `StorageModuleClient` storage backend behind the `storage-module`
feature flag, implementing the logos-storage-module init/start/upload/download
lifecycle pattern. Uses the existing `storage-bindings` FFI crate (same
libstorage that logos-storage-module uses internally).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Make sendTask() automatically prefer the real logos-delivery-module via
QtRO inter-module IPC when available, with FFI fallback. Previously
callers had to explicitly use sendTaskViaDelivery() for the QtRO path.

- sendTask() now tries QtRO delivery_module first, falls back to FFI
- sendTaskViaDelivery() delegates to sendTask() (backwards compat)
- Updated transport docs to reflect logos-core as the primary transport

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-adopt (LMAO #140)

Add skill marketplace infrastructure to the LMAO stack:

Core types (logos-messaging-a2a-core):
- SkillDescriptor: metadata for published skill bundles (ID, content hash, author, version, tags)
- SkillRating: on-chain ratings with score validation (1-5)
- SkillAnnouncement: broadcast envelope for skill discovery
- SkillRegistry trait + InMemorySkillRegistry: persistent skill store with tag search and rating management
- A2AEnvelope::SkillAnnouncement variant for wire protocol
- SKILLS topic (/lmao/1/skills/proto) for skill announcements

Node integration (logos-messaging-a2a-node):
- SkillMarketplace: per-agent state with trust set, known/installed skills, and cached ratings
- Subjective ranking: effective_rank() computes weighted average from trusted peers only
- Auto-adopt: adoption_candidates() returns skills above threshold that aren't installed
- announce_skill() / discover_skills() for pub/sub over Waku transport
- Configurable trust model with transitive trust support

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

feat: decentralized skill marketplace — publish, discover, rank, auto-adopt

1 participant