Skip to content

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

@gHashTag

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions