Ereignisse landeten im falschen Chat: der Broker markiert jedes Ereignis mit chatId, das Panel filtert aber auf sessionId — handleBrokerMessage reichte die Nachricht unverändert weiter, der Filter griff also nie und alles landete im gerade sichtbaren Chat. chatId wird jetzt beim Weiterreichen übersetzt. Tab-Isolation war reine Optik — die Gruppen wurden nirgends durchgesetzt: - getActiveTab() nahm sich den gerade sichtbaren Tab (auch den eines anderen Chats oder einen losen Tab des Nutzers) und zog ihn in die eigene Gruppe. Fremde Tabs werden jetzt nie adoptiert; der Chat öffnet sich einen eigenen. - browser_tabs_create legte den neuen Tab in die Gruppe der SICHTBAREN statt der aufrufenden Konversation (sessionId fehlte). - browser_tabs_select/close prüften den Besitz gar nicht — der Agent konnte jeden Tab übernehmen oder schließen, auch die des Nutzers. - browser_tabs_list zeigte jeden offenen Tab; Tabs anderer Chats sind jetzt unsichtbar, Nutzer-Tabs klar als "nicht anfassen" markiert. Besitz wird über Chromes Tab-Gruppen bestimmt — überlebt einen Neustart des Service Workers, anders als reiner Speicher. Session wird explizit durch runTool/dispatchTool/getActiveTab gereicht. Der bisherige Trick, activeSessionId kurz umzubiegen, hielt nur ohne Parallelität: zwischen Setzen und Zurücksetzen liegt ein await. Einstellungen und Verlauf nehmen dem Chat keinen Platz mehr weg: Einstellungen sind eine eigene Seite (vorher ausklappbar bis 45vh), der Verlauf ein Overlay über dem Header-Knopf. Abschnitte als eigene Module mit Icon und Akzentkante. Nebenbei repariert: nach der Umbenennung .settings -> .settings-panel zeigten mehrere Regeln ins Leere. Kimi K2.5, GLM-5 und Gemini 3.1 Flash Lite im Nexus-Katalog; Kimi/GLM laufen über /moonshot bzw. /zai statt über den Azure-Deployment-Pfad. Ollama als lokaler Anbieter wählbar (kein Key nötig). Enthält außerdem ältere, noch nicht committete Arbeit, die nicht von diesem Durchgang stammt und sich nicht sauber abtrennen ließ: kräftigerer Glow mit Farbverlauf (spotlight.ts), Raster-Overlay für Screenshots (computer.ts) und ein Ein/Aus-Schalter für CDP (cdp.ts).
58 lines
1.3 KiB
JSON
58 lines
1.3 KiB
JSON
{
|
||
"manifest_version": 3,
|
||
"name": "Nexus Browser Pilot",
|
||
"version": "1.2.0",
|
||
"minimum_chrome_version": "116",
|
||
"description": "Bedient den Browser wie ein Mensch – echter Mauszeiger, echte Tastatur, echte Events. Handelt selbstständig; Rückfragen nur im zuschaltbaren Nachfrage-Modus.",
|
||
"permissions": [
|
||
"activeTab",
|
||
"tabs",
|
||
"tabGroups",
|
||
"scripting",
|
||
"storage",
|
||
"sidePanel",
|
||
"alarms",
|
||
"webNavigation",
|
||
"debugger"
|
||
],
|
||
"host_permissions": [
|
||
"<all_urls>"
|
||
],
|
||
"background": {
|
||
"service_worker": "dist/background.js",
|
||
"type": "module"
|
||
},
|
||
"side_panel": {
|
||
"default_path": "src/sidepanel/index.html"
|
||
},
|
||
"content_scripts": [
|
||
{
|
||
"matches": ["<all_urls>"],
|
||
"js": ["dist/console-hook.js"],
|
||
"run_at": "document_start",
|
||
"all_frames": false,
|
||
"world": "MAIN"
|
||
},
|
||
{
|
||
"matches": ["<all_urls>"],
|
||
"js": ["dist/content.js"],
|
||
"run_at": "document_start",
|
||
"all_frames": false
|
||
}
|
||
],
|
||
"action": {
|
||
"default_title": "Nexus Browser Pilot",
|
||
"default_icon": {
|
||
"16": "icons/icon16.png",
|
||
"32": "icons/icon32.png",
|
||
"48": "icons/icon48.png",
|
||
"128": "icons/icon128.png"
|
||
}
|
||
},
|
||
"icons": {
|
||
"16": "icons/icon16.png",
|
||
"48": "icons/icon48.png",
|
||
"128": "icons/icon128.png"
|
||
}
|
||
}
|