Skip to content

πŸ¦€ EPIC: Chrome Extension Sidebar β€” Rust/Dioxus/Wasm + MCP Bridge (One-Shot Integration)Β #111

Description

@gHashTag

πŸ¦€ EPIC: Trinity Chrome Extension β€” Rust Sidebar + MCP Bridge

ЦСль: ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ Chrome сайдбар (ΠΊΠ°ΠΊ Ρƒ Claude/Copilot) Π½Π° чистом Rust β€” Dioxus + Wasm, с MCP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎ всСм crates/* Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡˆΠΈΠ½Ρƒ trios-bus.


πŸ“Š Бтатус Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π·Π°Π΄Π°Ρ‡

# Π—Π°Π΄Π°Ρ‡Π° Π‘Π»ΠΎΠΉ Зависит ΠΎΡ‚ Бтатус
#107 trios-proto + trios-bus + trios-orchestrator β€” One-Shot интСграция L0–L2 β€” πŸ”΄ TODO
#108 crates/trios-ext β€” Dioxus/Wasm сайдбар + Ρ‡Π°Ρ‚ + MCP панСль L5 #107 πŸ”΄ TODO (Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½)
#61 feat: integrate Chrome Extension (старый issue) β€” β€” ⚠️ Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ #108, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ: сначала #107 (ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» + шина), ΠΏΠΎΡ‚ΠΎΠΌ #108 (UI ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡˆΠΈΠ½Ρ‹). #61 β€” Π΄ΡƒΠ±Π»ΡŒ, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ duplicate of #108.


πŸ—οΈ Полная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° систСмы

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          CHROME BROWSER                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  side_panel (MV3)                            β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚  β”‚  trios-ext (Rust/Dioxus/Wasm)          β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β”‚   Chat   β”‚  Agents  β”‚ MCP Tools  β”‚  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚       β”‚          β”‚           β”‚          β”‚  β”‚  β”‚
β”‚  β”‚  β”‚    WebSocket  ws://localhost/mcp        β”‚  β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”˜                       β”‚  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                         β”‚ (localhost WebSocket)       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  TRIOS WORKSPACE       β”‚                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  trios-server  (L5)                            β”‚ β”‚
β”‚  β”‚  MCP endpoint: /mcp                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                     β”‚ Envelope<T> (trios-proto)      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  trios-bus  (L1) β€” TriosAgent trait            β”‚ β”‚
β”‚  β”‚  Bus: DashMap + broadcast + phi-priority       β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚       β”‚         β”‚           β”‚          β”‚             β”‚
β”‚  trios-llm  trios-agents  trios-kg  trios-physics   β”‚
β”‚  trios-vsa  trios-hdc   trios-model  ... (31 crates) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Π€Π°Π·Π° 1: #107 β€” ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» + Π¨ΠΈΠ½Π° + ΠžΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€

Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ: AGENT (любой свободный)
Π’Π΅Ρ‚ΠΊΠ°: feat/trios-bus
Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚: #108

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ 3 Π½ΠΎΠ²Ρ‹Ρ… crate:

crates/trios-proto/     β€” Envelope<T>, PhiPriority, Routing, AgentId
crates/trios-bus/       β€” trait TriosAgent + Bus (DashMap + broadcast)
crates/trios-orchestrator/ β€” Orchestrator::boot() + autodiscovery

ΠœΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅:

trios-agents:   AgentMessage β†’ Envelope<AgentPayload>
trios-llm:      Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ impl TriosAgent
trios-phi-schedule: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Bus

ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ workspace Cargo.toml:

[workspace.dependencies]
ulid = "1"
dashmap = "6"

members = [
  "crates/trios-proto",
  "crates/trios-bus",
  "crates/trios-orchestrator",
  # ...existing...
]

Acceptance Criteria #107:

  • cargo build -p trios-proto OK
  • cargo build -p trios-bus OK
  • cargo build -p trios-orchestrator OK
  • Trios::boot() ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ систСму Π·Π° ≀ 500ms
  • Новый Π°Π³Π΅Π½Ρ‚ = impl TriosAgent Π·Π° ≀ 10 строк
  • 0 unwrap() Π² bus/orchestrator
  • cargo clippy -- -D warnings PASS
  • Integration test: boot β†’ task β†’ result ≀ 100ms

πŸ“‹ Π€Π°Π·Π° 2: #108 β€” Chrome Extension Sidebar

Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ: AGENT (послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ #107)
Π’Π΅Ρ‚ΠΊΠ°: feat/trios-ext
Зависит ΠΎΡ‚: #107 (trios-proto, trios-bus)

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ:

crates/trios-ext/
β”œβ”€β”€ Cargo.toml          # cdylib, wasm32-unknown-unknown
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ lib.rs          # wasm_bindgen entry
β”‚   β”œβ”€β”€ app.rs          # Dioxus root
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ sidebar.rs  # 3 Π²ΠΊΠ»Π°Π΄ΠΊΠΈ: Chat | Agents | MCP Tools
β”‚   β”‚   β”œβ”€β”€ chat.rs     # async Ρ‡Π°Ρ‚ β†’ Envelope<AgentPayload::Task>
β”‚   β”‚   β”œβ”€β”€ agent_list.rs # список Π°Π³Π΅Π½Ρ‚ΠΎΠ² с статусами
β”‚   β”‚   └── mcp_panel.rs  # список tools + Ρ„ΠΎΡ€ΠΌΠ° Π²Ρ‹Π·ΠΎΠ²Π°
β”‚   └── mcp/
β”‚       └── client.rs   # WebSocket β†’ trios-server /mcp
extension/
β”œβ”€β”€ manifest.json       # MV3, side_panel permission
β”œβ”€β”€ sidepanel.html      # <div id="main"> + init() Wasm
β”œβ”€β”€ background.js       # minimal service worker
└── icons/

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ зависимости (Cargo.toml):

dioxus = { version = "0.6", features = ["web"] }
wasm-bindgen = "0.2"
gloo-net = "0.6"        # async WebSocket Π² wasm
trios-proto = { path = "../trios-proto" }

manifest.json (MV3 + side_panel):

{
  "manifest_version": 3,
  "permissions": ["sidePanel", "storage", "activeTab"],
  "side_panel": { "default_path": "sidepanel.html" },
  "action": { "default_title": "Open Trinity Sidebar" }
}

Build (Π±Π΅Π· .sh):

cargo build -p trios-ext --target wasm32-unknown-unknown --release
wasm-bindgen ... --out-dir extension/pkg --target web

CI (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² .github/workflows/ci.yml):

- name: Build trios-ext (wasm)
  run: |
    rustup target add wasm32-unknown-unknown
    cargo build -p trios-ext --target wasm32-unknown-unknown --release

Acceptance Criteria #108:

  • cargo build -p trios-ext --target wasm32-unknown-unknown OK
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ загруТаСтся Ρ‡Π΅Ρ€Π΅Π· chrome://extensions β†’ Load unpacked
  • Π‘Π°ΠΉΠ΄Π±Π°Ρ€ открываСтся ΠΊΠ°ΠΊ side panel, Π½Π΅ popup
  • WebSocket соСдиняСтся ΠΊ trios-server Π½Π° localhost
  • Chat Π²ΠΊΠ»Π°Π΄ΠΊΠ°: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° β†’ Envelope<AgentPayload::Task> β†’ ΠΎΡ‚Π²Π΅Ρ‚
  • Agents Π²ΠΊΠ»Π°Π΄ΠΊΠ°: список Π°Π³Π΅Π½Ρ‚ΠΎΠ² с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ статусами
  • MCP Tools Π²ΠΊΠ»Π°Π΄ΠΊΠ°: список tools, Ρ„ΠΎΡ€ΠΌΠ° Π²Ρ‹Π·ΠΎΠ²Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
  • НСт .sh Ρ„Π°ΠΉΠ»ΠΎΠ² (L1)
  • НСт unwrap() Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… путях
  • cargo clippy -p trios-ext PASS
  • Π—Π°ΠΏΠΈΡΡŒ Π² .trinity/experience/trios-ext-YYYY-MM-DD.md (L7)

πŸ—‘οΈ Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄ΡƒΠ±Π»ΡŒ:

#61 β€” feat: integrate Chrome Extension (Dioxus/Wasm) into Cargo Workspace β€” это Π±ΠΎΠ»Π΅Π΅ ранняя ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ вСрсия #108. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ:

Duplicate of #108. More detailed spec moved there. Closes #61.


πŸ”— Бвязи с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ эпиками

Эпик/Issue Бвязь
#109 β€” PhD Monograph trios-ext β€” UI для Scholar Cat (#63)
#110 β€” Parameter Golf trios-bus Π½ΡƒΠΆΠ΅Π½ для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ Π°Π³Π΅Π½Ρ‚ΠΎΠ² обучСния
#63 β€” Golden Chain Orchestrator trios-bus = Π΅Π³ΠΎ транспортный слой
#106 β€” Queen Trinity trios-bus = cross-repo experience bus

πŸ“… Timeline

Π”Π°Ρ‚Π° Milestone
Apr 21–23 Π€Π°Π·Π° 1: trios-proto + trios-bus (AGENT)
Apr 24–25 Π€Π°Π·Π° 1: trios-orchestrator + миграция Π°Π³Π΅Π½Ρ‚ΠΎΠ²
Apr 26–28 Π€Π°Π·Π° 2: trios-ext scaffold + Dioxus ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹
Apr 29–30 Π€Π°Π·Π° 2: MCP client + WebSocket + Extension build
May 1 Acceptance test Π² Chrome, merge

Laws

Law Rule
L1 НСт .sh Ρ„Π°ΠΉΠ»ΠΎΠ² β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Rust + TypeScript
L2 ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ PR Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ issue (Closes #107 / Closes #108)
L3 cargo clippy -- -D warnings = 0
L4 cargo test ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ merge
L7 Experience log β†’ .trinity/experience/

Sync ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для Π°Π³Π΅Π½Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²Π·ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ β€” Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² этом issue:

πŸ”’ AGENT [name] CLAIMING: [Π€Π°Π·Π° 1 / Π€Π°Π·Π° 2] | Branch: feat/trios-bus ΠΈΠ»ΠΈ feat/trios-ext | Status: IN PROGRESS

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions