diff --git a/Flowlight.xcodeproj/project.pbxproj b/Flowlight.xcodeproj/project.pbxproj index c236b8f4..84890792 100644 --- a/Flowlight.xcodeproj/project.pbxproj +++ b/Flowlight.xcodeproj/project.pbxproj @@ -2252,7 +2252,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 73; + CURRENT_PROJECT_VERSION = 74; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; @@ -2267,7 +2267,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.16.11; + MARKETING_VERSION = 0.17.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2313,7 +2313,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 73; + CURRENT_PROJECT_VERSION = 74; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 38RJUJHKZS; ENABLE_HARDENED_RUNTIME = YES; @@ -2328,7 +2328,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.16.11; + MARKETING_VERSION = 0.17.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2393,7 +2393,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 73; + CURRENT_PROJECT_VERSION = 74; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; @@ -2414,7 +2414,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.16.11; + MARKETING_VERSION = 0.17.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; diff --git a/Flowlight/App/AppNavigation.swift b/Flowlight/App/AppNavigation.swift index c6e67a69..081f2606 100644 --- a/Flowlight/App/AppNavigation.swift +++ b/Flowlight/App/AppNavigation.swift @@ -39,8 +39,8 @@ enum SidebarItem: String, CaseIterable, Identifiable { switch self { case .live: return "Live" case .agents: return "AI Agents" - case .reports: return "Reports" - case .visualize: return "Visualize" + case .reports: return "History" + case .visualize: return "Connections" case .alerts: return "Alerts" case .rules: return "Rules" case .ask: return "Ask" @@ -55,8 +55,8 @@ enum SidebarItem: String, CaseIterable, Identifiable { switch self { case .live: return L("Live") case .agents: return L("AI Agents") - case .reports: return L("Reports") - case .visualize: return L("Visualize") + case .reports: return L("History") + case .visualize: return L("Connections") case .alerts: return L("Alerts") case .rules: return L("Rules") case .ask: return L("Ask") @@ -157,7 +157,10 @@ struct RuleRequest: Equatable { struct ReportRequest: Equatable { var filter: TrafficFilter var granularity: Granularity? + var start: Date? = nil var end: Date? + var duration: TimeInterval? = nil + var preset: HistoryRangePreset? = nil var id = UUID() } @@ -192,9 +195,13 @@ final class AppNavigation: ObservableObject { } func updateCurrentReportScope(filter: TrafficFilter, granularity: Granularity, - endDate: Date, followNow: Bool) { + startDate: Date, endDate: Date, followNow: Bool, + preset: HistoryRangePreset?) { currentReportScope = ReportRequest(filter: filter, granularity: granularity, - end: followNow ? nil : endDate) + start: followNow ? nil : startDate, + end: followNow ? nil : endDate, + duration: endDate.timeIntervalSince(startDate), + preset: preset) } func goBack() { @@ -224,8 +231,10 @@ final class AppNavigation: ObservableObject { rulesTab = .packs } - func showReport(filter: TrafficFilter, granularity: Granularity? = nil, end: Date? = nil) { - reportRequest = ReportRequest(filter: filter, granularity: granularity, end: end) + func showReport(filter: TrafficFilter, granularity: Granularity? = nil, + start: Date? = nil, end: Date? = nil) { + reportRequest = ReportRequest(filter: filter, granularity: granularity, + start: start, end: end) followLink(to: .reports) } diff --git a/Flowlight/App/FlowlightApp.swift b/Flowlight/App/FlowlightApp.swift index 810fdcae..dfb8b06b 100644 --- a/Flowlight/App/FlowlightApp.swift +++ b/Flowlight/App/FlowlightApp.swift @@ -188,6 +188,7 @@ struct FlowlightApp: App { MenuBarExtra { MenuBarContent() .environmentObject(monitor) + .environmentObject(extensionManager) .environmentObject(nav) .environmentObject(updater) .environmentObject(focus) @@ -207,6 +208,7 @@ struct FlowlightApp: App { struct MenuBarLabel: View { @EnvironmentObject var monitor: TrafficMonitor + @EnvironmentObject var extensionManager: ExtensionManager @EnvironmentObject var updater: UpdateChecker @EnvironmentObject var focus: FocusStore @Environment(\.openWindow) private var openWindow @@ -225,13 +227,27 @@ struct MenuBarLabel: View { #endif } - @ViewBuilder private var label: some View { - if showRates { - Text("↓\(ByteFormat.compact(monitor.currentIn)) ↑\(ByteFormat.compact(monitor.currentOut))") - .monospacedDigit() - } else { - Image(systemName: monitor.unacknowledgedAlerts > 0 ? "exclamationmark.arrow.triangle.2.circlepath" : "arrow.up.arrow.down.circle") + private var label: some View { + HStack(spacing: 4) { + if extensionManager.state.showsMenuBarNotice { + Image(systemName: "exclamationmark.triangle.fill") + .accessibilityHidden(true) + } + if showRates { + Text("↓\(ByteFormat.compact(monitor.currentIn)) ↑\(ByteFormat.compact(monitor.currentOut))") + .monospacedDigit() + } else { + Image(systemName: monitor.unacknowledgedAlerts > 0 ? "exclamationmark.arrow.triangle.2.circlepath" : "arrow.up.arrow.down.circle") + .accessibilityHidden(true) + } } + .accessibilityElement(children: .ignore) + .accessibilityLabel(extensionManager.state.showsMenuBarNotice + ? L("Flowlight, restart required to finish updating the filter") + : L("Flowlight network activity")) + .help(extensionManager.state.showsMenuBarNotice + ? L("Restart or reinstall the filter to finish the update") + : L("Open Flowlight")) } } diff --git a/Flowlight/Ask/FeatureGuide.swift b/Flowlight/Ask/FeatureGuide.swift index d30889da..07fd12da 100644 --- a/Flowlight/Ask/FeatureGuide.swift +++ b/Flowlight/Ask/FeatureGuide.swift @@ -97,7 +97,7 @@ extension FeatureGuide { FeatureGuide( id: "rules", title: "Rules", summary: "Block or allow anything: an app, an agent, a destination, a URL, or a pairing of those — forever, until a time, until Flowlight quits, or between chosen hours. The most specific rule wins and a tie goes to the block.", - steps: ["Open Rules and press +, or right-click any row in Live, Reports, AI Agents or Inspect and choose Block.", + steps: ["Open Rules and press +, or right-click any row in Live, History, AI Agents or Inspect and choose Block.", "Name an app or a destination, pick block or allow, and choose how long it lasts.", "Pause Blocking in the toolbar stands every rule down for a while."], screen: .rules, @@ -142,19 +142,19 @@ extension FeatureGuide { keywords: ["alert", "anomaly", "warning", "threshold", "notification", "exfiltration"]), FeatureGuide( - id: "reports", title: "Reports", + id: "reports", title: "History", summary: "History from second to year, grouped by app, destination or address, with charts, a Worth a look mode that points at apps whose destinations don't resemble their peers, and CSV export.", - steps: ["Open Reports.", "Pick a granularity, then group by App › Domain › IP, Destination › App › IP, or IP › App.", + steps: ["Open History.", "Pick a granularity, then group by App › Domain › IP, Destination › App › IP, or IP › App.", "Use the Way out menu to narrow to the network, peer-to-peer Wi-Fi, this Mac or a tunnel."], screen: .reports, - keywords: ["history", "chart", "csv", "export csv", "breakdown", "worth a look", "group"]), + keywords: ["history", "reports", "chart", "csv", "export csv", "breakdown", "worth a look", "group"]), FeatureGuide( - id: "visualize", title: "Traffic and AI visualization", + id: "visualize", title: "Connections", summary: "One native map with separate Traffic and AI activity modes. Traffic shows every app-to-destination connection; AI activity shows proved agent clients, their attributed tools and MCP servers, LLM services, and every other destination they reached.", - steps: ["Open Visualize and choose Traffic or AI activity.", + steps: ["Open Connections and choose Traffic or AI activity.", "Pick a time period and select a node or connection for exact byte and connection totals.", - "For a grouped LLM service, choose an exact host and address before opening Reports, Inspect, or an unsaved blocking rule."], + "For a grouped LLM service, choose an exact host and address before opening History, Inspect, or an unsaved blocking rule."], screen: .visualize, caveats: ["Connections are network flows, not HTTP request counts.", "Observed means traffic exists. Runs means stored process lineage; it is not a proved invocation.", @@ -165,7 +165,7 @@ extension FeatureGuide { FeatureGuide( id: "channels", title: "Peer-to-peer Wi-Fi", summary: "AirDrop, Handoff, AirPlay, Sidecar and Universal Control go straight to a device in the room over AWDL. Flowlight labels those flows rather than showing them as traffic to an address with no name.", - steps: ["Open Reports.", "Use the Way out menu in the toolbar and choose Peer-to-peer Wi-Fi."], + steps: ["Open History.", "Use the Way out menu in the toolbar and choose Peer-to-peer Wi-Fi."], screen: .reports, keywords: ["airdrop", "awdl", "handoff", "airplay", "sidecar", "peer to peer", "nearby"]), @@ -186,7 +186,7 @@ extension FeatureGuide { "Pick which fields may leave, and add any headers your collector needs."], screen: nil, caveats: ["Headers are kept in the login Keychain, not in preferences.", - "Whatever it sends appears in Live and Reports like any other app's traffic."], + "Whatever it sends appears in Live and History like any other app's traffic."], keywords: ["otlp", "siem", "splunk", "datadog", "collector", "opentelemetry", "forward"]), FeatureGuide( diff --git a/Flowlight/Capture/ExtensionManager.swift b/Flowlight/Capture/ExtensionManager.swift index 1abbbe23..75d4e44b 100644 --- a/Flowlight/Capture/ExtensionManager.swift +++ b/Flowlight/Capture/ExtensionManager.swift @@ -13,6 +13,8 @@ final class ExtensionManager: NSObject, ObservableObject { /// macOS accepted the replacement but will not perform it until the Mac restarts. Nothing the app does /// changes that: the extension's lifecycle belongs to the system, not to this process. case needsReboot + var showsMenuBarNotice: Bool { self == .needsReboot } + var label: String { switch self { case .unknown: return L("Unknown") diff --git a/Flowlight/Localization/de.lproj/Localizable.strings b/Flowlight/Localization/de.lproj/Localizable.strings index 2783f861..b404b584 100644 --- a/Flowlight/Localization/de.lproj/Localizable.strings +++ b/Flowlight/Localization/de.lproj/Localizable.strings @@ -1083,12 +1083,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Domain › IP, Ziel › App › IP oder IP › App"; "Choose a longer window or clear filters." = "Längeren Zeitraum wählen oder Filter entfernen."; "Back" = "Zurück"; -"Return to the previous report scope" = "Zum vorherigen Berichtsumfang zurück"; -"Granularity" = "Auflösung"; -"Earlier (⌘[)" = "Früher (⌘[)"; -"Earlier" = "Früher"; -"Later (⌘])" = "Später (⌘])"; -"Later" = "Später"; "Now" = "Jetzt"; "Showing only:" = "Nur angezeigt:"; "App: %@" = "App: %@"; @@ -1112,7 +1106,6 @@ "Peak year" = "Spitzenjahr"; "Bytes" = "Bytes"; "Filtered traffic" = "Gefilterter Datenverkehr"; -"Click a bar to zoom in" = "Auf einen Balken klicken, um hineinzuzoomen"; "Use the Left and Right Arrow keys to inspect time buckets." = "Mit der linken und rechten Pfeiltaste Zeitabschnitte prüfen."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Mit der linken und rechten Pfeiltaste Zeitabschnitte prüfen und dann die Eingabetaste zum Hineinzoomen drücken."; "1 new flow" = "1 neuer Flow"; @@ -1799,7 +1792,6 @@ "Could not prepare managed-pack review demo: %@" = "Die Demo zur Überprüfung verwalteter Pakete konnte nicht vorbereitet werden: %@"; /* 0.16.0 Datenverkehrsvisualisierung */ -"Visualize" = "Visualisieren"; "Map" = "Karte"; "List" = "Liste"; "App, domain, or IP" = "App, Domain oder IP"; @@ -1875,3 +1867,29 @@ "%lld exact destinations" = "%lld exakte Ziele"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ zu %@, %@ empfangen, %@ gesendet, %lld Verbindungen"; "Show domain family in Reports" = "Domainfamilie in Berichte anzeigen"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 Mon."; +"15 min" = "15 Min."; +"1d" = "1 T."; +"1h" = "1 Std."; +"1w" = "1 Wo."; +"1y" = "1 J."; +"6 mo" = "6 Mon."; +"6h" = "6 Std."; +"All" = "Alle"; +"All history" = "Gesamter Verlauf"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Ziehen Sie die Auswahl, um sich durch den Verlauf zu bewegen. Ziehen Sie an einem der Ränder, um ihre Größe zu ändern, oder verwenden Sie die Links- und Rechtspfeiltaste."; +"Flowlight network activity" = "Flowlight-Netzwerkaktivität"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, Neustart zum Abschließen der Filteraktualisierung erforderlich"; +"Full history" = "Gesamter Verlauf"; +"History" = "Verlauf"; +"History overview failed: %@" = "Verlaufsübersicht fehlgeschlagen: %@"; +"History range navigator" = "Zeitraumnavigation für den Verlauf"; +"Nearby" = "Umgebung"; +"Nearby context" = "Zeitlicher Kontext"; +"Open the filter update notice in Flowlight" = "Hinweis zur Filteraktualisierung in Flowlight öffnen"; +"Range" = "Zeitraum"; +"Restart or reinstall the filter to finish the update" = "Filter neu starten oder neu installieren, um die Aktualisierung abzuschließen"; +"Return to the previous history scope" = "Zum vorherigen Verlaufsbereich zurückkehren"; +"Selected" = "Ausgewählt"; diff --git a/Flowlight/Localization/en.lproj/Localizable.strings b/Flowlight/Localization/en.lproj/Localizable.strings index 9be796c1..ee9b98c7 100644 --- a/Flowlight/Localization/en.lproj/Localizable.strings +++ b/Flowlight/Localization/en.lproj/Localizable.strings @@ -1032,12 +1032,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Domain › IP, Destination › App › IP, or IP › App"; "Choose a longer window or clear filters." = "Choose a longer window or clear filters."; "Back" = "Back"; -"Return to the previous report scope" = "Return to the previous report scope"; -"Granularity" = "Granularity"; -"Earlier (⌘[)" = "Earlier (⌘[)"; -"Earlier" = "Earlier"; -"Later (⌘])" = "Later (⌘])"; -"Later" = "Later"; "Now" = "Now"; "Showing only:" = "Showing only:"; "App: %@" = "App: %@"; @@ -1061,7 +1055,6 @@ "Peak year" = "Peak year"; "Bytes" = "Bytes"; "Filtered traffic" = "Filtered traffic"; -"Click a bar to zoom in" = "Click a bar to zoom in"; "Use the Left and Right Arrow keys to inspect time buckets." = "Use the Left and Right Arrow keys to inspect time buckets."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in."; "1 new flow" = "1 new flow"; @@ -1798,7 +1791,6 @@ "Could not prepare managed-pack review demo: %@" = "Could not prepare managed-pack review demo: %@"; /* 0.16.0 traffic visualization */ -"Visualize" = "Visualize"; "Map" = "Map"; "List" = "List"; "App, domain, or IP" = "App, domain, or IP"; @@ -1874,3 +1866,29 @@ "%lld exact destinations" = "%lld exact destinations"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ to %@, received %@, sent %@, %lld connections"; "Show domain family in Reports" = "Show domain family in Reports"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 mo"; +"15 min" = "15 min"; +"1d" = "1d"; +"1h" = "1h"; +"1w" = "1w"; +"1y" = "1y"; +"6 mo" = "6 mo"; +"6h" = "6h"; +"All" = "All"; +"All history" = "All history"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys."; +"Flowlight network activity" = "Flowlight network activity"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, restart required to finish updating the filter"; +"Full history" = "Full history"; +"History" = "History"; +"History overview failed: %@" = "History overview failed: %@"; +"History range navigator" = "History range navigator"; +"Nearby" = "Nearby"; +"Nearby context" = "Nearby context"; +"Open the filter update notice in Flowlight" = "Open the filter update notice in Flowlight"; +"Range" = "Range"; +"Restart or reinstall the filter to finish the update" = "Restart or reinstall the filter to finish the update"; +"Return to the previous history scope" = "Return to the previous history scope"; +"Selected" = "Selected"; diff --git a/Flowlight/Localization/es.lproj/Localizable.strings b/Flowlight/Localization/es.lproj/Localizable.strings index 90ed07bc..56d26af1 100644 --- a/Flowlight/Localization/es.lproj/Localizable.strings +++ b/Flowlight/Localization/es.lproj/Localizable.strings @@ -1083,12 +1083,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Dominio › IP, Destino › App › IP o IP › App"; "Choose a longer window or clear filters." = "Elegir un periodo más largo o borrar los filtros."; "Back" = "Atrás"; -"Return to the previous report scope" = "Volver al ámbito anterior del informe"; -"Granularity" = "Granularidad"; -"Earlier (⌘[)" = "Antes (⌘[)"; -"Earlier" = "Antes"; -"Later (⌘])" = "Después (⌘])"; -"Later" = "Después"; "Now" = "Ahora"; "Showing only:" = "Mostrando solo:"; "App: %@" = "App: %@"; @@ -1112,7 +1106,6 @@ "Peak year" = "Año máximo"; "Bytes" = "Bytes"; "Filtered traffic" = "Tráfico filtrado"; -"Click a bar to zoom in" = "Clic en una barra para ampliar"; "Use the Left and Right Arrow keys to inspect time buckets." = "Usa las flechas izquierda y derecha para explorar los intervalos de tiempo."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Usa las flechas izquierda y derecha para explorar los intervalos de tiempo y pulsa Retorno para ampliar."; "1 new flow" = "1 flujo nuevo"; @@ -1799,7 +1792,6 @@ "Could not prepare managed-pack review demo: %@" = "No se pudo preparar la demostración de revisión de paquetes administrados: %@"; /* Visualización del tráfico 0.16.0 */ -"Visualize" = "Visualizar"; "Map" = "Mapa"; "List" = "Lista"; "App, domain, or IP" = "App, dominio o IP"; @@ -1875,3 +1867,29 @@ "%lld exact destinations" = "%lld destinos exactos"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ a %@, recibió %@, envió %@, %lld conexiones"; "Show domain family in Reports" = "Mostrar la familia de dominios en Informes"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 mes"; +"15 min" = "15 min"; +"1d" = "1 d"; +"1h" = "1 h"; +"1w" = "1 sem"; +"1y" = "1 año"; +"6 mo" = "6 meses"; +"6h" = "6 h"; +"All" = "Todo"; +"All history" = "Todo el historial"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Arrastra la selección para desplazarte por el historial, arrastra cualquiera de los bordes para cambiar su tamaño o usa las teclas de flecha izquierda y derecha."; +"Flowlight network activity" = "Actividad de red de Flowlight"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, se requiere reiniciar para terminar de actualizar el filtro"; +"Full history" = "Historial completo"; +"History" = "Historial"; +"History overview failed: %@" = "No se ha podido mostrar el resumen del historial: %@"; +"History range navigator" = "Navegador del intervalo del historial"; +"Nearby" = "Cercano"; +"Nearby context" = "Contexto cercano"; +"Open the filter update notice in Flowlight" = "Abrir el aviso de actualización del filtro en Flowlight"; +"Range" = "Intervalo"; +"Restart or reinstall the filter to finish the update" = "Reinicia o reinstala el filtro para terminar la actualización"; +"Return to the previous history scope" = "Volver al ámbito anterior del historial"; +"Selected" = "Seleccionado"; diff --git a/Flowlight/Localization/fr.lproj/Localizable.strings b/Flowlight/Localization/fr.lproj/Localizable.strings index 838203f6..66bd8a32 100644 --- a/Flowlight/Localization/fr.lproj/Localizable.strings +++ b/Flowlight/Localization/fr.lproj/Localizable.strings @@ -1083,12 +1083,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Domaine › IP, Destination › App › IP ou IP › App"; "Choose a longer window or clear filters." = "Choisir une période plus longue ou effacer les filtres."; "Back" = "Retour"; -"Return to the previous report scope" = "Revenir au périmètre de rapport précédent"; -"Granularity" = "Granularité"; -"Earlier (⌘[)" = "Plus tôt (⌘[)"; -"Earlier" = "Plus tôt"; -"Later (⌘])" = "Plus tard (⌘])"; -"Later" = "Plus tard"; "Now" = "Maintenant"; "Showing only:" = "Affichage limité à :"; "App: %@" = "App : %@"; @@ -1112,7 +1106,6 @@ "Peak year" = "Année de pointe"; "Bytes" = "Octets"; "Filtered traffic" = "Trafic filtré"; -"Click a bar to zoom in" = "Cliquer sur une barre pour zoomer"; "Use the Left and Right Arrow keys to inspect time buckets." = "Utilisez les flèches gauche et droite pour parcourir les intervalles de temps."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Utilisez les flèches gauche et droite pour parcourir les intervalles de temps, puis appuyez sur Retour pour zoomer."; "1 new flow" = "1 nouveau flux"; @@ -1799,7 +1792,6 @@ "Could not prepare managed-pack review demo: %@" = "Impossible de préparer la démonstration de vérification des packs gérés : %@"; /* Visualisation du trafic 0.16.0 */ -"Visualize" = "Visualiser"; "Map" = "Carte"; "List" = "Liste"; "App, domain, or IP" = "App, domaine ou IP"; @@ -1875,3 +1867,29 @@ "%lld exact destinations" = "%lld destinations exactes"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ vers %@, %@ reçus, %@ envoyés, %lld connexions"; "Show domain family in Reports" = "Afficher la famille de domaines dans Rapports"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 mois"; +"15 min" = "15 min"; +"1d" = "1 j"; +"1h" = "1 h"; +"1w" = "1 sem."; +"1y" = "1 an"; +"6 mo" = "6 mois"; +"6h" = "6 h"; +"All" = "Tout"; +"All history" = "Tout l'historique"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Faites glisser la sélection pour parcourir l'historique, faites glisser l'un de ses bords pour la redimensionner ou utilisez les touches Flèche gauche et Flèche droite."; +"Flowlight network activity" = "Activité réseau de Flowlight"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, redémarrage requis pour terminer la mise à jour du filtre"; +"Full history" = "Historique complet"; +"History" = "Historique"; +"History overview failed: %@" = "Échec de l'aperçu de l'historique : %@"; +"History range navigator" = "Navigateur de plage de l'historique"; +"Nearby" = "À proximité"; +"Nearby context" = "Contexte proche"; +"Open the filter update notice in Flowlight" = "Ouvrir l'avis de mise à jour du filtre dans Flowlight"; +"Range" = "Plage"; +"Restart or reinstall the filter to finish the update" = "Redémarrer ou réinstaller le filtre pour terminer la mise à jour"; +"Return to the previous history scope" = "Revenir à la plage précédente de l'historique"; +"Selected" = "Sélectionné"; diff --git a/Flowlight/Localization/it.lproj/Localizable.strings b/Flowlight/Localization/it.lproj/Localizable.strings index 628222be..8e1c5ad1 100644 --- a/Flowlight/Localization/it.lproj/Localizable.strings +++ b/Flowlight/Localization/it.lproj/Localizable.strings @@ -1083,12 +1083,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Dominio › IP, Destinazione › App › IP oppure IP › App"; "Choose a longer window or clear filters." = "Scegli un intervallo più ampio o azzera i filtri."; "Back" = "Indietro"; -"Return to the previous report scope" = "Torna all'ambito del report precedente"; -"Granularity" = "Granularità"; -"Earlier (⌘[)" = "Precedente (⌘[)"; -"Earlier" = "Precedente"; -"Later (⌘])" = "Successivo (⌘])"; -"Later" = "Successivo"; "Now" = "Adesso"; "Showing only:" = "Mostrati solo:"; "App: %@" = "App: %@"; @@ -1112,7 +1106,6 @@ "Peak year" = "Anno di punta"; "Bytes" = "Byte"; "Filtered traffic" = "Traffico filtrato"; -"Click a bar to zoom in" = "Fai clic su una barra per ingrandire"; "Use the Left and Right Arrow keys to inspect time buckets." = "Usa i tasti freccia sinistra e destra per esaminare gli intervalli di tempo."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Usa i tasti freccia sinistra e destra per esaminare gli intervalli di tempo, quindi premi Invio per ingrandire."; "1 new flow" = "1 nuovo flusso"; @@ -1799,7 +1792,6 @@ "Could not prepare managed-pack review demo: %@" = "Impossibile preparare la demo di revisione dei pacchetti gestiti: %@"; /* Visualizzazione traffico 0.16.0 */ -"Visualize" = "Visualizza"; "Map" = "Mappa"; "List" = "Elenco"; "App, domain, or IP" = "App, dominio o IP"; @@ -1875,3 +1867,29 @@ "%lld exact destinations" = "%lld destinazioni esatte"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ verso %@, %@ ricevuti, %@ inviati, %lld connessioni"; "Show domain family in Reports" = "Mostra la famiglia di domini in Rapporti"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 mese"; +"15 min" = "15 min"; +"1d" = "1 g"; +"1h" = "1 h"; +"1w" = "1 sett."; +"1y" = "1 anno"; +"6 mo" = "6 mesi"; +"6h" = "6 h"; +"All" = "Tutto"; +"All history" = "Tutta la cronologia"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Trascina la selezione per spostarti nella cronologia, trascina uno dei bordi per ridimensionarla oppure usa i tasti Freccia sinistra e Freccia destra."; +"Flowlight network activity" = "Attività di rete di Flowlight"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, riavvio necessario per completare l'aggiornamento del filtro"; +"Full history" = "Cronologia completa"; +"History" = "Cronologia"; +"History overview failed: %@" = "Impossibile mostrare la panoramica della cronologia: %@"; +"History range navigator" = "Navigatore dell'intervallo della cronologia"; +"Nearby" = "Vicino"; +"Nearby context" = "Contesto vicino"; +"Open the filter update notice in Flowlight" = "Apri l'avviso di aggiornamento del filtro in Flowlight"; +"Range" = "Intervallo"; +"Restart or reinstall the filter to finish the update" = "Riavvia o reinstalla il filtro per completare l'aggiornamento"; +"Return to the previous history scope" = "Torna all'ambito precedente della cronologia"; +"Selected" = "Selezionato"; diff --git a/Flowlight/Localization/ja.lproj/Localizable.strings b/Flowlight/Localization/ja.lproj/Localizable.strings index a35f2524..f8f12b9d 100644 --- a/Flowlight/Localization/ja.lproj/Localizable.strings +++ b/Flowlight/Localization/ja.lproj/Localizable.strings @@ -1083,12 +1083,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Domain › IP、Destination › App › IP、または IP › App"; "Choose a longer window or clear filters." = "より長い期間を選ぶか、絞り込みを解除してください。"; "Back" = "戻る"; -"Return to the previous report scope" = "前のレポート範囲に戻ります"; -"Granularity" = "粒度"; -"Earlier (⌘[)" = "前へ(⌘[)"; -"Earlier" = "前へ"; -"Later (⌘])" = "次へ(⌘])"; -"Later" = "次へ"; "Now" = "現在"; "Showing only:" = "絞り込み中:"; "App: %@" = "アプリ: %@"; @@ -1112,7 +1106,6 @@ "Peak year" = "ピークの年"; "Bytes" = "バイト"; "Filtered traffic" = "絞り込んだトラフィック"; -"Click a bar to zoom in" = "バーをクリックすると拡大します"; "Use the Left and Right Arrow keys to inspect time buckets." = "左右の矢印キーで時間区間を確認します。"; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "左右の矢印キーで時間区間を確認し、Return キーを押して拡大します。"; "1 new flow" = "新しいフロー 1 件"; @@ -1799,7 +1792,6 @@ "Could not prepare managed-pack review demo: %@" = "管理対象パックのレビューデモを準備できませんでした:%@"; /* 0.16.0 トラフィック可視化 */ -"Visualize" = "可視化"; "Map" = "マップ"; "List" = "リスト"; "App, domain, or IP" = "アプリ、ドメイン、またはIP"; @@ -1875,3 +1867,29 @@ "%lld exact destinations" = "%lld件の正確な宛先"; "%@ to %@, received %@, sent %@, %lld connections" = "%@から%@、受信%@、送信%@、%lld件の接続"; "Show domain family in Reports" = "ドメインファミリーをレポートに表示"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1か月"; +"15 min" = "15分"; +"1d" = "1日"; +"1h" = "1時間"; +"1w" = "1週間"; +"1y" = "1年"; +"6 mo" = "6か月"; +"6h" = "6時間"; +"All" = "すべて"; +"All history" = "全履歴"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "選択範囲をドラッグして履歴内を移動します。いずれかの端をドラッグしてサイズを変更するか、左右の矢印キーを使用します。"; +"Flowlight network activity" = "Flowlightのネットワークアクティビティ"; +"Flowlight, restart required to finish updating the filter" = "Flowlight、フィルタのアップデートを完了するには再起動が必要"; +"Full history" = "全履歴"; +"History" = "履歴"; +"History overview failed: %@" = "履歴の概要を読み込めませんでした:%@"; +"History range navigator" = "履歴範囲ナビゲータ"; +"Nearby" = "前後"; +"Nearby context" = "前後の履歴"; +"Open the filter update notice in Flowlight" = "Flowlightでフィルタのアップデート通知を開く"; +"Range" = "範囲"; +"Restart or reinstall the filter to finish the update" = "フィルタのアップデートを完了するには再起動または再インストールしてください"; +"Return to the previous history scope" = "前の履歴範囲に戻る"; +"Selected" = "選択中"; diff --git a/Flowlight/Localization/ko.lproj/Localizable.strings b/Flowlight/Localization/ko.lproj/Localizable.strings index 3c07fcb0..f7f347c4 100644 --- a/Flowlight/Localization/ko.lproj/Localizable.strings +++ b/Flowlight/Localization/ko.lproj/Localizable.strings @@ -1106,12 +1106,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "앱 › 도메인 › IP, 목적지 › 앱 › IP 또는 IP › 앱"; "Choose a longer window or clear filters." = "기간을 늘리거나 필터를 지우세요."; "Back" = "뒤로"; -"Return to the previous report scope" = "이전 보고서 범위로 돌아갑니다"; -"Granularity" = "단위"; -"Earlier (⌘[)" = "이전 (⌘[)"; -"Earlier" = "이전"; -"Later (⌘])" = "다음 (⌘])"; -"Later" = "다음"; "Now" = "지금"; "Showing only:" = "다음만 표시:"; "App: %@" = "앱: %@"; @@ -1135,7 +1129,6 @@ "Peak year" = "최대 연"; "Bytes" = "바이트"; "Filtered traffic" = "필터된 트래픽"; -"Click a bar to zoom in" = "막대를 클릭하면 확대됩니다"; "Use the Left and Right Arrow keys to inspect time buckets." = "왼쪽 및 오른쪽 화살표 키로 시간 구간을 살펴보세요."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "왼쪽 및 오른쪽 화살표 키로 시간 구간을 살펴본 다음 Return 키를 눌러 확대하세요."; "1 new flow" = "새 흐름 1개"; @@ -1798,7 +1791,6 @@ "Could not prepare managed-pack review demo: %@" = "관리형 팩 검토 데모를 준비할 수 없습니다: %@"; /* 0.16.0 트래픽 시각화 */ -"Visualize" = "시각화"; "Map" = "지도"; "List" = "목록"; "App, domain, or IP" = "앱, 도메인 또는 IP"; @@ -1874,3 +1866,29 @@ "%lld exact destinations" = "정확한 대상 %lld개"; "%@ to %@, received %@, sent %@, %lld connections" = "%@에서 %@, 수신 %@, 송신 %@, 연결 %lld개"; "Show domain family in Reports" = "보고서에서 도메인 계열 보기"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1개월"; +"15 min" = "15분"; +"1d" = "1일"; +"1h" = "1시간"; +"1w" = "1주"; +"1y" = "1년"; +"6 mo" = "6개월"; +"6h" = "6시간"; +"All" = "전체"; +"All history" = "전체 기록"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "선택 영역을 드래그하여 기록을 이동하고, 양쪽 가장자리를 드래그하여 크기를 조절하거나 왼쪽 및 오른쪽 화살표 키를 사용하세요."; +"Flowlight network activity" = "Flowlight 네트워크 활동"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, 필터 업데이트를 완료하려면 재시작 필요"; +"Full history" = "전체 기록"; +"History" = "기록"; +"History overview failed: %@" = "기록 개요를 불러오지 못했습니다: %@"; +"History range navigator" = "기록 범위 탐색기"; +"Nearby" = "인접 구간"; +"Nearby context" = "인접 기록"; +"Open the filter update notice in Flowlight" = "Flowlight에서 필터 업데이트 알림 열기"; +"Range" = "범위"; +"Restart or reinstall the filter to finish the update" = "업데이트를 완료하려면 필터를 재시작하거나 다시 설치하세요"; +"Return to the previous history scope" = "이전 기록 범위로 돌아가기"; +"Selected" = "선택됨"; diff --git a/Flowlight/Localization/pt-PT.lproj/Localizable.strings b/Flowlight/Localization/pt-PT.lproj/Localizable.strings index e215faac..0f96f82d 100644 --- a/Flowlight/Localization/pt-PT.lproj/Localizable.strings +++ b/Flowlight/Localization/pt-PT.lproj/Localizable.strings @@ -1106,12 +1106,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › Domínio › IP, Destino › App › IP ou IP › App"; "Choose a longer window or clear filters." = "Escolha um período mais longo ou limpe os filtros."; "Back" = "Voltar"; -"Return to the previous report scope" = "Voltar ao âmbito anterior do relatório"; -"Granularity" = "Granularidade"; -"Earlier (⌘[)" = "Recuar (⌘[)"; -"Earlier" = "Recuar"; -"Later (⌘])" = "Avançar (⌘])"; -"Later" = "Avançar"; "Now" = "Agora"; "Showing only:" = "A mostrar apenas:"; "App: %@" = "App: %@"; @@ -1135,7 +1129,6 @@ "Peak year" = "Ano de pico"; "Bytes" = "Bytes"; "Filtered traffic" = "Tráfego filtrado"; -"Click a bar to zoom in" = "Clique numa barra para ampliar"; "Use the Left and Right Arrow keys to inspect time buckets." = "Use as teclas de seta esquerda e direita para explorar os intervalos de tempo."; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "Use as teclas de seta esquerda e direita para explorar os intervalos de tempo e prima Return para ampliar."; "1 new flow" = "1 novo fluxo"; @@ -1798,7 +1791,6 @@ "Could not prepare managed-pack review demo: %@" = "Não foi possível preparar a demonstração de revisão de pacotes geridos: %@"; /* Visualização de tráfego 0.16.0 */ -"Visualize" = "Visualizar"; "Map" = "Mapa"; "List" = "Lista"; "App, domain, or IP" = "Aplicação, domínio ou IP"; @@ -1874,3 +1866,29 @@ "%lld exact destinations" = "%lld destinos exatos"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ para %@, recebeu %@, enviou %@, %lld ligações"; "Show domain family in Reports" = "Mostrar família de domínios em Relatórios"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 mês"; +"15 min" = "15 min"; +"1d" = "1 d"; +"1h" = "1 h"; +"1w" = "1 sem."; +"1y" = "1 ano"; +"6 mo" = "6 meses"; +"6h" = "6 h"; +"All" = "Tudo"; +"All history" = "Todo o histórico"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "Arraste a seleção para percorrer o histórico, arraste uma das extremidades para a redimensionar ou utilize as teclas de seta para a esquerda e para a direita."; +"Flowlight network activity" = "Atividade de rede do Flowlight"; +"Flowlight, restart required to finish updating the filter" = "Flowlight, é necessário reiniciar para concluir a atualização do filtro"; +"Full history" = "Histórico completo"; +"History" = "Histórico"; +"History overview failed: %@" = "Falha ao apresentar a visão geral do histórico: %@"; +"History range navigator" = "Navegador do intervalo do histórico"; +"Nearby" = "Próximo"; +"Nearby context" = "Contexto próximo"; +"Open the filter update notice in Flowlight" = "Abrir o aviso de atualização do filtro no Flowlight"; +"Range" = "Intervalo"; +"Restart or reinstall the filter to finish the update" = "Reinicie ou reinstale o filtro para concluir a atualização"; +"Return to the previous history scope" = "Voltar ao âmbito anterior do histórico"; +"Selected" = "Selecionado"; diff --git a/Flowlight/Localization/zh-Hans.lproj/Localizable.strings b/Flowlight/Localization/zh-Hans.lproj/Localizable.strings index 27c2bb77..9c9a9a5e 100644 --- a/Flowlight/Localization/zh-Hans.lproj/Localizable.strings +++ b/Flowlight/Localization/zh-Hans.lproj/Localizable.strings @@ -1106,12 +1106,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "应用 › 域名 › IP、目标 › 应用 › IP,或 IP › 应用"; "Choose a longer window or clear filters." = "请选择更长的时间窗口,或清除筛选条件。"; "Back" = "返回"; -"Return to the previous report scope" = "返回上一个报告范围"; -"Granularity" = "粒度"; -"Earlier (⌘[)" = "更早(⌘[)"; -"Earlier" = "更早"; -"Later (⌘])" = "更晚(⌘])"; -"Later" = "更晚"; "Now" = "现在"; "Showing only:" = "仅显示:"; "App: %@" = "应用:%@"; @@ -1135,7 +1129,6 @@ "Peak year" = "峰值年"; "Bytes" = "字节"; "Filtered traffic" = "已筛选的流量"; -"Click a bar to zoom in" = "点按柱状条可放大查看"; "Use the Left and Right Arrow keys to inspect time buckets." = "使用左右箭头键查看各时间段。"; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "使用左右箭头键查看各时间段,然后按 Return 键放大。"; "1 new flow" = "1 条新流"; @@ -1798,7 +1791,6 @@ "Could not prepare managed-pack review demo: %@" = "无法准备托管包审查演示:%@"; /* 0.16.0 流量可视化 */ -"Visualize" = "可视化"; "Map" = "地图"; "List" = "列表"; "App, domain, or IP" = "应用、域名或 IP"; @@ -1874,3 +1866,29 @@ "%lld exact destinations" = "%lld 个精确目标"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ 到 %@,接收 %@,发送 %@,%lld 个连接"; "Show domain family in Reports" = "在报告中显示域名族"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1个月"; +"15 min" = "15分钟"; +"1d" = "1天"; +"1h" = "1小时"; +"1w" = "1周"; +"1y" = "1年"; +"6 mo" = "6个月"; +"6h" = "6小时"; +"All" = "全部"; +"All history" = "所有历史记录"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "拖移所选范围以浏览历史记录,拖移任一边缘以调整范围大小,或使用左、右箭头键。"; +"Flowlight network activity" = "Flowlight 网络活动"; +"Flowlight, restart required to finish updating the filter" = "Flowlight,需要重新启动才能完成过滤器更新"; +"Full history" = "完整历史记录"; +"History" = "历史记录"; +"History overview failed: %@" = "无法显示历史记录概览:%@"; +"History range navigator" = "历史记录范围导航器"; +"Nearby" = "附近"; +"Nearby context" = "附近记录"; +"Open the filter update notice in Flowlight" = "在 Flowlight 中打开过滤器更新通知"; +"Range" = "范围"; +"Restart or reinstall the filter to finish the update" = "重新启动或重新安装过滤器以完成更新"; +"Return to the previous history scope" = "返回上一个历史记录范围"; +"Selected" = "已选择"; diff --git a/Flowlight/Localization/zh-Hant.lproj/Localizable.strings b/Flowlight/Localization/zh-Hant.lproj/Localizable.strings index ec26e6d5..a5b6c3a8 100644 --- a/Flowlight/Localization/zh-Hant.lproj/Localizable.strings +++ b/Flowlight/Localization/zh-Hant.lproj/Localizable.strings @@ -1106,12 +1106,6 @@ "App › Domain › IP, Destination › App › IP, or IP › App" = "App › 網域 › IP、目標 › App › IP,或 IP › App"; "Choose a longer window or clear filters." = "請選擇較長的時間範圍,或清除篩選條件。"; "Back" = "返回"; -"Return to the previous report scope" = "返回上一個報告範圍"; -"Granularity" = "精細度"; -"Earlier (⌘[)" = "較早(⌘[)"; -"Earlier" = "較早"; -"Later (⌘])" = "較晚(⌘])"; -"Later" = "較晚"; "Now" = "現在"; "Showing only:" = "僅顯示:"; "App: %@" = "App:%@"; @@ -1135,7 +1129,6 @@ "Peak year" = "尖峰年"; "Bytes" = "位元組"; "Filtered traffic" = "篩選後的流量"; -"Click a bar to zoom in" = "點按長條可放大檢視"; "Use the Left and Right Arrow keys to inspect time buckets." = "使用左右方向鍵檢視各時間區段。"; "Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in." = "使用左右方向鍵檢視各時間區段,然後按 Return 鍵放大。"; "1 new flow" = "1 條新資料流"; @@ -1798,7 +1791,6 @@ "Could not prepare managed-pack review demo: %@" = "無法準備受管理套件審查示範:%@"; /* 0.16.0 流量視覺化 */ -"Visualize" = "視覺化"; "Map" = "地圖"; "List" = "列表"; "App, domain, or IP" = "應用程式、網域或 IP"; @@ -1874,3 +1866,29 @@ "%lld exact destinations" = "%lld 個精確目的地"; "%@ to %@, received %@, sent %@, %lld connections" = "%@ 到 %@,接收 %@,傳送 %@,%lld 個連線"; "Show domain family in Reports" = "在報告中顯示網域族"; + +/* 0.17.0 History and Connections */ +"1 mo" = "1 個月"; +"15 min" = "15 分鐘"; +"1d" = "1 天"; +"1h" = "1 小時"; +"1w" = "1 週"; +"1y" = "1 年"; +"6 mo" = "6 個月"; +"6h" = "6 小時"; +"All" = "全部"; +"All history" = "所有歷史記錄"; +"Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys." = "拖移所選範圍以瀏覽歷史記錄,拖移任一邊緣以調整範圍大小,或使用向左鍵和向右鍵。"; +"Flowlight network activity" = "Flowlight 網路活動"; +"Flowlight, restart required to finish updating the filter" = "Flowlight,需要重新啟動才能完成過濾器更新"; +"Full history" = "完整歷史記錄"; +"History" = "歷史記錄"; +"History overview failed: %@" = "無法顯示歷史記錄概覽:%@"; +"History range navigator" = "歷史記錄範圍導覽器"; +"Nearby" = "附近"; +"Nearby context" = "附近記錄"; +"Open the filter update notice in Flowlight" = "在 Flowlight 中開啟過濾器更新通知"; +"Range" = "範圍"; +"Restart or reinstall the filter to finish the update" = "重新啟動或重新安裝過濾器以完成更新"; +"Return to the previous history scope" = "返回上一個歷史記錄範圍"; +"Selected" = "已選取"; diff --git a/Flowlight/Storage/TrafficDatabase.swift b/Flowlight/Storage/TrafficDatabase.swift index c367bac8..b7bc6f0d 100644 --- a/Flowlight/Storage/TrafficDatabase.swift +++ b/Flowlight/Storage/TrafficDatabase.swift @@ -1038,6 +1038,22 @@ final class TrafficDatabase: @unchecked Sendable { return ("(" + parts.joined(separator: " OR ") + ")", values) } + /// The complete retained traffic interval across every rollup tier. The tiers overlap by design; only their + /// extrema matter here, so the navigator can cover old history without materialising raw rows. + func trafficDateBounds() throws -> ClosedRange? { + let rows = try conn.query(""" + SELECT MIN(first_ts), MAX(last_ts) FROM ( + SELECT MIN(ts) AS first_ts, MAX(ts) AS last_ts FROM flows_1s + UNION ALL SELECT MIN(ts), MAX(ts) FROM agg_1m + UNION ALL SELECT MIN(ts), MAX(ts) FROM agg_1h + UNION ALL SELECT MIN(ts), MAX(ts) FROM agg_1d + ) + """, []) { row in (row.int(0), row.int(1)) } + guard let (first, last) = rows.first, last > 0 else { return nil } + return (Date(timeIntervalSince1970: TimeInterval(first)) + ... Date(timeIntervalSince1970: TimeInterval(max(first, last)))) + } + /// Time series at the requested granularity; empty buckets are filled with zeros. func series(_ granularity: Granularity, from: Date, to: Date, filter: TrafficFilter = .none, calendar: Calendar = .current) throws -> [SeriesPoint] { diff --git a/Flowlight/UI/ReportsView.swift b/Flowlight/UI/ReportsView.swift index e9b145f9..2575ff31 100644 --- a/Flowlight/UI/ReportsView.swift +++ b/Flowlight/UI/ReportsView.swift @@ -15,6 +15,139 @@ enum SeriesAnomalies { } } +enum HistoryRangePreset: String, CaseIterable, Identifiable { + case fifteenMinutes, oneHour, sixHours, oneDay, oneWeek, oneMonth, sixMonths, oneYear, all + + var id: String { rawValue } + + var title: String { + switch self { + case .fifteenMinutes: return L("15 min") + case .oneHour: return L("1h") + case .sixHours: return L("6h") + case .oneDay: return L("1d") + case .oneWeek: return L("1w") + case .oneMonth: return L("1 mo") + case .sixMonths: return L("6 mo") + case .oneYear: return L("1y") + case .all: return L("All") + } + } + + var duration: TimeInterval? { + switch self { + case .fifteenMinutes: return 15 * 60 + case .oneHour: return 3_600 + case .sixHours: return 6 * 3_600 + case .oneDay: return 86_400 + case .oneWeek: return 7 * 86_400 + case .oneMonth: return 30 * 86_400 + case .sixMonths: return 183 * 86_400 + case .oneYear: return 365 * 86_400 + case .all: return nil + } + } + + func window(endingAt end: Date, available: ClosedRange) -> HistoryWindow { + let requestedStart = duration.map { end.addingTimeInterval(-$0) } ?? available.lowerBound + return HistoryWindow( + start: max(available.lowerBound, requestedStart), + end: min(available.upperBound, end), + followNow: true + ).clamped(to: available) + } +} + +struct HistoryWindow: Equatable { + var start: Date + var end: Date + var followNow: Bool + + var duration: TimeInterval { max(0, end.timeIntervalSince(start)) } + + var granularity: Granularity { + switch duration { + case ..<(12 * 3_600): return .minute + case ..<(14 * 86_400): return .hour + case ..<(400 * 86_400): return .day + case ..<(3 * 365 * 86_400): return .week + default: return .month + } + } + + func clamped(to available: ClosedRange) -> HistoryWindow { + let availableDuration = available.upperBound.timeIntervalSince(available.lowerBound) + let width = min(max(60, duration), max(60, availableDuration)) + var nextEnd = min(max(end, available.lowerBound), available.upperBound) + var nextStart = nextEnd.addingTimeInterval(-width) + if nextStart < available.lowerBound { + nextStart = available.lowerBound + nextEnd = min(available.upperBound, nextStart.addingTimeInterval(width)) + } + return HistoryWindow(start: nextStart, end: nextEnd, + followNow: followNow && nextEnd >= available.upperBound) + } + + func panned(by offset: TimeInterval, within available: ClosedRange) -> HistoryWindow { + HistoryWindow(start: start.addingTimeInterval(offset), + end: end.addingTimeInterval(offset), + followNow: false).clamped(to: available) + } + + func returningToNow(within available: ClosedRange) -> HistoryWindow { + HistoryWindow(start: available.upperBound.addingTimeInterval(-duration), + end: available.upperBound, + followNow: true).clamped(to: available) + } + + func resized(start requestedStart: Date, end requestedEnd: Date, + within available: ClosedRange, minimumDuration: TimeInterval) -> HistoryWindow { + let lower = min(max(requestedStart, available.lowerBound), available.upperBound) + let upper = min(max(requestedEnd, available.lowerBound), available.upperBound) + let orderedStart = min(lower, upper) + let orderedEnd = max(lower, upper) + let width = max(minimumDuration, orderedEnd.timeIntervalSince(orderedStart)) + return HistoryWindow(start: orderedStart, + end: orderedStart.addingTimeInterval(width), + followNow: false).clamped(to: available) + } +} + +enum HistoryNavigatorDomain { + static func range(available: ClosedRange, selection: HistoryWindow) -> ClosedRange { + let total = max(60, available.upperBound.timeIntervalSince(available.lowerBound)) + let desired = min(total, max(6 * 3_600, max(60, selection.duration) * 24)) + guard desired < total * 0.9 else { return available } + + if selection.followNow { + return max(available.lowerBound, available.upperBound.addingTimeInterval(-desired))...available.upperBound + } + + let midpoint = selection.start.addingTimeInterval(selection.duration / 2) + var lower = midpoint.addingTimeInterval(-desired / 2) + var upper = lower.addingTimeInterval(desired) + if lower < available.lowerBound { + lower = available.lowerBound + upper = lower.addingTimeInterval(desired) + } + if upper > available.upperBound { + upper = available.upperBound + lower = upper.addingTimeInterval(-desired) + } + return lower...upper + } +} + +enum ReportChartHoverLayout { + static func cardX(lineX: CGFloat, chartWidth: CGFloat, + cardWidth: CGFloat = 260, gap: CGFloat = 8) -> CGFloat { + let proposed = lineX + gap + cardWidth <= chartWidth + ? lineX + gap + : lineX - gap - cardWidth + return min(max(0, proposed), max(0, chartWidth - cardWidth)) + } +} + enum ReportChartKeyboardDirection { case left, right } @@ -32,9 +165,11 @@ enum ReportChartKeyboardSelection { struct ReportNavigationState: Equatable { var granularity: Granularity + var startDate: Date? = nil var endDate: Date var followNow: Bool var filter: TrafficFilter + var preset: HistoryRangePreset? = nil } struct ReportNavigationHistory: Equatable { @@ -57,8 +192,13 @@ struct ReportsView: View { @EnvironmentObject var focus: FocusStore @AppStorage("reports.granularity") private var granularity: Granularity = .minute @AppStorage(AnomalySettings.Keys.sigma) private var sigma = 3.0 + @State private var startDate = Date().addingTimeInterval(-6 * 3_600) @State private var endDate = Date() @State private var followNow = true + @State private var selectedPreset: HistoryRangePreset? = .sixHours + @State private var availableRange = Date().addingTimeInterval(-5 * 365 * 86_400)...Date() + @State private var overview: [SeriesPoint] = [] + @State private var navigatorDetail: [SeriesPoint] = [] @State private var filter = TrafficFilter.none @State private var query = "" @State private var series: [SeriesPoint] = [] @@ -70,6 +210,9 @@ struct ReportsView: View { @State private var loading = false @State private var reloadID = UUID() @State private var hovered: SeriesPoint? + @State private var hoverLineX: CGFloat? + @State private var tooltipHovered = false + @State private var hoverDismissID = UUID() @State private var keyboardBucketDate: Date? @FocusState private var chartFocused: Bool /// Top apps per bucket, fetched on hover or keyboard selection and cached until the next reload. @@ -102,7 +245,10 @@ struct ReportsView: View { } } - private var startDate: Date { endDate.addingTimeInterval(-granularity.defaultWindow) } + private var window: HistoryWindow { + HistoryWindow(start: startDate, end: endDate, followNow: followNow) + } + /// From the series, not the table rows, so shares stay right even if the table is capped. private var grandTotal: Int64 { max(1, series.reduce(0) { $0 + $1.total }) } private var highlightedPoint: SeriesPoint? { @@ -123,7 +269,7 @@ struct ReportsView: View { // The Local Risk card made the old intrinsic report taller than the split view. Give every mode the real // detail viewport so the table takes the remaining height instead of pushing the report header under the bar. .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) - .navigationTitle(L("Reports")) + .navigationTitle(L("History")) .searchable(text: $query, placement: .toolbar, prompt: L("App, domain, IP, port")) .toolbar { ToolbarItem { @@ -147,10 +293,23 @@ struct ReportsView: View { .help(L("Export the current report as CSV")) } } - .task(id: ReloadKey(granularity: granularity, end: followNow ? nil : endDate, filter: scoped, version: monitor.dataVersion, - localRiskVersion: monitor.localRiskVersion, mode: lowerMode, metric: metric)) { + .task(id: ReloadKey(granularity: granularity, + duration: endDate.timeIntervalSince(startDate), + end: followNow ? nil : endDate, filter: scoped, + version: monitor.dataVersion, + localRiskVersion: monitor.localRiskVersion, + mode: lowerMode, metric: metric)) { await reload() } + .task(id: NavigatorKey(filter: scoped, version: monitor.dataVersion)) { + await reloadNavigator() + } + .task(id: NavigatorDetailKey(filter: scoped, version: monitor.dataVersion, + start: startDate, end: endDate, + availableStart: availableRange.lowerBound, + availableEnd: availableRange.upperBound)) { + await reloadNavigatorDetail() + } .task(id: granularity) { // Second-level data changes every second; other tiers refresh after each rollup. guard granularity == .second else { return } @@ -164,10 +323,12 @@ struct ReportsView: View { .onChange(of: query) { recompute() } .onChange(of: sigma) { flagged = SeriesAnomalies.flagged(series, sigma: sigma) } .onChange(of: nav.reportRequest, initial: true) { apply(nav.reportRequest) } - .onChange(of: ReportNavigationState(granularity: granularity, endDate: endDate, - followNow: followNow, filter: filter), initial: true) { _, scope in + .onChange(of: ReportNavigationState(granularity: granularity, startDate: startDate, + endDate: endDate, followNow: followNow, + filter: filter, preset: selectedPreset), initial: true) { _, scope in nav.updateCurrentReportScope(filter: scope.filter, granularity: scope.granularity, - endDate: scope.endDate, followNow: scope.followNow) + startDate: scope.startDate ?? startDate, endDate: scope.endDate, + followNow: scope.followNow, preset: scope.preset) } .task(id: highlightedPoint?.date) { await loadContributors(for: highlightedPoint) } } @@ -181,8 +342,23 @@ struct ReportsView: View { return scoped } + private struct NavigatorKey: Equatable { + var filter: TrafficFilter + var version: Int + } + + private struct NavigatorDetailKey: Equatable { + var filter: TrafficFilter + var version: Int + var start: Date + var end: Date + var availableStart: Date + var availableEnd: Date + } + private struct ReloadKey: Equatable { - var granularity: Granularity; var end: Date?; var filter: TrafficFilter; var version: Int; var localRiskVersion: Int + var granularity: Granularity; var duration: TimeInterval; var end: Date? + var filter: TrafficFilter; var version: Int; var localRiskVersion: Int var mode: LowerMode; var metric: InsightMetric } @@ -368,34 +544,29 @@ struct ReportsView: View { HStack(spacing: 8) { if !history.isEmpty { Button { goBack() } label: { Label(L("Back"), systemImage: "arrow.uturn.backward") } - .help(L("Return to the previous report scope")) + .help(L("Return to the previous history scope")) } - Picker(L("Granularity"), selection: Binding(get: { granularity }, set: { next in - guard next != granularity else { return } - pushHistory() - granularity = next - })) { - ForEach(Granularity.allCases) { Text($0.title).tag($0) } + Text(L("Range")) + .font(.callout) + .foregroundStyle(.secondary) + ForEach(HistoryRangePreset.allCases) { preset in + Button(preset.title) { apply(preset) } + .buttonStyle(.bordered) + .controlSize(.small) + .tint(selectedPreset == preset ? FL.accent : nil) + .accessibilityValue(selectedPreset == preset ? L("Selected") : "") } - .pickerStyle(.segmented) - .labelsHidden() - .frame(maxWidth: 520) - Spacer() + Spacer(minLength: 12) - Button { shift(-1) } label: { Image(systemName: "chevron.left") } - .help(L("Earlier (⌘[)")).accessibilityLabel(L("Earlier")) - .keyboardShortcut("[", modifiers: .command) Text(rangeLabel) .font(.callout.monospacedDigit()).foregroundStyle(.secondary) .lineLimit(1) .fixedSize() .help("\(startDate.formatted(date: .complete, time: .shortened)) – \(endDate.formatted(date: .complete, time: .shortened))") - Button { shift(1) } label: { Image(systemName: "chevron.right") } - .help(L("Later (⌘])")).accessibilityLabel(L("Later")) - .keyboardShortcut("]", modifiers: .command) - .disabled(followNow) - Button(L("Now")) { followNow = true; endDate = Date() }.disabled(followNow) + if !followNow { + Button(L("Now")) { returnToNow() } + } } } @@ -486,7 +657,9 @@ struct ReportsView: View { private var chart: some View { let highlighted = highlightedPoint return GroupBox { - Chart { + VStack(spacing: 8) { + ZStack(alignment: .topLeading) { + Chart { ForEach(series) { point in BarMark(x: .value(L("Time"), point.date, unit: granularity.calendarComponent), y: .value(L("Bytes"), point.bytesIn)) @@ -507,9 +680,6 @@ struct ReportsView: View { if let highlighted { RuleMark(x: .value(L("Time"), highlighted.date, unit: granularity.calendarComponent)) .foregroundStyle(.secondary.opacity(0.25)) - .annotation(position: .top, spacing: 0, overflowResolution: .init(x: .fit(to: .chart), y: .fit(to: .chart))) { - tooltip(for: highlighted) - } } } .chartForegroundStyleScale([L("Received"): TrafficColors.inbound, L("Sent"): TrafficColors.outbound]) @@ -524,16 +694,20 @@ struct ReportsView: View { Rectangle().fill(.clear).contentShape(Rectangle()) .onContinuousHover { phase in switch phase { - case .active(let location): hovered = point(at: location, proxy: proxy, geo: geo) - case .ended: hovered = nil + case .active(let location): + hoverDismissID = UUID() + tooltipHovered = false + hovered = point(at: location, proxy: proxy, geo: geo) + hoverLineX = hovered.flatMap { lineX(for: $0, proxy: proxy, geo: geo) } + ?? location.x + case .ended: + scheduleHoverDismissal() } } - .onTapGesture { location in - if let point = point(at: location, proxy: proxy, geo: geo) { drill(into: point) } - } } } .focusable() + .focusEffectDisabled() .focused($chartFocused) .onChange(of: chartFocused) { _, focused in guard focused else { return } @@ -555,6 +729,7 @@ struct ReportsView: View { default: return } hovered = nil + hoverLineX = nil keyboardBucketDate = ReportChartKeyboardSelection.move( from: keyboardBucketDate, direction: keyboardDirection, @@ -571,15 +746,35 @@ struct ReportsView: View { .accessibilityHint(granularity.finer == nil ? L("Use the Left and Right Arrow keys to inspect time buckets.") : L("Use the Left and Right Arrow keys to inspect time buckets, then press Return to zoom in.")) - .frame(height: 220) - .overlay { if loading && series.isEmpty { ProgressView() } } + .frame(height: 300) + .overlay { if loading && series.isEmpty { ProgressView() } } + if let highlighted { + GeometryReader { geometry in + tooltip(for: highlighted) + .offset(x: ReportChartHoverLayout.cardX( + lineX: hoverLineX ?? 0, + chartWidth: geometry.size.width + ), y: 8) + .onHover { inside in + tooltipHovered = inside + if inside { + hoverDismissID = UUID() + } else { + scheduleHoverDismissal() + } + } + } + } + } + .frame(height: 300) + HistoryNavigator(points: overview, contextPoints: navigatorDetail, + available: availableRange, selection: window, onCommit: apply) + .frame(height: 72) + } } label: { HStack { Text(filter.isEmpty ? L("All traffic") : L("Filtered traffic")) Spacer() - if granularity.finer != nil { - Text(L("Click a bar to zoom in")).font(.caption).foregroundStyle(.secondary) - } } } } @@ -605,17 +800,23 @@ struct ReportsView: View { } if let apps, !apps.isEmpty, point.total > 0 { Divider().padding(.vertical, 2) - ForEach(Array(apps.enumerated()), id: \.element.id) { index, app in - contributorRow(app, share: Double(app.counters.total) / Double(point.total), - emphasized: isAbnormal && index == 0) - } - if let bucket, bucket.remainingApps > 0 { - let count = bucket.remainingApps.formatted() - let share = ShareFormat.string(Double(bucket.remaining.total) / Double(point.total)) - Text(bucket.remainingApps == 1 ? L("+ %@ more app · %@", count, share) - : L("+ %@ more apps · %@", count, share)) - .font(.caption2).foregroundStyle(.secondary).padding(.leading, 26) + ScrollView(.vertical) { + LazyVStack(alignment: .leading, spacing: 2) { + ForEach(Array(apps.enumerated()), id: \.element.id) { index, app in + contributorRow(app, share: Double(app.counters.total) / Double(point.total), + emphasized: isAbnormal && index == 0) + } + if let bucket, bucket.remainingApps > 0 { + let count = bucket.remainingApps.formatted() + let share = ShareFormat.string(Double(bucket.remaining.total) / Double(point.total)) + Text(bucket.remainingApps == 1 ? L("+ %@ more app · %@", count, share) + : L("+ %@ more apps · %@", count, share)) + .font(.caption2).foregroundStyle(.secondary).padding(.leading, 26) + } + } } + .frame(height: min(220, max(52, CGFloat(apps.count) * 52))) + .scrollIndicators(.visible) } else if point.total > 0 { ProgressView().controlSize(.mini) } @@ -660,7 +861,9 @@ struct ReportsView: View { guard !Task.isCancelled else { return } let end = Calendar.current.date(byAdding: granularity.calendarComponent, value: 1, to: point.date) ?? point.date let (g, f) = (granularity, scoped) - if let apps = try? await monitor.read({ try $0.contributors(g, from: point.date, to: end, filter: f) }), + if let apps = try? await monitor.read({ + try $0.contributors(g, from: point.date, to: end, filter: f, limit: 50) + }), g == granularity, f == scoped { contributors[point.date] = apps } @@ -794,42 +997,76 @@ struct ReportsView: View { history.clear() filter = request.filter if let g = request.granularity { granularity = g } - if let end = request.end, end < Date() { endDate = end; followNow = false } else { followNow = true; endDate = Date() } + let requestedEnd = request.end.map { min($0, Date()) } ?? Date() + let requestedDuration = request.duration ?? granularity.defaultWindow + endDate = requestedEnd + startDate = request.start ?? requestedEnd.addingTimeInterval(-requestedDuration) + followNow = request.end == nil + selectedPreset = request.preset nav.reportRequest = nil } - private func shift(_ direction: Double) { - let base = followNow ? Date() : endDate - let next = base.addingTimeInterval(direction * granularity.defaultWindow) - if next >= Date() { followNow = true; endDate = Date() } else { followNow = false; endDate = next } + private func returnToNow() { + pushHistory() + let preset = selectedPreset + apply(window.returningToNow(within: availableRange)) + selectedPreset = preset + } + + private func apply(_ preset: HistoryRangePreset) { + pushHistory() + let next = preset.window(endingAt: Date(), available: availableRange) + selectedPreset = preset + startDate = next.start + endDate = next.end + followNow = next.followNow + granularity = next.granularity + hovered = nil + } + + private func apply(_ next: HistoryWindow) { + let clamped = next.clamped(to: availableRange) + selectedPreset = nil + startDate = clamped.start + endDate = clamped.end + followNow = clamped.followNow + granularity = clamped.granularity + hovered = nil } private func drill(into point: SeriesPoint) { - guard let finer = granularity.finer else { return } + guard point.total > 0, let finer = granularity.finer else { return } pushHistory() let bucketEnd = Calendar.current.date(byAdding: granularity.calendarComponent, value: 1, to: point.date) ?? point.date // Show the finer window ending at the bucket's end (or its own natural span, whichever is shorter). let end = min(bucketEnd, point.date.addingTimeInterval(finer.defaultWindow)) granularity = finer - if end >= Date() { followNow = true; endDate = Date() } else { followNow = false; endDate = end } + endDate = min(end, Date()) + startDate = max(point.date, endDate.addingTimeInterval(-finer.defaultWindow)) + followNow = endDate >= Date() + selectedPreset = nil hovered = nil } private func pushHistory() { history.push(ReportNavigationState( granularity: granularity, + startDate: startDate, endDate: endDate, followNow: followNow, - filter: filter + filter: filter, + preset: selectedPreset )) } private func goBack() { guard let scope = history.pop() else { return } granularity = scope.granularity + startDate = scope.startDate ?? scope.endDate.addingTimeInterval(-scope.granularity.defaultWindow) endDate = scope.endDate followNow = scope.followNow filter = scope.filter + selectedPreset = scope.preset } private func applyFilter(_ node: TrafficNode) { @@ -871,6 +1108,23 @@ struct ReportsView: View { return series.last { $0.date <= date } ?? series.first } + private func lineX(for point: SeriesPoint, proxy: ChartProxy, geo: GeometryProxy) -> CGFloat? { + guard let plot = proxy.plotFrame, + let x = proxy.position(forX: point.date) else { return nil } + return geo[plot].origin.x + x + } + + private func scheduleHoverDismissal() { + let requestID = UUID() + hoverDismissID = requestID + Task { @MainActor in + try? await Task.sleep(for: .milliseconds(180)) + guard hoverDismissID == requestID, !tooltipHovered else { return } + hovered = nil + hoverLineX = nil + } + } + /// Compact window label: times only when the window is within today, dates for longer spans. private var rangeLabel: String { let cal = Calendar.current @@ -931,8 +1185,75 @@ struct ReportsView: View { ).displayed } + private func reloadNavigator() async { + let activeFilter = scoped + do { + let loaded = try await monitor.read { db -> (ClosedRange, [SeriesPoint]) in + try db.readSnapshot { + let now = Date() + let retained = try db.trafficDateBounds() + ?? now.addingTimeInterval(-6 * 3_600)...now + let bounds = retained.lowerBound...max(retained.upperBound, now) + let resolution = HistoryWindow( + start: bounds.lowerBound, + end: bounds.upperBound, + followNow: true + ).granularity + return (bounds, try db.series(resolution, from: bounds.lowerBound, + to: bounds.upperBound, filter: activeFilter)) + } + } + guard !Task.isCancelled else { return } + availableRange = loaded.0 + overview = loaded.1 + let next = window.clamped(to: loaded.0) + startDate = next.start + endDate = next.end + followNow = next.followNow + } catch { + guard !Task.isCancelled else { return } + monitor.lastError = L("History overview failed: %@", error.localizedDescription) + } + } + + private func reloadNavigatorDetail() async { + let bounds = availableRange + let selected = window.clamped(to: bounds) + let domain = HistoryNavigatorDomain.range(available: bounds, selection: selected) + guard domain != bounds else { + navigatorDetail = [] + return + } + + let activeFilter = scoped + let resolution = HistoryWindow(start: domain.lowerBound, end: domain.upperBound, + followNow: selected.followNow).granularity + do { + let loaded = try await monitor.read { db in + try db.readSnapshot { + try db.series(resolution, from: domain.lowerBound, + to: domain.upperBound, filter: activeFilter) + } + } + guard !Task.isCancelled, + activeFilter == scoped, + domain == HistoryNavigatorDomain.range( + available: availableRange, + selection: window.clamped(to: availableRange) + ) else { return } + navigatorDetail = loaded + } catch { + guard !Task.isCancelled else { return } + monitor.lastError = L("History overview failed: %@", error.localizedDescription) + } + } + private func reload() async { - if followNow { endDate = Date() } + if followNow { + let width = max(60, endDate.timeIntervalSince(startDate)) + endDate = Date() + startDate = endDate.addingTimeInterval(-width) + } let requestID = UUID() reloadID = requestID loading = true @@ -1011,6 +1332,159 @@ struct ReportsView: View { } } +private struct HistoryNavigator: View { + enum DragMode { case start, pan, end } + + var points: [SeriesPoint] + var contextPoints: [SeriesPoint] + var available: ClosedRange + var selection: HistoryWindow + var onCommit: (HistoryWindow) -> Void + + @State private var draft: HistoryWindow? + @State private var dragMode: DragMode? + @State private var dragOrigin: HistoryWindow? + @State private var showsFullHistory = false + + private var visible: HistoryWindow { draft ?? selection } + private var nearbyDomain: ClosedRange { + HistoryNavigatorDomain.range(available: available, selection: dragOrigin ?? visible) + } + private var usesNearbyDomain: Bool { nearbyDomain != available } + private var domain: ClosedRange { showsFullHistory ? available : nearbyDomain } + private var domainDuration: TimeInterval { + max(1, domain.upperBound.timeIntervalSince(domain.lowerBound)) + } + private var plottedPoints: [SeriesPoint] { + let source = showsFullHistory || contextPoints.isEmpty ? points : contextPoints + return source.filter { domain.contains($0.date) } + } + + var body: some View { + VStack(spacing: 4) { + HStack(spacing: 8) { + Text(showsFullHistory || !usesNearbyDomain ? L("Full history") : L("Nearby context")) + .font(.caption2) + .foregroundStyle(.secondary) + Spacer() + if usesNearbyDomain { + Button(showsFullHistory ? L("Nearby") : L("All history")) { + showsFullHistory.toggle() + } + .buttonStyle(.borderless) + .controlSize(.mini) + .font(.caption2) + } + } + .padding(.horizontal, 2) + + GeometryReader { geometry in + Canvas { context, size in + drawOverview(context: &context, size: size) + drawSelection(context: &context, size: size) + } + .contentShape(Rectangle()) + .gesture(dragGesture(width: geometry.size.width)) + .focusable() + .focusEffectDisabled() + .onMoveCommand { direction in + let step = max(60, visible.duration * 0.1) + switch direction { + case .left: onCommit(visible.panned(by: -step, within: available)) + case .right: onCommit(visible.panned(by: step, within: available)) + default: break + } + } + .accessibilityElement(children: .ignore) + .accessibilityLabel(L("History range navigator")) + .accessibilityValue("\(visible.start.formatted(date: .abbreviated, time: .shortened)) – \(visible.end.formatted(date: .abbreviated, time: .shortened))") + .accessibilityHint(L("Drag the selection to move through history, drag either edge to resize it, or use the Left and Right Arrow keys.")) + .accessibilityAdjustableAction { direction in + let step = max(60, visible.duration * 0.1) + switch direction { + case .increment: onCommit(visible.panned(by: step, within: available)) + case .decrement: onCommit(visible.panned(by: -step, within: available)) + @unknown default: break + } + } + } + } + } + + private func x(for date: Date, width: CGFloat) -> CGFloat { + let offset = date.timeIntervalSince(domain.lowerBound) + return width * CGFloat(min(1, max(0, offset / domainDuration))) + } + + private func drawOverview(context: inout GraphicsContext, size: CGSize) { + let surface = Path(CGRect(origin: .zero, size: size)) + context.fill(surface, with: .color(FL.surface2)) + guard !plottedPoints.isEmpty, + let peak = plottedPoints.map(\.total).max(), peak > 0 else { return } + var path = Path() + for (index, point) in plottedPoints.enumerated() { + let px = x(for: point.date, width: size.width) + let ratio = CGFloat(Double(point.total) / Double(peak)) + let py = size.height - 6 - ratio * max(1, size.height - 12) + if index == 0 { path.move(to: CGPoint(x: px, y: py)) } + else { path.addLine(to: CGPoint(x: px, y: py)) } + } + context.stroke(path, with: .color(FL.accent.opacity(0.7)), lineWidth: 1.5) + } + + private func brushBounds(width: CGFloat) -> (start: CGFloat, end: CGFloat) { + let actualStart = x(for: visible.start, width: width) + let actualEnd = x(for: visible.end, width: width) + let minimumWidth = min(32, width) + guard actualEnd - actualStart < minimumWidth else { return (actualStart, actualEnd) } + + let proposedStart = (actualStart + actualEnd - minimumWidth) / 2 + let start = min(max(0, proposedStart), max(0, width - minimumWidth)) + return (start, start + minimumWidth) + } + + private func drawSelection(context: inout GraphicsContext, size: CGSize) { + let (startX, endX) = brushBounds(width: size.width) + let rect = CGRect(x: startX, y: 1, width: endX - startX, height: max(2, size.height - 2)) + context.fill(Path(rect), with: .color(FL.accent.opacity(0.14))) + context.stroke(Path(rect), with: .color(FL.accent.opacity(0.8)), lineWidth: 1) + for handleX in [startX, endX] { + let handle = CGRect(x: handleX - 2, y: size.height / 2 - 10, width: 4, height: 20) + context.fill(Path(roundedRect: handle, cornerRadius: 2), with: .color(FL.accent)) + } + } + + private func dragGesture(width: CGFloat) -> some Gesture { + DragGesture(minimumDistance: 0) + .onChanged { value in + if dragMode == nil { + let (startX, endX) = brushBounds(width: width) + dragMode = abs(value.startLocation.x - startX) <= 14 ? .start + : abs(value.startLocation.x - endX) <= 14 ? .end : .pan + dragOrigin = visible + } + guard let dragMode, let origin = dragOrigin else { return } + let delta = domainDuration * Double(value.translation.width / max(1, width)) + switch dragMode { + case .start: + draft = origin.resized(start: origin.start.addingTimeInterval(delta), end: origin.end, + within: available, minimumDuration: 60) + case .end: + draft = origin.resized(start: origin.start, end: origin.end.addingTimeInterval(delta), + within: available, minimumDuration: 60) + case .pan: + draft = origin.panned(by: delta, within: available) + } + } + .onEnded { _ in + if let draft { onCommit(draft) } + self.draft = nil + dragOrigin = nil + dragMode = nil + } + } +} + struct ShareBar: View { var fraction: Double diff --git a/Flowlight/UI/SettingsView.swift b/Flowlight/UI/SettingsView.swift index f6235558..816ce4c2 100644 --- a/Flowlight/UI/SettingsView.swift +++ b/Flowlight/UI/SettingsView.swift @@ -140,12 +140,25 @@ struct SettingsView: View { struct MenuBarContent: View { @AppStorage(AnomalySettings.Keys.backgroundOnly) private var backgroundOnly = false @EnvironmentObject var monitor: TrafficMonitor + @EnvironmentObject var extensionManager: ExtensionManager @EnvironmentObject var nav: AppNavigation @EnvironmentObject var updater: UpdateChecker @EnvironmentObject var focus: FocusStore @Environment(\.openWindow) private var openWindow var body: some View { + if extensionManager.state.showsMenuBarNotice { + Button { + nav.show(.capture) + openWindow(id: "main") + NSApp.activate() + } label: { + Label(L("Restart or reinstall the filter to finish the update"), + systemImage: "exclamationmark.triangle.fill") + } + .help(L("Open the filter update notice in Flowlight")) + Divider() + } Text("↓ \(ByteFormat.rate(monitor.currentIn)) ↑ \(ByteFormat.rate(monitor.currentOut))") if focus.isActive { Text(L("Focus: %@", focus.summary)) } Divider() diff --git a/Flowlight/UI/VisualizeView.swift b/Flowlight/UI/VisualizeView.swift index 946026ed..19a19e6d 100644 --- a/Flowlight/UI/VisualizeView.swift +++ b/Flowlight/UI/VisualizeView.swift @@ -210,6 +210,20 @@ enum VisualizeActionScope { } } +enum ConnectionsRenderPolicy { + static func showsLoading(isLoading: Bool, hasSnapshot _: Bool) -> Bool { + isLoading + } + + static func canCommit(requestID: UUID, currentID: UUID, cancelled: Bool) -> Bool { + !cancelled && requestID == currentID + } + + static func canRebuild(loadedID: UUID?, currentLoadID: UUID) -> Bool { + loadedID == currentLoadID + } +} + struct VisualizeView: View { enum Mode: String, CaseIterable, Identifiable { case traffic, ai @@ -247,8 +261,10 @@ struct VisualizeView: View { @State private var selectedSources: Set = [] @State private var selectedDestinations: Set = [] @State private var query = "" - @State private var loading = false + @State private var loading = true @State private var loadID = UUID() + @State private var loadedID: UUID? + @State private var rebuildID = UUID() private var endDate: Date { Date() } private var startDate: Date { endDate.addingTimeInterval(-granularity.defaultWindow) } @@ -284,8 +300,11 @@ struct VisualizeView: View { toolbar endpointToolbar Divider() - if completeSnapshot.nodes.isEmpty, loading { - ProgressView(L("Loading visualization…")) + if ConnectionsRenderPolicy.showsLoading( + isLoading: loading, + hasSnapshot: !completeSnapshot.nodes.isEmpty + ) { + TrafficGraphLoadingView(reduceMotion: reduceMotion) .frame(maxWidth: .infinity, maxHeight: .infinity) } else if completeSnapshot.nodes.isEmpty { emptyState @@ -296,7 +315,7 @@ struct VisualizeView: View { } } .background(FL.ground) - .navigationTitle(L("Visualize")) + .navigationTitle(L("Connections")) .searchable(text: $query, placement: .toolbar, prompt: L("App, domain, or IP")) .task { workspaceStore.refresh(gatewaysOnly: true) } .task(id: LoadKey(mode: mode, granularity: granularity, focus: focus.scope, @@ -309,16 +328,13 @@ struct VisualizeView: View { if !Task.isCancelled { await reload() } } } - .task(id: RebuildKey(loadID: loadID, query: query, mode: mode, + .task(id: RebuildKey(loadID: rebuildID, query: query, mode: mode, focus: focus.scope, gatewayVersion: gatewayVersion, selectedSources: selectedSources, selectedDestinations: selectedDestinations, expandedGroupIDs: expandedGroupIDs, expandedEdgeGroupIDs: expandedEdgeGroupIDs)) { await rebuild() } .onChange(of: mode) { _, _ in - rows = [] - completeSnapshot = .empty - mapSnapshot = .empty expandedGroupIDs = [] expandedEdgeGroupIDs = [] listVisibleCount = TrafficGraphListPager.pageSize @@ -328,12 +344,12 @@ struct VisualizeView: View { destinationOptions = [] selectedSources = [] selectedDestinations = [] - loadID = UUID() } .onChange(of: granularity) { _, _ in listVisibleCount = TrafficGraphListPager.pageSize } .onChange(of: focus.scope) { _, _ in + beginRebuild() listVisibleCount = TrafficGraphListPager.pageSize expandedGroupIDs = [] expandedEdgeGroupIDs = [] @@ -341,6 +357,7 @@ struct VisualizeView: View { selectedEdge = nil } .onChange(of: query) { previous, current in + beginRebuild() listVisibleCount = TrafficGraphListPager.pageSize expandedGroupIDs = [] expandedEdgeGroupIDs = [] @@ -404,12 +421,12 @@ struct VisualizeView: View { } .buttonStyle(.borderless) } - Picker(L("Mode"), selection: $mode) { + Picker(L("Mode"), selection: Binding(get: { mode }, set: changeMode)) { ForEach(Mode.allCases) { Label($0.title, systemImage: $0.icon).tag($0) } } .pickerStyle(.segmented) .frame(width: 220) - Picker(L("Period"), selection: $granularity) { + Picker(L("Period"), selection: Binding(get: { granularity }, set: changeGranularity)) { ForEach(Granularity.allCases) { Text($0.title).tag($0) } } .labelsHidden() @@ -526,11 +543,41 @@ struct VisualizeView: View { .frame(maxWidth: .infinity, maxHeight: .infinity) } + private func changeMode(_ next: Mode) { + guard next != mode else { return } + beginDataTransition() + mode = next + } + + private func changeGranularity(_ next: Granularity) { + guard next != granularity else { return } + beginDataTransition() + granularity = next + } + + private func beginDataTransition() { + loading = true + loadID = UUID() + loadedID = nil + rebuildID = UUID() + rows = [] + blockedAttempts = [] + completeSnapshot = .empty + mapSnapshot = .empty + } + + private func beginRebuild() { + loading = true + rebuildID = UUID() + completeSnapshot = .empty + mapSnapshot = .empty + } + @MainActor private func reload() async { let requestID = UUID() loadID = requestID - loading = true + if completeSnapshot.nodes.isEmpty { loading = true } let granularity = granularity let mode = mode let to = Date() @@ -547,23 +594,38 @@ struct VisualizeView: View { let attempts = try database.blockedAttempts(from: from, to: to) return (rows, attempts) } - guard !Task.isCancelled, loadID == requestID else { return } + guard ConnectionsRenderPolicy.canCommit( + requestID: requestID, + currentID: loadID, + cancelled: Task.isCancelled + ) else { return } rows = loaded.0 blockedAttempts = loaded.1 - loading = false - loadID = UUID() + loadedID = requestID + rebuildID = UUID() } catch { - guard !Task.isCancelled, loadID == requestID else { return } + guard ConnectionsRenderPolicy.canCommit( + requestID: requestID, + currentID: loadID, + cancelled: Task.isCancelled + ) else { return } rows = [] blockedAttempts = [] + loadedID = requestID + completeSnapshot = .empty + mapSnapshot = .empty loading = false - loadID = UUID() monitor.lastError = error.localizedDescription } } @MainActor private func rebuild() async { + guard ConnectionsRenderPolicy.canRebuild( + loadedID: loadedID, + currentLoadID: loadID + ) else { return } + let requestID = rebuildID let source = rows let enforcement = blockedAttempts let gateways = agentGateways @@ -627,7 +689,11 @@ struct VisualizeView: View { ) } }.value - guard !Task.isCancelled else { return } + guard ConnectionsRenderPolicy.canCommit( + requestID: requestID, + currentID: rebuildID, + cancelled: Task.isCancelled + ) else { return } let validSources = VisualizeSelectionPolicy.validEndpointSelection( endpointQuery.sources, options: built.sourceOptions @@ -656,9 +722,11 @@ struct VisualizeView: View { current: listVisibleCount, in: built.complete ) + loading = false } private func resetEndpointContext() { + beginRebuild() listVisibleCount = TrafficGraphListPager.pageSize expandedGroupIDs = [] expandedEdgeGroupIDs = [] diff --git a/FlowlightTests/DatabaseTests.swift b/FlowlightTests/DatabaseTests.swift index 0aab81d1..c9bd93f3 100644 --- a/FlowlightTests/DatabaseTests.swift +++ b/FlowlightTests/DatabaseTests.swift @@ -44,6 +44,27 @@ final class DatabaseTests: XCTestCase { FlowKey(pid: 10, bundleID: app, appName: app, appPath: "", remoteIP: ip, domain: domain, port: port, transport: .tcp, appProtocol: "https") } + func testTrafficDateBoundsAreNilWhenEmptyAndCoverRetainedTraffic() throws { + XCTAssertNil(try db.trafficDateBounds()) + + let first: Int64 = 1_700_000_000 + let last = first + 90 + try db.insert([ + TrafficBatch(timestamp: first, records: [ + TrafficRecord(key: key("first", "first.example"), + counters: FlowCounters(bytesIn: 10, flows: 1)) + ]), + TrafficBatch(timestamp: last, records: [ + TrafficRecord(key: key("last", "last.example"), + counters: FlowCounters(bytesOut: 20, flows: 1)) + ]) + ]) + + let bounds = try XCTUnwrap(db.trafficDateBounds()) + XCTAssertEqual(bounds.lowerBound, Date(timeIntervalSince1970: TimeInterval(first))) + XCTAssertEqual(bounds.upperBound, Date(timeIntervalSince1970: TimeInterval(last))) + } + func testVersionedNameRepairMergesCollidingIdentityState() throws { let timestamp: Int64 = 1_700_000_000 var versioned = key("2.1.260", "api.example.com") diff --git a/FlowlightTests/ExtensionRebootTests.swift b/FlowlightTests/ExtensionRebootTests.swift index f8ae039b..7346cb33 100644 --- a/FlowlightTests/ExtensionRebootTests.swift +++ b/FlowlightTests/ExtensionRebootTests.swift @@ -33,6 +33,13 @@ final class ExtensionRebootTests: XCTestCase { XCTAssertFalse(check(installed: ["0.9.5"], awaiting: [], app: "0.9.5").needsRestart) } + func testOnlyTheAuthoritativeRebootStateShowsTheMenuBarNotice() { + XCTAssertTrue(ExtensionManager.State.needsReboot.showsMenuBarNotice) + XCTAssertFalse(ExtensionManager.State.enabled.showsMenuBarNotice) + XCTAssertFalse(ExtensionManager.State.installing.showsMenuBarNotice) + XCTAssertFalse(ExtensionManager.State.failed("offline").showsMenuBarNotice) + } + /// The 0.10.0 upgrade, verbatim from `systemextensionsctl list`: the new build enabled, three previous ones /// held for removal on reboot. It must be a restart problem, not a stale one — and "0.10.0" must sort after /// "0.9.x" so the enabled build is recognised as the current one. diff --git a/FlowlightTests/InsightsTests.swift b/FlowlightTests/InsightsTests.swift index 14b7555a..5d8eba91 100644 --- a/FlowlightTests/InsightsTests.swift +++ b/FlowlightTests/InsightsTests.swift @@ -155,6 +155,12 @@ final class InsightsTests: XCTestCase { XCTAssertNil(InsightEntity.other.narrowing(.none)) } + func testReportHoverCardTracksTheCursorLineAndFlipsAtTheEdge() { + XCTAssertEqual(ReportChartHoverLayout.cardX(lineX: 100, chartWidth: 1_000), 108) + XCTAssertEqual(ReportChartHoverLayout.cardX(lineX: 900, chartWidth: 1_000), 632) + XCTAssertEqual(ReportChartHoverLayout.cardX(lineX: 10, chartWidth: 200), 0) + } + func testReportChartKeyboardSelectionMovesAcrossBuckets() { let dates = [10.0, 20.0, 30.0].map(Date.init(timeIntervalSince1970:)) @@ -165,6 +171,58 @@ final class InsightsTests: XCTestCase { XCTAssertNil(ReportChartKeyboardSelection.move(from: nil, direction: .right, dates: [])) } + func testHistoryPresetUsesAnIndependentVisibleWindowAndResolution() { + let end = Date(timeIntervalSince1970: 2_000_000) + let available = Date(timeIntervalSince1970: 0)...end + let window = HistoryRangePreset.oneWeek.window(endingAt: end, available: available) + + XCTAssertEqual(window.duration, 7 * 86_400, accuracy: 0.5) + XCTAssertEqual(window.granularity, .hour) + XCTAssertTrue(window.followNow) + + let minuteWindow = HistoryRangePreset.fifteenMinutes.window(endingAt: end, available: available) + XCTAssertEqual(minuteWindow.duration, 15 * 60, accuracy: 0.5) + XCTAssertEqual(minuteWindow.granularity, .minute) + } + + func testHistoryNavigatorMagnifiesShortRangesWithoutLosingTheFullBounds() { + let end = Date(timeIntervalSince1970: 30 * 86_400) + let available = Date(timeIntervalSince1970: 0)...end + let selection = HistoryWindow(start: end.addingTimeInterval(-15 * 60), + end: end, + followNow: true) + + let nearby = HistoryNavigatorDomain.range(available: available, selection: selection) + XCTAssertEqual(nearby.upperBound, available.upperBound) + XCTAssertEqual(nearby.upperBound.timeIntervalSince(nearby.lowerBound), 6 * 3_600, accuracy: 0.5) + XCTAssertTrue(nearby.contains(selection.start)) + XCTAssertTrue(nearby.contains(selection.end)) + } + + func testHistoryWindowClampsPanAndResizeToAvailableEvidence() { + let available = Date(timeIntervalSince1970: 100)...Date(timeIntervalSince1970: 1_100) + let window = HistoryWindow(start: Date(timeIntervalSince1970: 300), + end: Date(timeIntervalSince1970: 500), + followNow: false) + + let earlier = window.panned(by: -500, within: available) + XCTAssertEqual(earlier.start, available.lowerBound) + XCTAssertEqual(earlier.end.timeIntervalSince(earlier.start), 200, accuracy: 0.5) + + let resized = window.resized(start: Date(timeIntervalSince1970: 450), + end: Date(timeIntervalSince1970: 451), + within: available, + minimumDuration: 60) + XCTAssertEqual(resized.duration, 60, accuracy: 0.5) + XCTAssertGreaterThanOrEqual(resized.start, available.lowerBound) + XCTAssertLessThanOrEqual(resized.end, available.upperBound) + + let returnedToNow = window.returningToNow(within: available) + XCTAssertEqual(returnedToNow.end, available.upperBound) + XCTAssertEqual(returnedToNow.duration, window.duration, accuracy: 0.5) + XCTAssertTrue(returnedToNow.followNow) + } + func testReportNavigationHistoryRestoresTheCompleteFilter() { let filter = TrafficFilter( bundleIDs: ["claude", "claude-code"], @@ -178,7 +236,8 @@ final class InsightsTests: XCTestCase { granularity: .hour, endDate: Date(timeIntervalSince1970: 42), followNow: false, - filter: filter + filter: filter, + preset: .oneDay ) var history = ReportNavigationHistory() diff --git a/FlowlightTests/VisualizeNavigationTests.swift b/FlowlightTests/VisualizeNavigationTests.swift index 4edf8301..386d9a2b 100644 --- a/FlowlightTests/VisualizeNavigationTests.swift +++ b/FlowlightTests/VisualizeNavigationTests.swift @@ -40,9 +40,31 @@ final class VisualizeNavigationTests: XCTestCase { XCTAssertEqual(SidebarItem.rules.shortcut, "5") } - func testVisualizeUsesItsOwnHelpSection() { + func testConnectionsKeepsTheCompatibleVisualizeRouteAndHelpAnchor() { + XCTAssertEqual(SidebarItem.visualize.rawValue, "visualize") XCTAssertEqual(SidebarItem.visualize.helpAnchor, "visualize") - XCTAssertEqual(SidebarItem.visualize.englishTitle, "Visualize") + XCTAssertEqual(SidebarItem.visualize.englishTitle, "Connections") + } + + func testConnectionsLoadingAlwaysOutranksAStaleSnapshotAndYieldsToEmptyState() { + XCTAssertTrue(ConnectionsRenderPolicy.showsLoading(isLoading: true, hasSnapshot: true)) + XCTAssertTrue(ConnectionsRenderPolicy.showsLoading(isLoading: true, hasSnapshot: false)) + XCTAssertFalse(ConnectionsRenderPolicy.showsLoading(isLoading: false, hasSnapshot: true)) + XCTAssertFalse(ConnectionsRenderPolicy.showsLoading(isLoading: false, hasSnapshot: false)) + } + + func testConnectionsRejectsAStaleAsyncCompletion() { + let current = UUID() + XCTAssertTrue(ConnectionsRenderPolicy.canCommit(requestID: current, currentID: current, cancelled: false)) + XCTAssertFalse(ConnectionsRenderPolicy.canCommit(requestID: UUID(), currentID: current, cancelled: false)) + XCTAssertFalse(ConnectionsRenderPolicy.canCommit(requestID: current, currentID: current, cancelled: true)) + } + + func testConnectionsWaitsForCurrentDataBeforeRebuilding() { + let current = UUID() + XCTAssertTrue(ConnectionsRenderPolicy.canRebuild(loadedID: current, currentLoadID: current)) + XCTAssertFalse(ConnectionsRenderPolicy.canRebuild(loadedID: nil, currentLoadID: current)) + XCTAssertFalse(ConnectionsRenderPolicy.canRebuild(loadedID: UUID(), currentLoadID: current)) } func testCrossScreenBackRestoresReportOriginAndScope() { @@ -52,7 +74,9 @@ final class VisualizeNavigationTests: XCTestCase { nav.showReport(filter: reportFilter, granularity: .hour, end: Date(timeIntervalSince1970: 42)) nav.updateCurrentReportScope(filter: reportFilter, granularity: .hour, - endDate: Date(timeIntervalSince1970: 42), followNow: false) + startDate: Date(timeIntervalSince1970: 0), + endDate: Date(timeIntervalSince1970: 42), followNow: false, + preset: nil) nav.showInspect(app: ("claude", "Claude Code"), host: "api.anthropic.com") XCTAssertEqual(nav.backDestination, .reports) @@ -61,12 +85,33 @@ final class VisualizeNavigationTests: XCTestCase { XCTAssertEqual(nav.reportRequest?.filter, reportFilter) XCTAssertEqual(nav.reportRequest?.granularity, .hour) XCTAssertEqual(nav.reportRequest?.end, Date(timeIntervalSince1970: 42)) + XCTAssertEqual(nav.reportRequest?.duration, 42) + XCTAssertNil(nav.reportRequest?.preset) XCTAssertEqual(nav.backDestination, .visualize) nav.goBack() XCTAssertEqual(nav.selection, .visualize) XCTAssertNil(nav.backDestination) } + func testCrossScreenBackPreservesAFollowingHistoryDurationAndPreset() { + let nav = AppNavigation() + nav.show(.reports) + let start = Date(timeIntervalSince1970: 1_000) + let end = start.addingTimeInterval(15 * 60) + nav.updateCurrentReportScope(filter: .none, granularity: .minute, + startDate: start, endDate: end, followNow: true, + preset: .fifteenMinutes) + + nav.showInspect(host: "api.anthropic.com") + nav.goBack() + + XCTAssertEqual(nav.selection, .reports) + XCTAssertNil(nav.reportRequest?.start) + XCTAssertNil(nav.reportRequest?.end) + XCTAssertEqual(nav.reportRequest?.duration, 15 * 60) + XCTAssertEqual(nav.reportRequest?.preset, .fifteenMinutes) + } + func testPackReviewNavigationClearsCrossScreenTrailAndOpensPacks() { let nav = AppNavigation() nav.show(.visualize) diff --git a/README.md b/README.md index 4d0dc6c9..95881298 100644 --- a/README.md +++ b/README.md @@ -117,11 +117,12 @@ The request is never sent. Mocked exchanges are recorded and clearly marked, so was real. Needs HTTPS inspection, since only decrypted traffic can be answered — and a mock changes the reply, not whether the connection can be made. -### Reports at any zoom -- Second, minute, hour, day, week, month and year views. Click a bar to zoom in. +### History at any zoom +- Range presets: **15 min**, **1h**, **6h**, **1d**, **1w**, **1 mo**, **6 mo**, **1y** and **All**. +- Hover-only bars open a cursor-following, scrollable card with the bucket totals and contributing apps; they never change the selected range. +- Switch the navigator between **Nearby context** and **All history**. Drag the brush to pan the selected window or either edge to resize it. - Group the breakdown by **App › Domain › IP**, **Destination › App › IP**, or **IP › App**. -- Donut and trend charts with a top-5 + *Other* layout that stays readable with hundreds of apps. -- Hover any bucket to see which apps drove it. Export to CSV. +- Donut and trend charts with a top-5 + *Other* layout that stays readable with hundreds of apps. Export to CSV. ### Blocking what an agent shouldn't reach An allowlist warns by default. Turn on **Refuse connections outside the list** for an agent and Flowlight drops those @@ -135,7 +136,7 @@ original app before Flowlight opens the origin connection; agent allowlists stil ### Rules An allowlist is one agent's idea of where it may go. A **rule** is the general version: it names a subject — an app, an agent, a destination, a URL, or a pairing of two of those — and says block or allow. Right-click any row in Live, -Reports, AI Agents or Inspect to write one about what you're looking at; all of them land in the same editor on the +History, AI Agents or Inspect to write one about what you're looking at; all of them land in the same editor on the **Rules** screen. - **The most specific match decides**, and a tie goes to the block. An exception written underneath a broad block @@ -259,12 +260,12 @@ llama.cpp). Both send nothing. **Or bring your own key** for Anthropic, OpenAI, endpoint — the key lives in your login Keychain, the screen says when a question will leave the Mac, and every request is shown in full under the answer. -Every query is listed under the answer. Clicking one opens Reports for traffic evidence, or the relevant app screen +Every query is listed under the answer. Clicking one opens History for traffic evidence, or the relevant app screen for device and configuration answers. And Ask's own traffic shows up in Live like any other app's — including when the model is a server on this same Mac. ### Worth a look -A third mode in Reports, beside the breakdown and the charts. It compares the apps in a report with each other and +A third mode in History, beside the breakdown and the charts. It compares the apps in a report with each other and points at the ones whose destinations don't look like the rest — many more places than their peers, addresses that never resolved to a name, hostnames that look generated, far more sent than received, protocols that are a sideline rather than the app's purpose. Each finding shows its evidence; clicking one narrows the report to that app. @@ -284,7 +285,7 @@ launch and only while a window is open, rather than meeting a first run with a p launch until taken or dismissed. ### Focus mode -Pick a few apps and destinations and every screen shows only those — Live, Reports, Alerts, AI Agents and Inspect, +Pick a few apps and destinations and every screen shows only those — Live, History, Alerts, AI Agents and Inspect, plus the menu bar rates. It's for watching one agent work without the rest of the Mac in the way. - Add an app by name or bundle identifier — every application on the Mac is searchable, so one that has been quiet @@ -307,7 +308,7 @@ Off until you configure it, with no Flowlight-operated endpoint to send to — y HTTP (rollups as metrics, alerts as logs) or newline-delimited JSON. The Settings panel lists every field that leaves and previews a real payload built from your own data first. Auth headers live in the Keychain. Nothing from HTTPS inspection can be exported — the payload types have nowhere to put a header or a body. What Flowlight sends -appears in Live and Reports like any other app's traffic, including a collector on localhost. +appears in Live and History like any other app's traffic, including a collector on localhost. ### Private by design No account, no cloud, no telemetry. Everything stays in a local SQLite database. Packet capture reads only DNS @@ -321,11 +322,11 @@ same local database. - + - + @@ -550,7 +551,7 @@ Flowlight/ Storage/ SQLite store, rollups, queries Analysis/ anomaly engine, AI agent catalog + rules Inspection/ opt-in HTTPS inspection: local CA, proxy, HTTP parser, tool-call reader - UI/ Live · AI Agents · Reports · Alerts · Inspect · Capture + UI/ Live · AI Agents · History · Alerts · Inspect · Connections · Capture FlowlightTests/ 105 unit tests: parsers, BPF filter, rollups, charts, agents, MCP, allowlists, inspection, updates docs/ website (GitHub Pages) and developer guide ``` diff --git a/docs/404.html b/docs/404.html index 0aad1441..2c26aa64 100644 --- a/docs/404.html +++ b/docs/404.html @@ -86,7 +86,7 @@

That page isn't here

Try the home page,

diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index becbcf49..4a4abb20 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -27,7 +27,7 @@ Flowlight/ SwiftUI host app Analysis/ EWMA/z-score baselines, rule engine, AI agent catalog + rules, UI-activity tracker Inspection/ HTTPS inspection: local CA, decrypting proxy, HTTP parser, recorder, mock rules Export/ opt-in export to a collector the user chooses: OTLP/NDJSON payloads, queue, Keychain - UI/ Live, AI Agents, Reports (charts + three breakdown groupings + CSV), Alerts, Capture + UI/ Live, AI Agents, History (charts + three breakdown groupings + CSV), Alerts, Connections, Capture Channels/ Opt-in Bluetooth, USB/storage and CoreMediaIO camera-activity monitors Shared/Classification/ProtocolCatalog.swift 108 protocols in 13 families, used by both capture engines FlowlightTests/ Parser, classifier, BPF filter, rollup, chart, agent and anomaly tests @@ -63,7 +63,7 @@ nettop only reports IP addresses, so Flowlight fills in names from several sourc interface. This lookup is on by default and sends only public IPs; turn it off during setup or in Capture. Public IPs are sent to that service, while local and reserved addresses stay on the Mac. -Reports group any traffic still without a hostname under its network owner. +History groups any traffic still without a hostname under its network owner. ## Building @@ -144,7 +144,7 @@ snapshot without rewriting prior history. multicast are ignored. - **Upload above 99th percentile**: an hour's upload exceeds the app's 30-day hourly p99 (needs 48 hours of history). - **Traffic without UI activity**: a GUI app not frontmost for 10 min or more uploads over 5 MB/min. -- The Reports chart also marks buckets that are at least Nσ above the visible series. +- The History chart also marks buckets that are at least Nσ above the visible series. ## AI agent rules @@ -245,7 +245,7 @@ endpoint to fall back to — the user names one or nothing is sent. retried as-is, with a capped exponential delay and no jitter — there is one Flowlight talking to one collector, so there is no herd to spread out — and is dropped after five attempts rather than blocking everything behind it. One OTLP batch is two requests, so only the half that failed is retried. -- **Timing.** Rollups come from `breakdown(.minute, …)`, the same query Reports uses, over the window since the +- **Timing.** Rollups come from `breakdown(.minute, …)`, the same query History uses, over the window since the last export; it stops two minutes short of now because a minute only lands in `agg_1m` once maintenance has folded it, and reaches back at most an hour, so a Mac that slept for a week resumes instead of replaying it. Alerts are enqueued as `AnomalyEngine` raises them. Switching export on sets the watermark to that moment: @@ -253,7 +253,7 @@ endpoint to fall back to — the user names one or nothing is sent. - **The token lives in the Keychain** (`ExportSecrets`, a generic password under `com.flowlight.app.export`), not UserDefaults, and the whole header set goes in rather than a guess at which header is the secret one. - **It has to be visible.** The requests leave as the app's own traffic and are never routed through the - inspection proxy, even when the system proxy points at it, so they appear in Live and Reports and raise a + inspection proxy, even when the system proxy points at it, so they appear in Live and History and raise a first-contact alert the first time they go somewhere new. One gap to know about: with HTTPS inspection running, `ProxyAttribution.rewrite` discards Flowlight's own loopback records, so an export to a collector on `127.0.0.1` isn't counted while inspection is on. A remote collector is unaffected either way. diff --git a/docs/about/index.html b/docs/about/index.html index 4e334402..1f04e14f 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

Thanks

diff --git a/docs/assets/screenshots/reports.png b/docs/assets/screenshots/reports.png index 587dc5c5..d388ebbd 100644 Binary files a/docs/assets/screenshots/reports.png and b/docs/assets/screenshots/reports.png differ diff --git a/docs/assets/screenshots/visualize.png b/docs/assets/screenshots/visualize.png index 6f464308..1ca81424 100644 Binary files a/docs/assets/screenshots/visualize.png and b/docs/assets/screenshots/visualize.png differ diff --git a/docs/de/about/index.html b/docs/de/about/index.html index 4fd81672..7cf311bb 100644 --- a/docs/de/about/index.html +++ b/docs/de/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Dank

diff --git a/docs/de/docs/index.html b/docs/de/docs/index.html index 1431fcc4..49426d38 100644 --- a/docs/de/docs/index.html +++ b/docs/de/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Dokumentation

Flowlight benutzen

-

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.16.11, macOS 15 oder neuer.

+

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.17.0, macOS 15 oder neuer.

- - + + @@ -179,12 +179,12 @@

Die Ansichten
Der Bildschirm Live: eine Liste von Anwendungen mit ihren aktuellen Sende- und Empfangsraten und ihrem meistgenutzten Ziel.
Live, der Bildschirm, mit dem Flowlight startet.
-

Fahre in Berichte über einen Balken, um zu sehen, welche Apps ihn getrieben haben, klicke ihn an, um hineinzuzoomen, und doppelklicke eine Zeile, um den Bericht darauf einzugrenzen.

+

Bewege in Verlauf den Zeiger über einen Balken, um eine mitlaufende, scrollbare Karte mit den beteiligten Apps zu öffnen; die Balken zoomen beim Klicken nicht. Doppelklicke eine Zeile, um den Verlauf darauf einzugrenzen.

-

Datenverkehr visualisieren

-

Visualisieren zeigt jede App, jedes genaue Ziel und jede beobachtete Beziehung im aktuellen Zeitraum sowie im Such- und Fokusbereich. Die Pfadbreite folgt den Bytes. Sparsame rosa und blaue Striche bewegen sich in entgegengesetzte Sende- und Empfangsrichtungen; jede Kante hat ihr eigenes stabiles Tempo, und „Bewegung reduzieren“ lässt dieselben wahrheitsgetreuen statischen Pfade stehen.

-

Standardmäßig zeigt Datenverkehr die zehn aktivsten Apps und KI-Aktivität die zehn aktivsten nachgewiesenen Agentenwurzeln, geordnet nach vollständig empfangenen plus gesendeten Bytes. Die beiden optionalen durchsuchbaren Auswahlfelder für Quelle und Ziel decken beliebig-zu-beliebig, eins-zu-beliebig, beliebig-zu-eins und eins-zu-eins ab. Jede Auswahl beschränkt das jeweils andere Auswahlfeld auf Endpunkte mit beobachteter oder blockierter Evidenz; „Beliebig“ bleibt verfügbar, und „Zurücksetzen“ setzt beide Auswahlfelder zurück. Eine fokussierte Karte enthält alle verbundenen Starter, Agenten, Tools oder MCP-Dienste, Gateways, Flowlight-Proxy-Stufen, Ziele sowie beobachteten oder blockierten Beziehungen. Nur ungewöhnlich große fokussierte Bereiche werden schrittweise gruppiert; jede Gruppe behält alle genauen Mitglieds-IDs. Liste und Berichte bleiben vollständig und zahlenmäßig identisch.

-

Wähle einen Knoten oder eine Verbindung für genaue Werte und öffne anschließend Berichte, Inspizieren oder einen ungespeicherten Regeleditor mit derselben App und demselben Ziel. Liste stellt denselben vollständigen Graphen für Tastatur und VoiceOver bereit. „Verbindungen“ sind Netzwerkflüsse, keine HTTP-Anfragen; „Beobachtet“ ist keine Erlaubnisentscheidung.

+

Verbindungen

+

Verbindungen zeigt jede App, jedes genaue Ziel und jede beobachtete Beziehung im aktuellen Zeitraum sowie im Such- und Fokusbereich. Die Pfadbreite folgt den Bytes. Sparsame rosa und blaue Striche bewegen sich in entgegengesetzte Sende- und Empfangsrichtungen; jede Kante hat ihr eigenes stabiles Tempo, und „Bewegung reduzieren“ lässt dieselben wahrheitsgetreuen statischen Pfade stehen.

+

Standardmäßig zeigt Datenverkehr die zehn aktivsten Apps und KI-Aktivität die zehn aktivsten nachgewiesenen Agentenwurzeln, geordnet nach vollständig empfangenen plus gesendeten Bytes. Die beiden optionalen durchsuchbaren Auswahlfelder für Quelle und Ziel decken beliebig-zu-beliebig, eins-zu-beliebig, beliebig-zu-eins und eins-zu-eins ab. Jede Auswahl beschränkt das jeweils andere Auswahlfeld auf Endpunkte mit beobachteter oder blockierter Evidenz; „Beliebig“ bleibt verfügbar, und „Zurücksetzen“ setzt beide Auswahlfelder zurück. Eine fokussierte Karte enthält alle verbundenen Starter, Agenten, Tools oder MCP-Dienste, Gateways, Flowlight-Proxy-Stufen, Ziele sowie beobachteten oder blockierten Beziehungen. Nur ungewöhnlich große fokussierte Bereiche werden schrittweise gruppiert; jede Gruppe behält alle genauen Mitglieds-IDs. Liste und Verlauf bleiben vollständig und zahlenmäßig identisch.

+

Wähle einen Knoten oder eine Verbindung für genaue Werte und öffne anschließend Verlauf, Inspizieren oder einen ungespeicherten Regeleditor mit derselben App und demselben Ziel. Liste stellt denselben vollständigen Graphen für Tastatur und VoiceOver bereit. „Verbindungen“ sind Netzwerkflüsse, keine HTTP-Anfragen; „Beobachtet“ ist keine Erlaubnisentscheidung.

Regeln für KI-Agenten

Eine App gilt als Agent, wenn Flowlight sie am Namen kennt (heute 16, darunter Claude Code, Codex, Cursor, GitHub Copilot, @@ -202,7 +202,7 @@

Tools & MCP-Server

Agenten erledigen viel durch andere Prozesse: ein Shell-Tool führt curl, git oder npm aus, und MCP-Server laufen als eigene Prozesse. Flowlight verfolgt die Elternprozesse zurück zu dem Agenten, der sie gestartet hat, sodass dieser Datenverkehr dem Agenten zugerechnet wird. In KI-Agenten listet das Detail des Agenten sie unter Tools & MCP-Server, und bei - Zielen steht über curl oder über github MCP. In Berichte steht in der Prozesszeile über Claude Code.

+ Zielen steht über curl oder über github MCP. In Verlauf steht in der Prozesszeile über Claude Code.

MCP-Server werden benannt, indem ihre Befehlszeile mit der MCP-Konfiguration von Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed und Gemini CLI verglichen wird. Entfernte MCP-Server werden über den Hostnamen in ihrer URL erkannt und nicht konfigurierte Server über bekannte Paketnamen wie @@ -244,7 +244,7 @@

Agenten-Konfiguration: was Flowlight auf deinem Mac

Genauer hinsehen

-

Ein dritter Modus in Berichte, neben der Aufschlüsselung und den Diagrammen. Er vergleicht die Apps im Bericht miteinander +

Ein dritter Modus in Verlauf, neben der Aufschlüsselung und den Diagrammen. Er vergleicht die Apps im Bericht miteinander und zeigt auf die, deren Ziele nicht zum Rest passen: deutlich mehr Orte als bei ihresgleichen, Adressen, die nie zu einem Namen aufgelöst wurden, Hostnamen, die generiert statt gewählt aussehen, viel mehr gesendet als empfangen, und Protokolle, die eine Nebensache sind statt der Zweck der App. Jeder Befund führt die Belege mit, und ein Klick grenzt den Bericht auf diese @@ -259,7 +259,7 @@

Auf welchem Weg die Bytes gingen

immer schon gezählt; es hatte nur kein Wort dafür, weshalb ein AirDrop eines 4 GB großen Ordners wie ein paar Megabyte an eine Adresse ohne Namen aussah.

Jeder Flow trägt jetzt einen Kanal: Netzwerk, Peer-to-Peer-WLAN, Dieser Mac (Loopback, - hat den Rechner nie verlassen) oder Tunnel (in einem VPN; wohin es danach ging, ist hier nicht sichtbar). Aus der Symbolleiste von Berichte + hat den Rechner nie verlassen) oder Tunnel (in einem VPN; wohin es danach ging, ist hier nicht sichtbar). Aus der Symbolleiste von Verlauf grenzt du einen Bericht darauf ein, und der Kanal reist mit CSV-Exporten und mit allem, was an einen Collector geht.

Peer-to-Peer-Zeilen sind nach der Funktion benannt, die sie geöffnet hat – AirDrop and Handoff · nearby device, Continuity · nearby device –, denn eine Link-Local-Adresse sagt dir nichts und das Gerät im Raum hat keinen Namen, @@ -281,7 +281,7 @@

Weitere Warnungen

Apples eigene Apps sind standardmäßig ausgenommen. macOS spricht ständig mit Apple – Softwareupdate, iCloud, Push, Zeit, Karten-Kacheln – auf Hosts und Ports, die beim ersten Auftauchen neu sind, und wenn das alles gelistet wird, verschwindet die eine Zeile, die zu lesen lohnt. Schalte es unter Einstellungen › Warnungen ab, wenn du sie haben willst. So oder so wird der Datenverkehr weiterhin - aufgezeichnet, erscheint weiter in Live, Berichte und Fragen und unterliegt weiter jeder Regel, Schutzregel und Erlaubnisliste: Die Einstellung + aufgezeichnet, erscheint weiter in Live, Verlauf und Fragen und unterliegt weiter jeder Regel, Schutzregel und Erlaubnisliste: Die Einstellung entscheidet, was gelistet wird, nie, was erlaubt ist.

Fragen

@@ -309,9 +309,9 @@

Fragen

Diagramme, wenn die Form zählt. Veränderung über Zeit kommt als Linie zurück, ein Vergleich als Balken, die Aufteilung eines Ganzen als Kreis. Flowlight zeichnet sie aus denselben Zeilen, die die Abfrage geliefert hat, also können Bild und Satz sich nicht widersprechen, und das Modell kann eine andere Form oder gar keine verlangen.

-

Jede Abfrage steht unter der Antwort. Ein Klick öffnet Berichte für Verkehrsdaten oder den passenden +

Jede Abfrage steht unter der Antwort. Ein Klick öffnet Verlauf für Verkehrsdaten oder den passenden App-Bildschirm für Geräte- und Konfigurationsantworten. Eine Antwort, die du nicht prüfen kannst, ist eine Vermutung mit besserer Grammatik.

-

Flowlight hält sich an seinen eigenen Maßstab. Was diese Funktion sendet, erscheint in Live und Berichte +

Flowlight hält sich an seinen eigenen Maßstab. Was diese Funktion sendet, erscheint in Live und Verlauf wie der Datenverkehr jeder anderen App – auch dann, wenn der Modellserver auf genau diesem Mac läuft, also in dem Fall, den man am leichtesten stillschweigend hätte weglassen können.

@@ -383,7 +383,7 @@

HTTPS-Inspektion (optional)

nicht kann, ist die bereits laufenden Agenten erreichen – deren Proxy-Einstellungen wurden beim Start gelesen, und nichts kann sie jetzt noch ändern.

-

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Berichten oder KI-Agenten mit der rechten Maustaste auf eine App +

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Verlauf oder KI-Agenten mit der rechten Maustaste auf eine App oder ein Ziel und wähle Datenverkehr von … inspizieren: Inspizieren öffnet sich und zeigt nur diese App oder nur dieses Ziel, mit einer Markierung, die das sagt und die du mit einem Klick entfernen kannst. Es schränkt ein, statt zu suchen – eine frühere Version setzte den Namen ins Suchfeld, das auch Antwort-Bodys durchsucht, sodass die Frage nach dem Datenverkehr eines Agenten jede Seite zurückgab, deren HTML ihn @@ -412,13 +412,13 @@

Mock-Antworten

Regeln

Eine Erlaubnisliste ist die Vorstellung eines Agenten davon, wohin er gehen darf. Eine Regel ist die allgemeine Fassung: Sie nennt ein Subjekt – eine App, einen Agenten, ein Ziel, eine URL oder ein Paar aus zwei davon – und sagt blockieren - oder erlauben. Rechtsklicke eine Zeile in Live, Berichte, KI-Agenten oder Inspizieren, um eine Regel über das zu schreiben, was du gerade ansiehst; + oder erlauben. Rechtsklicke eine Zeile in Live, Verlauf, KI-Agenten oder Inspizieren, um eine Regel über das zu schreiben, was du gerade ansiehst; jede davon landet im selben Editor auf dem Bildschirm Regeln, denn eine Regel, die im Verborgenen greift, wäre eine Regel, die du nie wiederfindest.

Vorlagen. Zweiundzwanzig, in fünf Gruppen – einen Agenten von Paketregistern oder anderen Modellanbietern fernhalten, die üblichen Wege schließen, auf denen Daten abfließen (Paste-Dienste, Webhook-Fänger, anonyme Datei-Ablagen, Tunnel, DNS over HTTPS), Produktanalyse und Crash-Berichte, Regeln für Arbeitszeiten und das einmalige „blockiere das eine Stunde lang, bis ich - herausgefunden habe, was es ist“. Durchsuche sie über die Symbolleiste von Regeln, oder rechtsklicke irgendwo in Live, Berichte, KI-Agenten oder Inspizieren eine Zeile und + herausgefunden habe, was es ist“. Durchsuche sie über die Symbolleiste von Regeln, oder rechtsklicke irgendwo in Live, Verlauf, KI-Agenten oder Inspizieren eine Zeile und wende eine auf das an, was du ansiehst.

Jede Vorlage sagt, was sie tun wird, bevor sie es tut. Alles, was mehr als eine Regel schreibt, öffnet eine Karte mit jedem Host und jedem Zeitplan; alles Dauerhafte öffnet den vorausgefüllten Editor; und nur Regeln, die sich selbst aufheben – nach einer @@ -577,10 +577,10 @@

Geräte: Bluetooth, USB und externe Speicher

Ereignis, das Menschen wirklich interessiert. Durchsatz gibt es hier auch nicht, aus demselben Grund wie bei Bluetooth.

Fokusmodus

-

Wähle ein paar Apps und Ziele, und jeder Bildschirm zeigt nur die – Live, Berichte, Warnungen, KI-Agenten und Inspizieren, dazu die Raten in +

Wähle ein paar Apps und Ziele, und jeder Bildschirm zeigt nur die – Live, Verlauf, Warnungen, KI-Agenten und Inspizieren, dazu die Raten in der Menüleiste. Er ist dafür da, einen Agenten bei der Arbeit zu beobachten, ohne den restlichen Mac im Weg.

    -
  • Rechtsklicke eine Zeile in Live, Berichte oder KI-Agenten und wähle Fokussieren auf…, oder nimm das Fokus-Element unten in +
  • Rechtsklicke eine Zeile in Live, Verlauf oder KI-Agenten und wähle Fokussieren auf…, oder nimm das Fokus-Element unten in der Seitenleiste, um aus den aktiven Apps zu wählen und Ziele einzutippen.
  • ⇧⌘F schaltet den Fokus ein und aus, und die Menüleiste tut es auch – sie zeigt zudem, was fokussiert ist.
  • Ein Ziel nimmt seine Subdomains mit: example.com deckt api.example.com ab. IP-Adressen funktionieren, @@ -621,7 +621,7 @@

    Export an OpenTelemetry oder ein SIEM

  • Nie etwas aus der HTTPS-Inspektion. Keine Header, keine Bodys, keine Tool-Aufrufe – der Export kann nur Rollups und Warnungen tragen, es gibt also nicht einmal versehentlich einen Weg dorthin.
  • Auth-Header liegen in deinem Anmelde-Schlüsselbund, nicht in den Einstellungen. Angezeigt werden immer nur ihre Namen.
  • -
  • Was Flowlight sendet, erscheint in Flowlight, in Live und Berichte, wie der Datenverkehr jeder anderen App – auch +
  • Was Flowlight sendet, erscheint in Flowlight, in Live und Verlauf, wie der Datenverkehr jeder anderen App – auch bei einem Collector auf 127.0.0.1.

Zwei Dinge sind zu erwarten: Rollups werden etwa zwei Minuten verzögert zusammengefasst, ein Intervall unter einer Minute fragt also öfter, ohne dass Daten @@ -763,7 +763,7 @@

Grenzen

diff --git a/docs/de/index.html b/docs/de/index.html index 142361b4..89f23531 100644 --- a/docs/de/index.html +++ b/docs/de/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

Sieh, was deine Apps im Netz tun.
brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniversalGPL-3.0Keine Telemetrie

+

v0.17.0macOS 15+UniversalGPL-3.0Keine Telemetrie

@@ -127,7 +127,7 @@

Sieh, was deine Apps im Netz tun.
-
Flowlights Karte der KI-Aktivität. Agentenkarten führen über zugeordnete Werkzeuge und konfigurierte Gateways; die beobachtete Route von magpie über Flowlight verzweigt sich anschließend zu LLM-Diensten und Domains. Die Bandbreite zeigt das Verkehrsvolumen des Zeitraums.

Sieh die tatsächliche KI-Route: Agenten, zugeordnete Werkzeuge, konfigurierte Gateways, Flowlights beobachtete Proxy-Stufe und exakte Ziele. Die Bandbreite zeigt empfangene plus gesendete Daten im gewählten Zeitraum. Mit Demodaten.

@@ -149,15 +149,15 @@

Fragen, die es in Sekunden beantwortet

KI-Agenten

Ein Agent arbeitet, während du im Meeting sitzt

Sieh jeden Host, den er und seine Tools außer dem Modellanbieter berührt haben – und werde gewarnt, wenn er seine Erlaubnisliste verlässt, E-Mail sendet oder 100 MB an ein neues Ziel hochlädt.

-
Berichte

Dein Upload schlägt aus und du weißt nicht, warum

-

Fahre über die Spitze, um die App dahinter zu sehen, klicke, um von der Stunde in die Minute zu zoomen, und folge ihr bis zur genauen Domain und IP.

+
Verlauf

Dein Upload schlägt aus und du weißt nicht, warum

+

Fahre über die Spitze, um eine scrollbare Karte der beteiligten Apps zu sehen, und wechsle mit Zeitraumtasten oder Navigator von der Stunde zur Minute bis zur genauen Domain und IP.

Warnungen

Eine neue App telefoniert nach Hause

Erster Kontakt mit einer neuen Domain, ein Nicht-Standard-Port oder eine Verkehrsspitze lösen je eine Warnung aus, die die App und den Wert nennt, der sie ausgelöst hat.

Live

Irgendetwas macht gerade deine Leitung voll

Die größten Verbraucher, jede Sekunde aktualisiert, mit dem meistgenutzten Ziel jeder App und den aktuellen Raten in der Menüleiste.

-
Berichte

Dein Hotspot-Volumen ist diesen Monat verschwunden

+
Verlauf

Dein Hotspot-Volumen ist diesen Monat verschwunden

Wechsle zur Monatsansicht und gruppiere nach App. Der größte Verbraucher steht oben – mit CSV-Export, wenn du Belege brauchst.

-
Berichte · Ziel

Du musst prüfen, wohin Daten gehen

+
Verlauf · Ziel

Du musst prüfen, wohin Daten gehen

Gruppiere nach Ziel, um jede App zu sehen, die mit einer Domain spricht, oder nach IP, um zu sehen, was hinter einer Adresse steckt.

@@ -175,7 +175,7 @@

Live

Was bewegt sich jetzt? Raten pro App, die letzten zwei Minuten,

KI-Agenten

Was tun meine Agenten, außer ihr Modell zu rufen? Anbieter, andere Hosts, Risikomarkierungen.

⌘2
-

Berichte

Wo ist alles hingegangen? Sekunde bis Jahr, gruppiert nach App, Ziel oder IP, mit Diagrammen und CSV.

⌘3
+

Verlauf

Wo ist alles hingegangen? Sekunde bis Jahr, gruppiert nach App, Ziel oder IP, mit Diagrammen und CSV.

⌘3

Warnungen

Was sah falsch aus? Nachvollziehbare Warnungen pro App, mit Ziel und Schwellenwert.

⌘4
@@ -187,7 +187,7 @@

Geräte

Bluetooth, USB und Kameras: was gekoppelt, angeschlossen oder

Inspizieren

Optional. Was hat der Agent wirklich gesendet, und welcher Tool-Aufruf hat es ausgelöst? Entschlüsselte Anfragen, Tool-Aufrufe, Ergebnisse.

⌘7
-

Visualisieren

Was kommuniziert? Eine zoombare Sankey-Karte für App-Verkehr und nachgewiesene KI-Agentenpfade, mit exakter Listenansicht.

+

Verbindungen

Was kommuniziert? Eine zoombare Sankey-Karte für App-Verkehr und nachgewiesene KI-Agentenpfade, mit exakter Listenansicht.

@@ -470,9 +470,9 @@

Ein Wächter, den du nicht bewachen musst

-
Die Ansicht Berichte mit stündlichen Balken für empfangene und gesendete Daten und Ringdiagrammen für Apps, Ziele und Protokolle
-
Berichte. Zoom von der Sekunde bis zum Jahr, drei Gruppierungen, Diagramme, die auch bei hunderten Apps lesbar bleiben.
+
Die Ansicht Verlauf mit stündlichen Balken für empfangene und gesendete Daten und Ringdiagrammen für Apps, Ziele und Protokolle
+
Verlauf. Zoom von der Sekunde bis zum Jahr, drei Gruppierungen, Diagramme, die auch bei hunderten Apps lesbar bleiben.
Die Ansicht Warnungen mit Warnungen zu Agenten-Exfiltration, E-Mail, FTP, Aktivität bei Abwesenheit und einer Verkehrsspitze
Warnungen. Jede nennt die App, das Ziel und den Wert, der sie ausgelöst hat.
@@ -589,7 +589,7 @@

Wisse, was deinen Mac verlässt.

diff --git a/docs/de/privacy/index.html b/docs/de/privacy/index.html index d609f714..bad375b9 100644 --- a/docs/de/privacy/index.html +++ b/docs/de/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Kontakt

diff --git a/docs/de/threat-model/index.html b/docs/de/threat-model/index.html index a06b4818..a22647a5 100644 --- a/docs/de/threat-model/index.html +++ b/docs/de/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -225,7 +225,7 @@

Eine Schwachstelle melden

diff --git a/docs/docs/index.html b/docs/docs/index.html index 501b3e1f..02403f21 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentation

Using Flowlight

-

Everything from the first launch to tuning the agent rules. Flowlight 0.16.11, macOS 15 or later.

+

Everything from the first launch to tuning the agent rules. Flowlight 0.17.0, macOS 15 or later.

- - + + @@ -179,13 +179,13 @@

The views

The Live screen: a list of applications with their current send and receive rates and busiest destination.
Live, the screen Flowlight opens on.
-

In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it.

+

In History, choose 15 min, 1h, 6h, 1d, 1w, 1 mo, 6 mo, 1y, or All. Hover-only bars open a cursor-following, scrollable card with the bucket totals and contributing apps; they never change the selected range. The navigator below the chart starts with Nearby context and can switch to All history: drag the brush to pan the selected window, or drag either edge to resize it. Double-click any breakdown row to narrow History to it.

-

Visualize traffic

-

Visualize draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths.

+

Connections

+

Connections draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths.

Choose Traffic for every observed application, or AI activity for proved agent clients, their attributed tools and MCP servers, launchers, gateways, Flowlight's inspection proxy, LLM services, and every other destination they reached. Process-lineage and configured-route relationships stay visually distinct from observed traffic and never invent byte totals or invocations.

-

By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and Reports remain complete and numerically identical.

-

Select a node or connection for exact values, then continue to Reports, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict.

+

By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and History remain complete and numerically identical.

+

Select a node or connection for exact values, then continue to History, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict.

AI agent rules

An app counts as an agent if Flowlight knows it by name (16 today, including Claude Code, Codex, Cursor, GitHub Copilot, @@ -203,7 +203,7 @@

Tools & MCP servers

Agents do much of their work through other processes: a shell tool runs curl, git or npm, and MCP servers run as their own processes. Flowlight follows each process's parents back to the agent that started it, so that traffic is counted as the agent's. In AI Agents, the agent's detail lists these under Tools & MCP servers, and - destinations read via curl or via github MCP. In Reports, the process row reads via Claude Code.

+ destinations read via curl or via github MCP. In History, the process row reads via Claude Code.

MCP servers are named by matching their command line to the MCP configuration of Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed and Gemini CLI. Remote MCP servers are matched by the hostname in their URL, and unconfigured servers by recognizable package names such as @@ -245,7 +245,7 @@

Agent configuration: what Flowlight reads on your M

Worth a look

-

A third mode in Reports, beside the breakdown and the charts. It compares the apps in the report with each other +

A third mode in History, beside the breakdown and the charts. It compares the apps in the report with each other and points at the ones whose destinations don't look like the rest: many more places than their peers, addresses that never resolved to a name, hostnames that look generated rather than chosen, far more sent than received, and protocols that are a sideline rather than the app's purpose. Each finding carries the evidence behind it, and clicking one narrows the report to that @@ -261,7 +261,7 @@

Which way the bytes left

with no name.

Every flow now carries a channel: Network, Peer-to-peer Wi-Fi, This Mac (loopback, which never left the machine) or Tunnel (inside a VPN; where it went after that isn't visible here). Narrow a report to - one of them from the Reports toolbar, and it travels with CSV exports and with anything sent to a collector.

+ one of them from the History toolbar, and it travels with CSV exports and with anything sent to a collector.

Peer-to-peer rows are named by the feature that opened them — AirDrop and Handoff · nearby device, Continuity · nearby device — because a link-local address tells you nothing and the device in the room has no name this Mac can learn. An app that uses the radio directly keeps its own name, which is the truthful answer for it.

@@ -282,7 +282,7 @@

Other alerts

Apple's own apps are left out by default. macOS contacts Apple constantly — Software Update, iCloud, push, time, Maps tiles — on hosts and ports that are new the first time they appear, and listing all of it buries the one line worth reading. Turn it off in Settings › Alerts if you want them. Either way the traffic is still - recorded, still appears in Live, Reports and Ask, and is still subject to every rule, guardrail and allowlist: the setting + recorded, still appears in Live, History and Ask, and is still subject to every rule, guardrail and allowlist: the setting decides what is listed, never what is allowed.

Ask

@@ -310,9 +310,9 @@

Ask

Charts when the shape matters. Change over time comes back as a line, a comparison as bars, a split of one whole as a pie. Flowlight draws them from the same rows the query returned, so the picture and the sentence cannot disagree, and the model can ask for a different shape or for none at all.

-

Every query is listed under the answer, and clicking one opens Reports for traffic evidence or the relevant +

Every query is listed under the answer, and clicking one opens History for traffic evidence or the relevant app screen for device and configuration answers. An answer you can't check is a guess with better grammar.

-

Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and Reports +

Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and History like any other app's traffic — including when the model server is on this very Mac, which is the case it would have been easiest to quietly leave out.

@@ -341,7 +341,7 @@

HTTPS inspection (optional)

Flowlight certificate; Flowlight notices and passes them through encrypted. By default, header values are kept only when the header is one you allow, and everything else is replaced by its length before anything is stored — recorded requests are kept for as long as you set, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode.

-

Local risk analysis is separate and off by default. In Reports or Settings › Detection, you can ask +

Local risk analysis is separate and off by default. In History or Settings › Detection, you can ask Apple’s on-device model to review only meaningful, already-recorded decrypted HTTP candidates after capture. It gets a bounded redacted description — never request or response bodies, header values, cookies, credentials or tool arguments — and nothing leaves the Mac. The result is a potential-harm hint, not proof of intent: Flowlight never blocks, changes, @@ -388,7 +388,7 @@

HTTPS inspection (optional)

and it is unavoidable: the entire point is that what replaces it starts with a different environment. What it cannot do is reach the agents already running — their proxy settings were read at launch, and nothing can change them now.

-

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and +

Getting here from a row. Right-click an app or a destination in Live, History or AI Agents and choose Inspect …'s Traffic: Inspect opens showing only that app, or only that destination, with a chip saying so that you can remove in one click. It scopes rather than searches — an earlier version put the name in the search field, which also searches response bodies, so asking for one agent's traffic returned every page whose HTML happened to @@ -420,13 +420,13 @@

Mock responses

Rules

An allowlist is one agent's idea of where it may go. A rule is the general version: it names a subject — an app, an agent, a destination, a URL, or a pairing of two of those — and says block - or allow. Right-click any row in Live, Reports, AI Agents or Inspect to write one about what you're looking at; + or allow. Right-click any row in Live, History, AI Agents or Inspect to write one about what you're looking at; every one of them lands in the same editor on the Rules screen, because a rule that took effect out of sight would be a rule you could never find again.

Templates. Twenty-two of them, in five groups — stopping an agent reaching package registries or other model providers, closing the common ways data leaves (paste sites, webhook catchers, anonymous file drops, tunnels, DNS over HTTPS), product analytics and crash reporting, working-hours policies, and one-off "block this for an hour while I work out - what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, Reports, AI Agents or Inspect and + what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, History, AI Agents or Inspect and apply one to what you're looking at.

Each template says what it will do before it does it. Anything that writes more than one rule opens a card listing every host and schedule; anything permanent opens the editor pre-filled; and only rules that undo themselves — an @@ -623,10 +623,10 @@

Devices: camera activity, Bluetooth, USB and external storage

Focus mode

-

Pick a few apps and destinations and every screen shows only those — Live, Reports, Alerts, AI Agents and Inspect, and the rates in +

Pick a few apps and destinations and every screen shows only those — Live, History, Alerts, AI Agents and Inspect, and the rates in the menu bar. It's for watching one agent work without the rest of the Mac in the way.

    -
  • Right-click any row in Live, Reports or AI Agents and choose Focus on…, or use the Focus control at the bottom of +
  • Right-click any row in Live, History or AI Agents and choose Focus on…, or use the Focus control at the bottom of the sidebar to pick from the apps that have been active and to type destinations.
  • ⇧⌘F turns Focus on and off, and so does the menu bar, which also shows what's focused.
  • A destination takes its subdomains with it: example.com covers api.example.com. IP addresses work; @@ -667,7 +667,7 @@

    Export to OpenTelemetry or a SIEM

  • Never anything from HTTPS inspection. No headers, no bodies, no tool calls — the export can only carry rollups and alerts, so there is nowhere for them to go even by accident.
  • Auth headers are kept in your login Keychain, not in preferences. Only their names are ever displayed.
  • -
  • What Flowlight sends shows up in Flowlight, in Live and Reports, like any other app's traffic — including +
  • What Flowlight sends shows up in Flowlight, in Live and History, like any other app's traffic — including a collector on 127.0.0.1.

Two things to expect: rollups are folded about two minutes behind, so an interval under a minute polls more often without data @@ -812,7 +812,7 @@

Limitations

diff --git a/docs/es/about/index.html b/docs/es/about/index.html index 7537a105..2f102a68 100644 --- a/docs/es/about/index.html +++ b/docs/es/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Agradecimientos

diff --git a/docs/es/docs/index.html b/docs/es/docs/index.html index 50d64e57..f20093f3 100644 --- a/docs/es/docs/index.html +++ b/docs/es/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentación

Usar Flowlight

-

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.16.11, macOS 15 o posterior.

+

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.17.0, macOS 15 o posterior.

- - + + @@ -179,11 +179,11 @@

Las vistas

La pantalla En vivo: una lista de aplicaciones con sus tasas actuales de envío y recepción y su destino más activo.
En vivo, la pantalla con la que se abre Flowlight.
-

En Informes, pasa el cursor por una barra para ver qué apps la generaron, haz clic para ampliar y haz doble clic en cualquier fila para limitar el informe a ella.

-

Visualizar el tráfico

-

Visualizar muestra cada app, destino exacto y relación observada del intervalo, la búsqueda y el enfoque actuales. El ancho representa bytes. Unos trazos rosa y azules se mueven en sentidos opuestos para envío y recepción; cada arista tiene su propia velocidad estable y Reducir movimiento conserva los mismos trazados estáticos.

-

Por defecto, Tráfico muestra las diez apps con más actividad y Actividad de IA las diez raíces de agentes demostradas con más actividad, ordenadas por el total completo de bytes recibidos y enviados. Los dos selectores opcionales con búsqueda, origen y destino, cubren cualquiera-a-cualquiera, uno-a-cualquiera, cualquiera-a-uno y uno-a-uno. Cada selección limita el selector opuesto a extremos con evidencia observada o bloqueada; «Cualquiera» siempre sigue disponible y «Restablecer» devuelve ambos selectores a su estado inicial. Un mapa enfocado incluye cada lanzador, agente, herramienta o servicio MCP, pasarela, etapa del proxy de Flowlight, destino y relación observada o bloqueada conectados. Solo los ámbitos enfocados excepcionalmente grandes se agrupan de forma progresiva; cada grupo conserva todos los ID exactos de sus miembros. Lista e Informes siguen completos y numéricamente idénticos.

-

Selecciona un nodo o conexión para ver sus valores exactos y continuar a Informes, Inspeccionar o una regla sin guardar con la misma app y destino. Lista ofrece el mismo grafo completo para teclado y VoiceOver. Conexiones significa flujos de red, no peticiones HTTP; Observado no es una decisión de permiso.

+

En Historial, pasa el cursor sobre una barra para abrir una tarjeta desplazable que sigue al puntero y muestra las apps que contribuyeron; las barras no amplían al hacer clic. Haz doble clic en cualquier fila para limitar el historial a ella.

+

Conexiones

+

Conexiones muestra cada app, destino exacto y relación observada del intervalo, la búsqueda y el enfoque actuales. El ancho representa bytes. Unos trazos rosa y azules se mueven en sentidos opuestos para envío y recepción; cada arista tiene su propia velocidad estable y Reducir movimiento conserva los mismos trazados estáticos.

+

Por defecto, Tráfico muestra las diez apps con más actividad y Actividad de IA las diez raíces de agentes demostradas con más actividad, ordenadas por el total completo de bytes recibidos y enviados. Los dos selectores opcionales con búsqueda, origen y destino, cubren cualquiera-a-cualquiera, uno-a-cualquiera, cualquiera-a-uno y uno-a-uno. Cada selección limita el selector opuesto a extremos con evidencia observada o bloqueada; «Cualquiera» siempre sigue disponible y «Restablecer» devuelve ambos selectores a su estado inicial. Un mapa enfocado incluye cada lanzador, agente, herramienta o servicio MCP, pasarela, etapa del proxy de Flowlight, destino y relación observada o bloqueada conectados. Solo los ámbitos enfocados excepcionalmente grandes se agrupan de forma progresiva; cada grupo conserva todos los ID exactos de sus miembros. Lista e Historial siguen completos y numéricamente idénticos.

+

Selecciona un nodo o conexión para ver sus valores exactos y continuar a Historial, Inspeccionar o una regla sin guardar con la misma app y destino. Lista ofrece el mismo grafo completo para teclado y VoiceOver. Conexiones significa flujos de red, no peticiones HTTP; Observado no es una decisión de permiso.

Reglas de los agentes de IA

Una app cuenta como agente si Flowlight la conoce por su nombre (16 hoy, entre ellas Claude Code, Codex, Cursor, GitHub Copilot, @@ -201,7 +201,7 @@

Herramientas y servidores MCP

Los agentes hacen gran parte de su trabajo a través de otros procesos: una herramienta de shell ejecuta curl, git o npm, y los servidores MCP se ejecutan como procesos propios. Flowlight sigue los procesos padre de cada proceso hasta el agente que lo arrancó, así que ese tráfico cuenta como del agente. En Agentes de IA, el detalle del agente los lista en Herramientas y servidores MCP, y - los destinos indican vía curl o vía MCP github. En Informes, la fila del proceso indica vía Claude Code.

+ los destinos indican vía curl o vía MCP github. En Historial, la fila del proceso indica vía Claude Code.

Los servidores MCP reciben su nombre cotejando su línea de comandos con la configuración MCP de Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed y Gemini CLI. Los servidores MCP remotos se identifican por el nombre de host de su URL, y los que no están configurados, por nombres de paquete reconocibles como @@ -244,7 +244,7 @@

Configuración de los agentes: qué lee Flowlight e

Merece un vistazo

-

Un tercer modo en Informes, junto al desglose y los gráficos. Compara entre sí las apps del informe +

Un tercer modo en Historial, junto al desglose y los gráficos. Compara entre sí las apps del informe y señala aquellas cuyos destinos no se parecen al resto: muchos más sitios que sus pares, direcciones que nunca resolvieron a un nombre, nombres de host que parecen generados en vez de elegidos, mucho más enviado que recibido y protocolos que son un añadido y no el propósito de la app. Cada hallazgo lleva consigo las pruebas en las que se basa, y al hacer clic en uno el informe se limita a esa @@ -260,7 +260,7 @@

Por dónde salieron los bytes

sin nombre.

Ahora cada flujo lleva un canal: Red, Wi-Fi entre dispositivos, Este Mac (loopback, que nunca salió de la máquina) o Túnel (dentro de una VPN; adónde fue después no se ve aquí). Puedes limitar un informe a - uno de ellos desde la barra de herramientas de Informes, y el canal viaja con las exportaciones a CSV y con todo lo que se envía a un colector.

+ uno de ellos desde la barra de herramientas de Historial, y el canal viaja con las exportaciones a CSV y con todo lo que se envía a un colector.

Las filas entre dispositivos reciben el nombre de la función que las abrió —AirDrop and Handoff · nearby device, Continuity · nearby device— porque una dirección de enlace local no dice nada y el dispositivo que está en la habitación no tiene un nombre que este Mac pueda aprender. Una app que usa la radio directamente conserva su propio nombre, que es la respuesta veraz en su caso.

@@ -281,7 +281,7 @@

Otras alertas

Las apps de Apple quedan fuera por defecto. macOS contacta con Apple constantemente —Actualización de software, iCloud, push, hora, teselas de Mapas— en hosts y puertos que son nuevos la primera vez que aparecen, y listarlo todo entierra la única línea que merece leerse. Desactívalo en Ajustes › Alertas si las quieres. En cualquier caso, el tráfico se sigue - registrando, sigue apareciendo en En vivo, Informes y Preguntar, y sigue sujeto a todas las reglas, salvaguardas y listas de permitidos: el ajuste + registrando, sigue apareciendo en En vivo, Historial y Preguntar, y sigue sujeto a todas las reglas, salvaguardas y listas de permitidos: el ajuste decide qué se lista, nunca qué se permite.

Preguntar

@@ -309,9 +309,9 @@

Preguntar

Gráficos cuando la forma importa. La evolución en el tiempo vuelve como una línea, una comparación como barras y el reparto de un total como un gráfico de sectores. Flowlight los dibuja con las mismas filas que devolvió la consulta, así que la imagen y la frase no pueden contradecirse, y el modelo puede pedir otra forma o ninguna.

-

Cada consulta aparece debajo de la respuesta y, al hacer clic, se abre Informes para las pruebas de tráfico o +

Cada consulta aparece debajo de la respuesta y, al hacer clic, se abre Historial para las pruebas de tráfico o la pantalla correspondiente para las respuestas sobre dispositivos y configuración. Una respuesta que no puedes comprobar es una conjetura con mejor gramática.

-

Flowlight se aplica su propio criterio. Lo que esta función envíe aparece en En vivo y en Informes +

Flowlight se aplica su propio criterio. Lo que esta función envíe aparece en En vivo y en Historial como el tráfico de cualquier otra app, también cuando el servidor de modelos está en este mismo Mac, que era justo el caso más fácil de omitir sin decir nada.

@@ -381,7 +381,7 @@

Inspección HTTPS (opcional)

inevitable: todo el sentido está en que lo que lo sustituye arranque con un entorno distinto. Lo que no puede hacer es llegar a los agentes que ya están en marcha — sus ajustes de proxy se leyeron al arrancar, y ya nada puede cambiarlos.

-

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Informes o Agentes de IA y elige +

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Historial o Agentes de IA y elige Inspeccionar el tráfico de …: Inspeccionar se abre mostrando solo esa app, o solo ese destino, con una etiqueta que lo indica y que puedes quitar con un clic. Delimita en lugar de buscar — una versión anterior ponía el nombre en el campo de búsqueda, que también busca en los cuerpos de las respuestas, así que pedir el tráfico de un agente devolvía todas las páginas cuyo HTML se limitaba a mencionarlo. Solo puede aparecer @@ -409,13 +409,13 @@

Respuestas simuladas

Reglas

Una lista de permitidos es la idea que tiene un agente de adónde puede ir. Una regla es la versión general: nombra un sujeto —una app, un agente, un destino, una URL o una pareja de dos de ellos— y dice bloquear - o permitir. Haz clic derecho en cualquier fila de En vivo, Informes, Agentes de IA o Inspeccionar para escribir una sobre lo que estás mirando; + o permitir. Haz clic derecho en cualquier fila de En vivo, Historial, Agentes de IA o Inspeccionar para escribir una sobre lo que estás mirando; todas acaban en el mismo editor de la pantalla Reglas, porque una regla que surtiera efecto fuera de la vista sería una regla que ya nunca podrías encontrar.

Plantillas. Veintidós, en cinco grupos: impedir que un agente llegue a registros de paquetes o a otros proveedores de modelos, cerrar las vías habituales por las que salen los datos (sitios de pegado, receptores de webhooks, servicios anónimos de subida de archivos, túneles, DNS over HTTPS), analítica de producto e informes de errores, políticas de horario laboral, y el «bloquea esto una hora mientras averiguo - qué es» puntual. Explóralas desde la barra de herramientas de Reglas, o haz clic derecho en una fila de En vivo, Informes, Agentes de IA o Inspeccionar y + qué es» puntual. Explóralas desde la barra de herramientas de Reglas, o haz clic derecho en una fila de En vivo, Historial, Agentes de IA o Inspeccionar y aplica una a lo que estés mirando.

Cada plantilla dice qué va a hacer antes de hacerlo. Todo lo que escriba más de una regla abre una tarjeta con la lista de cada host y cada horario; todo lo permanente abre el editor ya rellenado; y solo las reglas que se deshacen solas —una @@ -571,10 +571,10 @@

Dispositivos: Bluetooth, USB y almacenamiento externo

evento que de verdad importa a la gente. El rendimiento tampoco está aquí, por la misma razón que no está en Bluetooth.

Modo Enfoque

-

Elige unas cuantas apps y destinos y todas las pantallas mostrarán solo eso: En vivo, Informes, Alertas, Agentes de IA e Inspeccionar, y también las tasas de +

Elige unas cuantas apps y destinos y todas las pantallas mostrarán solo eso: En vivo, Historial, Alertas, Agentes de IA e Inspeccionar, y también las tasas de la barra de menús. Sirve para ver trabajar a un agente sin el resto del Mac por medio.

    -
  • Haz clic derecho en cualquier fila de En vivo, Informes o Agentes de IA y elige Enfocar en…, o usa el control Enfoque al final de +
  • Haz clic derecho en cualquier fila de En vivo, Historial o Agentes de IA y elige Enfocar en…, o usa el control Enfoque al final de la barra lateral para elegir entre las apps que han estado activas y escribir destinos.
  • ⇧⌘F activa y desactiva el Enfoque, igual que la barra de menús, que además muestra qué está enfocado.
  • Un destino se lleva sus subdominios: example.com cubre api.example.com. Las direcciones IP funcionan; @@ -615,7 +615,7 @@

    Exportar a OpenTelemetry o a un SIEM

  • Nunca nada de la inspección HTTPS. Ni cabeceras, ni cuerpos, ni llamadas de herramientas: la exportación solo puede llevar agregados y alertas, así que no hay por dónde se escapen ni por accidente.
  • Las cabeceras de autenticación se guardan en tu llavero de inicio de sesión, no en las preferencias. Solo se muestran sus nombres.
  • -
  • Lo que Flowlight envía aparece en Flowlight, en En vivo y en Informes, como el tráfico de cualquier otra app, incluido +
  • Lo que Flowlight envía aparece en Flowlight, en En vivo y en Historial, como el tráfico de cualquier otra app, incluido un colector en 127.0.0.1.

Dos cosas que esperar: los agregados se consolidan con unos dos minutos de retraso, así que un intervalo de menos de un minuto consulta más a menudo sin que los datos @@ -756,7 +756,7 @@

Limitaciones

diff --git a/docs/es/index.html b/docs/es/index.html index 29c90632..0119022d 100644 --- a/docs/es/index.html +++ b/docs/es/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

Observa la actividad de red de tus apps.

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniversalGPL-3.0Sin telemetría

+

v0.17.0macOS 15+UniversalGPL-3.0Sin telemetría

@@ -127,7 +127,7 @@

Observa la actividad de red de tus apps.
-
El mapa de actividad de IA de Flowlight. Las tarjetas de agentes se conectan mediante herramientas atribuidas y puertas de enlace configuradas; la ruta observada de magpie a Flowlight se ramifica después hacia servicios LLM y dominios. El ancho de las cintas muestra el tráfico del período.

Ve la ruta real de IA: agentes, herramientas atribuidas, puertas de enlace configuradas, la etapa de proxy observada por Flowlight y destinos exactos. El ancho muestra el total recibido y enviado en el período seleccionado. Con datos de demostración.

@@ -149,15 +149,15 @@

Preguntas que responde en segundos

Agentes de IA

Un agente trabaja mientras estás en una reunión

Verás todos los hosts que él y sus herramientas tocaron además de su proveedor de modelo, y recibirás una alerta si sale de su lista de permitidos, envía correo o sube 100 MB a un sitio nuevo.

-
Informes

Tu subida se ha disparado y no sabes por qué

-

Pasa el cursor por el pico para ver qué app hay detrás, haz clic para bajar de la hora al minuto y sigue el rastro hasta el dominio y la IP exactos.

+
Historial

Tu subida se ha disparado y no sabes por qué

+

Pasa el cursor por el pico para ver una tarjeta desplazable con las apps que contribuyeron; usa los intervalos o el navegador para pasar de la hora al minuto y seguir el rastro hasta el dominio y la IP exactos.

Alertas

Una app nueva ha empezado a llamar a casa

El primer contacto con un dominio nuevo, un puerto no estándar o un pico de tráfico generan una alerta que nombra la app y la cifra que la activó.

En vivo

Algo está saturando tu conexión ahora mismo

Quién más habla, actualizado cada segundo, con el destino más activo de cada app y las tasas en vivo en la barra de menús.

-
Informes

Los datos de tu punto de acceso se han esfumado este mes

+
Historial

Los datos de tu punto de acceso se han esfumado este mes

Cambia a la vista de mes y agrupa por app. Quien más consume ocupa la primera fila, con exportación a CSV si necesitas pruebas.

-
Informes · Destino

Necesitas auditar adónde van los datos

+
Historial · Destino

Necesitas auditar adónde van los datos

Agrupa por destino para ver todas las apps que hablan con un dominio, o por IP para ver qué hay detrás de una dirección.

@@ -175,7 +175,7 @@

En vivo

¿Qué se mueve ahora mismo? Tasas por app, los dos últimos

Agentes de IA

¿Qué hacen mis agentes aparte de llamar a su modelo? Proveedores, otros hosts, distintivos de riesgo.

⌘2
-

Informes

¿Adónde ha ido todo? Del segundo al año, agrupado por app, destino o IP, con gráficos y CSV.

⌘3
+

Historial

¿Adónde ha ido todo? Del segundo al año, agrupado por app, destino o IP, con gráficos y CSV.

⌘3

Alertas

¿Qué ha pintado mal? Alertas por app, explicables, con el destino y el umbral.

⌘4
@@ -187,7 +187,7 @@

Dispositivos

Bluetooth, USB y cámaras: qué está emparejado, conect

Inspeccionar

Opcional. ¿Qué envió el agente en realidad y qué llamada de herramienta lo provocó? Peticiones descifradas, llamadas de herramientas, resultados.

⌘7
-

Visualizar

¿Qué se comunica? Un mapa Sankey ampliable del tráfico de apps y las rutas comprobadas de agentes de IA, con una lista exacta equivalente.

+

Conexiones

¿Qué se comunica? Un mapa Sankey ampliable del tráfico de apps y las rutas comprobadas de agentes de IA, con una lista exacta equivalente.

@@ -470,9 +470,9 @@

Un monitor que no tienes que vigilar

-
La vista Informes con barras por hora de datos recibidos y enviados y gráficos de anillo de apps, destinos y protocolos
-
Informes. Zoom del segundo al año, tres agrupaciones y gráficos que siguen legibles con cientos de apps.
+
La vista Historial con barras por hora de datos recibidos y enviados y gráficos de anillo de apps, destinos y protocolos
+
Historial. Zoom del segundo al año, tres agrupaciones y gráficos que siguen legibles con cientos de apps.
La vista Alertas con alertas de exfiltración por un agente, de correo, de FTP, de actividad mientras no estás y de picos de tráfico
Alertas. Cada una nombra la app, el destino y la cifra que la activó.
@@ -589,7 +589,7 @@

Ten claro qué sale de tu Mac.

diff --git a/docs/es/privacy/index.html b/docs/es/privacy/index.html index 33df96f8..23184479 100644 --- a/docs/es/privacy/index.html +++ b/docs/es/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/es/threat-model/index.html b/docs/es/threat-model/index.html index 00f96ba9..91a62f85 100644 --- a/docs/es/threat-model/index.html +++ b/docs/es/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -221,7 +221,7 @@

Informar de una vulnerabilidad

diff --git a/docs/fr/about/index.html b/docs/fr/about/index.html index 0414bd93..c5f894c9 100644 --- a/docs/fr/about/index.html +++ b/docs/fr/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Remerciements

diff --git a/docs/fr/docs/index.html b/docs/fr/docs/index.html index 151447ea..9d484e7c 100644 --- a/docs/fr/docs/index.html +++ b/docs/fr/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentation

Utiliser Flowlight

-

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.16.11, macOS 15 ou version ultérieure.

+

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.17.0, macOS 15 ou version ultérieure.

- - + + @@ -179,11 +179,11 @@

Les vues

L’écran En direct : une liste d’applications avec leurs débits d’envoi et de réception actuels et leur destination la plus active.
En direct, l’écran sur lequel Flowlight s’ouvre.
-

Dans Rapports, survolez une barre pour voir quelles apps l’ont produite, cliquez pour zoomer, et double-cliquez n’importe quelle ligne pour y restreindre le rapport.

-

Visualiser le trafic

-

Visualiser affiche chaque app, destination exacte et relation observée dans la période, la recherche et le focus courants. La largeur représente les octets. De rares tirets roses et bleus se déplacent en sens opposés pour l’envoi et la réception ; chaque arête possède sa propre vitesse stable et Réduire les animations conserve les mêmes chemins statiques.

-

Par défaut, Trafic affiche les dix apps les plus actives et Activité IA les dix racines d’agents prouvées les plus actives, classées selon la totalité des octets reçus et envoyés. Les deux sélecteurs facultatifs avec recherche, source et destination, couvrent tous-vers-tous, un-vers-tous, tous-vers-un et un-vers-un. Chaque choix limite le sélecteur opposé aux extrémités disposant de preuves observées ou bloquées ; Tous reste disponible et Réinitialiser remet les deux sélecteurs à zéro. Une carte ciblée inclut chaque lanceur, agent, outil ou service MCP, passerelle, étape du proxy Flowlight, destination et relation observée ou bloquée connectés. Seuls les périmètres ciblés exceptionnellement grands sont regroupés progressivement ; chaque groupe conserve tous les identifiants exacts de ses membres. Liste et Rapports restent complets et numériquement identiques.

-

Sélectionnez un nœud ou une connexion pour obtenir les valeurs exactes, puis ouvrez Rapports, Inspecter ou une règle non enregistrée avec la même app et la même destination. Liste fournit le même graphe complet au clavier et à VoiceOver. Connexions signifie flux réseau, pas requêtes HTTP ; Observé n’est pas une décision d’autorisation.

+

Dans Historique, survolez une barre pour ouvrir une fiche défilante qui suit le pointeur et affiche les apps contributrices ; les barres ne zooment pas au clic. Double-cliquez une ligne pour y restreindre l’historique.

+

Connexions

+

Connexions affiche chaque app, destination exacte et relation observée dans la période, la recherche et le focus courants. La largeur représente les octets. De rares tirets roses et bleus se déplacent en sens opposés pour l’envoi et la réception ; chaque arête possède sa propre vitesse stable et Réduire les animations conserve les mêmes chemins statiques.

+

Par défaut, Trafic affiche les dix apps les plus actives et Activité IA les dix racines d’agents prouvées les plus actives, classées selon la totalité des octets reçus et envoyés. Les deux sélecteurs facultatifs avec recherche, source et destination, couvrent tous-vers-tous, un-vers-tous, tous-vers-un et un-vers-un. Chaque choix limite le sélecteur opposé aux extrémités disposant de preuves observées ou bloquées ; Tous reste disponible et Réinitialiser remet les deux sélecteurs à zéro. Une carte ciblée inclut chaque lanceur, agent, outil ou service MCP, passerelle, étape du proxy Flowlight, destination et relation observée ou bloquée connectés. Seuls les périmètres ciblés exceptionnellement grands sont regroupés progressivement ; chaque groupe conserve tous les identifiants exacts de ses membres. Liste et Historique restent complets et numériquement identiques.

+

Sélectionnez un nœud ou une connexion pour obtenir les valeurs exactes, puis ouvrez Historique, Inspecter ou une règle non enregistrée avec la même app et la même destination. Liste fournit le même graphe complet au clavier et à VoiceOver. Connexions signifie flux réseau, pas requêtes HTTP ; Observé n’est pas une décision d’autorisation.

Règles pour les agents IA

Une app compte comme agent si Flowlight la connaît par son nom (16 à ce jour, dont Claude Code, Codex, Cursor, GitHub Copilot, @@ -201,7 +201,7 @@

Outils & serveurs MCP

Les agents font une grande part de leur travail via d’autres processus : un outil shell lance curl, git ou npm, et les serveurs MCP tournent comme des processus à part. Flowlight remonte les parents de chaque processus jusqu’à l’agent qui l’a lancé, pour que ce trafic soit compté comme celui de l’agent. Dans Agents IA, le détail de l’agent les liste sous Outils & serveurs MCP, et les - destinations indiquent via curl ou via github MCP. Dans Rapports, la ligne du processus indique via Claude Code.

+ destinations indiquent via curl ou via github MCP. Dans Historique, la ligne du processus indique via Claude Code.

Les serveurs MCP sont nommés en rapprochant leur ligne de commande de la configuration MCP de Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed et Gemini CLI. Les serveurs MCP distants sont reconnus par le nom d’hôte de leur URL, et les serveurs non configurés par des noms de paquets identifiables comme @@ -244,7 +244,7 @@

Configuration des agents : ce que Flowlight li

À regarder de près

-

Un troisième mode dans Rapports, à côté de la répartition et des graphiques. Il compare entre elles les apps du rapport +

Un troisième mode dans Historique, à côté de la répartition et des graphiques. Il compare entre elles les apps du rapport et désigne celles dont les destinations ne ressemblent pas au reste : beaucoup plus d’endroits que leurs semblables, des adresses qui ne se sont jamais résolues en un nom, des noms d’hôte qui ont l’air générés plutôt que choisis, bien plus d’envoi que de réception, et des protocoles qui sont accessoires plutôt que la raison d’être de l’app. Chaque constat porte les indices qui le fondent, et cliquer dessus restreint le rapport à cette @@ -260,7 +260,7 @@

Par où les octets sont partis

sans nom.

Chaque flux porte désormais un canal : Réseau, Wi-Fi pair à pair, Ce Mac (boucle locale, qui n’a jamais quitté la machine) ou Tunnel (dans un VPN ; ce qui se passe ensuite n’est pas visible ici). Restreignez un rapport à - l’un d’eux depuis la barre d’outils de Rapports ; le canal voyage avec les exportations CSV et avec tout ce qui est envoyé à un collecteur.

+ l’un d’eux depuis la barre d’outils de Historique ; le canal voyage avec les exportations CSV et avec tout ce qui est envoyé à un collecteur.

Les lignes de pair à pair sont nommées d’après la fonctionnalité qui les a ouvertes — AirDrop and Handoff · nearby device, Continuity · nearby device — parce qu’une adresse lien-local ne vous apprend rien et que l’appareil dans la pièce n’a aucun nom que ce Mac puisse connaître. Une app qui utilise directement la radio garde son propre nom, ce qui est la réponse juste dans son cas.

@@ -281,7 +281,7 @@

Les autres alertes

Les apps d’Apple sont ignorées par défaut. macOS contacte Apple sans arrêt — mise à jour de logiciels, iCloud, notifications push, heure, tuiles de Plans — sur des hôtes et des ports qui sont nouveaux la première fois qu’ils apparaissent, et tout lister enterre la seule ligne qui vaut la peine d’être lue. Désactivez-le dans Réglages › Alertes si vous les voulez. Dans les deux cas le trafic est quand même - enregistré, apparaît toujours dans En direct, Rapports et Demander, et reste soumis à toutes les règles, garde-fous et listes d’autorisation : le réglage + enregistré, apparaît toujours dans En direct, Historique et Demander, et reste soumis à toutes les règles, garde-fous et listes d’autorisation : le réglage décide de ce qui est listé, jamais de ce qui est permis.

Demander

@@ -309,9 +309,9 @@

Demander

Des graphiques quand la forme compte. Une évolution dans le temps revient en courbe, une comparaison en barres, la répartition d’un tout en camembert. Flowlight les dessine à partir des lignes mêmes que la requête a renvoyées, donc l’image et la phrase ne peuvent pas se contredire, et le modèle peut demander une autre forme, ou aucune.

-

Chaque requête est listée sous la réponse, et un clic ouvre Rapports pour les données de trafic ou l’écran +

Chaque requête est listée sous la réponse, et un clic ouvre Historique pour les données de trafic ou l’écran approprié pour les réponses sur les appareils et la configuration. Une réponse que vous ne pouvez pas vérifier est une supposition en meilleure grammaire.

-

Flowlight s’applique à lui-même sa propre exigence. Tout ce que cette fonctionnalité envoie apparaît dans En direct et Rapports +

Flowlight s’applique à lui-même sa propre exigence. Tout ce que cette fonctionnalité envoie apparaît dans En direct et Historique comme le trafic de n’importe quelle autre app — y compris quand le serveur de modèle est sur ce Mac même, le cas qu’il aurait été le plus facile de passer discrètement sous silence.

@@ -383,7 +383,7 @@

Inspection HTTPS (facultative)

peut pas faire, c’est atteindre les agents déjà en cours — leurs réglages de proxy ont été lus au lancement, et plus rien ne peut les changer.

-

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Rapports ou Agents IA et +

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Historique ou Agents IA et choisissez Inspecter le trafic de … : Inspecter s’ouvre en n’affichant que cette app, ou que cette destination, avec une étiquette qui le dit et que vous retirez d’un clic. C’est un cadrage, non une recherche — une version antérieure mettait le nom dans le champ de recherche, qui cherche aussi dans les corps des réponses : demander le trafic d’un agent renvoyait donc toutes les pages dont le HTML se @@ -411,13 +411,13 @@

Réponses simulées

Règles

Une liste d’autorisation, c’est l’idée qu’un agent se fait des endroits où il peut aller. Une règle en est la version générale : elle nomme un sujet — une app, un agent, une destination, une URL, ou un couple formé de deux d’entre eux — et dit bloquer - ou autoriser. Faites un clic droit sur n’importe quelle ligne dans En direct, Rapports, Agents IA ou Inspecter pour en écrire une sur ce que vous regardez ; + ou autoriser. Faites un clic droit sur n’importe quelle ligne dans En direct, Historique, Agents IA ou Inspecter pour en écrire une sur ce que vous regardez ; toutes atterrissent dans le même éditeur, sur l’écran Règles, parce qu’une règle qui prendrait effet hors de votre vue serait une règle que vous ne pourriez plus jamais retrouver.

Des modèles. Vingt-deux, en cinq groupes — empêcher un agent d’atteindre des registres de paquets ou d’autres fournisseurs de modèles, fermer les voies habituelles par lesquelles les données partent (sites de partage de texte, collecteurs de webhooks, dépôts de fichiers anonymes, tunnels, DNS over HTTPS), l’analytique produit et les rapports de plantage, les politiques d’horaires de travail, et le « bloque-moi ça une heure, le temps que je comprenne - ce que c’est ». Parcourez-les depuis la barre d’outils de Règles, ou faites un clic droit sur une ligne n’importe où dans En direct, Rapports, Agents IA ou Inspecter et + ce que c’est ». Parcourez-les depuis la barre d’outils de Règles, ou faites un clic droit sur une ligne n’importe où dans En direct, Historique, Agents IA ou Inspecter et appliquez-en un à ce que vous regardez.

Chaque modèle annonce ce qu’il va faire avant de le faire. Tout ce qui écrit plus d’une règle ouvre une fiche listant chaque hôte et chaque horaire ; tout ce qui est permanent ouvre l’éditeur prérempli ; et seules les règles qui se défont d’elles-mêmes — une @@ -576,10 +576,10 @@

Appareils : Bluetooth, USB et stockage externe

l’événement qui intéresse vraiment les gens. Le débit n’est pas là non plus, pour la même raison qu’il n’est pas sous Bluetooth.

Mode Focus

-

Choisissez quelques apps et destinations, et chaque écran n’affiche plus qu’elles — En direct, Rapports, Alertes, Agents IA et Inspecter, ainsi que les débits dans +

Choisissez quelques apps et destinations, et chaque écran n’affiche plus qu’elles — En direct, Historique, Alertes, Agents IA et Inspecter, ainsi que les débits dans la barre des menus. C’est fait pour regarder un agent travailler sans le reste du Mac dans le champ.

    -
  • Faites un clic droit sur n’importe quelle ligne dans En direct, Rapports ou Agents IA et choisissez Focus sur…, ou utilisez la commande Focus au bas de +
  • Faites un clic droit sur n’importe quelle ligne dans En direct, Historique ou Agents IA et choisissez Focus sur…, ou utilisez la commande Focus au bas de la barre latérale pour piocher parmi les apps qui ont été actives et saisir des destinations.
  • ⇧⌘F active et désactive Focus, et la barre des menus aussi, qui montre également ce qui est ciblé.
  • Une destination emmène ses sous-domaines avec elle : example.com couvre api.example.com. Les adresses IP fonctionnent ; @@ -620,7 +620,7 @@

    Exporter vers OpenTelemetry ou un SIEM

  • Jamais rien qui vienne de l’inspection HTTPS. Pas d’en-têtes, pas de corps, pas d’appels d’outils — l’exportation ne peut transporter que des agrégats et des alertes, donc ces choses-là n’ont nulle part où aller, même par accident.
  • Les en-têtes d’authentification sont gardés dans le trousseau de votre session, pas dans les préférences. Seuls leurs noms sont affichés.
  • -
  • Ce que Flowlight envoie apparaît dans Flowlight, dans En direct et Rapports, comme le trafic de n’importe quelle autre app — y compris +
  • Ce que Flowlight envoie apparaît dans Flowlight, dans En direct et Historique, comme le trafic de n’importe quelle autre app — y compris pour un collecteur sur 127.0.0.1.

Deux choses à prévoir : les agrégats sont consolidés avec environ deux minutes de retard, donc un intervalle inférieur à la minute interroge plus souvent sans que les données @@ -762,7 +762,7 @@

Limites

diff --git a/docs/fr/index.html b/docs/fr/index.html index 655b5b8a..264c9396 100644 --- a/docs/fr/index.html +++ b/docs/fr/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

Voyez l’activité réseau de vos apps.

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniverselGPL-3.0Sans télémétrie

+

v0.17.0macOS 15+UniverselGPL-3.0Sans télémétrie

@@ -127,7 +127,7 @@

Voyez l’activité réseau de vos apps.
-
La carte d’activité IA de Flowlight. Les cartes des agents passent par des outils attribués et des passerelles configurées ; la route observée de magpie vers Flowlight se ramifie ensuite vers les services LLM et les domaines. La largeur des rubans indique le trafic de la période.

Voyez la route IA réelle : agents, outils attribués, passerelles configurées, étape proxy observée par Flowlight et destinations exactes. La largeur indique le total reçu et envoyé pendant la période sélectionnée. Avec des données de démonstration.

@@ -149,15 +149,15 @@

Des questions réglées en quelques secondes

Agents IA

Un agent travaille pendant que vous êtes en réunion

Voyez tous les hôtes que lui et ses outils ont contactés en dehors de son fournisseur de modèle, et recevez une alerte s’il sort de sa liste d’autorisation, envoie un e-mail ou expédie 100 MB vers une nouvelle destination.

-
Rapports

Votre débit d’envoi s’envole et vous ne savez pas pourquoi

-

Survolez le pic pour voir l’app qui en est la cause, cliquez pour passer de l’heure à la minute, et remontez jusqu’au domaine et à l’IP exacts.

+
Historique

Votre débit d’envoi s’envole et vous ne savez pas pourquoi

+

Survolez le pic pour afficher une fiche défilante des apps contributrices, puis utilisez les périodes ou le navigateur pour passer de l’heure à la minute et remonter jusqu’au domaine et à l’IP exacts.

Alertes

Une nouvelle app s’est mise à appeler son éditeur

Premier contact avec un nouveau domaine, port non standard, pic de trafic : chacun déclenche une alerte qui nomme l’app et le chiffre qui l’a déclenchée.

En direct

Quelque chose sature votre connexion à l’instant même

Les plus gros consommateurs actualisés chaque seconde, la destination la plus active de chaque app, et les débits en direct dans la barre des menus.

-
Rapports

Votre forfait de partage de connexion a fondu ce mois-ci

+
Historique

Votre forfait de partage de connexion a fondu ce mois-ci

Passez à la vue du mois et groupez par app. Le plus gros consommateur est en première ligne, avec une exportation CSV s’il vous faut des preuves.

-
Rapports · Destination

Vous devez auditer où partent les données

+
Historique · Destination

Vous devez auditer où partent les données

Groupez par destination pour voir toutes les apps qui parlent à un domaine, ou par IP pour voir ce qui se cache derrière une adresse.

@@ -175,7 +175,7 @@

En direct

Qu’est-ce qui circule en ce moment ? Les débits par

Agents IA

Que font mes agents en plus d’appeler leur modèle ? Fournisseurs, autres hôtes, badges de risque.

⌘2
-

Rapports

Où tout cela est-il parti ? De la seconde à l’année, par app, par destination ou par IP, avec graphiques et CSV.

⌘3
+

Historique

Où tout cela est-il parti ? De la seconde à l’année, par app, par destination ou par IP, avec graphiques et CSV.

⌘3

Alertes

Qu’est-ce qui clochait ? Des alertes explicables, par app, avec la destination et le seuil.

⌘4
@@ -187,7 +187,7 @@

Appareils

Bluetooth, USB et caméras : ce qui est appairé, bran

Inspecter

Facultatif. Qu’a réellement envoyé l’agent, et quel appel d’outil en est la cause ? Requêtes déchiffrées, appels d’outils, résultats.

⌘7
-

Visualiser

Qui communique ? Une carte Sankey zoomable du trafic des apps et des chemins attestés des agents IA, avec une liste exacte équivalente.

+

Connexions

Qui communique ? Une carte Sankey zoomable du trafic des apps et des chemins attestés des agents IA, avec une liste exacte équivalente.

@@ -470,9 +470,9 @@

Un moniteur que vous n’avez pas à surveiller

-
La vue Rapports avec les barres horaires des données reçues et envoyées et des anneaux pour les apps, les destinations et les protocoles
-
Rapports. Zoom de la seconde à l’année, trois regroupements, des graphiques qui restent lisibles avec des centaines d’apps.
+
La vue Historique avec les barres horaires des données reçues et envoyées et des anneaux pour les apps, les destinations et les protocoles
+
Historique. Zoom de la seconde à l’année, trois regroupements, des graphiques qui restent lisibles avec des centaines d’apps.
La vue Alertes listant des alertes d’exfiltration par un agent, d’e-mail, de FTP, d’activité pendant une absence et de pic de trafic
Alertes. Chacune nomme l’app, la destination et le chiffre qui l’a déclenchée.
@@ -589,7 +589,7 @@

Sachez ce qui quitte votre Mac.

diff --git a/docs/fr/privacy/index.html b/docs/fr/privacy/index.html index aafbadd3..397ca450 100644 --- a/docs/fr/privacy/index.html +++ b/docs/fr/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contact

diff --git a/docs/fr/threat-model/index.html b/docs/fr/threat-model/index.html index dcdba3de..c7edb0d3 100644 --- a/docs/fr/threat-model/index.html +++ b/docs/fr/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -224,7 +224,7 @@

Signaler une vulnérabilité

diff --git a/docs/index.html b/docs/index.html index 034897de..30b2d21a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

See your apps' network activity.
brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniversalGPL-3.0No telemetry

+

v0.17.0macOS 15+UniversalGPL-3.0No telemetry

@@ -127,7 +127,7 @@

See your apps' network activity.
-
Flowlight's AI activity map. Agent cards connect through attributed tools and configured gateways; the observed magpie to Flowlight route then branches to LLM services and domains, with ribbon width showing period traffic volume.

See the real AI route: agents, attributed tools, configured gateways, Flowlight's observed proxy stage, and exact destinations. Ribbon width shows total received plus sent traffic for the selected period. Shown with demo data.

@@ -157,15 +157,15 @@

Questions it answers in seconds

AI Agents

An agent is running while you're in a meeting

See every host it and its tools touched besides its model provider, and get an alert if it leaves its allowlist, sends email or uploads 100 MB somewhere new.

-
Reports

Your upload spiked and you don't know why

-

Hover the spike to see the app behind it, click to zoom from the hour to the minute, and follow it to the exact domain and IP.

+
History

Your upload spiked and you don't know why

+

Hover the spike for a scrollable contributor card, then use the range presets or navigator to move from hour to minute and follow it to the exact domain and IP.

Alerts

A new app started phoning home

First contact with a new domain, a non-standard port or a traffic spike each raise an alert that names the app and the number that tripped it.

Live

Something is saturating your connection right now

Top talkers updated every second, with the busiest destination for each app, and live rates in your menu bar.

-
Reports

Your hotspot data vanished this month

+
History

Your hotspot data vanished this month

Switch to the month view and group by app. The biggest consumer is the top row, with CSV export if you need receipts.

-
Reports · Destination

You need to audit where data goes

+
History · Destination

You need to audit where data goes

Group by destination to see every app that talks to a domain, or by IP to see what sits behind an address.

@@ -183,7 +183,7 @@

Live

What's moving right now? Per-app rates, the last two minutes, th

AI Agents

What are my agents doing besides calling their model? Providers, other hosts, risk badges.

⌘2
-

Reports

Where did it all go? Second to year, grouped by app, destination or IP, with charts and CSV.

⌘3
+

History

Where did it all go? From 15 minutes through all history, grouped by app, destination or IP, with charts and CSV.

⌘3

Alerts

What looked wrong? Explainable, per-app alerts with the destination and the threshold.

⌘4
@@ -195,7 +195,7 @@

Devices

Bluetooth, USB, and cameras: what's paired, what's attached o

Inspect

Optional. What did the agent actually send, and which tool call made it? Decrypted requests, tool calls, results.

⌘7
-

Visualize

What is communicating? A zoomable Sankey map for app traffic and proved AI-agent paths, with exact list parity.

+

Connections

What is communicating? A zoomable Sankey map for app traffic and proved AI-agent paths, with exact list parity.

@@ -492,9 +492,9 @@

A monitor you don't have to monitor

-
Reports view with hourly received and sent bars and donut charts of apps, destinations and protocols
-
Reports. Second-to-year zoom, three groupings, charts that stay readable with hundreds of apps.
+
History view with hourly received and sent bars and donut charts of apps, destinations and protocols
+
History. Preset ranges, a draggable navigator, three groupings, and charts that stay readable with hundreds of apps.
Alerts view listing agent exfiltration, email, FTP, while-away and traffic spike alerts
Alerts. Each one names the app, the destination and the number that tripped it.
@@ -612,7 +612,7 @@

Know what leaves your Mac.

diff --git a/docs/it/about/index.html b/docs/it/about/index.html index 432e72b4..8ff224e8 100644 --- a/docs/it/about/index.html +++ b/docs/it/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Ringraziamenti

diff --git a/docs/it/docs/index.html b/docs/it/docs/index.html index 892631a5..90a8478e 100644 --- a/docs/it/docs/index.html +++ b/docs/it/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentazione

Usare Flowlight

-

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.16.11, macOS 15 o successivo.

+

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.17.0, macOS 15 o successivo.

- - + + @@ -179,11 +179,11 @@

Le viste

La schermata In diretta: un elenco di applicazioni con le loro velocità attuali di invio e ricezione e la destinazione più trafficata.
In diretta, la schermata con cui Flowlight si apre.
-

In Rapporti, passa il puntatore su una barra per vedere quali app l'hanno generata, fai clic per ingrandire e doppio clic su una riga per limitare il rapporto a essa.

-

Visualizzare il traffico

-

Visualizza mostra ogni app, destinazione esatta e relazione osservata nell’intervallo, nella ricerca e nel focus correnti. La larghezza rappresenta i byte. Trattini rosa e blu sparsi scorrono in direzioni opposte per invio e ricezione; ogni arco ha la propria velocità stabile e Riduci movimento mantiene gli stessi percorsi statici.

-

Per impostazione predefinita, Traffico mostra le dieci app più attive e Attività IA le dieci radici di agenti comprovate più attive, ordinate in base al totale completo dei byte ricevuti e inviati. I due selettori facoltativi con ricerca, origine e destinazione, coprono qualsiasi-a-qualsiasi, uno-a-qualsiasi, qualsiasi-a-uno e uno-a-uno. Ogni scelta limita il selettore opposto agli endpoint con prove osservate o bloccate; Qualsiasi resta sempre disponibile e Ripristina azzera entrambi i selettori. Una mappa focalizzata include ogni avvio, agente, strumento o servizio MCP, gateway, fase del proxy Flowlight, destinazione e relazione osservata o bloccata collegati. Solo gli ambiti focalizzati insolitamente grandi vengono raggruppati progressivamente; ogni gruppo conserva tutti gli ID esatti dei membri. Elenco e Rapporti restano completi e numericamente identici.

-

Seleziona un nodo o una connessione per i valori esatti, quindi apri Rapporti, Ispeziona o una regola non salvata con la stessa app e destinazione. Elenco offre lo stesso grafo completo per tastiera e VoiceOver. Connessioni significa flussi di rete, non richieste HTTP; Osservato non è una decisione di autorizzazione.

+

In Cronologia, passa il puntatore su una barra per aprire una scheda scorrevole che segue il cursore e mostra le app che hanno contribuito; le barre non ingrandiscono al clic. Fai doppio clic su una riga per limitare la cronologia a essa.

+

Connessioni

+

Connessioni mostra ogni app, destinazione esatta e relazione osservata nell’intervallo, nella ricerca e nel focus correnti. La larghezza rappresenta i byte. Trattini rosa e blu sparsi scorrono in direzioni opposte per invio e ricezione; ogni arco ha la propria velocità stabile e Riduci movimento mantiene gli stessi percorsi statici.

+

Per impostazione predefinita, Traffico mostra le dieci app più attive e Attività IA le dieci radici di agenti comprovate più attive, ordinate in base al totale completo dei byte ricevuti e inviati. I due selettori facoltativi con ricerca, origine e destinazione, coprono qualsiasi-a-qualsiasi, uno-a-qualsiasi, qualsiasi-a-uno e uno-a-uno. Ogni scelta limita il selettore opposto agli endpoint con prove osservate o bloccate; Qualsiasi resta sempre disponibile e Ripristina azzera entrambi i selettori. Una mappa focalizzata include ogni avvio, agente, strumento o servizio MCP, gateway, fase del proxy Flowlight, destinazione e relazione osservata o bloccata collegati. Solo gli ambiti focalizzati insolitamente grandi vengono raggruppati progressivamente; ogni gruppo conserva tutti gli ID esatti dei membri. Elenco e Cronologia restano completi e numericamente identici.

+

Seleziona un nodo o una connessione per i valori esatti, quindi apri Cronologia, Ispeziona o una regola non salvata con la stessa app e destinazione. Elenco offre lo stesso grafo completo per tastiera e VoiceOver. Connessioni significa flussi di rete, non richieste HTTP; Osservato non è una decisione di autorizzazione.

Regole per gli agenti IA

Un'app conta come agente se Flowlight la conosce per nome (oggi 16, tra cui Claude Code, Codex, Cursor, GitHub Copilot, @@ -201,7 +201,7 @@

Strumenti e server MCP

Gli agenti svolgono molto del loro lavoro tramite altri processi: uno strumento shell esegue curl, git o npm, e i server MCP girano come processi a sé. Flowlight risale la catena dei processi padre fino all'agente che li ha avviati, così quel traffico conta come traffico dell'agente. In Agenti IA, il dettaglio dell'agente li elenca sotto Strumenti e server MCP, e le - destinazioni riportano via curl o via github MCP. In Rapporti, la riga del processo riporta via Claude Code.

+ destinazioni riportano via curl o via github MCP. In Cronologia, la riga del processo riporta via Claude Code.

I server MCP prendono il nome confrontando la loro riga di comando con la configurazione MCP di Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed e Gemini CLI. I server MCP remoti vengono riconosciuti dal nome host nel loro URL, e quelli non configurati da nomi di pacchetto riconoscibili come @@ -244,7 +244,7 @@

Configurazione degli agenti: cosa legge Flowlight s

Vale un'occhiata

-

Una terza modalità in Rapporti, accanto alla ripartizione e ai grafici. Confronta tra loro le app presenti nel rapporto +

Una terza modalità in Cronologia, accanto alla ripartizione e ai grafici. Confronta tra loro le app presenti nel rapporto e indica quelle le cui destinazioni non assomigliano alle altre: molti più posti dei loro pari, indirizzi che non sono mai stati risolti in un nome, nomi host che sembrano generati anziché scelti, molto più inviato che ricevuto, e protocolli che sono un'attività collaterale anziché lo scopo dell'app. Ogni rilievo porta con sé le prove che lo sostengono, e facendo clic su uno il rapporto si limita a quell'app.

@@ -259,7 +259,7 @@

Da dove sono usciti i byte

senza nome.

Ogni flusso ora porta un canale: Rete, Wi-Fi peer-to-peer, Questo Mac (loopback, che non ha mai lasciato la macchina) o Tunnel (dentro una VPN; dove sia andato dopo non è visibile qui). Limita un rapporto a - uno di essi dalla barra strumenti di Rapporti; il canale viaggia con le esportazioni CSV e con tutto ciò che viene inviato a un collector.

+ uno di essi dalla barra strumenti di Cronologia; il canale viaggia con le esportazioni CSV e con tutto ciò che viene inviato a un collector.

Le righe peer-to-peer prendono il nome dalla funzione che le ha aperte — AirDrop and Handoff · nearby device, Continuity · nearby device — perché un indirizzo link-local non dice nulla e il dispositivo nella stanza non ha un nome che questo Mac possa apprendere. Un'app che usa la radio direttamente mantiene il proprio nome, che per lei è la risposta veritiera.

@@ -280,7 +280,7 @@

Altri avvisi

Le app di Apple sono escluse per impostazione predefinita. macOS comunica costantemente con Apple — Aggiornamento Software, iCloud, notifiche push, ora, riquadri di Mappe — su host e porte che la prima volta risultano nuovi, e segnalare tutto questo seppellisce l'unica riga che vale la pena leggere. Disattivalo in Impostazioni › Avvisi se li vuoi. In ogni caso il traffico viene comunque - registrato, compare in In diretta, Rapporti e Chiedi, e resta soggetto a ogni regola, protezione ed elenco consentiti: l'impostazione + registrato, compare in In diretta, Cronologia e Chiedi, e resta soggetto a ogni regola, protezione ed elenco consentiti: l'impostazione decide cosa viene elencato, mai cosa viene consentito.

Chiedi

@@ -308,9 +308,9 @@

Chiedi

Grafici quando conta la forma. Un andamento nel tempo torna come linea, un confronto come barre, la ripartizione di un intero come torta. Flowlight li disegna dalle stesse righe restituite dalla query, così immagine e frase non possono contraddirsi, e il modello può chiedere una forma diversa o nessuna.

-

Ogni query è elencata sotto la risposta e un clic apre Rapporti per i dati sul traffico o la schermata pertinente +

Ogni query è elencata sotto la risposta e un clic apre Cronologia per i dati sul traffico o la schermata pertinente per le risposte su dispositivi e configurazione. Una risposta che non puoi verificare è un'ipotesi con una grammatica migliore.

-

Flowlight applica a sé stesso il proprio standard. Tutto ciò che questa funzione invia compare in In diretta e Rapporti +

Flowlight applica a sé stesso il proprio standard. Tutto ciò che questa funzione invia compare in In diretta e Cronologia come il traffico di qualsiasi altra app — anche quando il server del modello è su questo stesso Mac, che è il caso che sarebbe stato più facile lasciar fuori in silenzio.

@@ -381,7 +381,7 @@

Ispezione HTTPS (opzionale)

inevitabile: tutto il senso sta nel fatto che ciò che lo sostituisce parte con un ambiente diverso. Quello che non può fare è raggiungere gli agenti già in esecuzione — le loro impostazioni proxy sono state lette all'avvio, e ora nulla può cambiarle.

-

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Rapporti o Agenti IA e scegli +

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Cronologia o Agenti IA e scegli Ispeziona il traffico di …: Ispeziona si apre mostrando solo quell'app, o solo quella destinazione, con un'etichetta che lo dice e che puoi rimuovere con un clic. Delimita invece di cercare — una versione precedente metteva il nome nel campo di ricerca, che cerca anche nei corpi delle risposte, così chiedere il traffico di un agente restituiva ogni pagina il cui HTML si limitava a menzionarlo. Può comparire solo il traffico che è @@ -409,13 +409,13 @@

Risposte simulate

Regole

Un elenco consentiti è l'idea che un singolo agente ha di dove può andare. Una regola è la versione generale: indica un soggetto — un'app, un agente, una destinazione, un URL o una coppia di due di questi — e dice blocca - o consenti. Fai clic con il tasto destro su una riga in In diretta, Rapporti, Agenti IA o Ispeziona per scriverne una su ciò che stai guardando; + o consenti. Fai clic con il tasto destro su una riga in In diretta, Cronologia, Agenti IA o Ispeziona per scriverne una su ciò che stai guardando; tutte finiscono nello stesso editor della schermata Regole, perché una regola che entra in vigore fuori dalla vista sarebbe una regola che non potresti più ritrovare.

Modelli. Ventidue, in cinque gruppi: impedire a un agente di raggiungere i registri di pacchetti o altri provider di modelli, chiudere le vie più comuni per cui i dati escono (siti di paste, raccoglitori di webhook, servizi anonimi per caricare file, tunnel, DNS over HTTPS), analisi di prodotto e segnalazione degli arresti anomali, politiche sull'orario di lavoro, e il classico «blocca questo per un'ora mentre capisco - cos'è». Sfogliali dalla barra strumenti di Regole, oppure fai clic con il tasto destro su una riga in In diretta, Rapporti, Agenti IA o Ispeziona e + cos'è». Sfogliali dalla barra strumenti di Regole, oppure fai clic con il tasto destro su una riga in In diretta, Cronologia, Agenti IA o Ispeziona e applicane uno a ciò che stai guardando.

Ogni modello dice cosa farà prima di farlo. Tutto ciò che scrive più di una regola apre una scheda con l'elenco di ogni host e orario; tutto ciò che è permanente apre l'editor già compilato; e solo le regole che si annullano da sole — un'ora, @@ -574,10 +574,10 @@

Dispositivi: Bluetooth, USB e archiviazione esterna

l'evento che interessa davvero. Nemmeno qui c'è il throughput, per la stessa ragione per cui non c'è sotto Bluetooth.

Modalità Focus

-

Scegli qualche app e qualche destinazione e ogni schermata mostra solo quelle — In diretta, Rapporti, Avvisi, Agenti IA e Ispeziona, e le velocità +

Scegli qualche app e qualche destinazione e ogni schermata mostra solo quelle — In diretta, Cronologia, Avvisi, Agenti IA e Ispeziona, e le velocità nella barra dei menu. Serve a osservare un agente all'opera senza il resto del Mac di mezzo.

    -
  • Fai clic con il tasto destro su una riga in In diretta, Rapporti o Agenti IA e scegli Focus su…, oppure usa il controllo Focus in fondo +
  • Fai clic con il tasto destro su una riga in In diretta, Cronologia o Agenti IA e scegli Focus su…, oppure usa il controllo Focus in fondo alla barra laterale per scegliere tra le app che sono state attive e per digitare destinazioni.
  • ⇧⌘F attiva e disattiva Focus, come fa anche la barra dei menu, che mostra anche cosa è sotto focus.
  • Una destinazione porta con sé i suoi sottodomini: example.com copre api.example.com. Gli indirizzi IP funzionano; @@ -618,7 +618,7 @@

    Esportazione verso OpenTelemetry o un SIEM

  • Mai nulla dall'ispezione HTTPS. Nessuna intestazione, nessun corpo, nessuna chiamata agli strumenti: l'esportazione può trasportare solo aggregazioni e avvisi, quindi non c'è nessun posto dove possano finire, nemmeno per sbaglio.
  • Le intestazioni di autenticazione sono conservate nel portachiavi di accesso, non nelle preferenze. Di esse vengono mostrati solo i nomi.
  • -
  • Ciò che Flowlight invia compare in Flowlight, in In diretta e Rapporti, come il traffico di qualsiasi altra app — compreso +
  • Ciò che Flowlight invia compare in Flowlight, in In diretta e Cronologia, come il traffico di qualsiasi altra app — compreso un collector su 127.0.0.1.

Due cose da aspettarsi: le aggregazioni vengono consolidate con circa due minuti di ritardo, quindi un intervallo inferiore al minuto interroga più @@ -760,7 +760,7 @@

Limitazioni

diff --git a/docs/it/index.html b/docs/it/index.html index c577274c..6e3bf6c7 100644 --- a/docs/it/index.html +++ b/docs/it/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

Vedi la rete delle tue app.
Ca

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniversaleGPL-3.0Nessuna telemetria

+

v0.17.0macOS 15+UniversaleGPL-3.0Nessuna telemetria

@@ -127,7 +127,7 @@

Vedi la rete delle tue app.
Ca
-
La mappa dell’attività IA di Flowlight. Le schede degli agenti passano attraverso strumenti attribuiti e gateway configurati; il percorso osservato da magpie a Flowlight si dirama poi verso servizi LLM e domini. La larghezza dei nastri mostra il traffico del periodo.

Vedi il percorso IA reale: agenti, strumenti attribuiti, gateway configurati, lo stadio proxy osservato da Flowlight e le destinazioni esatte. La larghezza mostra il totale ricevuto e inviato nel periodo selezionato. Con dati dimostrativi.

@@ -149,15 +149,15 @@

Domande a cui risponde in pochi secondi

Agenti IA

Un agente lavora mentre sei in riunione

Vedi tutti gli host che l'agente e i suoi strumenti hanno contattato oltre al provider del modello, e ricevi un avviso se esce dall'elenco consentiti, invia e-mail o carica 100 MB verso una destinazione nuova.

-
Rapporti

Il caricamento è schizzato e non sai perché

-

Passa il puntatore sul picco per vedere l'app che c'è dietro, fai clic per passare dall'ora al minuto e segui la traccia fino al dominio e all'IP esatti.

+
Cronologia

Il caricamento è schizzato e non sai perché

+

Passa il puntatore sul picco per vedere una scheda scorrevole delle app che hanno contribuito; usa gli intervalli o il navigatore per passare dall'ora al minuto e seguire la traccia fino al dominio e all'IP esatti.

Avvisi

Una nuova app ha iniziato a telefonare a casa

Primo contatto con un nuovo dominio, una porta non standard o un picco di traffico: ognuno genera un avviso che indica l'app e il numero che lo ha fatto scattare.

In diretta

Qualcosa sta saturando la connessione proprio ora

Le app più attive aggiornate ogni secondo, con la destinazione più trafficata per ciascuna, e le velocità in diretta nella barra dei menu.

-
Rapporti

I dati dell'hotspot sono spariti questo mese

+
Cronologia

I dati dell'hotspot sono spariti questo mese

Passa alla vista mensile e raggruppa per app. Chi consuma di più è la prima riga, con esportazione CSV se ti servono le prove.

-
Rapporti · Destinazione

Devi verificare dove finiscono i dati

+
Cronologia · Destinazione

Devi verificare dove finiscono i dati

Raggruppa per destinazione per vedere tutte le app che parlano con un dominio, o per IP per vedere che cosa c'è dietro un indirizzo.

@@ -175,7 +175,7 @@

In diretta

Cosa si muove adesso? Velocità per app, gli ultimi due mi

Agenti IA

Cosa fanno i miei agenti oltre a chiamare il modello? Provider, altri host, contrassegni di rischio.

⌘2
-

Rapporti

Dove è finito tutto? Dal secondo all'anno, per app, destinazione o IP, con grafici e CSV.

⌘3
+

Cronologia

Dove è finito tutto? Dal secondo all'anno, per app, destinazione o IP, con grafici e CSV.

⌘3

Avvisi

Cosa non tornava? Avvisi per app, spiegati, con la destinazione e la soglia.

⌘4
@@ -187,7 +187,7 @@

Dispositivi

Bluetooth, USB e fotocamere: che cosa è abbinato, colleg

Ispeziona

Opzionale. Cosa ha inviato davvero l'agente, e quale chiamata a uno strumento l'ha prodotta? Richieste decifrate, chiamate agli strumenti, risultati.

⌘7
-

Visualizza

Che cosa comunica? Una mappa Sankey ingrandibile del traffico delle app e dei percorsi comprovati degli agenti IA, con un elenco esatto equivalente.

+

Connessioni

Che cosa comunica? Una mappa Sankey ingrandibile del traffico delle app e dei percorsi comprovati degli agenti IA, con un elenco esatto equivalente.

@@ -470,9 +470,9 @@

Un monitoraggio che non devi monitorare

-
La vista Rapporti con le barre orarie dei dati ricevuti e inviati e i grafici ad anello di app, destinazioni e protocolli
-
Rapporti. Zoom dal secondo all'anno, tre raggruppamenti, grafici che restano leggibili con centinaia di app.
+
La vista Cronologia con le barre orarie dei dati ricevuti e inviati e i grafici ad anello di app, destinazioni e protocolli
+
Cronologia. Zoom dal secondo all'anno, tre raggruppamenti, grafici che restano leggibili con centinaia di app.
La vista Avvisi con avvisi di esfiltrazione da parte di un agente, e-mail, FTP, attività mentre sei via e picco di traffico
Avvisi. Ognuno indica l'app, la destinazione e il numero che lo ha fatto scattare.
@@ -589,7 +589,7 @@

Sappi che cosa esce dal tuo Mac.

diff --git a/docs/it/privacy/index.html b/docs/it/privacy/index.html index ae1b4834..650f8c15 100644 --- a/docs/it/privacy/index.html +++ b/docs/it/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contatti

diff --git a/docs/it/threat-model/index.html b/docs/it/threat-model/index.html index 7cc54985..5d1feab9 100644 --- a/docs/it/threat-model/index.html +++ b/docs/it/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -223,7 +223,7 @@

Segnalare una vulnerabilità

diff --git a/docs/ja/about/index.html b/docs/ja/about/index.html index 294548f6..5f248678 100644 --- a/docs/ja/about/index.html +++ b/docs/ja/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

謝辞

diff --git a/docs/ja/docs/index.html b/docs/ja/docs/index.html index f5ce9fff..06c4241b 100644 --- a/docs/ja/docs/index.html +++ b/docs/ja/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

ドキュメント

Flowlight の使い方

-

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.16.11、macOS 15 以降。

+

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.17.0、macOS 15 以降。

- - + + @@ -177,11 +177,11 @@

各ビュー

ライブビュー。アプリの一覧に、現在の送信と受信の速度、そして最も忙しい接続先が並んでいます。
ライブ。Flowlight が最初に開く画面です。
-

レポートでは、棒にポインタを重ねるとどのアプリが押し上げたかがわかり、クリックすると拡大、どの行でもダブルクリックするとその行だけにレポートを絞り込めます。

-

トラフィックを可視化

-

可視化は、現在の期間・検索・フォーカス範囲にあるすべてのアプリ、正確な接続先、観測済みの関係を表示します。線の幅はバイト数を表します。疎らなローズ色と青色の破線が送信と受信で逆向きに動き、各エッジは固有で安定した速度を持ちます。「視差効果を減らす」では同じ正確な静止経路を保ちます。

-

既定では、トラフィックは受信と送信の全バイト数で上位 10 個のアプリを、AI アクティビティは証明済みエージェントルートの上位 10 個を表示します。検索可能な任意の送信元・接続先セレクタで、任意対任意、1 対任意、任意対 1、1 対 1 を調査できます。一方を選ぶと、反対側には観測済みまたはブロック済みの証拠で接続する候補だけが表示されます。「任意」は常に残り、「リセット」で両方を戻せます。絞り込んだマップには、接続されたすべてのランチャー、エージェント、ツールまたは MCP サービス、ゲートウェイ、Flowlight プロキシ段階、接続先、観測済みまたはブロック済みの関係が含まれます。非常に大きい範囲だけを段階的にグループ化し、各グループはすべての正確なメンバー ID を保持します。リストとレポートは完全で、数値も一致したままです。

-

ノードまたは接続を選ぶと正確な値を確認でき、同じアプリと接続先のままレポート、検査、未保存のルールへ進めます。リストはキーボードと VoiceOver に同じ完全なグラフを提供します。接続はネットワークフローであり HTTP リクエスト数ではなく、「観測済み」は許可の判断ではありません。

+

履歴では、棒にポインタを重ねると、原因のアプリを示すスクロール可能なカードがポインタに追従します。棒をクリックしても拡大しません。行をダブルクリックすると、その項目だけに履歴を絞り込めます。

+

接続

+

接続は、現在の期間・検索・フォーカス範囲にあるすべてのアプリ、正確な接続先、観測済みの関係を表示します。線の幅はバイト数を表します。疎らなローズ色と青色の破線が送信と受信で逆向きに動き、各エッジは固有で安定した速度を持ちます。「視差効果を減らす」では同じ正確な静止経路を保ちます。

+

既定では、トラフィックは受信と送信の全バイト数で上位 10 個のアプリを、AI アクティビティは証明済みエージェントルートの上位 10 個を表示します。検索可能な任意の送信元・接続先セレクタで、任意対任意、1 対任意、任意対 1、1 対 1 を調査できます。一方を選ぶと、反対側には観測済みまたはブロック済みの証拠で接続する候補だけが表示されます。「任意」は常に残り、「リセット」で両方を戻せます。絞り込んだマップには、接続されたすべてのランチャー、エージェント、ツールまたは MCP サービス、ゲートウェイ、Flowlight プロキシ段階、接続先、観測済みまたはブロック済みの関係が含まれます。非常に大きい範囲だけを段階的にグループ化し、各グループはすべての正確なメンバー ID を保持します。リストと履歴は完全で、数値も一致したままです。

+

ノードまたは接続を選ぶと正確な値を確認でき、同じアプリと接続先のまま履歴、検査、未保存のルールへ進めます。リストはキーボードと VoiceOver に同じ完全なグラフを提供します。接続はネットワークフローであり HTTP リクエスト数ではなく、「観測済み」は許可の判断ではありません。

AI エージェントのルール

Flowlight が名前で知っているアプリ(現在 16 種類。Claude Code、Codex、Cursor、GitHub Copilot、Gemini CLI、Ollama、ZCode を含みます)か、 @@ -199,7 +199,7 @@

ツールと MCP サーバ

エージェントは仕事の多くをほかのプロセスに任せます。シェルツールが curl や git、npm を実行し、MCP サーバはそれ自身のプロセスとして動きます。Flowlight は各プロセスの親をたどって起動元のエージェントまで戻るので、その通信はエージェントのものとして 数えられます。AI エージェントでは、エージェントの詳細のツールと MCP サーバにそれらが並び、接続先には - curl 経由や github MCP 経由と表示されます。レポートでは、プロセスの行が Claude Code 経由と読めます。

+ curl 経由や github MCP 経由と表示されます。履歴では、プロセスの行が Claude Code 経由と読めます。

MCP サーバの名前は、コマンドラインを Claude Code(~/.claude.json)、Claude Desktop、Cursor(~/.cursor/mcp.json)、 Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed、Gemini CLI の MCP 設定と照合して決まります。リモートの MCP サーバは URL のホスト名で照合し、設定のないサーバは @modelcontextprotocol/server-github のような見覚えのあるパッケージ名で照合します。

@@ -240,10 +240,10 @@

エージェントの設定:Flowlight がこの M

気になるもの

-

レポートにある 3 つめのモードで、内訳とグラフの隣にあります。レポート内のアプリを互いに比べ、接続先の様子がほかと違うものを指し示します。 +

履歴にある 3 つめのモードで、内訳とグラフの隣にあります。履歴内のアプリを互いに比べ、接続先の様子がほかと違うものを指し示します。 同種のアプリよりずっと多くの場所へつないでいる、名前に解決されたことのないアドレス、選んだというより生成されたように見えるホスト名、受信よりはるかに多い送信、 - そのアプリの本業とは言えない傍流のプロトコルなどです。どの指摘にも根拠が添えられ、クリックするとそのアプリだけにレポートが絞り込まれます。

-

これを疑わしいものではなく気になるものと呼んでいるのは意図的です。データが裏付けられるのは「このレポートのほかのアプリと比べて、いつもと違う」 + そのアプリの本業とは言えない傍流のプロトコルなどです。どの指摘にも根拠が添えられ、クリックするとそのアプリだけに履歴が絞り込まれます。

+

これを疑わしいものではなく気になるものと呼んでいるのは意図的です。データが裏付けられるのは「この履歴のほかのアプリと比べて、いつもと違う」 という事実までです。バックアップツールが多くの場所とつながるのには正当な理由がありますし、静かな Mac では指摘が 1 件も出ません。どのアプリにも共通するトラフィックについては、 何も述べていません。

@@ -252,7 +252,7 @@

バイトが出ていった経路

同じ部屋にあるデバイスへ直接届きます。ルータもインターネットもなく、ほかの誰かが到達できるアドレスもありません。Flowlight はそうしたフローをずっと数えていましたが、 それを呼ぶ言葉を持っていませんでした。そのため、4 GB のフォルダの AirDrop が、名前のないアドレスへの数メガバイトのように見えていたのです。

いまはどのフローにもチャンネルが付きます。ネットワーク、ピアツーピア Wi-Fi、この Mac 内(ループバック。マシンの外へ出ていません)、 - トンネル(VPN の中。その先どこへ行ったかはここでは見えません)です。レポートのツールバーからどれか 1 つに絞り込めますし、CSV の書き出しや + トンネル(VPN の中。その先どこへ行ったかはここでは見えません)です。履歴のツールバーからどれか 1 つに絞り込めますし、CSV の書き出しや コレクターへ送るデータにも一緒に付いていきます。

ピアツーピアの行には、それを開いた機能の名前が付きます。AirDrop and Handoff · nearby device、 Continuity · nearby device のように。リンクローカルアドレスからは何もわからず、同じ部屋のデバイスには、この Mac が知りうる名前がないからです。 @@ -273,7 +273,7 @@

そのほかのアラート

Apple 純正アプリはデフォルトで除外されます。macOS は絶えず Apple と通信します。ソフトウェアアップデート、iCloud、 プッシュ、時刻、マップのタイルなど、初めて現れたときは新しく見えるホストとポートが使われ、それを全部並べると、読む価値のある 1 行が埋もれてしまいます。 - 表示したい場合は設定 › アラートでオフにしてください。いずれにしてもトラフィックは記録され続け、ライブ、レポート、質問にも現れ、 + 表示したい場合は設定 › アラートでオフにしてください。いずれにしてもトラフィックは記録され続け、ライブ、履歴、質問にも現れ、 すべてのルール、ガードレール、許可リストの対象であり続けます。この設定が決めるのは何が一覧に載るかで、何が許されるかではありません。

質問

@@ -298,9 +298,9 @@

質問

その画面を開くことを申し出ます。クリックするのはあなたです。

形が意味を持つときはグラフで。時間による変化は折れ線、比較は棒、全体の内訳は円グラフで返ります。Flowlight は問い合わせが返した同じ行から 描くので、図と文が食い違うことはありません。モデルは別の形を頼むことも、グラフなしを選ぶこともできます。

-

実行した問い合わせはすべて回答の下に並び、クリックすると通信の根拠はレポート、デバイスや設定の回答は対応する画面で開きます。 +

実行した問い合わせはすべて回答の下に並び、クリックすると通信の根拠は履歴、デバイスや設定の回答は対応する画面で開きます。 確かめられない答えは、文法が上手なだけの当て推量です。

-

Flowlight は自分自身にも同じ基準を課します。この機能が送るものは、ほかのアプリのトラフィックと同じようにライブとレポートに現れます。 +

Flowlight は自分自身にも同じ基準を課します。この機能が送るものは、ほかのアプリのトラフィックと同じようにライブと履歴に現れます。 モデルサーバがこの Mac 上にある場合も含めてです。そこは、黙って省いてしまうのがいちばん簡単だった場面でした。

HTTPS インスペクション(任意)

@@ -359,7 +359,7 @@

HTTPS インスペクション(任意)

そこで Flowlight は、実行中のエージェントから上へたどり、シェルを飛び越して、実際に起動しているものを見つけます。それがターミナルなら、起動し直しは Terminal.app ではなくそのターミナルで開きます。それ以外なら、提案の内容が変わり、そのプロセスのほうをプロキシ環境を設定した状態で再起動することになります。こうすれば、そのあとそれが生み出すエージェントは設定を受け継ぎます。起動し直すときは、それが実行されていたときと同じコマンドを使います。サブコマンド付きで呼び出されたプログラムは、名前だけのプログラムとは別ものだからです。

再起動すると、それがいま実行しているセッションはすべて終了します。これは同意する前に伝えられることであり、あとから気づくことではありません。そして避けようがありません。置き換わったものが別の環境で起動することこそが、この機能の目的だからです。できないこともあります。すでに実行中のエージェントには届きません。それらのプロキシ設定は起動時に読み込まれており、いまからは何をしても変えられません。

-

行から辿ってここへ来る。ライブ、レポート、AI エージェントでアプリや宛先を右クリックし、 +

行から辿ってここへ来る。ライブ、履歴、AI エージェントでアプリや宛先を右クリックし、 … のトラフィックをインスペクトを選ぶと、そのアプリだけ、またはその宛先だけを表示した状態でインスペクトが開きます。 そうなっていることを示すチップが付き、ワンクリックで外せます。これは検索ではなく絞り込みです。以前のバージョンはその名前を検索欄に 入れていましたが、検索欄は応答の本文も検索するため、1 つのエージェントのトラフィックを見たいだけなのに、HTML にその名前が出てくる @@ -388,12 +388,12 @@

モック応答

ルール

許可リストは、1 つのエージェントについて「どこへ行ってよいか」を定めたものです。ルールはその一般版で、 対象(アプリ、エージェント、接続先、URL、またはそのうち 2 つの組み合わせ)を指定し、ブロックか - 許可を決めます。ライブ、レポート、AI エージェント、インスペクトのどの行でも右クリックすれば、いま見ているものについてルールを書けます。 + 許可を決めます。ライブ、履歴、AI エージェント、インスペクトのどの行でも右クリックすれば、いま見ているものについてルールを書けます。 そのどれもがルール画面の同じエディタに集まります。見えないところで効き始めるルールは、二度と見つけられないルールになってしまうからです。

テンプレート。22 種類あり、5 つのグループに分かれています。エージェントがパッケージレジストリやほかのモデルプロバイダへ届かないようにするもの、 データが出ていきやすい経路をふさぐもの(ペーストサイト、Webhook の受け口、匿名のファイル置き場、トンネル、DNS over HTTPS)、プロダクト分析とクラッシュレポート、 勤務時間のポリシー、そして「作業のあいだ 1 時間だけこれをブロックして、何なのか調べる」という単発のものです。ルールのツールバーから一覧を見るか、 - ライブ、レポート、AI エージェント、インスペクトのどこかで行を右クリックして、いま見ているものに当てはめてください。

+ ライブ、履歴、AI エージェント、インスペクトのどこかで行を右クリックして、いま見ているものに当てはめてください。

どのテンプレートも、実行する前に何をするかを述べます。2 つ以上のルールを書くものは、すべてのホストとスケジュールを並べたカードを開きます。恒久的なものは あらかじめ入力されたエディタを開きます。そして自分で元に戻るルールだけ(1 時間、またはこの回の Flowlight の実行中だけ)が、先に示されることなく 適用されます。どれも注意点も添えており、必要なエンジンも示します。HTTPS インスペクションがなければ動かないテンプレートは、そう書いてあります。

@@ -530,10 +530,10 @@

デバイス:Bluetooth、USB、外部ストレージ

ドライブが現れることこそ、人が実際に気にする出来事だからです。スループットもここにはありません。Bluetooth にない理由と同じです。

フォーカスモード

-

アプリと接続先をいくつか選ぶと、どの画面もそれだけを表示します。ライブ、レポート、アラート、AI エージェント、インスペクト、そしてメニューバーの速度もです。 +

アプリと接続先をいくつか選ぶと、どの画面もそれだけを表示します。ライブ、履歴、アラート、AI エージェント、インスペクト、そしてメニューバーの速度もです。 1 つのエージェントの仕事を、Mac のほかの部分に邪魔されずに見守るための機能です。

    -
  • ライブ、レポート、AI エージェントのどの行でも右クリックしてフォーカス…を選ぶか、サイドバー下部のフォーカスのコントロールから、 +
  • ライブ、履歴、AI エージェントのどの行でも右クリックしてフォーカス…を選ぶか、サイドバー下部のフォーカスのコントロールから、 動きのあったアプリを選び、接続先を入力します。
  • ⇧⌘F でフォーカスをオン・オフできます。メニューバーからも同じことができ、何にフォーカスしているかも表示されます。
  • 接続先はサブドメインも連れていきます。example.com は api.example.com を含みます。IP アドレスは使えますが、 @@ -572,7 +572,7 @@

    OpenTelemetry や SIEM への書き出し

  • HTTPS インスペクションのものは一切含みません。ヘッダも本文もツール呼び出しもありません。書き出しが運べるのは集計とアラートだけなので、 間違って混じる余地すらありません。
  • 認証ヘッダは環境設定ではなく、ログインキーチェーンに保存されます。表示されるのは名前だけです。
  • -
  • Flowlight が送るものは Flowlight に現れます。ほかのアプリのトラフィックと同じように、ライブとレポートに。 +
  • Flowlight が送るものは Flowlight に現れます。ほかのアプリのトラフィックと同じように、ライブと履歴に。 127.0.0.1 のコレクターも含めてです。

知っておくとよいことが 2 つあります。集計はおよそ 2 分遅れでまとめられるので、間隔を 1 分未満にしても、問い合わせが増えるだけでデータが早く届くわけでは @@ -710,7 +710,7 @@

制限事項

diff --git a/docs/ja/index.html b/docs/ja/index.html index b9bec666..94eb843f 100644 --- a/docs/ja/index.html +++ b/docs/ja/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

アプリの通信が見える。
brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+ユニバーサルGPL-3.0テレメトリなし

+

v0.17.0macOS 15+ユニバーサルGPL-3.0テレメトリなし

@@ -127,7 +127,7 @@

アプリの通信が見える。
-
Flowlight の AI アクティビティマップ。エージェントカードは関連付けられたツールと設定済みゲートウェイを経由し、観測された magpie から Flowlight への経路が LLM サービスとドメインへ分岐します。帯の幅は期間内の通信量を示します。

実際の AI 経路を確認できます。エージェント、関連付けられたツール、設定済みゲートウェイ、Flowlight が観測したプロキシ段階、正確な接続先を表示。帯の幅は選択期間の受信量と送信量の合計です。デモデータで表示しています。

@@ -149,15 +149,15 @@

数秒で答えが出る問い

AI エージェント

会議中もエージェントが動いている

モデルプロバイダ以外に、エージェントとそのツールが触れたホストをすべて確認できます。許可リストを外れたとき、メールを送ったとき、新しい相手へ 100 MB を送ったときはアラートが出ます。

-
レポート

送信量が急に跳ねた理由がわからない

-

山にポインタを重ねれば原因のアプリがわかり、クリックすれば 1 時間から 1 分へ拡大でき、そのままドメインと IP まで追えます。

+
履歴

送信量が急に跳ねた理由がわからない

+

山にポインタを重ねて原因のアプリをスクロール可能なカードで確認し、期間ボタンやナビゲータで 1 時間から 1 分へ移動して、ドメインと IP まで追えます。

アラート

見慣れないアプリが外部と通信を始めた

新しいドメインへの初回接続、非標準ポートへの接続、トラフィックの急増は、それぞれアラートになり、アプリ名ときっかけになった数値を示します。

ライブ

いま何かが回線を使い切っている

通信量の多いアプリを 1 秒ごとに更新し、アプリごとに最も忙しい接続先を表示します。現在の速度はメニューバーにも出ます。

-
レポート

今月のテザリング通信量が消えた

+
履歴

今月のテザリング通信量が消えた

月表示に切り替えてアプリでグループ化すれば、最も使ったアプリが一番上に来ます。証拠が必要なら CSV に書き出せます。

-
レポート · 接続先

データの行き先を監査したい

+
履歴 · 接続先

データの行き先を監査したい

接続先でグループ化すれば、そのドメインと通信するアプリがすべて並びます。IP でグループ化すれば、アドレスの向こうにあるものが見えます。

@@ -175,7 +175,7 @@

ライブ

いま何が動いている?アプリごとの速度、

AI エージェント

エージェントはモデルを呼ぶ以外に何をしている?プロバイダ、ほかのホスト、リスクバッジ。

⌘2
-

レポート

結局どこへ行った?秒から年まで、アプリ・接続先・IP でグループ化、グラフと CSV 付き。

⌘3
+

履歴

結局どこへ行った?秒から年まで、アプリ・接続先・IP でグループ化、グラフと CSV 付き。

⌘3

アラート

何がおかしかった?理由がわかるアプリ単位のアラートに、接続先としきい値を添えて。

⌘4
@@ -187,7 +187,7 @@

デバイス

Bluetooth、USB、カメラ。何がペアリング、

インスペクト

任意。エージェントは実際に何を送り、どのツール呼び出しが原因だった?復号したリクエスト、ツール呼び出し、結果。

⌘7
-

可視化

何が通信している?アプリのトラフィックと確認済み AI エージェント経路を、ズームできる Sankey マップと同じ内容のリストで表示します。

+

接続

何が通信している?アプリのトラフィックと確認済み AI エージェント経路を、ズームできる Sankey マップと同じ内容のリストで表示します。

@@ -469,9 +469,9 @@

監視しなくていい監視ツール

-
レポートビュー。1 時間ごとの受信と送信の棒グラフ、アプリ・接続先・プロトコルのドーナツグラフが表示されています
-
レポート。秒から年までのズーム、3 つのグループ化、アプリが数百あっても読めるグラフ。
+
履歴ビュー。1 時間ごとの受信と送信の棒グラフ、アプリ・接続先・プロトコルのドーナツグラフが表示されています
+
履歴。秒から年までのズーム、3 つのグループ化、アプリが数百あっても読めるグラフ。
アラートビュー。エージェントの情報流出、メール、FTP、離席中、トラフィック急増のアラートが並んでいます
アラート。どれもアプリ、接続先、きっかけになった数値を示します。
@@ -588,7 +588,7 @@

Mac から何が出ていくのかを知る。

diff --git a/docs/ja/privacy/index.html b/docs/ja/privacy/index.html index 5cbe71fd..093c3520 100644 --- a/docs/ja/privacy/index.html +++ b/docs/ja/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

連絡先

diff --git a/docs/ja/threat-model/index.html b/docs/ja/threat-model/index.html index 8ed298f2..c90a9624 100644 --- a/docs/ja/threat-model/index.html +++ b/docs/ja/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -222,7 +222,7 @@

脆弱性を報告する

diff --git a/docs/ko/about/index.html b/docs/ko/about/index.html index 45ba6ff8..165970c0 100644 --- a/docs/ko/about/index.html +++ b/docs/ko/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

감사

diff --git a/docs/ko/docs/index.html b/docs/ko/docs/index.html index a2dee573..5bc7a046 100644 --- a/docs/ko/docs/index.html +++ b/docs/ko/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

문서

Flowlight 사용하기

-

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.16.11, macOS 15 이상.

+

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.17.0, macOS 15 이상.

- - + + @@ -178,11 +178,11 @@

여러 뷰

실시간 뷰: 앱 목록에 각각의 현재 보내기·받기 속도와 가장 바쁜 목적지가 함께 나열되어 있습니다.
실시간, Flowlight가 처음 여는 화면.
-

보고서에서는 막대에 포인터를 올려 어떤 앱이 만든 것인지 보고, 클릭해 확대하고, 아무 행이나 두 번 클릭해 보고서를 그 항목으로 좁힐 수 있습니다.

-

트래픽 시각화

-

시각화는 현재 기간·검색·포커스 범위의 모든 앱, 정확한 목적지, 관찰된 관계를 표시합니다. 경로 너비는 바이트 수를 나타냅니다. 드문 분홍색과 파란색 대시가 보내기와 받기의 반대 방향으로 움직이고, 각 에지는 고유하면서 안정적인 속도를 가집니다. 동작 줄이기에서는 같은 정확한 정적 경로가 유지됩니다.

-

기본적으로 트래픽은 전체 받은 바이트와 보낸 바이트 합계가 가장 큰 앱 10개를, AI 활동은 입증된 에이전트 루트 10개를 표시합니다. 검색 가능한 선택적 출발지·목적지 선택기로 임의 대 임의, 하나 대 임의, 임의 대 하나, 하나 대 하나를 조사할 수 있습니다. 한쪽을 선택하면 반대쪽 선택기에는 관찰되거나 차단된 증거로 연결된 엔드포인트만 남습니다. ‘임의’는 항상 사용할 수 있고 ‘재설정’으로 두 선택기를 모두 되돌릴 수 있습니다. 포커스된 맵에는 연결된 모든 런처, 에이전트, 도구 또는 MCP 서비스, 게이트웨이, Flowlight 프록시 단계, 목적지, 관찰되거나 차단된 관계가 포함됩니다. 유난히 큰 포커스 범위만 점진적으로 그룹화하며 각 그룹은 모든 정확한 구성원 ID를 유지합니다. 목록과 보고서는 완전하고 수치도 동일하게 유지됩니다.

-

노드나 연결을 선택해 정확한 값을 확인한 뒤 같은 앱과 목적지로 보고서, 검사 또는 저장하지 않은 규칙을 열 수 있습니다. 목록은 키보드와 VoiceOver에 같은 전체 그래프를 제공합니다. 연결은 네트워크 흐름이며 HTTP 요청 수가 아니고, 관찰됨은 허용 결정이 아닙니다.

+

기록에서 막대에 포인터를 올리면 포인터를 따라다니는 스크롤 가능한 카드에 기여한 앱이 표시됩니다. 막대를 클릭해 확대하지는 않습니다. 행을 두 번 클릭하면 기록을 그 항목으로 좁힐 수 있습니다.

+

연결

+

연결는 현재 기간·검색·포커스 범위의 모든 앱, 정확한 목적지, 관찰된 관계를 표시합니다. 경로 너비는 바이트 수를 나타냅니다. 드문 분홍색과 파란색 대시가 보내기와 받기의 반대 방향으로 움직이고, 각 에지는 고유하면서 안정적인 속도를 가집니다. 동작 줄이기에서는 같은 정확한 정적 경로가 유지됩니다.

+

기본적으로 트래픽은 전체 받은 바이트와 보낸 바이트 합계가 가장 큰 앱 10개를, AI 활동은 입증된 에이전트 루트 10개를 표시합니다. 검색 가능한 선택적 출발지·목적지 선택기로 임의 대 임의, 하나 대 임의, 임의 대 하나, 하나 대 하나를 조사할 수 있습니다. 한쪽을 선택하면 반대쪽 선택기에는 관찰되거나 차단된 증거로 연결된 엔드포인트만 남습니다. ‘임의’는 항상 사용할 수 있고 ‘재설정’으로 두 선택기를 모두 되돌릴 수 있습니다. 포커스된 맵에는 연결된 모든 런처, 에이전트, 도구 또는 MCP 서비스, 게이트웨이, Flowlight 프록시 단계, 목적지, 관찰되거나 차단된 관계가 포함됩니다. 유난히 큰 포커스 범위만 점진적으로 그룹화하며 각 그룹은 모든 정확한 구성원 ID를 유지합니다. 목록과 기록은 완전하고 수치도 동일하게 유지됩니다.

+

노드나 연결을 선택해 정확한 값을 확인한 뒤 같은 앱과 목적지로 기록, 검사 또는 저장하지 않은 규칙을 열 수 있습니다. 목록은 키보드와 VoiceOver에 같은 전체 그래프를 제공합니다. 연결은 네트워크 흐름이며 HTTP 요청 수가 아니고, 관찰됨은 허용 결정이 아닙니다.

AI 에이전트 규칙

Flowlight가 이름으로 아는 앱(현재 16종, Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Ollama, ZCode 등)이거나 @@ -200,7 +200,7 @@

도구와 MCP 서버

에이전트는 일의 상당 부분을 다른 프로세스로 처리합니다. 셸 도구가 curl이나 git, npm을 실행하고, MCP 서버는 자기 프로세스로 돕니다. Flowlight는 각 프로세스의 부모를 거슬러 올라가 그것을 시작한 에이전트를 찾고, 그 트래픽을 에이전트의 것으로 집계합니다. AI 에이전트에서는 에이전트 상세의 도구와 MCP 서버에 이들이 나열되고, - 목적지에는 curl 경유나 github MCP 경유라고 표시됩니다. 보고서에서는 프로세스 행에 Claude Code 경유라고 나옵니다.

+ 목적지에는 curl 경유나 github MCP 경유라고 표시됩니다. 기록에서는 프로세스 행에 Claude Code 경유라고 나옵니다.

MCP 서버의 이름은 명령줄을 Claude Code(~/.claude.json), Claude Desktop, Cursor(~/.cursor/mcp.json), Windsurf, VS Code, Codex(~/.codex/config.toml), Zed, Gemini CLI의 MCP 설정과 맞춰 알아냅니다. 원격 MCP 서버는 URL의 호스트 이름으로, 설정에 없는 서버는 @@ -242,11 +242,11 @@

에이전트 설정: Flowlight가 Mac에서 읽는

눈여겨볼 것

-

보고서의 세 번째 모드로, 세부 내역과 차트 옆에 있습니다. 보고서에 있는 앱들을 서로 비교해, 목적지가 나머지와 +

기록의 세 번째 모드로, 세부 내역과 차트 옆에 있습니다. 기록에 있는 앱들을 서로 비교해, 목적지가 나머지와 닮지 않은 앱을 짚어 줍니다. 비슷한 앱들보다 훨씬 많은 곳, 끝내 이름으로 확인되지 않은 주소, 고른 것이 아니라 생성된 듯한 호스트 이름, 받은 것보다 훨씬 많이 보낸 경우, 그리고 그 앱의 목적이라기보다 부업 같은 프로토콜입니다. 발견마다 근거가 함께 - 붙고, 하나를 클릭하면 보고서가 그 앱으로 좁혀집니다.

-

이름이 의심스러움이 아니라 눈여겨볼 것인 것은 일부러입니다. 데이터가 뒷받침하는 말은 “이 보고서의 다른 앱들에 + 붙고, 하나를 클릭하면 기록이 그 앱으로 좁혀집니다.

+

이름이 의심스러움이 아니라 눈여겨볼 것인 것은 일부러입니다. 데이터가 뒷받침하는 말은 “이 기록의 다른 앱들에 비해 특이하다”까지입니다. 백업 도구는 이유가 있어서 여러 곳과 통신하고, 조용한 Mac에서는 아무 발견도 나오지 않습니다. 모든 앱이 공통으로 내는 트래픽에 대해서는 아무 말도 하지 않습니다.

@@ -256,8 +256,8 @@

바이트가 나간 길

늘 집계하고 있었지만 부를 말이 없었기에, 4 GB 폴더를 AirDrop으로 보내면 이름 없는 주소로 몇 메가바이트가 간 것처럼 보였습니다.

이제 모든 흐름에는 채널이 붙습니다. 네트워크, 피어 투 피어 Wi-Fi, 이 Mac(루프백, - 기기를 떠나지 않은 트래픽), 터널(VPN 안. 그 뒤로 어디로 갔는지는 여기서 보이지 않습니다) 중 하나입니다. 보고서 툴바에서 - 채널로 보고서를 좁힐 수 있고, 이 값은 CSV 내보내기와 수집기로 보내는 데이터에도 함께 실립니다.

+ 기기를 떠나지 않은 트래픽), 터널(VPN 안. 그 뒤로 어디로 갔는지는 여기서 보이지 않습니다) 중 하나입니다. 기록 툴바에서 + 채널로 기록을 좁힐 수 있고, 이 값은 CSV 내보내기와 수집기로 보내는 데이터에도 함께 실립니다.

피어 투 피어 행의 이름은 그 연결을 연 기능에서 옵니다. AirDrop and Handoff · nearby device, Continuity · nearby device처럼 말이죠. 링크 로컬 주소는 아무것도 알려주지 않고, 같은 공간의 기기는 이 Mac이 알아낼 수 있는 이름을 갖고 있지 않기 때문입니다. 무선을 직접 쓰는 앱은 자기 이름을 그대로 유지하는데, 그것이 그 앱에 대한 정직한 답입니다.

@@ -277,7 +277,7 @@

그 밖의 알림

Apple 기본 앱은 기본적으로 제외합니다. macOS는 소프트웨어 업데이트, iCloud, 푸시, 시간, 지도 타일처럼 끊임없이 Apple과 통신하고, 그 호스트와 포트는 처음 나타날 때마다 새 것입니다. 그것을 다 나열하면 정작 읽을 만한 한 줄이 - 묻힙니다. 보고 싶다면 설정 › 알림에서 끄세요. 어느 쪽이든 트래픽은 그대로 기록되고, 실시간과 보고서, 질문에 + 묻힙니다. 보고 싶다면 설정 › 알림에서 끄세요. 어느 쪽이든 트래픽은 그대로 기록되고, 실시간과 기록, 질문에 그대로 나타나며, 모든 규칙과 가드레일, 허용 목록의 적용도 그대로 받습니다. 이 설정이 정하는 것은 무엇이 목록에 오르는지일 뿐, 무엇이 허용되는지가 아닙니다.

@@ -305,10 +305,10 @@

질문

모양이 중요할 때는 차트로. 시간에 따른 변화는 선으로, 비교는 막대로, 하나의 전체를 나눈 것은 원으로 돌아옵니다. Flowlight는 질의가 돌려준 바로 그 행으로 차트를 그리므로 그림과 문장이 어긋날 수 없고, 모델은 다른 모양을 요청하거나 차트를 그리지 말라고 할 수도 있습니다.

-

모든 질의가 답 아래에 나열되고, 클릭하면 트래픽 근거는 보고서에서, 기기와 설정 답변은 관련 화면에서 열립니다. +

모든 질의가 답 아래에 나열되고, 클릭하면 트래픽 근거는 기록에서, 기기와 설정 답변은 관련 화면에서 열립니다. 확인할 수 없는 답은 문법만 좋은 추측입니다.

Flowlight는 자신에게도 같은 기준을 적용합니다. 이 기능이 보내는 것은 무엇이든 다른 앱의 트래픽과 똑같이 - 실시간과 보고서에 나타납니다. 모델 서버가 바로 이 Mac에 있는 경우까지 포함해서요. 조용히 빼기가 가장 쉬웠을 경우입니다.

+ 실시간과 기록에 나타납니다. 모델 서버가 바로 이 Mac에 있는 경우까지 포함해서요. 조용히 빼기가 가장 쉬웠을 경우입니다.

HTTPS 검사(선택 사항)

기본값은 끔입니다. 검사에서 켜면 Flowlight는 Mac 안에서 만든 자체 인증 기관을 가지고 127.0.0.1:8877에 @@ -377,7 +377,7 @@

HTTPS 검사(선택 사항)

피할 수 없습니다. 그 자리를 대신하는 것이 다른 환경으로 시작한다는 점이 이 기능의 전부이기 때문입니다. 할 수 없는 일도 있습니다. 이미 실행 중인 에이전트에는 닿지 못합니다. 그 프록시 설정은 시작할 때 읽혔고, 이제는 무엇으로도 바꿀 수 없습니다.

-

행에서 곧바로 오는 길. 실시간이나 보고서, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 +

행에서 곧바로 오는 길. 실시간이나 기록, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 …의 트래픽 검사를 고르면, 그 앱만 또는 그 목적지만 보이는 채로 검사 화면이 열립니다. 그렇다고 알려 주는 칩이 붙고, 한 번 눌러 없앨 수 있습니다. 검색하는 것이 아니라 범위를 좁히는 것입니다. 이전 버전은 그 이름을 검색란에 넣었는데, 검색란은 응답 본문까지 찾기 때문에 한 에이전트의 트래픽을 보자고 했을 뿐인데 HTML에 그 이름이 언급되었을 뿐인 페이지까지 모두 @@ -407,13 +407,13 @@

모의 응답

규칙

허용 목록은 에이전트 하나가 어디까지 갈 수 있는지에 대한 이야기입니다. 규칙은 그것의 일반형입니다. 대상, 즉 앱이나 에이전트, 목적지, URL, 또는 그 둘의 조합을 지목하고 차단인지 - 허용인지 정합니다. 실시간이나 보고서, AI 에이전트, 검사에서 아무 행이나 오른쪽 클릭하면 지금 보고 있는 것에 + 허용인지 정합니다. 실시간이나 기록, AI 에이전트, 검사에서 아무 행이나 오른쪽 클릭하면 지금 보고 있는 것에 대한 규칙을 쓸 수 있습니다. 어느 경로로 만들어도 모두 규칙 화면의 같은 편집기로 모입니다. 보이지 않는 곳에서 효력을 갖는 규칙은 다시는 찾을 수 없는 규칙이 되기 때문입니다.

템플릿. 스물두 개가 다섯 묶음으로 있습니다. 에이전트가 패키지 레지스트리나 다른 모델 제공업체에 닿지 못하게 막는 것, 데이터가 나가는 흔한 경로를 닫는 것(붙여넣기 사이트, 웹훅 수집기, 익명 파일 업로드, 터널, DNS over HTTPS), 제품 분석과 크래시 보고, 업무 시간 정책, 그리고 “이게 뭔지 알아내는 동안 한 시간만 막아 두기” 같은 일회성 규칙입니다. 규칙 툴바에서 - 둘러보거나, 실시간·보고서·AI 에이전트·검사의 아무 행에서 오른쪽 클릭해 지금 보고 있는 것에 적용하세요.

+ 둘러보거나, 실시간·기록·AI 에이전트·검사의 아무 행에서 오른쪽 클릭해 지금 보고 있는 것에 적용하세요.

각 템플릿은 무엇을 할지 먼저 알려줍니다. 규칙을 두 개 이상 쓰는 템플릿은 모든 호스트와 일정을 나열한 카드를 열고, 영구적인 것은 미리 채워진 편집기를 열며, 스스로 사라지는 규칙, 즉 한 시간짜리나 이번 Flowlight 실행 동안만 유효한 규칙만 먼저 보여주지 않고 바로 적용됩니다. 각 템플릿에는 주의 사항과 필요한 엔진도 함께 적혀 있습니다. HTTPS 검사가 있어야만 @@ -566,10 +566,10 @@

기기: Bluetooth와 USB, 외장 저장 장치

때문입니다. 처리량은 여기에도 없는데, 이유는 Bluetooth와 같습니다.

집중 모드

-

앱과 목적지 몇 개를 고르면 모든 화면이 그것만 보여줍니다. 실시간과 보고서, 알림, AI 에이전트, 검사, 그리고 메뉴 막대의 +

앱과 목적지 몇 개를 고르면 모든 화면이 그것만 보여줍니다. 실시간과 기록, 알림, AI 에이전트, 검사, 그리고 메뉴 막대의 속도까지요. Mac의 나머지에 방해받지 않고 에이전트 하나가 일하는 모습을 지켜보기 위한 기능입니다.

    -
  • 실시간이나 보고서, AI 에이전트에서 아무 행이나 오른쪽 클릭해 집중하기…를 고르거나, 사이드바 아래의 집중 +
  • 실시간이나 기록, AI 에이전트에서 아무 행이나 오른쪽 클릭해 집중하기…를 고르거나, 사이드바 아래의 집중 컨트롤에서 활동한 앱을 고르고 목적지를 입력하세요.
  • ⇧⌘F로 집중을 켜고 끌 수 있고, 메뉴 막대에서도 됩니다. 메뉴 막대에는 무엇에 집중 중인지도 표시됩니다.
  • 목적지는 서브도메인을 함께 데려갑니다. example.com은 api.example.com까지 포함합니다. IP 주소는 @@ -611,7 +611,7 @@

    OpenTelemetry나 SIEM으로 내보내기

  • HTTPS 검사에서 나온 것은 절대 보내지 않습니다. 헤더도, 본문도, 도구 호출도 없습니다. 내보내기가 실을 수 있는 것은 집계와 알림뿐이므로, 실수로라도 그것들이 갈 자리가 없습니다.
  • 인증 헤더는 설정이 아니라 로그인 키체인에 보관합니다. 화면에는 이름만 표시됩니다.
  • -
  • Flowlight가 보내는 것은 Flowlight에 나타납니다. 다른 앱의 트래픽과 똑같이 실시간과 보고서에요. +
  • Flowlight가 보내는 것은 Flowlight에 나타납니다. 다른 앱의 트래픽과 똑같이 실시간과 기록에요. 127.0.0.1에 있는 수집기까지 포함합니다.

예상해 둘 것이 두 가지 있습니다. 집계는 약 2분 뒤처져 접히므로, 간격을 1분 미만으로 잡으면 더 자주 물어보기만 하고 데이터가 @@ -750,7 +750,7 @@

한계

diff --git a/docs/ko/index.html b/docs/ko/index.html index 77a17d81..2b4029df 100644 --- a/docs/ko/index.html +++ b/docs/ko/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

앱이 무엇을 하는지 봅니다.

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+유니버설GPL-3.0텔레메트리 없음

+

v0.17.0macOS 15+유니버설GPL-3.0텔레메트리 없음

@@ -127,7 +127,7 @@

앱이 무엇을 하는지 봅니다.
-
Flowlight의 AI 활동 지도. 에이전트 카드는 귀속된 도구와 구성된 게이트웨이를 거치며, 관측된 magpie에서 Flowlight로의 경로가 LLM 서비스와 도메인으로 분기됩니다. 리본 너비는 기간 내 트래픽 양을 나타냅니다.

실제 AI 경로를 확인하세요. 에이전트, 귀속된 도구, 구성된 게이트웨이, Flowlight가 관측한 프록시 단계와 정확한 목적지를 표시합니다. 리본 너비는 선택한 기간의 수신량과 송신량 합계입니다. 데모 데이터로 표시했습니다.

@@ -149,15 +149,15 @@

몇 초면 답이 나오는 질문들

AI 에이전트

회의 중인데 에이전트가 계속 돌고 있습니다

모델 제공업체 말고 에이전트와 그 도구가 닿은 호스트를 전부 확인하고, 허용 목록을 벗어나거나 이메일을 보내거나 처음 보는 곳에 100 MB를 올리면 알림을 받습니다.

-
보고서

업로드가 치솟았는데 이유를 모릅니다

-

치솟은 구간에 포인터를 올려 어떤 앱인지 보고, 클릭해 시간 단위에서 분 단위로 확대한 뒤 정확한 도메인과 IP까지 따라갑니다.

+
기록

업로드가 치솟았는데 이유를 모릅니다

+

치솟은 구간에 포인터를 올려 기여한 앱의 스크롤 가능한 카드를 보고, 범위 버튼이나 탐색기로 시간 단위에서 분 단위로 이동해 정확한 도메인과 IP까지 따라갑니다.

알림

새 앱이 어딘가로 연락을 시작했습니다

새 도메인에 대한 첫 연결, 비표준 포트, 트래픽 급증은 각각 알림을 띄우며, 앱 이름과 기준을 넘긴 수치를 함께 알려줍니다.

실시간

지금 무언가가 회선을 가득 채우고 있습니다

1초마다 갱신되는 상위 사용 앱, 앱별로 가장 바쁜 목적지, 그리고 메뉴 막대의 실시간 속도.

-
보고서

이번 달 핫스팟 데이터가 사라졌습니다

+
기록

이번 달 핫스팟 데이터가 사라졌습니다

월 단위 보기로 바꾸고 앱으로 묶으세요. 가장 많이 쓴 앱이 맨 윗줄에 오고, 증빙이 필요하면 CSV로 내보낼 수 있습니다.

-
보고서 · 목적지

데이터가 어디로 가는지 감사해야 합니다

+
기록 · 목적지

데이터가 어디로 가는지 감사해야 합니다

목적지로 묶으면 한 도메인과 통신하는 모든 앱이 보이고, IP로 묶으면 그 주소 뒤에 무엇이 있는지 보입니다.

@@ -175,7 +175,7 @@

실시간

지금 무엇이 움직이나? 앱별 속도, 지난 2분,

AI 에이전트

에이전트가 모델을 부르는 것 말고 무엇을 하나? 제공업체, 다른 호스트, 위험 배지.

⌘2
-

보고서

다 어디로 갔나? 초에서 연까지, 앱·목적지·IP로 묶어 차트와 CSV로.

⌘3
+

기록

다 어디로 갔나? 초에서 연까지, 앱·목적지·IP로 묶어 차트와 CSV로.

⌘3

알림

무엇이 이상했나? 목적지와 임계값까지 밝히는, 설명되는 앱별 알림.

⌘4
@@ -187,7 +187,7 @@

기기

Bluetooth, USB, 카메라: 무엇이 페어링, 연결 또는

검사

선택 사항. 에이전트가 실제로 무엇을 보냈고, 어떤 도구 호출이 그렇게 했나? 복호화된 요청, 도구 호출, 결과.

⌘7
-

시각화

무엇이 통신하나? 앱 트래픽과 입증된 AI 에이전트 경로를 확대 가능한 Sankey 지도와 동일한 내용의 목록으로 보여 줍니다.

+

연결

무엇이 통신하나? 앱 트래픽과 입증된 AI 에이전트 경로를 확대 가능한 Sankey 지도와 동일한 내용의 목록으로 보여 줍니다.

@@ -470,9 +470,9 @@

감시하지 않아도 되는 감시 도구

-
시간별 수신·송신 막대와 앱, 목적지, 프로토콜 도넛 차트가 있는 보고서 뷰
-
보고서. 초에서 연까지의 확대·축소, 세 가지 묶음, 앱이 수백 개여도 읽히는 차트.
+
시간별 수신·송신 막대와 앱, 목적지, 프로토콜 도넛 차트가 있는 기록 뷰
+
기록. 초에서 연까지의 확대·축소, 세 가지 묶음, 앱이 수백 개여도 읽히는 차트.
에이전트 유출, 이메일, FTP, 자리 비움, 트래픽 급증 알림이 나열된 알림 뷰
알림. 하나하나가 앱과 목적지, 그리고 기준을 넘긴 수치를 밝힙니다.
@@ -589,7 +589,7 @@

내 Mac에서 무엇이 나가는지 아세요.

diff --git a/docs/ko/privacy/index.html b/docs/ko/privacy/index.html index 92979235..323a8f01 100644 --- a/docs/ko/privacy/index.html +++ b/docs/ko/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -190,7 +190,7 @@

문의

diff --git a/docs/ko/threat-model/index.html b/docs/ko/threat-model/index.html index 0141b93e..959f3cfb 100644 --- a/docs/ko/threat-model/index.html +++ b/docs/ko/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -221,7 +221,7 @@

취약점 신고하기

diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 4f704db1..2049c74b 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -62,7 +62,7 @@ Documentation Using Flowlight - Everything from the first launch to tuning the agent rules. Flowlight 0.16.11, macOS 15 or later. + Everything from the first launch to tuning the agent rules. Flowlight 0.17.0, macOS 15 or later. On this page @@ -153,9 +153,9 @@ open build/Build/Products/Release/Flowlight.app AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted. - Reports⌘3Where traffic went, from second to year. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV. + History⌘3Where traffic went, from a 15-minute preset through all retained history. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV. - Visualize—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list. + Connections—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list. Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule. @@ -174,17 +174,17 @@ open build/Build/Products/Release/Flowlight.app The shortcuts are the sidebar's order, so ⌘0 is the tenth item rather than a skipped position. Live, the screen Flowlight opens on. - In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it. + In History, choose 15 min, 1h, 6h, 1d, 1w, 1 mo, 6 mo, 1y, or All. Hover-only bars open a cursor-following, scrollable card with the bucket totals and contributing apps; they never change the selected range. The navigator below the chart starts with Nearby context and can switch to All history: drag the brush to pan the selected window, or drag either edge to resize it. Double-click any breakdown row to narrow History to it. - Visualize traffic + Connections - Visualize draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths. + Connections draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths. Choose Traffic for every observed application, or AI activity for proved agent clients, their attributed tools and MCP servers, launchers, gateways, Flowlight's inspection proxy, LLM services, and every other destination they reached. Process-lineage and configured-route relationships stay visually distinct from observed traffic and never invent byte totals or invocations. - By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and Reports remain complete and numerically identical. + By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and History remain complete and numerically identical. - Select a node or connection for exact values, then continue to Reports, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict. + Select a node or connection for exact values, then continue to History, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict. AI agent rules @@ -208,7 +208,7 @@ open build/Build/Products/Release/Flowlight.app Agents do much of their work through other processes: a shell tool runs curl, git or npm, and MCP servers run as their own processes. Flowlight follows each process's parents back to the agent that started it, so that traffic is counted as the agent's. In AI Agents, the agent's detail lists these under Tools & MCP servers, and - destinations read via curl or via github MCP. In Reports, the process row reads via Claude Code. + destinations read via curl or via github MCP. In History, the process row reads via Claude Code. MCP servers are named by matching their command line to the MCP configuration of Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed and Gemini CLI. Remote MCP servers @@ -258,7 +258,7 @@ open build/Build/Products/Release/Flowlight.app Worth a look - A third mode in Reports, beside the breakdown and the charts. It compares the apps in the report with each other + A third mode in History, beside the breakdown and the charts. It compares the apps in the report with each other and points at the ones whose destinations don't look like the rest: many more places than their peers, addresses that never resolved to a name, hostnames that look generated rather than chosen, far more sent than received, and protocols that are a sideline rather than the app's purpose. Each finding carries the evidence behind it, and clicking one narrows the report to that @@ -277,7 +277,7 @@ open build/Build/Products/Release/Flowlight.app Every flow now carries a channel: Network, Peer-to-peer Wi-Fi, This Mac (loopback, which never left the machine) or Tunnel (inside a VPN; where it went after that isn't visible here). Narrow a report to - one of them from the Reports toolbar, and it travels with CSV exports and with anything sent to a collector. + one of them from the History toolbar, and it travels with CSV exports and with anything sent to a collector. Peer-to-peer rows are named by the feature that opened them — AirDrop and Handoff · nearby device, Continuity · nearby device — because a link-local address tells you nothing and the device in the room has no name @@ -305,7 +305,7 @@ open build/Build/Products/Release/Flowlight.app Apple's own apps are left out by default. macOS contacts Apple constantly — Software Update, iCloud, push, time, Maps tiles — on hosts and ports that are new the first time they appear, and listing all of it buries the one line worth reading. Turn it off in Settings › Alerts if you want them. Either way the traffic is still - recorded, still appears in Live, Reports and Ask, and is still subject to every rule, guardrail and allowlist: the setting + recorded, still appears in Live, History and Ask, and is still subject to every rule, guardrail and allowlist: the setting decides what is listed, never what is allowed. Ask @@ -340,10 +340,10 @@ open build/Build/Products/Release/Flowlight.app whole as a pie. Flowlight draws them from the same rows the query returned, so the picture and the sentence cannot disagree, and the model can ask for a different shape or for none at all. - Every query is listed under the answer, and clicking one opens Reports for traffic evidence or the relevant + Every query is listed under the answer, and clicking one opens History for traffic evidence or the relevant app screen for device and configuration answers. An answer you can't check is a guess with better grammar. - Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and Reports + Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and History like any other app's traffic — including when the model server is on this very Mac, which is the case it would have been easiest to quietly leave out. @@ -378,7 +378,7 @@ open build/Build/Products/Release/Flowlight.app allow, and everything else is replaced by its length before anything is stored — recorded requests are kept for as long as you set, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode. - Local risk analysis is separate and off by default. In Reports or Settings › Detection, you can ask + Local risk analysis is separate and off by default. In History or Settings › Detection, you can ask Apple’s on-device model to review only meaningful, already-recorded decrypted HTTP candidates after capture. It gets a bounded redacted description — never request or response bodies, header values, cookies, credentials or tool arguments — and nothing leaves the Mac. The result is a potential-harm hint, not proof of intent: Flowlight never blocks, changes, @@ -431,7 +431,7 @@ open build/Build/Products/Release/Flowlight.app and it is unavoidable: the entire point is that what replaces it starts with a different environment. What it cannot do is reach the agents already running — their proxy settings were read at launch, and nothing can change them now. - Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and + Getting here from a row. Right-click an app or a destination in Live, History or AI Agents and choose Inspect …'s Traffic: Inspect opens showing only that app, or only that destination, with a chip saying so that you can remove in one click. It scopes rather than searches — an earlier version put the name in the search field, which also searches response bodies, so asking for one agent's traffic returned every page whose HTML happened to @@ -470,14 +470,14 @@ open build/Build/Products/Release/Flowlight.app An allowlist is one agent's idea of where it may go. A rule is the general version: it names a subject — an app, an agent, a destination, a URL, or a pairing of two of those — and says block - or allow. Right-click any row in Live, Reports, AI Agents or Inspect to write one about what you're looking at; + or allow. Right-click any row in Live, History, AI Agents or Inspect to write one about what you're looking at; every one of them lands in the same editor on the Rules screen, because a rule that took effect out of sight would be a rule you could never find again. Templates. Twenty-two of them, in five groups — stopping an agent reaching package registries or other model providers, closing the common ways data leaves (paste sites, webhook catchers, anonymous file drops, tunnels, DNS over HTTPS), product analytics and crash reporting, working-hours policies, and one-off "block this for an hour while I work out - what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, Reports, AI Agents or Inspect and + what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, History, AI Agents or Inspect and apply one to what you're looking at. Each template says what it will do before it does it. Anything that writes more than one rule opens a card listing every @@ -723,10 +723,10 @@ open build/Build/Products/Release/Flowlight.app Focus mode - Pick a few apps and destinations and every screen shows only those — Live, Reports, Alerts, AI Agents and Inspect, and the rates in + Pick a few apps and destinations and every screen shows only those — Live, History, Alerts, AI Agents and Inspect, and the rates in the menu bar. It's for watching one agent work without the rest of the Mac in the way. - Right-click any row in Live, Reports or AI Agents and choose Focus on…, or use the Focus control at the bottom of + Right-click any row in Live, History or AI Agents and choose Focus on…, or use the Focus control at the bottom of the sidebar to pick from the apps that have been active and to type destinations. ⇧⌘F turns Focus on and off, and so does the menu bar, which also shows what's focused. @@ -780,7 +780,7 @@ open build/Build/Products/Release/Flowlight.app Auth headers are kept in your login Keychain, not in preferences. Only their names are ever displayed. - What Flowlight sends shows up in Flowlight, in Live and Reports, like any other app's traffic — including + What Flowlight sends shows up in Flowlight, in Live and History, like any other app's traffic — including a collector on 127.0.0.1. Two things to expect: rollups are folded about two minutes behind, so an interval under a minute polls more often without data @@ -920,7 +920,7 @@ Understand your AI agents. brew install --cask xinbetween/tap/flowlightCopy - v0.16.11macOS 15+UniversalGPL-3.0No telemetry + v0.17.0macOS 15+UniversalGPL-3.0No telemetry connectionslive @@ -963,9 +963,9 @@ Understand your AI agents. See every host it and its tools touched besides its model provider, and get an alert if it leaves its allowlist, sends email or uploads 100 MB somewhere new. - ReportsYour upload spiked and you don't know why + HistoryYour upload spiked and you don't know why - Hover the spike to see the app behind it, click to zoom from the hour to the minute, and follow it to the exact domain and IP. + Hover the spike for a scrollable contributor card, then use the range presets or navigator to move from hour to minute and follow it to the exact domain and IP. AlertsA new app started phoning home @@ -975,11 +975,11 @@ Understand your AI agents. Top talkers updated every second, with the busiest destination for each app, and live rates in your menu bar. - ReportsYour hotspot data vanished this month + HistoryYour hotspot data vanished this month Switch to the month view and group by app. The biggest consumer is the top row, with CSV export if you need receipts. - Reports · DestinationYou need to audit where data goes + History · DestinationYou need to audit where data goes Group by destination to see every app that talks to a domain, or by IP to see what sits behind an address. @@ -995,8 +995,8 @@ What's moving right now? Per-app rates, the last two minutes, the busiest destin What are my agents doing besides calling their model? Providers, other hosts, risk badges. ⌘2 - Reports -Where did it all go? Second to year, grouped by app, destination or IP, with charts and CSV. + History +Where did it all go? From 15 minutes through all history, grouped by app, destination or IP, with charts and CSV. ⌘3 Alerts @@ -1019,7 +1019,7 @@ Bluetooth, USB, and cameras: what's paired, what's attached or active, and when Optional. What did the agent actually send, and which tool call made it? Decrypted requests, tool calls, results. ⌘7 - Visualize + Connections What is communicating? A zoomable Sankey map for app traffic and proved AI-agent paths, with exact list parity. Capture @@ -1304,7 +1304,7 @@ e.g. Wireshark With HTTPS inspection on, the Tool calls tab shows what the model asked for, what came back, and the requests each tool made: the curl upload to paste.example, and the git push that failed. - Reports. Second-to-year zoom, three groupings, charts that stay readable with hundreds of apps. + History. Preset ranges, a draggable navigator, three groupings, and charts that stay readable with hundreds of apps. Alerts. Each one names the app, the destination and the number that tripped it. @@ -1663,8 +1663,21 @@ Releases Downloads, checksums and full notes for each version are on GitHub Releases. + 0.17.0 +November 4, 2026Latest + + Find past traffic in History. Reports is now History, with concise presets from 15 minutes to all retained evidence, an explicit date range, adaptive resolution, and a native overview navigator whose selection can be dragged, resized, or panned. + + Keep short windows controllable. The navigator magnifies a nearby context when the full retained timeline would collapse the brush, preserves a minimum handle width, and can switch back to All history without changing the selected dates. + + Inspect every contributor without disturbing the chart. Hover follows the active time line, flips the card away from chart edges, and keeps its fixed-height contributor list scrollable while clicks no longer replace the chosen range. + + Read relationships in Connections. Visualize is now Connections; entering the screen or switching Traffic and AI activity commits data, topology, layout, and viewport as one generation instead of flashing stale or simplified geometry. + + Keep filter remediation visible. When the authoritative extension state requires a restart or reinstall, a persistent menu-bar warning opens Flowlight directly to the existing Capture notice and remains until the condition is resolved. + 0.16.11 -November 3, 2026Latest +November 3, 2026 Keep every route in one visual language. Every connection is one smooth cubic curve; nearby obstacle corridors are preferred over deep canvas-edge U-turns, while card clearance, endpoint attachment, route separation, hit testing, and bounded layout remain intact. diff --git a/docs/llms.txt b/docs/llms.txt index 1d57ee58..9f1e1d07 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -1,6 +1,6 @@ # Flowlight -> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.16.11. +> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.17.0. - [Download Flowlight.dmg](https://github.com/xinbetween/flowlight/releases/latest/download/Flowlight.dmg) - [Source code](https://github.com/xinbetween/flowlight) diff --git a/docs/plugins/index.html b/docs/plugins/index.html index 8bd8b91e..c00ebdbf 100644 --- a/docs/plugins/index.html +++ b/docs/plugins/index.html @@ -28,7 +28,7 @@ - + @@ -212,7 +212,7 @@

Review checklist

diff --git a/docs/privacy/index.html b/docs/privacy/index.html index bb014624..dc37d387 100644 --- a/docs/privacy/index.html +++ b/docs/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -196,7 +196,7 @@

Contact

diff --git a/docs/pt-PT/about/index.html b/docs/pt-PT/about/index.html index b018274e..4714b9a2 100644 --- a/docs/pt-PT/about/index.html +++ b/docs/pt-PT/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Agradecimentos

diff --git a/docs/pt-PT/docs/index.html b/docs/pt-PT/docs/index.html index 90c788f2..2b99888f 100644 --- a/docs/pt-PT/docs/index.html +++ b/docs/pt-PT/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentação

Usar o Flowlight

-

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.16.11, macOS 15 ou posterior.

+

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.17.0, macOS 15 ou posterior.

- - + + @@ -179,11 +179,11 @@

As vistas

A vista Em direto: uma lista de aplicações com as suas taxas de envio e receção atuais e o destino mais ativo.
Em direto, a vista com que o Flowlight abre.
-

Em Relatórios, passe o rato sobre uma barra para ver que apps a produziram, clique nela para ampliar e faça duplo clique numa linha para restringir o relatório a essa linha.

-

Visualizar tráfego

-

Visualizar mostra cada aplicação, destino exato e relação observada no período, pesquisa e foco atuais. A largura representa bytes. Traços rosa e azuis esparsos movem-se em sentidos opostos para envio e receção; cada aresta tem a sua própria velocidade estável e Reduzir movimento mantém os mesmos percursos estáticos.

-

Por predefinição, Tráfego mostra as dez aplicações mais ativas e Atividade de IA as dez raízes de agentes comprovadas mais ativas, ordenadas pelo total completo de bytes recebidos e enviados. Os dois seletores opcionais pesquisáveis, origem e destino, abrangem qualquer-para-qualquer, um-para-qualquer, qualquer-para-um e um-para-um. Cada escolha limita o seletor oposto aos pontos finais com evidência observada ou bloqueada; Qualquer permanece disponível e Repor repõe ambos os seletores. Um mapa focado inclui cada iniciador, agente, ferramenta ou serviço MCP, gateway, etapa do proxy Flowlight, destino e relação observada ou bloqueada ligados. Apenas os âmbitos focados invulgarmente grandes são agrupados progressivamente; cada grupo mantém todos os IDs exatos dos membros. Lista e Relatórios permanecem completos e numericamente idênticos.

-

Selecione um nó ou ligação para ver valores exatos e continue para Relatórios, Inspecionar ou uma regra não guardada com a mesma aplicação e destino. Lista fornece o mesmo grafo completo ao teclado e VoiceOver. Ligações significa fluxos de rede, não pedidos HTTP; Observado não é uma decisão de permissão.

+

Em Histórico, passe o rato sobre uma barra para abrir um cartão deslocável que segue o ponteiro e mostra as apps que contribuíram; as barras não ampliam ao clicar. Faça duplo clique numa linha para restringir o histórico a essa linha.

+

Ligações

+

Ligações mostra cada aplicação, destino exato e relação observada no período, pesquisa e foco atuais. A largura representa bytes. Traços rosa e azuis esparsos movem-se em sentidos opostos para envio e receção; cada aresta tem a sua própria velocidade estável e Reduzir movimento mantém os mesmos percursos estáticos.

+

Por predefinição, Tráfego mostra as dez aplicações mais ativas e Atividade de IA as dez raízes de agentes comprovadas mais ativas, ordenadas pelo total completo de bytes recebidos e enviados. Os dois seletores opcionais pesquisáveis, origem e destino, abrangem qualquer-para-qualquer, um-para-qualquer, qualquer-para-um e um-para-um. Cada escolha limita o seletor oposto aos pontos finais com evidência observada ou bloqueada; Qualquer permanece disponível e Repor repõe ambos os seletores. Um mapa focado inclui cada iniciador, agente, ferramenta ou serviço MCP, gateway, etapa do proxy Flowlight, destino e relação observada ou bloqueada ligados. Apenas os âmbitos focados invulgarmente grandes são agrupados progressivamente; cada grupo mantém todos os IDs exatos dos membros. Lista e Histórico permanecem completos e numericamente idênticos.

+

Selecione um nó ou ligação para ver valores exatos e continue para Histórico, Inspecionar ou uma regra não guardada com a mesma aplicação e destino. Lista fornece o mesmo grafo completo ao teclado e VoiceOver. Ligações significa fluxos de rede, não pedidos HTTP; Observado não é uma decisão de permissão.

Regras dos agentes de IA

Uma app conta como agente se o Flowlight a conhecer pelo nome (16 hoje, entre elas o Claude Code, o Codex, o Cursor, o GitHub Copilot, @@ -201,7 +201,7 @@

Ferramentas e servidores MCP

Os agentes fazem grande parte do trabalho através de outros processos: uma ferramenta de shell executa o curl, o git ou o npm, e os servidores MCP correm como processos próprios. O Flowlight segue os pais de cada processo até ao agente que o iniciou, para que esse tráfego seja contado como sendo do agente. Em Agentes de IA, o detalhe do agente lista-os em Ferramentas e servidores MCP, e os - destinos aparecem como via curl ou via github MCP. Em Relatórios, a linha do processo diz via Claude Code.

+ destinos aparecem como via curl ou via github MCP. Em Histórico, a linha do processo diz via Claude Code.

Os servidores MCP recebem o nome ao comparar a sua linha de comandos com a configuração de MCP do Claude Code (~/.claude.json), do Claude Desktop, do Cursor (~/.cursor/mcp.json), do Windsurf, do VS Code, do Codex (~/.codex/config.toml), do Zed e do Gemini CLI. Os servidores MCP remotos são identificados pelo nome de anfitrião no seu URL, e os servidores não configurados por nomes de pacote reconhecíveis, como @@ -244,7 +244,7 @@

Configuração dos agentes: o que o Flowlight lê n

Vale a pena ver

-

Um terceiro modo em Relatórios, ao lado da discriminação e dos gráficos. Compara as apps do relatório entre si +

Um terceiro modo em Histórico, ao lado da discriminação e dos gráficos. Compara as apps do relatório entre si e aponta as que têm destinos diferentes do resto: muito mais sítios do que as suas semelhantes, endereços que nunca resolveram para um nome, nomes de anfitrião que parecem gerados e não escolhidos, muito mais enviado do que recebido, e protocolos que são um acessório e não o propósito da app. Cada constatação traz consigo as provas em que se baseia, e clicar numa delas restringe o relatório a essa @@ -260,7 +260,7 @@

Por onde saíram os bytes

sem nome.

Agora cada fluxo traz um canal: Rede, Wi-Fi ponto a ponto, Este Mac (loopback, que nunca saiu da máquina) ou Túnel (dentro de uma VPN; para onde foi depois disso não é visível aqui). Restrinja um relatório a - um deles na barra de ferramentas de Relatórios; o canal acompanha as exportações em CSV e tudo o que é enviado para um coletor.

+ um deles na barra de ferramentas de Histórico; o canal acompanha as exportações em CSV e tudo o que é enviado para um coletor.

As linhas ponto a ponto recebem o nome da funcionalidade que as abriu — AirDrop and Handoff · nearby device, Continuity · nearby device — porque um endereço de ligação local não diz nada e o dispositivo que está na sala não tem um nome que este Mac possa aprender. Uma app que usa a rádio diretamente mantém o seu próprio nome, que é a resposta verdadeira no seu caso.

@@ -281,7 +281,7 @@

Outros alertas

Por predefinição, as apps da Apple ficam de fora. O macOS contacta a Apple constantemente — atualização de software, iCloud, notificações, hora, mosaicos dos Mapas — em anfitriões e portas que são novos na primeira vez que aparecem, e listar tudo isso enterra a única linha que vale a pena ler. Desative essa exclusão nas Definições › Alertas se as quiser. De qualquer forma, o tráfego continua a ser - registado, continua a aparecer em Em direto, Relatórios e Perguntar, e continua sujeito a todas as regras, proteções e listas de permissões: a definição + registado, continua a aparecer em Em direto, Histórico e Perguntar, e continua sujeito a todas as regras, proteções e listas de permissões: a definição decide o que é listado, nunca o que é permitido.

Perguntar

@@ -309,9 +309,9 @@

Perguntar

Gráficos quando a forma importa. A variação ao longo do tempo volta como uma linha, uma comparação como barras, a divisão de um todo como um gráfico circular. O Flowlight desenha-os a partir das mesmas linhas que a consulta devolveu, por isso a imagem e a frase não podem discordar, e o modelo pode pedir uma forma diferente ou nenhuma.

-

Cada consulta aparece sob a resposta e um clique abre Relatórios para os dados de tráfego ou o ecrã relevante +

Cada consulta aparece sob a resposta e um clique abre Histórico para os dados de tráfego ou o ecrã relevante para respostas sobre dispositivos e configuração. Uma resposta que não se pode verificar é um palpite com melhor gramática.

-

O Flowlight aplica a si mesmo a sua própria exigência. O que esta funcionalidade envia aparece em Em direto e em Relatórios +

O Flowlight aplica a si mesmo a sua própria exigência. O que esta funcionalidade envia aparece em Em direto e em Histórico como o tráfego de qualquer outra app — inclusive quando o servidor de modelos está neste próprio Mac, que era o caso que teria sido mais fácil deixar de fora sem dizer nada.

@@ -383,7 +383,7 @@

Inspeção HTTPS (opcional)

inevitável: todo o sentido está em o que o substitui arrancar com um ambiente diferente. O que não consegue fazer é chegar aos agentes que já estão a correr — as suas definições de proxy foram lidas no arranque, e nada as pode mudar agora.

-

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Relatórios ou Agentes de +

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Histórico ou Agentes de IA e escolha Inspecionar o tráfego de …: o Inspecionar abre a mostrar só essa app, ou só esse destino, com um chip a dizê-lo que pode remover com um clique. Delimita em vez de pesquisar — uma versão anterior punha o nome no campo de pesquisa, que pesquisa também os corpos das respostas, e por isso pedir o tráfego de um agente devolvia todas as páginas cujo HTML por acaso o mencionava. Só pode aparecer o tráfego que passou @@ -411,13 +411,13 @@

Respostas simuladas

Regras

Uma lista de permissões é a ideia de um agente sobre onde pode ir. Uma regra é a versão geral: nomeia um sujeito — uma app, um agente, um destino, um URL, ou um par formado por dois deles — e diz bloquear - ou permitir. Clique com o botão direito em qualquer linha de Em direto, Relatórios, Agentes de IA ou Inspecionar para escrever uma sobre o que está a ver; + ou permitir. Clique com o botão direito em qualquer linha de Em direto, Histórico, Agentes de IA ou Inspecionar para escrever uma sobre o que está a ver; todas elas vão dar ao mesmo editor no ecrã Regras, porque uma regra que entrasse em vigor fora da vista seria uma regra que nunca mais conseguiria encontrar.

Modelos. Vinte e dois, em cinco grupos — impedir um agente de chegar a registos de pacotes ou a outros fornecedores de modelos, fechar as vias habituais por onde os dados saem (sites de paste, apanhadores de webhooks, depósitos anónimos de ficheiros, túneis, DNS over HTTPS), analítica de produto e relatórios de falhas, políticas de horário de trabalho, e o pontual «bloquear isto por uma hora enquanto descubro - o que é». Consulte-os na barra de ferramentas de Regras, ou clique com o botão direito numa linha em Em direto, Relatórios, Agentes de IA ou Inspecionar e + o que é». Consulte-os na barra de ferramentas de Regras, ou clique com o botão direito numa linha em Em direto, Histórico, Agentes de IA ou Inspecionar e aplique um ao que está a ver.

Cada modelo diz o que vai fazer antes de o fazer. Tudo o que escreva mais do que uma regra abre um cartão com todos os anfitriões e horários; tudo o que seja permanente abre o editor pré-preenchido; e só as regras que se desfazem sozinhas — uma @@ -574,10 +574,10 @@

Dispositivos: Bluetooth, USB e armazenamento externo

acontecimento que às pessoas realmente interessa. O débito também não está aqui, pela mesma razão que não está no Bluetooth.

Modo Foco

-

Escolha algumas apps e destinos e todos os ecrãs mostram só esses — Em direto, Relatórios, Alertas, Agentes de IA e Inspecionar, e as taxas na +

Escolha algumas apps e destinos e todos os ecrãs mostram só esses — Em direto, Histórico, Alertas, Agentes de IA e Inspecionar, e as taxas na barra de menus. Serve para observar um agente a trabalhar sem o resto do Mac a atrapalhar.

    -
  • Clique com o botão direito em qualquer linha de Em direto, Relatórios ou Agentes de IA e escolha Focar em…, ou use o controlo de Foco no fundo +
  • Clique com o botão direito em qualquer linha de Em direto, Histórico ou Agentes de IA e escolha Focar em…, ou use o controlo de Foco no fundo da barra lateral para escolher entre as apps que estiveram ativas e para escrever destinos.
  • ⇧⌘F ativa e desativa o Foco, e a barra de menus também, que mostra ainda o que está focado.
  • Um destino leva consigo os seus subdomínios: example.com abrange api.example.com. Os endereços IP funcionam; @@ -618,7 +618,7 @@

    Exportar para OpenTelemetry ou para um SIEM

  • Nunca nada da inspeção HTTPS. Sem cabeçalhos, sem corpos, sem chamadas de ferramentas — a exportação só pode levar agregações e alertas, por isso não há para onde irem, nem por acidente.
  • Os cabeçalhos de autenticação ficam no seu porta-chaves de início de sessão, não nas preferências. Só os seus nomes são mostrados.
  • -
  • O que o Flowlight envia aparece no Flowlight, em Em direto e em Relatórios, como o tráfego de qualquer outra app — inclusive +
  • O que o Flowlight envia aparece no Flowlight, em Em direto e em Histórico, como o tráfego de qualquer outra app — inclusive um coletor em 127.0.0.1.

Duas coisas a esperar: as agregações são fechadas com cerca de dois minutos de atraso, por isso um intervalo inferior a um minuto consulta mais vezes sem que os dados @@ -756,7 +756,7 @@

Limitações

diff --git a/docs/pt-PT/index.html b/docs/pt-PT/index.html index 4316be94..20041564 100644 --- a/docs/pt-PT/index.html +++ b/docs/pt-PT/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

Veja a atividade de rede das suas apps.

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+UniversalGPL-3.0Sem telemetria

+

v0.17.0macOS 15+UniversalGPL-3.0Sem telemetria

@@ -127,7 +127,7 @@

Veja a atividade de rede das suas apps.
-
O mapa de atividade de IA do Flowlight. Os cartões de agentes passam por ferramentas atribuídas e gateways configurados; a rota observada do magpie para o Flowlight ramifica-se depois para serviços LLM e domínios. A largura das faixas mostra o tráfego do período.

Veja a rota de IA real: agentes, ferramentas atribuídas, gateways configurados, a etapa de proxy observada pelo Flowlight e destinos exatos. A largura mostra o total recebido e enviado no período selecionado. Com dados de demonstração.

@@ -149,15 +149,15 @@

Perguntas que responde em segundos

Agentes de IA

Um agente trabalha enquanto está numa reunião

Veja todos os anfitriões que ele e as suas ferramentas tocaram além do fornecedor do modelo e receba um alerta se sair da lista de permissões, enviar e-mail ou enviar 100 MB para um sítio novo.

-
Relatórios

O seu envio disparou e não sabe porquê

-

Passe o rato sobre o pico para ver a app por trás dele, clique para passar da hora ao minuto e siga-o até ao domínio e ao IP exatos.

+
Histórico

O seu envio disparou e não sabe porquê

+

Passe o rato sobre o pico para ver um cartão deslocável das apps que contribuíram; use os intervalos ou o navegador para passar da hora ao minuto e siga-o até ao domínio e ao IP exatos.

Alertas

Uma app nova começou a comunicar com o exterior

O primeiro contacto com um novo domínio, uma porta não padrão ou um pico de tráfego geram, cada um, um alerta que nomeia a app e o número que o disparou.

Em direto

Alguma coisa está a saturar a sua ligação neste momento

As apps mais ativas, atualizadas a cada segundo, com o destino mais ativo de cada app e as taxas em direto na barra de menus.

-
Relatórios

Os dados do seu hotspot desapareceram este mês

+
Histórico

Os dados do seu hotspot desapareceram este mês

Mude para a vista do mês e agrupe por app. O maior consumidor fica na primeira linha, com exportação para CSV se precisar de provas.

-
Relatórios · Destino

Precisa de auditar para onde vão os dados

+
Histórico · Destino

Precisa de auditar para onde vão os dados

Agrupe por destino para ver todas as apps que falam com um domínio, ou por IP para ver o que está por trás de um endereço.

@@ -175,7 +175,7 @@

Em direto

O que se move agora? Taxas por app, os últimos dois minuto

Agentes de IA

O que fazem os meus agentes além de chamar o modelo? Fornecedores, outros anfitriões, indicadores de risco.

⌘2
-

Relatórios

Para onde foi tudo? Do segundo ao ano, agrupado por app, destino ou IP, com gráficos e CSV.

⌘3
+

Histórico

Para onde foi tudo? Do segundo ao ano, agrupado por app, destino ou IP, com gráficos e CSV.

⌘3

Alertas

O que pareceu errado? Alertas por app, explicáveis, com o destino e o limiar.

⌘4
@@ -187,7 +187,7 @@

Dispositivos

Bluetooth, USB e câmaras: o que está emparelhado, liga

Inspecionar

Opcional. O que é que o agente enviou de facto, e que chamada de ferramenta o fez? Pedidos desencriptados, chamadas de ferramentas, resultados.

⌘7
-

Visualizar

O que está a comunicar? Um mapa Sankey ampliável do tráfego das apps e dos percursos comprovados dos agentes de IA, com uma lista exata equivalente.

+

Ligações

O que está a comunicar? Um mapa Sankey ampliável do tráfego das apps e dos percursos comprovados dos agentes de IA, com uma lista exata equivalente.

@@ -470,9 +470,9 @@

Um monitor que não tem de monitorizar

-
A vista Relatórios com barras horárias de dados recebidos e enviados e gráficos circulares de apps, destinos e protocolos
-
Relatórios. Zoom do segundo ao ano, três agrupamentos, gráficos que continuam legíveis com centenas de apps.
+
A vista Histórico com barras horárias de dados recebidos e enviados e gráficos circulares de apps, destinos e protocolos
+
Histórico. Zoom do segundo ao ano, três agrupamentos, gráficos que continuam legíveis com centenas de apps.
A vista Alertas a listar alertas de exfiltração por um agente, de e-mail, de FTP, de atividade durante a ausência e de picos de tráfego
Alertas. Cada um nomeia a app, o destino e o número que o disparou.
@@ -589,7 +589,7 @@

Saiba o que sai do seu Mac.

diff --git a/docs/pt-PT/privacy/index.html b/docs/pt-PT/privacy/index.html index 87f2c164..6e966963 100644 --- a/docs/pt-PT/privacy/index.html +++ b/docs/pt-PT/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/pt-PT/threat-model/index.html b/docs/pt-PT/threat-model/index.html index 757272f4..494fdc2f 100644 --- a/docs/pt-PT/threat-model/index.html +++ b/docs/pt-PT/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -222,7 +222,7 @@

Comunicar uma vulnerabilidade

diff --git a/docs/releases/index.html b/docs/releases/index.html index e5363126..f1070bec 100644 --- a/docs/releases/index.html +++ b/docs/releases/index.html @@ -28,7 +28,7 @@ - + @@ -61,7 +61,18 @@

What's new

-

0.16.11

Latest
+

0.17.0

Latest
+
    +
  • Find past traffic in History. Reports is now History, with concise presets from 15 minutes to all retained evidence, an explicit date range, adaptive resolution, and a native overview navigator whose selection can be dragged, resized, or panned.
  • +
  • Keep short windows controllable. The navigator magnifies a nearby context when the full retained timeline would collapse the brush, preserves a minimum handle width, and can switch back to All history without changing the selected dates.
  • +
  • Inspect every contributor without disturbing the chart. Hover follows the active time line, flips the card away from chart edges, and keeps its fixed-height contributor list scrollable while clicks no longer replace the chosen range.
  • +
  • Read relationships in Connections. Visualize is now Connections; entering the screen or switching Traffic and AI activity commits data, topology, layout, and viewport as one generation instead of flashing stale or simplified geometry.
  • +
  • Keep filter remediation visible. When the authoritative extension state requires a restart or reinstall, a persistent menu-bar warning opens Flowlight directly to the existing Capture notice and remains until the condition is resolved.
  • +
+
+ +
+

0.16.11

  • Keep every route in one visual language. Every connection is one smooth cubic curve; nearby obstacle corridors are preferred over deep canvas-edge U-turns, while card clearance, endpoint attachment, route separation, hit testing, and bounded layout remain intact.
  • Compare several endpoints at once. Source and destination selectors now support complete multi-selection with exclusive Any behavior, all-to-all evidence compatibility, blocked-only pairs, accessible selected states, and one-click Reset.
  • @@ -1551,7 +1562,7 @@

    What's new

diff --git a/docs/sitemap.xml b/docs/sitemap.xml index e2ce4dd5..31d203fa 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -1,55 +1,55 @@ - https://flowlight.xinbetween.com/about/2026-11-03 - https://flowlight.xinbetween.com/docs/2026-11-03 - https://flowlight.xinbetween.com/2026-11-03 - https://flowlight.xinbetween.com/plugins/2026-11-03 - https://flowlight.xinbetween.com/privacy/2026-11-03 - https://flowlight.xinbetween.com/releases/2026-11-03 - https://flowlight.xinbetween.com/threat-model/2026-11-03 - https://flowlight.xinbetween.com/de/about/2026-11-03 - https://flowlight.xinbetween.com/de/docs/2026-11-03 - https://flowlight.xinbetween.com/de/2026-11-03 - https://flowlight.xinbetween.com/de/privacy/2026-11-03 - https://flowlight.xinbetween.com/de/threat-model/2026-11-03 - https://flowlight.xinbetween.com/es/about/2026-11-03 - https://flowlight.xinbetween.com/es/docs/2026-11-03 - https://flowlight.xinbetween.com/es/2026-11-03 - https://flowlight.xinbetween.com/es/privacy/2026-11-03 - https://flowlight.xinbetween.com/es/threat-model/2026-11-03 - https://flowlight.xinbetween.com/fr/about/2026-11-03 - https://flowlight.xinbetween.com/fr/docs/2026-11-03 - https://flowlight.xinbetween.com/fr/2026-11-03 - https://flowlight.xinbetween.com/fr/privacy/2026-11-03 - https://flowlight.xinbetween.com/fr/threat-model/2026-11-03 - https://flowlight.xinbetween.com/it/about/2026-11-03 - https://flowlight.xinbetween.com/it/docs/2026-11-03 - https://flowlight.xinbetween.com/it/2026-11-03 - https://flowlight.xinbetween.com/it/privacy/2026-11-03 - https://flowlight.xinbetween.com/it/threat-model/2026-11-03 - https://flowlight.xinbetween.com/pt-PT/about/2026-11-03 - https://flowlight.xinbetween.com/pt-PT/docs/2026-11-03 - https://flowlight.xinbetween.com/pt-PT/2026-11-03 - https://flowlight.xinbetween.com/pt-PT/privacy/2026-11-03 - https://flowlight.xinbetween.com/pt-PT/threat-model/2026-11-03 - https://flowlight.xinbetween.com/ja/about/2026-11-03 - https://flowlight.xinbetween.com/ja/docs/2026-11-03 - https://flowlight.xinbetween.com/ja/2026-11-03 - https://flowlight.xinbetween.com/ja/privacy/2026-11-03 - https://flowlight.xinbetween.com/ja/threat-model/2026-11-03 - https://flowlight.xinbetween.com/zh-Hans/about/2026-11-03 - https://flowlight.xinbetween.com/zh-Hans/docs/2026-11-03 - https://flowlight.xinbetween.com/zh-Hans/2026-11-03 - https://flowlight.xinbetween.com/zh-Hans/privacy/2026-11-03 - https://flowlight.xinbetween.com/zh-Hans/threat-model/2026-11-03 - https://flowlight.xinbetween.com/zh-Hant/about/2026-11-03 - https://flowlight.xinbetween.com/zh-Hant/docs/2026-11-03 - https://flowlight.xinbetween.com/zh-Hant/2026-11-03 - https://flowlight.xinbetween.com/zh-Hant/privacy/2026-11-03 - https://flowlight.xinbetween.com/zh-Hant/threat-model/2026-11-03 - https://flowlight.xinbetween.com/ko/about/2026-11-03 - https://flowlight.xinbetween.com/ko/docs/2026-11-03 - https://flowlight.xinbetween.com/ko/2026-11-03 - https://flowlight.xinbetween.com/ko/privacy/2026-11-03 - https://flowlight.xinbetween.com/ko/threat-model/2026-11-03 + https://flowlight.xinbetween.com/about/2026-11-04 + https://flowlight.xinbetween.com/docs/2026-11-04 + https://flowlight.xinbetween.com/2026-11-04 + https://flowlight.xinbetween.com/plugins/2026-11-04 + https://flowlight.xinbetween.com/privacy/2026-11-04 + https://flowlight.xinbetween.com/releases/2026-11-04 + https://flowlight.xinbetween.com/threat-model/2026-11-04 + https://flowlight.xinbetween.com/de/about/2026-11-04 + https://flowlight.xinbetween.com/de/docs/2026-11-04 + https://flowlight.xinbetween.com/de/2026-11-04 + https://flowlight.xinbetween.com/de/privacy/2026-11-04 + https://flowlight.xinbetween.com/de/threat-model/2026-11-04 + https://flowlight.xinbetween.com/es/about/2026-11-04 + https://flowlight.xinbetween.com/es/docs/2026-11-04 + https://flowlight.xinbetween.com/es/2026-11-04 + https://flowlight.xinbetween.com/es/privacy/2026-11-04 + https://flowlight.xinbetween.com/es/threat-model/2026-11-04 + https://flowlight.xinbetween.com/fr/about/2026-11-04 + https://flowlight.xinbetween.com/fr/docs/2026-11-04 + https://flowlight.xinbetween.com/fr/2026-11-04 + https://flowlight.xinbetween.com/fr/privacy/2026-11-04 + https://flowlight.xinbetween.com/fr/threat-model/2026-11-04 + https://flowlight.xinbetween.com/it/about/2026-11-04 + https://flowlight.xinbetween.com/it/docs/2026-11-04 + https://flowlight.xinbetween.com/it/2026-11-04 + https://flowlight.xinbetween.com/it/privacy/2026-11-04 + https://flowlight.xinbetween.com/it/threat-model/2026-11-04 + https://flowlight.xinbetween.com/pt-PT/about/2026-11-04 + https://flowlight.xinbetween.com/pt-PT/docs/2026-11-04 + https://flowlight.xinbetween.com/pt-PT/2026-11-04 + https://flowlight.xinbetween.com/pt-PT/privacy/2026-11-04 + https://flowlight.xinbetween.com/pt-PT/threat-model/2026-11-04 + https://flowlight.xinbetween.com/ja/about/2026-11-04 + https://flowlight.xinbetween.com/ja/docs/2026-11-04 + https://flowlight.xinbetween.com/ja/2026-11-04 + https://flowlight.xinbetween.com/ja/privacy/2026-11-04 + https://flowlight.xinbetween.com/ja/threat-model/2026-11-04 + https://flowlight.xinbetween.com/zh-Hans/about/2026-11-04 + https://flowlight.xinbetween.com/zh-Hans/docs/2026-11-04 + https://flowlight.xinbetween.com/zh-Hans/2026-11-04 + https://flowlight.xinbetween.com/zh-Hans/privacy/2026-11-04 + https://flowlight.xinbetween.com/zh-Hans/threat-model/2026-11-04 + https://flowlight.xinbetween.com/zh-Hant/about/2026-11-04 + https://flowlight.xinbetween.com/zh-Hant/docs/2026-11-04 + https://flowlight.xinbetween.com/zh-Hant/2026-11-04 + https://flowlight.xinbetween.com/zh-Hant/privacy/2026-11-04 + https://flowlight.xinbetween.com/zh-Hant/threat-model/2026-11-04 + https://flowlight.xinbetween.com/ko/about/2026-11-04 + https://flowlight.xinbetween.com/ko/docs/2026-11-04 + https://flowlight.xinbetween.com/ko/2026-11-04 + https://flowlight.xinbetween.com/ko/privacy/2026-11-04 + https://flowlight.xinbetween.com/ko/threat-model/2026-11-04 diff --git a/docs/threat-model/index.html b/docs/threat-model/index.html index a4427fa8..35cd3598 100644 --- a/docs/threat-model/index.html +++ b/docs/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -231,7 +231,7 @@

Reporting a vulnerability

diff --git a/docs/zh-Hans/about/index.html b/docs/zh-Hans/about/index.html index 7a8b32c5..605c9e26 100644 --- a/docs/zh-Hans/about/index.html +++ b/docs/zh-Hans/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

致谢

diff --git a/docs/zh-Hans/docs/index.html b/docs/zh-Hans/docs/index.html index f2ec4760..579595b0 100644 --- a/docs/zh-Hans/docs/index.html +++ b/docs/zh-Hans/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

文档

使用 Flowlight

-

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.16.11,macOS 15 或更高版本。

+

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.17.0,macOS 15 或更高版本。

- - + + @@ -175,12 +175,12 @@

各个视图

实时视图:一列应用,各自带着当前的发送与接收速率,以及最忙的目标。
实时,Flowlight 打开时进入的那个视图。
-

在报告里,把指针停在某根柱子上就能看到是哪些应用造成的,点它可以放大,双击任意一行则把报告收窄到那一项。

+

在历史里,把指针停在柱子上,就会打开一张跟随指针、可滚动的卡片,列出贡献流量的应用;点击柱子不会放大。双击任意一行可把历史收窄到那一项。

-

流量可视化

-

可视化会显示当前时间、搜索和专注范围内的每个应用、精确目标及已观察关系。路径宽度表示字节数;稀疏的玫红色和蓝色虚线分别向相反的发送与接收方向移动。每条边都有自己稳定且独特的速度,“减少动态效果”则保留同样准确的静态路径。

-

默认情况下,“流量”按完整的接收加发送字节数显示最繁忙的 10 个应用,“AI 活动”显示最繁忙的 10 个已证实代理根。两个可选的可搜索来源和目标选择器支持任意到任意、一个到任意、任意到一个以及一对一调查。选择一端后,另一端的选择器只保留有已观察或已拦截证据的端点;“任意”始终可用,“重置”会还原两个选择器。聚焦地图会包含所有相连的启动器、代理、工具或 MCP 服务、网关、Flowlight 代理阶段、目标以及已观察或已拦截关系。只有异常庞大的聚焦范围才会逐步分组,每个分组都保留全部精确成员 ID。列表和“报告”始终完整,数值也完全一致。

-

选择节点或连接即可查看精确数值,然后带着同一应用和目标前往“报告”、“检查”或未保存的规则。列表为键盘和 VoiceOver 提供同一张完整图。“连接”表示网络流,不是 HTTP 请求;“已观察”表示存在流量,并不表示允许决定。

+

连接

+

连接会显示当前时间、搜索和专注范围内的每个应用、精确目标及已观察关系。路径宽度表示字节数;稀疏的玫红色和蓝色虚线分别向相反的发送与接收方向移动。每条边都有自己稳定且独特的速度,“减少动态效果”则保留同样准确的静态路径。

+

默认情况下,“流量”按完整的接收加发送字节数显示最繁忙的 10 个应用,“AI 活动”显示最繁忙的 10 个已证实代理根。两个可选的可搜索来源和目标选择器支持任意到任意、一个到任意、任意到一个以及一对一调查。选择一端后,另一端的选择器只保留有已观察或已拦截证据的端点;“任意”始终可用,“重置”会还原两个选择器。聚焦地图会包含所有相连的启动器、代理、工具或 MCP 服务、网关、Flowlight 代理阶段、目标以及已观察或已拦截关系。只有异常庞大的聚焦范围才会逐步分组,每个分组都保留全部精确成员 ID。列表和“历史”始终完整,数值也完全一致。

+

选择节点或连接即可查看精确数值,然后带着同一应用和目标前往“历史”、“检查”或未保存的规则。列表为键盘和 VoiceOver 提供同一张完整图。“连接”表示网络流,不是 HTTP 请求;“已观察”表示存在流量,并不表示允许决定。

AI 代理规则

一个应用被算作代理,要么是 Flowlight 按名字认得它(目前 16 个,包括 Claude Code、Codex、Cursor、GitHub Copilot、 @@ -197,7 +197,7 @@

AI 代理规则

工具与 MCP 服务器

代理的许多工作是通过其他进程完成的:shell 工具会运行 curl、git 或 npm,MCP 服务器则作为独立进程运行。Flowlight 会沿着每个进程的父进程追回启动它的代理,于是那些流量都算作该代理的。在AI 代理里, - 代理详情会把它们列在工具与 MCP 服务器下,目标则显示为经由 curl 或经由 github MCP。在报告里,进程那一行显示经由 Claude Code。

+ 代理详情会把它们列在工具与 MCP 服务器下,目标则显示为经由 curl 或经由 github MCP。在历史里,进程那一行显示经由 Claude Code。

MCP 服务器的名字来自把它们的命令行与各家 MCP 配置比对:Claude Code(~/.claude.json)、Claude Desktop、 Cursor(~/.cursor/mcp.json)、Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed 和 Gemini CLI。远程 MCP 服务器 按其 URL 里的主机名匹配,未配置的服务器则按可识别的包名匹配,例如 @@ -234,11 +234,11 @@

代理配置:Flowlight 在你的 Mac 上读取什

值得一看

-

报告里的第三种模式,与明细和图表并列。它把报告中的各个应用互相比较, +

历史里的第三种模式,与明细和图表并列。它把历史中的各个应用互相比较, 指出那些目标看起来和其他应用不太一样的:去的地方比同类多得多、从未解析出名称的地址、看起来是生成而不是人取的主机名、发出的远多于接收的, - 以及那些属于副业而非该应用本职的协议。每条发现都带着背后的证据,点一下就把报告收窄到那个 + 以及那些属于副业而非该应用本职的协议。每条发现都带着背后的证据,点一下就把历史收窄到那个 应用。

-

它被叫作值得一看而不是可疑,这是有意的。数据能支持的说法是“和这份报告里的其他 +

它被叫作值得一看而不是可疑,这是有意的。数据能支持的说法是“和这份历史里的其他 应用相比不寻常”——备份工具去很多地方是有正当理由的,而一台安静的 Mac 根本不会产出任何发现。 对每个应用都有的那类流量,它什么也不说。

@@ -247,7 +247,7 @@

字节是从哪条出口离开的

设备——不经路由器、不经互联网,也没有别人能访问的地址。这些流 Flowlight 一直都在统计;只是没有一个词来称呼它们, 于是一次 4 GB 文件夹的 AirDrop,看上去就像是发往一个没有名字的地址的几兆字节。

现在每条流都带着一条出口:网络、点对点 Wi-Fi、本机(回环, - 从未离开这台机器)或隧道(在 VPN 内部;它之后去了哪里在这里看不到)。在报告工具栏里可以把报告限定到 + 从未离开这台机器)或隧道(在 VPN 内部;它之后去了哪里在这里看不到)。在历史工具栏里可以把历史限定到 其中之一,这个标记也会随 CSV 导出、以及发送给收集器的数据一起带走。

点对点的行以打开它们的功能命名——AirDrop and Handoff · nearby device、 Continuity · nearby device——因为链路本地地址什么都说明不了,而房间里那台设备没有这台 Mac 能学到的 @@ -269,7 +269,7 @@

其他警报

默认忽略 Apple 自带应用。macOS 会不断与 Apple 通信——软件更新、iCloud、 推送、时间、地图瓦片——用的主机和端口在第一次出现时都是新的,把这些全列出来只会把唯一值得读的 那一行埋掉。想要它们的话,在设置 › 警报里关掉这一项。无论如何,这些流量仍然被 - 记录,仍然出现在实时、报告和提问里,也仍然受每一条规则、护栏和允许列表约束:这项设置 + 记录,仍然出现在实时、历史和提问里,也仍然受每一条规则、护栏和允许列表约束:这项设置 决定列出什么,绝不决定允许什么。

提问

@@ -296,10 +296,10 @@

提问

形状要紧时就上图。随时间的变化以折线呈现,比较以柱状呈现,整体的 拆分以饼图呈现。Flowlight 用查询返回的同一批数据来绘制,所以图和文字不可能互相矛盾, 模型也可以要求换一种形状,或者干脆不要图。

-

每一条查询都列在答案下方,点一下会在“报告”里打开流量依据,设备和配置答案则打开相关界面。 +

每一条查询都列在答案下方,点一下会在“历史”里打开流量依据,设备和配置答案则打开相关界面。 无法核对的答案,只是语法更好的猜测。

Flowlight 对自己也用同一把尺子。这个功能发出的任何流量都会像别的应用的流量一样 - 出现在实时和报告里——包括模型服务器就在这台 Mac 上的情况,而那恰恰是最容易被悄悄 + 出现在实时和历史里——包括模型服务器就在这台 Mac 上的情况,而那恰恰是最容易被悄悄 省掉的一种。

HTTPS 检查(可选)

@@ -351,7 +351,7 @@

HTTPS 检查(可选)

于是 Flowlight 从一个正在运行的代理往上走,跨过那些 shell,找到真正在启动它们的东西。如果那是一个终端,重新启动就在那个终端里打开,而不是在 Terminal.app 里。如果是别的什么,提供的选择就变成重新启动那个进程,并且设置好代理服务器环境,这样它之后生成的代理就会继承下来——重新启动时用的是它原本运行的那条命令,因为带子命令调用的程序,和只有名字的程序并不是同一个。

重新启动它会结束它当前运行的每一个会话。这一点在你同意之前就说清楚,而不是事后才发现,而且它无法避免:这件事的全部意义,正在于接替它的东西会以不同的环境启动。它做不到的是触及已经在运行的代理——它们的代理服务器设置在启动时就读完了,现在什么也改不了。

-

从一行直接过来。在实时、报告或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: +

从一行直接过来。在实时、历史或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: 检查会打开,并且只显示那个应用,或者只显示那个目的地,还会带上一个说明这一点的标签,点一下就能去掉。它限定的是范围, 而不是做搜索——早先的版本会把那个名字填进搜索框,而搜索框连响应正文也一起搜,于是你只是想看某一个代理的流量,结果每一个 HTML 里恰好提到过它的页面都被返回了。只有经过代理服务器的流量才可能出现,所以一行你知道很忙的记录,在这里仍可能什么都不显示。

@@ -378,13 +378,13 @@

模拟响应

规则

允许列表是某一个代理关于它可以去哪里的说法。规则是它的通用版本:它指明一个 对象——应用、代理、目标、URL,或其中两者的组合——并决定阻止 - 还是允许。在实时、报告、AI 代理或检查里右键任意一行,就能针对你正看着的东西写一条; + 还是允许。在实时、历史、AI 代理或检查里右键任意一行,就能针对你正看着的东西写一条; 它们全都落在规则界面上的同一个编辑器里,因为一条在看不见的地方生效的规则, 会是一条你再也找不到的规则。

模板。共 22 个,分为五组——阻止代理访问软件包仓库或其他 模型提供方;封住数据外流的常见途径(粘贴站点、webhook 接收器、匿名文件投放、隧道、DNS over HTTPS);产品分析与崩溃上报;工作时段策略;以及一次性的“先把这个拦一小时,我弄清它 - 是什么”。可以从规则工具栏浏览它们,也可以在实时、报告、AI 代理或检查的任意一行上右键, + 是什么”。可以从规则工具栏浏览它们,也可以在实时、历史、AI 代理或检查的任意一行上右键, 把某个模板应用到你正看着的东西上。

每个模板在动手之前都会说明它要做什么。凡是会写入多条规则的,都会打开一张卡片,列出每个 主机和时段;凡是永久生效的,都会打开预填好的编辑器;而只有会自行撤销的规则——一 @@ -535,10 +535,10 @@

设备:蓝牙、USB 与外置存储

事件。这里同样没有吞吐量,原因和蓝牙那边一样。

聚焦模式

-

挑几个应用和目标,所有界面就只显示它们——实时、报告、警报、AI 代理和检查,以及菜单栏里的 +

挑几个应用和目标,所有界面就只显示它们——实时、历史、警报、AI 代理和检查,以及菜单栏里的 速率。它适合在不受这台 Mac 其余部分干扰的情况下,看一个代理干活。

    -
  • 在实时、报告或 AI 代理里右键任意一行并选择聚焦于…,或者用边栏底部的聚焦控件, +
  • 在实时、历史或 AI 代理里右键任意一行并选择聚焦于…,或者用边栏底部的聚焦控件, 从活动过的应用里挑选,并手动输入目标。
  • ⇧⌘F 可以开关聚焦,菜单栏也可以,它还会显示当前聚焦的内容。
  • 目标会连带它的子域名:example.com 覆盖 api.example.com。IP 地址可以用; @@ -578,7 +578,7 @@

    导出到 OpenTelemetry 或 SIEM

  • 绝不包含来自 HTTPS 检查的任何内容。没有标头、没有正文、没有工具调用——导出只能携带 汇总数据和警报,所以它们连误发的去处都没有。
  • 认证标头保存在你的登录钥匙串里,而不是偏好设置里。显示出来的永远只有它们的名称。
  • -
  • Flowlight 发出的内容会出现在 Flowlight 里,在实时和报告中,和别的应用的流量一样——包括 +
  • Flowlight 发出的内容会出现在 Flowlight 里,在实时和历史中,和别的应用的流量一样——包括 位于 127.0.0.1 的收集器。

有两件事要预料到:汇总数据大约滞后两分钟才折叠,所以把间隔设成小于一分钟只会更频繁地轮询,而数据 @@ -714,7 +714,7 @@

限制

diff --git a/docs/zh-Hans/index.html b/docs/zh-Hans/index.html index e5b55d82..b3febe60 100644 --- a/docs/zh-Hans/index.html +++ b/docs/zh-Hans/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

看清应用的网络活动。

brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+通用架构GPL-3.0无遥测

+

v0.17.0macOS 15+通用架构GPL-3.0无遥测

@@ -127,7 +127,7 @@

看清应用的网络活动。
-
Flowlight 的 AI 活动图。代理卡片经过已归属工具和已配置网关;观测到的 magpie 到 Flowlight 路由随后分支至 LLM 服务和域名。带状线宽度表示所选时段的流量。

查看真实 AI 路由:代理、已归属工具、已配置网关、Flowlight 观测到的代理阶段和精确目标。带状线宽度表示所选时段接收与发送流量的总和。图中为演示数据。

@@ -149,15 +149,15 @@

几秒钟就能回答的问题

AI 代理

你在开会,代理还在跑

除了模型提供方,它和它的工具碰过的每一台主机都在列;一旦它离开允许列表、发送邮件,或向新地方上传 100 MB,你就会收到警报。

-
报告

上传量突然飙升,你却不知道为什么

-

把指针停在峰值上,就看到背后的应用;点一下从小时下钻到分钟,再顺着它找到具体的域名和 IP。

+
历史

上传量突然飙升,你却不知道为什么

+

把指针停在峰值上,用可滚动卡片查看贡献流量的应用;再用范围按钮或导航器从小时移到分钟,顺着它找到具体的域名和 IP。

警报

某个新应用开始往外联络

首次连接新域名、连接到非标准端口、流量突增,都会各自触发一条警报,点明是哪个应用,以及触发它的那个数字。

实时

此刻有东西正把带宽吃满

每秒更新的流量最高应用排行,带上每个应用最忙的目标,菜单栏里还有实时速率。

-
报告

这个月的热点流量莫名其妙就没了

+
历史

这个月的热点流量莫名其妙就没了

切到月视图并按应用分组。用得最多的那个就在第一行;需要凭据时还能导出 CSV。

-
报告 · 目标

你需要审计数据流向

+
历史 · 目标

你需要审计数据流向

按目标分组,看每个与某域名通信的应用;按 IP 分组,看某个地址背后究竟是什么。

@@ -175,7 +175,7 @@

实时

现在什么在动?按应用的速率、最近两分钟、

AI 代理

我的代理除了调用模型还在做什么?提供方、其他主机、风险标记。

⌘2
-

报告

流量究竟去了哪?从秒到年,按应用、目标或 IP 分组,配图表与 CSV。

⌘3
+

历史

流量究竟去了哪?从秒到年,按应用、目标或 IP 分组,配图表与 CSV。

⌘3

警报

哪里不对?逐应用、讲得清道理的警报,带上目标和阈值。

⌘4
@@ -187,7 +187,7 @@

设备

蓝牙、USB 和摄像头:配对了什么、接入或启用

检查

可选。代理究竟发出了什么,是哪次工具调用引起的?解密后的请求、工具调用和结果。

⌘7
-

可视化

谁在通信?用可缩放的 Sankey 图展示应用流量和已证实的 AI 代理路径,并提供内容完全一致的列表。

+

连接

谁在通信?用可缩放的 Sankey 图展示应用流量和已证实的 AI 代理路径,并提供内容完全一致的列表。

@@ -467,9 +467,9 @@

一个不用你盯着的监控工具

-
报告视图,含每小时接收与发送的柱状图,以及应用、目标和协议的环形图
-
报告。从秒到年的缩放、三种分组方式,几百个应用也读得清的图表。
+
历史视图,含每小时接收与发送的柱状图,以及应用、目标和协议的环形图
+
历史。从秒到年的缩放、三种分组方式,几百个应用也读得清的图表。
警报视图,列出代理外泄、邮件、FTP、你离开时活动和流量突增等警报
警报。每一条都点明应用、目标和触发它的那个数字。
@@ -586,7 +586,7 @@

知道什么离开了你的 Mac。

diff --git a/docs/zh-Hans/privacy/index.html b/docs/zh-Hans/privacy/index.html index 27ade96d..0dea651d 100644 --- a/docs/zh-Hans/privacy/index.html +++ b/docs/zh-Hans/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

联系方式

diff --git a/docs/zh-Hans/threat-model/index.html b/docs/zh-Hans/threat-model/index.html index b1834028..1c112674 100644 --- a/docs/zh-Hans/threat-model/index.html +++ b/docs/zh-Hans/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -210,7 +210,7 @@

报告漏洞

diff --git a/docs/zh-Hant/about/index.html b/docs/zh-Hant/about/index.html index 43a2a1ed..d5ddcdd3 100644 --- a/docs/zh-Hant/about/index.html +++ b/docs/zh-Hant/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

致謝

diff --git a/docs/zh-Hant/docs/index.html b/docs/zh-Hant/docs/index.html index 8f350aad..b0a98257 100644 --- a/docs/zh-Hant/docs/index.html +++ b/docs/zh-Hant/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

說明文件

使用 Flowlight

-

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.16.11,macOS 15 或以上版本。

+

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.17.0,macOS 15 或以上版本。

- - + + @@ -178,11 +178,11 @@

各個畫面

即時畫面:一列 App,各自帶著目前的傳送與接收速率,以及最忙的目標。
即時,Flowlight 開啟時的那個畫面。
-

在「報告」中,把指標移到長條上可以看出是哪些 App 造成的,點一下可以放大,任一列雙按則把報告縮小到那一列。

-

流量視覺化

-

視覺化會顯示目前時間、搜尋與專注範圍內的每個 App、精確目標和已觀察關係。路徑寬度代表位元組數;稀疏的玫紅色與藍色虛線分別朝相反的傳送與接收方向移動。每條邊都有自己穩定且獨特的速度,而「減少動態效果」會保留同樣準確的靜態路徑。

-

預設情況下,「流量」會依完整的接收加傳送位元組數顯示最繁忙的 10 個 App,「AI 活動」則顯示最繁忙的 10 個已證實代理根。兩個可選且可搜尋的來源與目標選擇器支援任意對任意、一對任意、任意對一與一對一調查。選擇一端後,另一端的選擇器只保留具有已觀察或已阻擋證據的端點;「任意」始終可用,「重設」會還原兩個選擇器。聚焦地圖會包含所有相連的啟動器、代理、工具或 MCP 服務、閘道、Flowlight 代理階段、目標,以及已觀察或已阻擋關係。只有異常龐大的聚焦範圍才會逐步群組,每個群組都保留所有精確成員 ID。列表與「報告」始終完整,數值也完全一致。

-

選取節點或連線即可查看精確數值,接著帶著同一 App 與目標前往「報告」、「檢查」或未儲存的規則。列表為鍵盤與 VoiceOver 提供同一張完整圖。連線代表網路流,不是 HTTP 請求數;已觀察並不是允許決定。

+

在「歷史」中,把指標移到長條上,就會開啟一張跟隨指標、可捲動的卡片,列出貢獻流量的 App;點選長條不會放大。任一列雙按可把歷史縮小到那一列。

+

連線

+

連線會顯示目前時間、搜尋與專注範圍內的每個 App、精確目標和已觀察關係。路徑寬度代表位元組數;稀疏的玫紅色與藍色虛線分別朝相反的傳送與接收方向移動。每條邊都有自己穩定且獨特的速度,而「減少動態效果」會保留同樣準確的靜態路徑。

+

預設情況下,「流量」會依完整的接收加傳送位元組數顯示最繁忙的 10 個 App,「AI 活動」則顯示最繁忙的 10 個已證實代理根。兩個可選且可搜尋的來源與目標選擇器支援任意對任意、一對任意、任意對一與一對一調查。選擇一端後,另一端的選擇器只保留具有已觀察或已阻擋證據的端點;「任意」始終可用,「重設」會還原兩個選擇器。聚焦地圖會包含所有相連的啟動器、代理、工具或 MCP 服務、閘道、Flowlight 代理階段、目標,以及已觀察或已阻擋關係。只有異常龐大的聚焦範圍才會逐步群組,每個群組都保留所有精確成員 ID。列表與「歷史」始終完整,數值也完全一致。

+

選取節點或連線即可查看精確數值,接著帶著同一 App 與目標前往「歷史」、「檢查」或未儲存的規則。列表為鍵盤與 VoiceOver 提供同一張完整圖。連線代表網路流,不是 HTTP 請求數;已觀察並不是允許決定。

AI 代理規則

只要 Flowlight 認得一個 App 的名字(目前有 16 個,包含 Claude Code、Codex、Cursor、GitHub Copilot、 @@ -200,7 +200,7 @@

工具與 MCP 伺服器

代理有很多工作是透過其他程序完成的:shell 工具會跑 curl、git 或 npm,而 MCP 伺服器也是獨立的程序在跑。Flowlight 會沿著每個程序的上層一路追回啟動它的代理,所以那些流量會 算成該代理的。在「AI 代理」中,代理的詳細資料會把這些列在「工具與 MCP 伺服器」下, - 目標則會顯示透過 curl 或 透過 github MCP。在「報告」中,程序那一列會顯示透過 Claude Code。

+ 目標則會顯示透過 curl 或 透過 github MCP。在「歷史」中,程序那一列會顯示透過 Claude Code。

MCP 伺服器的名稱,是把它的命令列與 Claude Code(~/.claude.json)、Claude Desktop、 Cursor(~/.cursor/mcp.json)、Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed 和 Gemini CLI 的 MCP 設定比對而來。遠端 MCP 伺服器以其 URL 中的主機名稱比對,沒有設定的伺服器則靠可辨識的套件名稱,例如 @@ -238,11 +238,11 @@

代理設定:Flowlight 在你的 Mac 上讀取什

值得一看

-

這是「報告」裡的第三種模式,和分項明細與圖表並列。它會把報告中的 App 互相比較, +

這是「歷史」裡的第三種模式,和分項明細與圖表並列。它會把歷史中的 App 互相比較, 指出哪些 App 的目標看起來和其他人不一樣:連的地方比同類多很多、位址從來沒有解析出名稱、主機名稱看起來像 自動產生而不是有人取的、傳出遠多於接收,以及協定只是附帶而非該 App 的本業。每一項發現都附上背後的 - 證據,點一下就把報告縮小到那個 App。

-

它刻意叫做「值得一看」而不是「可疑」。資料能支持的說法只是「和這份報告裡的其他 + 證據,點一下就把歷史縮小到那個 App。

+

它刻意叫做「值得一看」而不是「可疑」。資料能支持的說法只是「和這份歷史裡的其他 App 相比並不尋常」 — 備份工具連很多地方有它的道理,而一台安靜的 Mac 根本不會產生任何發現。 對每個 App 都有的那些流量,它不會多說什麼。

@@ -252,7 +252,7 @@

位元組從哪裡離開

一直都算進去了,只是沒有名字稱呼它們,所以用 AirDrop 傳一個 4 GB 的檔案夾,看起來只像是幾 MB 傳到 一個沒有名稱的位址。

現在每一筆流量都帶著一個出口:「網路」、「點對點 Wi-Fi」、「這台 Mac」(回路, - 從未離開這台機器)或「通道」(在 VPN 內部;之後去了哪裡在這裡看不到)。你可以從「報告」工具列把報告限定到 + 從未離開這台機器)或「通道」(在 VPN 內部;之後去了哪裡在這裡看不到)。你可以從「歷史」工具列把歷史限定到 其中一種,這項資訊也會隨 CSV 匯出,以及傳送給收集器的資料一起帶走。

點對點的列是以開啟它的功能命名 — AirDrop and Handoff · nearby device、 Continuity · nearby device — 因為連結本地位址什麼也說明不了,而同一空間裡的那台裝置沒有這台 Mac @@ -274,7 +274,7 @@

其他警示

預設會把 Apple 內建 App 排除在外。macOS 會不斷與 Apple 通訊 — 軟體更新、iCloud、 推播、時間、地圖圖磚 — 這些主機和連接埠第一次出現時都算是新的,把它們全部列出來,會把唯一 值得讀的那一行埋掉。想看的話,可以在「設定」› 「警示」中關掉這個選項。無論哪一種,這些流量仍然 - 會被記錄,仍然出現在「即時」、「報告」和「提問」中,也仍然受到每一條規則、防護機制和允許清單的約束:這個設定 + 會被記錄,仍然出現在「即時」、「歷史」和「提問」中,也仍然受到每一條規則、防護機制和允許清單的約束:這個設定 只決定列出什麼,永遠不決定允許什麼。

提問

@@ -301,10 +301,10 @@

提問

形狀重要的時候就畫圖。隨時間的變化會回傳成折線,比較是長條,整體的 切分是圓餅。Flowlight 用查詢回傳的同一批資料列來畫,所以圖和文字不可能互相矛盾, 而模型也可以要求換一種形狀,或完全不要圖。

-

每一條查詢都列在答案下方,點一下會在「報告」中開啟流量依據,裝置和設定答案則開啟相關畫面。 +

每一條查詢都列在答案下方,點一下會在「歷史」中開啟流量依據,裝置和設定答案則開啟相關畫面。 無法查證的答案,只是文法比較好的猜測。

Flowlight 用同一套標準檢視自己。這項功能送出的任何內容,都會像其他 App 的流量一樣 - 出現在「即時」和「報告」中 — 包含模型伺服器就在這台 Mac 上的情況,而那正是最容易被默默 + 出現在「即時」和「歷史」中 — 包含模型伺服器就在這台 Mac 上的情況,而那正是最容易被默默 省略掉的一種。

HTTPS 檢查(選用)

@@ -356,7 +356,7 @@

HTTPS 檢查(選用)

於是 Flowlight 從一個正在執行的代理往上走,跨過那些 shell,找出真正在啟動它們的東西。如果那是一個終端機,重新啟動就在那個終端機裡開啟,而不是在 Terminal.app 裡。如果是別的什麼,提供的選擇就變成重新啟動那個程序,並且設好代理伺服器環境,這樣它之後產生的代理就會繼承下來 — 重新啟動時用的是它原本執行的那條指令,因為帶子指令呼叫的程式,和只有名字的程式並不是同一個。

重新啟動它會結束它目前正在執行的每一個工作階段。這一點在你同意之前就說清楚,而不是事後才發現,而且無法避免:這件事的全部意義,正在於接替它的東西會以不同的環境啟動。它做不到的是觸及已經在執行的代理 — 它們的代理伺服器設定在啟動時就讀完了,現在什麼也改不了。

-

從一列直接過來。在即時、報告或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: +

從一列直接過來。在即時、歷史或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: 檢查會開啟,而且只顯示那個 App,或只顯示那個目的地,還會帶上一個說明這一點的標籤,點一下就能移除。它限定的是範圍, 而不是做搜尋 — 早先的版本會把那個名稱填進搜尋欄,而搜尋欄連回應的內文也一起搜,於是你只是想看某一個代理的流量,結果每一個 HTML 裡剛好提到過它的頁面都被找了回來。只有經過代理伺服器的流量才可能出現,所以一列你知道很忙的記錄,在這裡仍可能什麼都看不到。

@@ -383,13 +383,13 @@

模擬回應

規則

允許清單講的是某一個代理可以去哪裡。規則是它的通用版本:它會指名一個 對象 — 一個 App、一個代理、一個目標、一個 URL,或其中兩者的組合 — 然後說封鎖 - 或允許。在「即時」、「報告」、「AI 代理」或「檢查」的任一列上按右鍵,就能針對你正在看的東西寫一條; + 或允許。在「即時」、「歷史」、「AI 代理」或「檢查」的任一列上按右鍵,就能針對你正在看的東西寫一條; 每一條都會進到「規則」畫面的同一個編輯器,因為在你看不到的地方生效的規則, 會是一條你再也找不到的規則。

範本。共二十二個,分成五組 — 阻止代理連到套件登錄或其他 模型供應商、關上資料外流的常見途徑(貼文網站、webhook 接收器、匿名檔案上傳、通道、DNS over HTTPS)、產品分析與當掉回報、工作時段政策,以及一次性的「先封鎖一小時,讓我弄清楚 - 這是什麼」。你可以從「規則」工具列瀏覽它們,或在「即時」、「報告」、「AI 代理」或「檢查」的任一列上按右鍵, + 這是什麼」。你可以從「規則」工具列瀏覽它們,或在「即時」、「歷史」、「AI 代理」或「檢查」的任一列上按右鍵, 把範本套用到你正在看的東西上。

每個範本都會在動手之前先說明它要做什麼。會寫入多條規則的,會開一張卡片列出每一台 主機和時程;任何永久性的,會開啟已預先填好的編輯器;而只有會自己失效的規則 — @@ -539,10 +539,10 @@

裝置:藍牙、USB 與外接儲存裝置

事件。這裡同樣沒有傳輸量,理由和藍牙那邊一樣。

焦點模式

-

選幾個 App 和目標,每個畫面就只顯示那些 — 「即時」、「報告」、「警示」、「AI 代理」和「檢查」,還有選單列上的 +

選幾個 App 和目標,每個畫面就只顯示那些 — 「即時」、「歷史」、「警示」、「AI 代理」和「檢查」,還有選單列上的 速率。它適合在不受這台 Mac 其他部分干擾的情況下,專心看一個代理工作。

    -
  • 在「即時」、「報告」或「AI 代理」的任一列上按右鍵,選擇「以此為焦點…」,或用側邊欄底部的 +
  • 在「即時」、「歷史」或「AI 代理」的任一列上按右鍵,選擇「以此為焦點…」,或用側邊欄底部的 「焦點」控制項,從活動過的 App 中挑選,並輸入目標。
  • ⇧⌘F 可以開關「焦點」,選單列也可以,而且會顯示目前聚焦在什麼上。
  • 一個目標會連帶包含它的子網域:example.com 涵蓋 api.example.com。IP 位址可以用; @@ -583,7 +583,7 @@

    匯出到 OpenTelemetry 或 SIEM

  • 絕不包含 HTTPS 檢查的任何內容。沒有標頭、沒有內文、沒有工具呼叫 — 匯出只能承載 彙總資料和警示,所以就算出錯,它們也無處可去。
  • 驗證標頭存放在你的登入鑰匙串,而不是偏好設定中。畫面上只會顯示它們的名稱。
  • -
  • Flowlight 送出的東西會出現在 Flowlight 裡,在「即時」和「報告」中,和其他 App 的流量一樣 — 包含 +
  • Flowlight 送出的東西會出現在 Flowlight 裡,在「即時」和「歷史」中,和其他 App 的流量一樣 — 包含 位於 127.0.0.1 的收集器。

有兩點要有心理準備:彙總資料大約落後兩分鐘才折算完成,所以間隔設得比一分鐘還短,只是查詢得 @@ -719,7 +719,7 @@

限制

diff --git a/docs/zh-Hant/index.html b/docs/zh-Hant/index.html index 3103c511..510becf8 100644 --- a/docs/zh-Hant/index.html +++ b/docs/zh-Hant/index.html @@ -48,7 +48,7 @@ - + @@ -97,7 +97,7 @@

看見每個 App 的網路活動。
brew install --cask xinbetween/tap/flowlight

-

v0.16.11macOS 15+通用架構GPL-3.0無遙測

+

v0.17.0macOS 15+通用架構GPL-3.0無遙測

@@ -127,7 +127,7 @@

看見每個 App 的網路活動。
-
Flowlight 的 AI 活動圖。代理卡片經過已歸屬工具和已設定閘道;觀測到的 magpie 至 Flowlight 路由隨後分支至 LLM 服務和網域。帶狀線寬度表示所選時段的流量。

查看真實 AI 路由:代理、已歸屬工具、已設定閘道、Flowlight 觀測到的代理階段和精確目的地。帶狀線寬度表示所選時段接收與傳送流量的總和。圖中為示範資料。

@@ -149,15 +149,15 @@

幾秒內就能回答的問題

AI 代理

你在開會,代理還在跑

看見它和它的工具在模型供應商之外連過的每一台主機;一旦它離開允許清單、寄出郵件,或往新的地方上傳 100 MB,就會收到警示。

-
報告

上傳量突然暴增,你不知道為什麼

-

把指標移到尖峰上就看到背後的 App,點一下從小時放大到分鐘,再一路追到確切的網域和 IP。

+
歷史

上傳量突然暴增,你不知道為什麼

+

把指標移到尖峰上,用可捲動卡片查看貢獻流量的 App;再用範圍按鈕或導覽器從小時移到分鐘,一路追到確切的網域和 IP。

警示

有個新 App 開始往外回報

首次連線新網域、連到非標準連接埠,或流量出現尖峰,都會發出警示,並指出是哪個 App、以及是哪個數字觸發的。

即時

現在有東西把你的連線塞滿了

每秒更新的流量排行,附上每個 App 最忙的目標,選單列上還有即時速率。

-
報告

這個月的熱點流量莫名用光了

+
歷史

這個月的熱點流量莫名用光了

切到月檢視,並依 App 分組。用最多的就在第一列;需要憑據的話,還能匯出 CSV。

-
報告 · 目標

你需要稽核資料去了哪裡

+
歷史 · 目標

你需要稽核資料去了哪裡

依目標分組,看有哪些 App 連到某個網域;依 IP 分組,看某個位址背後是什麼。

@@ -175,7 +175,7 @@

即時

現在有什麼在傳?各 App 的速率、最近兩分鐘,

AI 代理

我的代理除了呼叫模型,還在做什麼?供應商、其他主機、風險標記。

⌘2
-

報告

流量都到哪去了?從秒到年,依 App、目標或 IP 分組,附圖表與 CSV。

⌘3
+

歷史

流量都到哪去了?從秒到年,依 App、目標或 IP 分組,附圖表與 CSV。

⌘3

警示

哪裡看起來不對?每個 App 都有說得清楚的警示,附上目標和閾值。

⌘4
@@ -187,7 +187,7 @@

裝置

藍牙、USB 和攝影機:配對了什麼、接上或啟用

檢查

選用功能。代理實際送出了什麼,又是哪一次工具呼叫造成的?解密後的請求、工具呼叫、結果。

⌘7
-

視覺化

誰在通訊?用可縮放的 Sankey 圖顯示 App 流量和已證實的 AI 代理路徑,並提供內容完全一致的列表。

+

連線

誰在通訊?用可縮放的 Sankey 圖顯示 App 流量和已證實的 AI 代理路徑,並提供內容完全一致的列表。

@@ -468,9 +468,9 @@

一個不用你盯著的監控工具

-
「報告」畫面:每小時接收與傳送的長條圖,以及 App、目標和協定的環圈圖
-
報告。 從秒到年的縮放、三種分組方式,即使有上百個 App,圖表依然看得清楚。
+
「歷史」畫面:每小時接收與傳送的長條圖,以及 App、目標和協定的環圈圖
+
歷史。 從秒到年的縮放、三種分組方式,即使有上百個 App,圖表依然看得清楚。
「警示」畫面:列出代理資料外洩、郵件、FTP、離開期間活動和流量尖峰等警示
警示。 每一則都指出 App、目標,以及觸發它的那個數字。
@@ -587,7 +587,7 @@

知道有什麼離開了你的 Mac。

diff --git a/docs/zh-Hant/privacy/index.html b/docs/zh-Hant/privacy/index.html index 111d4817..3b481a49 100644 --- a/docs/zh-Hant/privacy/index.html +++ b/docs/zh-Hant/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

聯絡

diff --git a/docs/zh-Hant/threat-model/index.html b/docs/zh-Hant/threat-model/index.html index 42c7a61c..94e79768 100644 --- a/docs/zh-Hant/threat-model/index.html +++ b/docs/zh-Hant/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -211,7 +211,7 @@

回報漏洞

diff --git a/project.yml b/project.yml index 0ca04cff..53a35adf 100644 --- a/project.yml +++ b/project.yml @@ -15,8 +15,8 @@ settings: DEVELOPMENT_TEAM: "" CODE_SIGN_STYLE: Automatic ENABLE_HARDENED_RUNTIME: YES - MARKETING_VERSION: "0.16.11" - CURRENT_PROJECT_VERSION: "73" + MARKETING_VERSION: "0.17.0" + CURRENT_PROJECT_VERSION: "74" configs: AppStore: DEVELOPMENT_TEAM: 38RJUJHKZS diff --git a/scripts/screenshots.sh b/scripts/screenshots.sh index 27ee2291..89fe5568 100755 --- a/scripts/screenshots.sh +++ b/scripts/screenshots.sh @@ -59,6 +59,31 @@ stop_exact_app() { fi } +expected_window_title() { + case "$1" in + live) print -r -- "Live" ;; + agents) print -r -- "AI Agents" ;; + reports) print -r -- "History" ;; + alerts) print -r -- "Alerts" ;; + inspect) print -r -- "Inspect" ;; + visualize) print -r -- "Connections" ;; + *) echo " no expected window title for screen $1" >&2; return 1 ;; + esac +} + +window_title() { + osascript - "$1" <<'OSA' +on run argv + tell application "System Events" + tell first application process whose unix id is (item 1 of argv as integer) + if (count of windows) is 0 then return "" + return name of first window + end tell + end tell +end run +OSA +} + capture() { local name="$1" screen="$2" tab="$3" size="${4:-$SIZE}" echo " $name ($screen${tab:+ · $tab})" @@ -71,8 +96,12 @@ capture() { local banner=() visualization=() [ "$name" = "always-monitor" ] && banner=(-FLDemoBanner YES) [ "$name" = "visualize" ] && visualization=(-visualize.mode ai -visualize.presentation map -visualize.granularity hour) - open -n "$APP" --args -FLDemo YES -FLScreen "$screen" -FLAgentTab "${tab:-destinations}" \ - -FLWindow "${w}x${h}" -FLInspectSelect paste.example "${banner[@]}" "${visualization[@]}" + # Ignore macOS scene state: this launch is a deterministic fixture, and restored sidebar selection can otherwise + # arrive after demo seeding and replace the requested screen. Pin English too, so the title check below is stable. + open -n "$APP" --args -ApplePersistenceIgnoreState YES -AppleLanguages "(en)" -AppleLocale en_US \ + -FLDemo YES -FLScreen "$screen" -FLAgentTab "${tab:-destinations}" \ + -FLWindow "${w}x${h}" -FLInspectSelect paste.example -AppleInterfaceStyle Light \ + "${banner[@]}" "${visualization[@]}" local pid="" for _ in {1..40}; do pid=$(exact_app_pids "$executable" | head -1) @@ -89,6 +118,14 @@ on run argv end run OSA sleep 2 + local expected actual + expected=$(expected_window_title "$screen") + actual=$(window_title "$pid" 2>/dev/null || true) + if [ "$actual" != "$expected" ]; then + echo " refusing to capture $name: expected $expected, found ${actual:-no window}" + stop_exact_app "$pid" "$executable" + return 1 + fi local id id=$(scripts/window-id.swift "$pid" 2>/dev/null || true) if [ -z "$id" ]; then @@ -104,8 +141,13 @@ OSA sleep 2 } +captured=0 for shot in "${SHOTS[@]}"; do IFS=":" read -r name screen tab size <<< "$shot" + if [ -n "${FL_ONLY:-}" ] && [[ ",${FL_ONLY}," != *",${name},"* ]]; then + continue + fi capture "$name" "$screen" "$tab" "$size" + captured=$((captured + 1)) done -echo "Wrote ${#SHOTS[@]} screenshots to $OUT" +echo "Wrote $captured screenshots to $OUT" diff --git a/site/pages/de/docs.html b/site/pages/de/docs.html index 3e2a7382..484c0f05 100644 --- a/site/pages/de/docs.html +++ b/site/pages/de/docs.html @@ -96,8 +96,8 @@

Die Ansichten

- - + + @@ -110,12 +110,12 @@

Die Ansichten
Der Bildschirm Live: eine Liste von Anwendungen mit ihren aktuellen Sende- und Empfangsraten und ihrem meistgenutzten Ziel.
Live, der Bildschirm, mit dem Flowlight startet.
-

Fahre in Berichte über einen Balken, um zu sehen, welche Apps ihn getrieben haben, klicke ihn an, um hineinzuzoomen, und doppelklicke eine Zeile, um den Bericht darauf einzugrenzen.

+

Bewege in Verlauf den Zeiger über einen Balken, um eine mitlaufende, scrollbare Karte mit den beteiligten Apps zu öffnen; die Balken zoomen beim Klicken nicht. Doppelklicke eine Zeile, um den Verlauf darauf einzugrenzen.

-

Datenverkehr visualisieren

-

Visualisieren zeigt jede App, jedes genaue Ziel und jede beobachtete Beziehung im aktuellen Zeitraum sowie im Such- und Fokusbereich. Die Pfadbreite folgt den Bytes. Sparsame rosa und blaue Striche bewegen sich in entgegengesetzte Sende- und Empfangsrichtungen; jede Kante hat ihr eigenes stabiles Tempo, und „Bewegung reduzieren“ lässt dieselben wahrheitsgetreuen statischen Pfade stehen.

-

Standardmäßig zeigt Datenverkehr die zehn aktivsten Apps und KI-Aktivität die zehn aktivsten nachgewiesenen Agentenwurzeln, geordnet nach vollständig empfangenen plus gesendeten Bytes. Die beiden optionalen durchsuchbaren Auswahlfelder für Quelle und Ziel decken beliebig-zu-beliebig, eins-zu-beliebig, beliebig-zu-eins und eins-zu-eins ab. Jede Auswahl beschränkt das jeweils andere Auswahlfeld auf Endpunkte mit beobachteter oder blockierter Evidenz; „Beliebig“ bleibt verfügbar, und „Zurücksetzen“ setzt beide Auswahlfelder zurück. Eine fokussierte Karte enthält alle verbundenen Starter, Agenten, Tools oder MCP-Dienste, Gateways, Flowlight-Proxy-Stufen, Ziele sowie beobachteten oder blockierten Beziehungen. Nur ungewöhnlich große fokussierte Bereiche werden schrittweise gruppiert; jede Gruppe behält alle genauen Mitglieds-IDs. Liste und Berichte bleiben vollständig und zahlenmäßig identisch.

-

Wähle einen Knoten oder eine Verbindung für genaue Werte und öffne anschließend Berichte, Inspizieren oder einen ungespeicherten Regeleditor mit derselben App und demselben Ziel. Liste stellt denselben vollständigen Graphen für Tastatur und VoiceOver bereit. „Verbindungen“ sind Netzwerkflüsse, keine HTTP-Anfragen; „Beobachtet“ ist keine Erlaubnisentscheidung.

+

Verbindungen

+

Verbindungen zeigt jede App, jedes genaue Ziel und jede beobachtete Beziehung im aktuellen Zeitraum sowie im Such- und Fokusbereich. Die Pfadbreite folgt den Bytes. Sparsame rosa und blaue Striche bewegen sich in entgegengesetzte Sende- und Empfangsrichtungen; jede Kante hat ihr eigenes stabiles Tempo, und „Bewegung reduzieren“ lässt dieselben wahrheitsgetreuen statischen Pfade stehen.

+

Standardmäßig zeigt Datenverkehr die zehn aktivsten Apps und KI-Aktivität die zehn aktivsten nachgewiesenen Agentenwurzeln, geordnet nach vollständig empfangenen plus gesendeten Bytes. Die beiden optionalen durchsuchbaren Auswahlfelder für Quelle und Ziel decken beliebig-zu-beliebig, eins-zu-beliebig, beliebig-zu-eins und eins-zu-eins ab. Jede Auswahl beschränkt das jeweils andere Auswahlfeld auf Endpunkte mit beobachteter oder blockierter Evidenz; „Beliebig“ bleibt verfügbar, und „Zurücksetzen“ setzt beide Auswahlfelder zurück. Eine fokussierte Karte enthält alle verbundenen Starter, Agenten, Tools oder MCP-Dienste, Gateways, Flowlight-Proxy-Stufen, Ziele sowie beobachteten oder blockierten Beziehungen. Nur ungewöhnlich große fokussierte Bereiche werden schrittweise gruppiert; jede Gruppe behält alle genauen Mitglieds-IDs. Liste und Verlauf bleiben vollständig und zahlenmäßig identisch.

+

Wähle einen Knoten oder eine Verbindung für genaue Werte und öffne anschließend Verlauf, Inspizieren oder einen ungespeicherten Regeleditor mit derselben App und demselben Ziel. Liste stellt denselben vollständigen Graphen für Tastatur und VoiceOver bereit. „Verbindungen“ sind Netzwerkflüsse, keine HTTP-Anfragen; „Beobachtet“ ist keine Erlaubnisentscheidung.

Regeln für KI-Agenten

Eine App gilt als Agent, wenn Flowlight sie am Namen kennt (heute 16, darunter Claude Code, Codex, Cursor, GitHub Copilot, @@ -133,7 +133,7 @@

Tools & MCP-Server

Agenten erledigen viel durch andere Prozesse: ein Shell-Tool führt curl, git oder npm aus, und MCP-Server laufen als eigene Prozesse. Flowlight verfolgt die Elternprozesse zurück zu dem Agenten, der sie gestartet hat, sodass dieser Datenverkehr dem Agenten zugerechnet wird. In KI-Agenten listet das Detail des Agenten sie unter Tools & MCP-Server, und bei - Zielen steht über curl oder über github MCP. In Berichte steht in der Prozesszeile über Claude Code.

+ Zielen steht über curl oder über github MCP. In Verlauf steht in der Prozesszeile über Claude Code.

MCP-Server werden benannt, indem ihre Befehlszeile mit der MCP-Konfiguration von Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed und Gemini CLI verglichen wird. Entfernte MCP-Server werden über den Hostnamen in ihrer URL erkannt und nicht konfigurierte Server über bekannte Paketnamen wie @@ -175,7 +175,7 @@

Agenten-Konfiguration: was Flowlight auf deinem Mac

Genauer hinsehen

-

Ein dritter Modus in Berichte, neben der Aufschlüsselung und den Diagrammen. Er vergleicht die Apps im Bericht miteinander +

Ein dritter Modus in Verlauf, neben der Aufschlüsselung und den Diagrammen. Er vergleicht die Apps im Bericht miteinander und zeigt auf die, deren Ziele nicht zum Rest passen: deutlich mehr Orte als bei ihresgleichen, Adressen, die nie zu einem Namen aufgelöst wurden, Hostnamen, die generiert statt gewählt aussehen, viel mehr gesendet als empfangen, und Protokolle, die eine Nebensache sind statt der Zweck der App. Jeder Befund führt die Belege mit, und ein Klick grenzt den Bericht auf diese @@ -190,7 +190,7 @@

Auf welchem Weg die Bytes gingen

immer schon gezählt; es hatte nur kein Wort dafür, weshalb ein AirDrop eines 4 GB großen Ordners wie ein paar Megabyte an eine Adresse ohne Namen aussah.

Jeder Flow trägt jetzt einen Kanal: Netzwerk, Peer-to-Peer-WLAN, Dieser Mac (Loopback, - hat den Rechner nie verlassen) oder Tunnel (in einem VPN; wohin es danach ging, ist hier nicht sichtbar). Aus der Symbolleiste von Berichte + hat den Rechner nie verlassen) oder Tunnel (in einem VPN; wohin es danach ging, ist hier nicht sichtbar). Aus der Symbolleiste von Verlauf grenzt du einen Bericht darauf ein, und der Kanal reist mit CSV-Exporten und mit allem, was an einen Collector geht.

Peer-to-Peer-Zeilen sind nach der Funktion benannt, die sie geöffnet hat – AirDrop and Handoff · nearby device, Continuity · nearby device –, denn eine Link-Local-Adresse sagt dir nichts und das Gerät im Raum hat keinen Namen, @@ -212,7 +212,7 @@

Weitere Warnungen

Apples eigene Apps sind standardmäßig ausgenommen. macOS spricht ständig mit Apple – Softwareupdate, iCloud, Push, Zeit, Karten-Kacheln – auf Hosts und Ports, die beim ersten Auftauchen neu sind, und wenn das alles gelistet wird, verschwindet die eine Zeile, die zu lesen lohnt. Schalte es unter Einstellungen › Warnungen ab, wenn du sie haben willst. So oder so wird der Datenverkehr weiterhin - aufgezeichnet, erscheint weiter in Live, Berichte und Fragen und unterliegt weiter jeder Regel, Schutzregel und Erlaubnisliste: Die Einstellung + aufgezeichnet, erscheint weiter in Live, Verlauf und Fragen und unterliegt weiter jeder Regel, Schutzregel und Erlaubnisliste: Die Einstellung entscheidet, was gelistet wird, nie, was erlaubt ist.

Fragen

@@ -240,9 +240,9 @@

Fragen

Diagramme, wenn die Form zählt. Veränderung über Zeit kommt als Linie zurück, ein Vergleich als Balken, die Aufteilung eines Ganzen als Kreis. Flowlight zeichnet sie aus denselben Zeilen, die die Abfrage geliefert hat, also können Bild und Satz sich nicht widersprechen, und das Modell kann eine andere Form oder gar keine verlangen.

-

Jede Abfrage steht unter der Antwort. Ein Klick öffnet Berichte für Verkehrsdaten oder den passenden +

Jede Abfrage steht unter der Antwort. Ein Klick öffnet Verlauf für Verkehrsdaten oder den passenden App-Bildschirm für Geräte- und Konfigurationsantworten. Eine Antwort, die du nicht prüfen kannst, ist eine Vermutung mit besserer Grammatik.

-

Flowlight hält sich an seinen eigenen Maßstab. Was diese Funktion sendet, erscheint in Live und Berichte +

Flowlight hält sich an seinen eigenen Maßstab. Was diese Funktion sendet, erscheint in Live und Verlauf wie der Datenverkehr jeder anderen App – auch dann, wenn der Modellserver auf genau diesem Mac läuft, also in dem Fall, den man am leichtesten stillschweigend hätte weglassen können.

@@ -314,7 +314,7 @@

HTTPS-Inspektion (optional)

nicht kann, ist die bereits laufenden Agenten erreichen – deren Proxy-Einstellungen wurden beim Start gelesen, und nichts kann sie jetzt noch ändern.

-

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Berichten oder KI-Agenten mit der rechten Maustaste auf eine App +

Wie du von einer Zeile aus hierherkommst. Klicke in Live, Verlauf oder KI-Agenten mit der rechten Maustaste auf eine App oder ein Ziel und wähle Datenverkehr von … inspizieren: Inspizieren öffnet sich und zeigt nur diese App oder nur dieses Ziel, mit einer Markierung, die das sagt und die du mit einem Klick entfernen kannst. Es schränkt ein, statt zu suchen – eine frühere Version setzte den Namen ins Suchfeld, das auch Antwort-Bodys durchsucht, sodass die Frage nach dem Datenverkehr eines Agenten jede Seite zurückgab, deren HTML ihn @@ -343,13 +343,13 @@

Mock-Antworten

Regeln

Eine Erlaubnisliste ist die Vorstellung eines Agenten davon, wohin er gehen darf. Eine Regel ist die allgemeine Fassung: Sie nennt ein Subjekt – eine App, einen Agenten, ein Ziel, eine URL oder ein Paar aus zwei davon – und sagt blockieren - oder erlauben. Rechtsklicke eine Zeile in Live, Berichte, KI-Agenten oder Inspizieren, um eine Regel über das zu schreiben, was du gerade ansiehst; + oder erlauben. Rechtsklicke eine Zeile in Live, Verlauf, KI-Agenten oder Inspizieren, um eine Regel über das zu schreiben, was du gerade ansiehst; jede davon landet im selben Editor auf dem Bildschirm Regeln, denn eine Regel, die im Verborgenen greift, wäre eine Regel, die du nie wiederfindest.

Vorlagen. Zweiundzwanzig, in fünf Gruppen – einen Agenten von Paketregistern oder anderen Modellanbietern fernhalten, die üblichen Wege schließen, auf denen Daten abfließen (Paste-Dienste, Webhook-Fänger, anonyme Datei-Ablagen, Tunnel, DNS over HTTPS), Produktanalyse und Crash-Berichte, Regeln für Arbeitszeiten und das einmalige „blockiere das eine Stunde lang, bis ich - herausgefunden habe, was es ist“. Durchsuche sie über die Symbolleiste von Regeln, oder rechtsklicke irgendwo in Live, Berichte, KI-Agenten oder Inspizieren eine Zeile und + herausgefunden habe, was es ist“. Durchsuche sie über die Symbolleiste von Regeln, oder rechtsklicke irgendwo in Live, Verlauf, KI-Agenten oder Inspizieren eine Zeile und wende eine auf das an, was du ansiehst.

Jede Vorlage sagt, was sie tun wird, bevor sie es tut. Alles, was mehr als eine Regel schreibt, öffnet eine Karte mit jedem Host und jedem Zeitplan; alles Dauerhafte öffnet den vorausgefüllten Editor; und nur Regeln, die sich selbst aufheben – nach einer @@ -508,10 +508,10 @@

Geräte: Bluetooth, USB und externe Speicher

Ereignis, das Menschen wirklich interessiert. Durchsatz gibt es hier auch nicht, aus demselben Grund wie bei Bluetooth.

Fokusmodus

-

Wähle ein paar Apps und Ziele, und jeder Bildschirm zeigt nur die – Live, Berichte, Warnungen, KI-Agenten und Inspizieren, dazu die Raten in +

Wähle ein paar Apps und Ziele, und jeder Bildschirm zeigt nur die – Live, Verlauf, Warnungen, KI-Agenten und Inspizieren, dazu die Raten in der Menüleiste. Er ist dafür da, einen Agenten bei der Arbeit zu beobachten, ohne den restlichen Mac im Weg.

    -
  • Rechtsklicke eine Zeile in Live, Berichte oder KI-Agenten und wähle Fokussieren auf…, oder nimm das Fokus-Element unten in +
  • Rechtsklicke eine Zeile in Live, Verlauf oder KI-Agenten und wähle Fokussieren auf…, oder nimm das Fokus-Element unten in der Seitenleiste, um aus den aktiven Apps zu wählen und Ziele einzutippen.
  • ⇧⌘F schaltet den Fokus ein und aus, und die Menüleiste tut es auch – sie zeigt zudem, was fokussiert ist.
  • Ein Ziel nimmt seine Subdomains mit: example.com deckt api.example.com ab. IP-Adressen funktionieren, @@ -552,7 +552,7 @@

    Export an OpenTelemetry oder ein SIEM

  • Nie etwas aus der HTTPS-Inspektion. Keine Header, keine Bodys, keine Tool-Aufrufe – der Export kann nur Rollups und Warnungen tragen, es gibt also nicht einmal versehentlich einen Weg dorthin.
  • Auth-Header liegen in deinem Anmelde-Schlüsselbund, nicht in den Einstellungen. Angezeigt werden immer nur ihre Namen.
  • -
  • Was Flowlight sendet, erscheint in Flowlight, in Live und Berichte, wie der Datenverkehr jeder anderen App – auch +
  • Was Flowlight sendet, erscheint in Flowlight, in Live und Verlauf, wie der Datenverkehr jeder anderen App – auch bei einem Collector auf 127.0.0.1.

Zwei Dinge sind zu erwarten: Rollups werden etwa zwei Minuten verzögert zusammengefasst, ein Intervall unter einer Minute fragt also öfter, ohne dass Daten diff --git a/site/pages/de/index.html b/site/pages/de/index.html index 29dd5e26..0ac4346d 100644 --- a/site/pages/de/index.html +++ b/site/pages/de/index.html @@ -80,15 +80,15 @@

Fragen, die es in Sekunden beantwortet

KI-Agenten

Ein Agent arbeitet, während du im Meeting sitzt

Sieh jeden Host, den er und seine Tools außer dem Modellanbieter berührt haben – und werde gewarnt, wenn er seine Erlaubnisliste verlässt, E-Mail sendet oder 100 MB an ein neues Ziel hochlädt.

-
Berichte

Dein Upload schlägt aus und du weißt nicht, warum

-

Fahre über die Spitze, um die App dahinter zu sehen, klicke, um von der Stunde in die Minute zu zoomen, und folge ihr bis zur genauen Domain und IP.

+
Verlauf

Dein Upload schlägt aus und du weißt nicht, warum

+

Fahre über die Spitze, um eine scrollbare Karte der beteiligten Apps zu sehen, und wechsle mit Zeitraumtasten oder Navigator von der Stunde zur Minute bis zur genauen Domain und IP.

Warnungen

Eine neue App telefoniert nach Hause

Erster Kontakt mit einer neuen Domain, ein Nicht-Standard-Port oder eine Verkehrsspitze lösen je eine Warnung aus, die die App und den Wert nennt, der sie ausgelöst hat.

Live

Irgendetwas macht gerade deine Leitung voll

Die größten Verbraucher, jede Sekunde aktualisiert, mit dem meistgenutzten Ziel jeder App und den aktuellen Raten in der Menüleiste.

-
Berichte

Dein Hotspot-Volumen ist diesen Monat verschwunden

+
Verlauf

Dein Hotspot-Volumen ist diesen Monat verschwunden

Wechsle zur Monatsansicht und gruppiere nach App. Der größte Verbraucher steht oben – mit CSV-Export, wenn du Belege brauchst.

-
Berichte · Ziel

Du musst prüfen, wohin Daten gehen

+
Verlauf · Ziel

Du musst prüfen, wohin Daten gehen

Gruppiere nach Ziel, um jede App zu sehen, die mit einer Domain spricht, oder nach IP, um zu sehen, was hinter einer Adresse steckt.

@@ -106,7 +106,7 @@

Live

Was bewegt sich jetzt? Raten pro App, die letzten zwei Minuten,

KI-Agenten

Was tun meine Agenten, außer ihr Modell zu rufen? Anbieter, andere Hosts, Risikomarkierungen.

⌘2
-

Berichte

Wo ist alles hingegangen? Sekunde bis Jahr, gruppiert nach App, Ziel oder IP, mit Diagrammen und CSV.

⌘3
+

Verlauf

Wo ist alles hingegangen? Sekunde bis Jahr, gruppiert nach App, Ziel oder IP, mit Diagrammen und CSV.

⌘3

Warnungen

Was sah falsch aus? Nachvollziehbare Warnungen pro App, mit Ziel und Schwellenwert.

⌘4
@@ -118,7 +118,7 @@

Geräte

Bluetooth, USB und Kameras: was gekoppelt, angeschlossen oder

Inspizieren

Optional. Was hat der Agent wirklich gesendet, und welcher Tool-Aufruf hat es ausgelöst? Entschlüsselte Anfragen, Tool-Aufrufe, Ergebnisse.

⌘7
-

Visualisieren

Was kommuniziert? Eine zoombare Sankey-Karte für App-Verkehr und nachgewiesene KI-Agentenpfade, mit exakter Listenansicht.

+

Verbindungen

Was kommuniziert? Eine zoombare Sankey-Karte für App-Verkehr und nachgewiesene KI-Agentenpfade, mit exakter Listenansicht.

@@ -402,8 +402,8 @@

Ein Wächter, den du nicht bewachen musst

Die Ansicht Berichte mit stündlichen Balken für empfangene und gesendete Daten und Ringdiagrammen für Apps, Ziele und Protokolle
-
Berichte. Zoom von der Sekunde bis zum Jahr, drei Gruppierungen, Diagramme, die auch bei hunderten Apps lesbar bleiben.
+ alt="Die Ansicht Verlauf mit stündlichen Balken für empfangene und gesendete Daten und Ringdiagrammen für Apps, Ziele und Protokolle">
+
Verlauf. Zoom von der Sekunde bis zum Jahr, drei Gruppierungen, Diagramme, die auch bei hunderten Apps lesbar bleiben.
Die Ansicht Warnungen mit Warnungen zu Agenten-Exfiltration, E-Mail, FTP, Aktivität bei Abwesenheit und einer Verkehrsspitze
Warnungen. Jede nennt die App, das Ziel und den Wert, der sie ausgelöst hat.
diff --git a/site/pages/docs.html b/site/pages/docs.html index 6edf9737..9f958d4a 100644 --- a/site/pages/docs.html +++ b/site/pages/docs.html @@ -97,8 +97,8 @@

The views

- - + + @@ -111,13 +111,13 @@

The views

The Live screen: a list of applications with their current send and receive rates and busiest destination.
Live, the screen Flowlight opens on.
-

In Reports, hover a bar to see which apps drove it, click it to zoom in, and double-click any row to narrow the report to it.

+

In History, choose 15 min, 1h, 6h, 1d, 1w, 1 mo, 6 mo, 1y, or All. Hover-only bars open a cursor-following, scrollable card with the bucket totals and contributing apps; they never change the selected range. The navigator below the chart starts with Nearby context and can switch to All history: drag the brush to pan the selected window, or drag either edge to resize it. Double-click any breakdown row to narrow History to it.

-

Visualize traffic

-

Visualize draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths.

+

Connections

+

Connections draws every app, exact destination, and observed relationship in the current time, Search, and Focus scope. Path width follows total bytes. Sparse rose and blue dashes travel in opposite sent and received directions; every edge has its own stable speed, and Reduce Motion keeps the same truthful static paths.

Choose Traffic for every observed application, or AI activity for proved agent clients, their attributed tools and MCP servers, launchers, gateways, Flowlight's inspection proxy, LLM services, and every other destination they reached. Process-lineage and configured-route relationships stay visually distinct from observed traffic and never invent byte totals or invocations.

-

By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and Reports remain complete and numerically identical.

-

Select a node or connection for exact values, then continue to Reports, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict.

+

By default, Traffic shows the ten busiest applications and AI activity shows the ten busiest proved agent roots, ranked by complete received-plus-sent traffic. Use the optional searchable source and destination selectors for any-to-any, one-to-any, any-to-one, or one-to-one investigation. Each choice limits the opposite selector to endpoints with observed or blocked evidence, while Any stays available; Reset returns both selectors to Any. A focused Map includes every connected launcher, agent, tool or MCP service, gateway, Flowlight proxy stage, destination, and observed or blocked relationship. Only an unusually large focused neighborhood groups progressively; each group retains every exact member ID. List and History remain complete and numerically identical.

+

Select a node or connection for exact values, then continue to History, Inspect, or an unsaved blocking-rule editor with the same app and exact destination. List exposes the same complete graph 25 relationships at a time for keyboard, VoiceOver, and anyone who prefers no spatial view. “Connections” means network flows, not HTTP requests. “Observed” means traffic exists; it is not an allow verdict.

AI agent rules

An app counts as an agent if Flowlight knows it by name (16 today, including Claude Code, Codex, Cursor, GitHub Copilot, @@ -135,7 +135,7 @@

Tools & MCP servers

Agents do much of their work through other processes: a shell tool runs curl, git or npm, and MCP servers run as their own processes. Flowlight follows each process's parents back to the agent that started it, so that traffic is counted as the agent's. In AI Agents, the agent's detail lists these under Tools & MCP servers, and - destinations read via curl or via github MCP. In Reports, the process row reads via Claude Code.

+ destinations read via curl or via github MCP. In History, the process row reads via Claude Code.

MCP servers are named by matching their command line to the MCP configuration of Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed and Gemini CLI. Remote MCP servers are matched by the hostname in their URL, and unconfigured servers by recognizable package names such as @@ -177,7 +177,7 @@

Agent configuration: what Flowlight reads on your M

Worth a look

-

A third mode in Reports, beside the breakdown and the charts. It compares the apps in the report with each other +

A third mode in History, beside the breakdown and the charts. It compares the apps in the report with each other and points at the ones whose destinations don't look like the rest: many more places than their peers, addresses that never resolved to a name, hostnames that look generated rather than chosen, far more sent than received, and protocols that are a sideline rather than the app's purpose. Each finding carries the evidence behind it, and clicking one narrows the report to that @@ -193,7 +193,7 @@

Which way the bytes left

with no name.

Every flow now carries a channel: Network, Peer-to-peer Wi-Fi, This Mac (loopback, which never left the machine) or Tunnel (inside a VPN; where it went after that isn't visible here). Narrow a report to - one of them from the Reports toolbar, and it travels with CSV exports and with anything sent to a collector.

+ one of them from the History toolbar, and it travels with CSV exports and with anything sent to a collector.

Peer-to-peer rows are named by the feature that opened them — AirDrop and Handoff · nearby device, Continuity · nearby device — because a link-local address tells you nothing and the device in the room has no name this Mac can learn. An app that uses the radio directly keeps its own name, which is the truthful answer for it.

@@ -214,7 +214,7 @@

Other alerts

Apple's own apps are left out by default. macOS contacts Apple constantly — Software Update, iCloud, push, time, Maps tiles — on hosts and ports that are new the first time they appear, and listing all of it buries the one line worth reading. Turn it off in Settings › Alerts if you want them. Either way the traffic is still - recorded, still appears in Live, Reports and Ask, and is still subject to every rule, guardrail and allowlist: the setting + recorded, still appears in Live, History and Ask, and is still subject to every rule, guardrail and allowlist: the setting decides what is listed, never what is allowed.

Ask

@@ -242,9 +242,9 @@

Ask

Charts when the shape matters. Change over time comes back as a line, a comparison as bars, a split of one whole as a pie. Flowlight draws them from the same rows the query returned, so the picture and the sentence cannot disagree, and the model can ask for a different shape or for none at all.

-

Every query is listed under the answer, and clicking one opens Reports for traffic evidence or the relevant +

Every query is listed under the answer, and clicking one opens History for traffic evidence or the relevant app screen for device and configuration answers. An answer you can't check is a guess with better grammar.

-

Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and Reports +

Flowlight holds itself to its own standard. Whatever this feature sends appears in Live and History like any other app's traffic — including when the model server is on this very Mac, which is the case it would have been easiest to quietly leave out.

@@ -273,7 +273,7 @@

HTTPS inspection (optional)

Flowlight certificate; Flowlight notices and passes them through encrypted. By default, header values are kept only when the header is one you allow, and everything else is replaced by its length before anything is stored — recorded requests are kept for as long as you set, and Remove Certificate & Recorded Data deletes the certificate, its trust setting and everything recorded. Inspection is HTTP/1.1 only (Flowlight asks both sides for it) and not available in demo mode.

-

Local risk analysis is separate and off by default. In Reports or Settings › Detection, you can ask +

Local risk analysis is separate and off by default. In History or Settings › Detection, you can ask Apple’s on-device model to review only meaningful, already-recorded decrypted HTTP candidates after capture. It gets a bounded redacted description — never request or response bodies, header values, cookies, credentials or tool arguments — and nothing leaves the Mac. The result is a potential-harm hint, not proof of intent: Flowlight never blocks, changes, @@ -320,7 +320,7 @@

HTTPS inspection (optional)

and it is unavoidable: the entire point is that what replaces it starts with a different environment. What it cannot do is reach the agents already running — their proxy settings were read at launch, and nothing can change them now.

-

Getting here from a row. Right-click an app or a destination in Live, Reports or AI Agents and +

Getting here from a row. Right-click an app or a destination in Live, History or AI Agents and choose Inspect …'s Traffic: Inspect opens showing only that app, or only that destination, with a chip saying so that you can remove in one click. It scopes rather than searches — an earlier version put the name in the search field, which also searches response bodies, so asking for one agent's traffic returned every page whose HTML happened to @@ -352,13 +352,13 @@

Mock responses

Rules

An allowlist is one agent's idea of where it may go. A rule is the general version: it names a subject — an app, an agent, a destination, a URL, or a pairing of two of those — and says block - or allow. Right-click any row in Live, Reports, AI Agents or Inspect to write one about what you're looking at; + or allow. Right-click any row in Live, History, AI Agents or Inspect to write one about what you're looking at; every one of them lands in the same editor on the Rules screen, because a rule that took effect out of sight would be a rule you could never find again.

Templates. Twenty-two of them, in five groups — stopping an agent reaching package registries or other model providers, closing the common ways data leaves (paste sites, webhook catchers, anonymous file drops, tunnels, DNS over HTTPS), product analytics and crash reporting, working-hours policies, and one-off "block this for an hour while I work out - what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, Reports, AI Agents or Inspect and + what it is". Browse them from the Rules toolbar, or right-click a row anywhere in Live, History, AI Agents or Inspect and apply one to what you're looking at.

Each template says what it will do before it does it. Anything that writes more than one rule opens a card listing every host and schedule; anything permanent opens the editor pre-filled; and only rules that undo themselves — an @@ -555,10 +555,10 @@

Devices: camera activity, Bluetooth, USB and external storage

Focus mode

-

Pick a few apps and destinations and every screen shows only those — Live, Reports, Alerts, AI Agents and Inspect, and the rates in +

Pick a few apps and destinations and every screen shows only those — Live, History, Alerts, AI Agents and Inspect, and the rates in the menu bar. It's for watching one agent work without the rest of the Mac in the way.

    -
  • Right-click any row in Live, Reports or AI Agents and choose Focus on…, or use the Focus control at the bottom of +
  • Right-click any row in Live, History or AI Agents and choose Focus on…, or use the Focus control at the bottom of the sidebar to pick from the apps that have been active and to type destinations.
  • ⇧⌘F turns Focus on and off, and so does the menu bar, which also shows what's focused.
  • A destination takes its subdomains with it: example.com covers api.example.com. IP addresses work; @@ -599,7 +599,7 @@

    Export to OpenTelemetry or a SIEM

  • Never anything from HTTPS inspection. No headers, no bodies, no tool calls — the export can only carry rollups and alerts, so there is nowhere for them to go even by accident.
  • Auth headers are kept in your login Keychain, not in preferences. Only their names are ever displayed.
  • -
  • What Flowlight sends shows up in Flowlight, in Live and Reports, like any other app's traffic — including +
  • What Flowlight sends shows up in Flowlight, in Live and History, like any other app's traffic — including a collector on 127.0.0.1.

Two things to expect: rollups are folded about two minutes behind, so an interval under a minute polls more often without data diff --git a/site/pages/es/docs.html b/site/pages/es/docs.html index 77b024c3..c6802fa6 100644 --- a/site/pages/es/docs.html +++ b/site/pages/es/docs.html @@ -96,8 +96,8 @@

Las vistas

- - + + @@ -110,11 +110,11 @@

Las vistas

La pantalla En vivo: una lista de aplicaciones con sus tasas actuales de envío y recepción y su destino más activo.
En vivo, la pantalla con la que se abre Flowlight.
-

En Informes, pasa el cursor por una barra para ver qué apps la generaron, haz clic para ampliar y haz doble clic en cualquier fila para limitar el informe a ella.

-

Visualizar el tráfico

-

Visualizar muestra cada app, destino exacto y relación observada del intervalo, la búsqueda y el enfoque actuales. El ancho representa bytes. Unos trazos rosa y azules se mueven en sentidos opuestos para envío y recepción; cada arista tiene su propia velocidad estable y Reducir movimiento conserva los mismos trazados estáticos.

-

Por defecto, Tráfico muestra las diez apps con más actividad y Actividad de IA las diez raíces de agentes demostradas con más actividad, ordenadas por el total completo de bytes recibidos y enviados. Los dos selectores opcionales con búsqueda, origen y destino, cubren cualquiera-a-cualquiera, uno-a-cualquiera, cualquiera-a-uno y uno-a-uno. Cada selección limita el selector opuesto a extremos con evidencia observada o bloqueada; «Cualquiera» siempre sigue disponible y «Restablecer» devuelve ambos selectores a su estado inicial. Un mapa enfocado incluye cada lanzador, agente, herramienta o servicio MCP, pasarela, etapa del proxy de Flowlight, destino y relación observada o bloqueada conectados. Solo los ámbitos enfocados excepcionalmente grandes se agrupan de forma progresiva; cada grupo conserva todos los ID exactos de sus miembros. Lista e Informes siguen completos y numéricamente idénticos.

-

Selecciona un nodo o conexión para ver sus valores exactos y continuar a Informes, Inspeccionar o una regla sin guardar con la misma app y destino. Lista ofrece el mismo grafo completo para teclado y VoiceOver. Conexiones significa flujos de red, no peticiones HTTP; Observado no es una decisión de permiso.

+

En Historial, pasa el cursor sobre una barra para abrir una tarjeta desplazable que sigue al puntero y muestra las apps que contribuyeron; las barras no amplían al hacer clic. Haz doble clic en cualquier fila para limitar el historial a ella.

+

Conexiones

+

Conexiones muestra cada app, destino exacto y relación observada del intervalo, la búsqueda y el enfoque actuales. El ancho representa bytes. Unos trazos rosa y azules se mueven en sentidos opuestos para envío y recepción; cada arista tiene su propia velocidad estable y Reducir movimiento conserva los mismos trazados estáticos.

+

Por defecto, Tráfico muestra las diez apps con más actividad y Actividad de IA las diez raíces de agentes demostradas con más actividad, ordenadas por el total completo de bytes recibidos y enviados. Los dos selectores opcionales con búsqueda, origen y destino, cubren cualquiera-a-cualquiera, uno-a-cualquiera, cualquiera-a-uno y uno-a-uno. Cada selección limita el selector opuesto a extremos con evidencia observada o bloqueada; «Cualquiera» siempre sigue disponible y «Restablecer» devuelve ambos selectores a su estado inicial. Un mapa enfocado incluye cada lanzador, agente, herramienta o servicio MCP, pasarela, etapa del proxy de Flowlight, destino y relación observada o bloqueada conectados. Solo los ámbitos enfocados excepcionalmente grandes se agrupan de forma progresiva; cada grupo conserva todos los ID exactos de sus miembros. Lista e Historial siguen completos y numéricamente idénticos.

+

Selecciona un nodo o conexión para ver sus valores exactos y continuar a Historial, Inspeccionar o una regla sin guardar con la misma app y destino. Lista ofrece el mismo grafo completo para teclado y VoiceOver. Conexiones significa flujos de red, no peticiones HTTP; Observado no es una decisión de permiso.

Reglas de los agentes de IA

Una app cuenta como agente si Flowlight la conoce por su nombre (16 hoy, entre ellas Claude Code, Codex, Cursor, GitHub Copilot, @@ -132,7 +132,7 @@

Herramientas y servidores MCP

Los agentes hacen gran parte de su trabajo a través de otros procesos: una herramienta de shell ejecuta curl, git o npm, y los servidores MCP se ejecutan como procesos propios. Flowlight sigue los procesos padre de cada proceso hasta el agente que lo arrancó, así que ese tráfico cuenta como del agente. En Agentes de IA, el detalle del agente los lista en Herramientas y servidores MCP, y - los destinos indican vía curl o vía MCP github. En Informes, la fila del proceso indica vía Claude Code.

+ los destinos indican vía curl o vía MCP github. En Historial, la fila del proceso indica vía Claude Code.

Los servidores MCP reciben su nombre cotejando su línea de comandos con la configuración MCP de Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed y Gemini CLI. Los servidores MCP remotos se identifican por el nombre de host de su URL, y los que no están configurados, por nombres de paquete reconocibles como @@ -175,7 +175,7 @@

Configuración de los agentes: qué lee Flowlight e

Merece un vistazo

-

Un tercer modo en Informes, junto al desglose y los gráficos. Compara entre sí las apps del informe +

Un tercer modo en Historial, junto al desglose y los gráficos. Compara entre sí las apps del informe y señala aquellas cuyos destinos no se parecen al resto: muchos más sitios que sus pares, direcciones que nunca resolvieron a un nombre, nombres de host que parecen generados en vez de elegidos, mucho más enviado que recibido y protocolos que son un añadido y no el propósito de la app. Cada hallazgo lleva consigo las pruebas en las que se basa, y al hacer clic en uno el informe se limita a esa @@ -191,7 +191,7 @@

Por dónde salieron los bytes

sin nombre.

Ahora cada flujo lleva un canal: Red, Wi-Fi entre dispositivos, Este Mac (loopback, que nunca salió de la máquina) o Túnel (dentro de una VPN; adónde fue después no se ve aquí). Puedes limitar un informe a - uno de ellos desde la barra de herramientas de Informes, y el canal viaja con las exportaciones a CSV y con todo lo que se envía a un colector.

+ uno de ellos desde la barra de herramientas de Historial, y el canal viaja con las exportaciones a CSV y con todo lo que se envía a un colector.

Las filas entre dispositivos reciben el nombre de la función que las abrió —AirDrop and Handoff · nearby device, Continuity · nearby device— porque una dirección de enlace local no dice nada y el dispositivo que está en la habitación no tiene un nombre que este Mac pueda aprender. Una app que usa la radio directamente conserva su propio nombre, que es la respuesta veraz en su caso.

@@ -212,7 +212,7 @@

Otras alertas

Las apps de Apple quedan fuera por defecto. macOS contacta con Apple constantemente —Actualización de software, iCloud, push, hora, teselas de Mapas— en hosts y puertos que son nuevos la primera vez que aparecen, y listarlo todo entierra la única línea que merece leerse. Desactívalo en Ajustes › Alertas si las quieres. En cualquier caso, el tráfico se sigue - registrando, sigue apareciendo en En vivo, Informes y Preguntar, y sigue sujeto a todas las reglas, salvaguardas y listas de permitidos: el ajuste + registrando, sigue apareciendo en En vivo, Historial y Preguntar, y sigue sujeto a todas las reglas, salvaguardas y listas de permitidos: el ajuste decide qué se lista, nunca qué se permite.

Preguntar

@@ -240,9 +240,9 @@

Preguntar

Gráficos cuando la forma importa. La evolución en el tiempo vuelve como una línea, una comparación como barras y el reparto de un total como un gráfico de sectores. Flowlight los dibuja con las mismas filas que devolvió la consulta, así que la imagen y la frase no pueden contradecirse, y el modelo puede pedir otra forma o ninguna.

-

Cada consulta aparece debajo de la respuesta y, al hacer clic, se abre Informes para las pruebas de tráfico o +

Cada consulta aparece debajo de la respuesta y, al hacer clic, se abre Historial para las pruebas de tráfico o la pantalla correspondiente para las respuestas sobre dispositivos y configuración. Una respuesta que no puedes comprobar es una conjetura con mejor gramática.

-

Flowlight se aplica su propio criterio. Lo que esta función envíe aparece en En vivo y en Informes +

Flowlight se aplica su propio criterio. Lo que esta función envíe aparece en En vivo y en Historial como el tráfico de cualquier otra app, también cuando el servidor de modelos está en este mismo Mac, que era justo el caso más fácil de omitir sin decir nada.

@@ -312,7 +312,7 @@

Inspección HTTPS (opcional)

inevitable: todo el sentido está en que lo que lo sustituye arranque con un entorno distinto. Lo que no puede hacer es llegar a los agentes que ya están en marcha — sus ajustes de proxy se leyeron al arrancar, y ya nada puede cambiarlos.

-

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Informes o Agentes de IA y elige +

Cómo llegar aquí desde una fila. Haz clic derecho en una app o en un destino en En vivo, Historial o Agentes de IA y elige Inspeccionar el tráfico de …: Inspeccionar se abre mostrando solo esa app, o solo ese destino, con una etiqueta que lo indica y que puedes quitar con un clic. Delimita en lugar de buscar — una versión anterior ponía el nombre en el campo de búsqueda, que también busca en los cuerpos de las respuestas, así que pedir el tráfico de un agente devolvía todas las páginas cuyo HTML se limitaba a mencionarlo. Solo puede aparecer @@ -340,13 +340,13 @@

Respuestas simuladas

Reglas

Una lista de permitidos es la idea que tiene un agente de adónde puede ir. Una regla es la versión general: nombra un sujeto —una app, un agente, un destino, una URL o una pareja de dos de ellos— y dice bloquear - o permitir. Haz clic derecho en cualquier fila de En vivo, Informes, Agentes de IA o Inspeccionar para escribir una sobre lo que estás mirando; + o permitir. Haz clic derecho en cualquier fila de En vivo, Historial, Agentes de IA o Inspeccionar para escribir una sobre lo que estás mirando; todas acaban en el mismo editor de la pantalla Reglas, porque una regla que surtiera efecto fuera de la vista sería una regla que ya nunca podrías encontrar.

Plantillas. Veintidós, en cinco grupos: impedir que un agente llegue a registros de paquetes o a otros proveedores de modelos, cerrar las vías habituales por las que salen los datos (sitios de pegado, receptores de webhooks, servicios anónimos de subida de archivos, túneles, DNS over HTTPS), analítica de producto e informes de errores, políticas de horario laboral, y el «bloquea esto una hora mientras averiguo - qué es» puntual. Explóralas desde la barra de herramientas de Reglas, o haz clic derecho en una fila de En vivo, Informes, Agentes de IA o Inspeccionar y + qué es» puntual. Explóralas desde la barra de herramientas de Reglas, o haz clic derecho en una fila de En vivo, Historial, Agentes de IA o Inspeccionar y aplica una a lo que estés mirando.

Cada plantilla dice qué va a hacer antes de hacerlo. Todo lo que escriba más de una regla abre una tarjeta con la lista de cada host y cada horario; todo lo permanente abre el editor ya rellenado; y solo las reglas que se deshacen solas —una @@ -502,10 +502,10 @@

Dispositivos: Bluetooth, USB y almacenamiento externo

evento que de verdad importa a la gente. El rendimiento tampoco está aquí, por la misma razón que no está en Bluetooth.

Modo Enfoque

-

Elige unas cuantas apps y destinos y todas las pantallas mostrarán solo eso: En vivo, Informes, Alertas, Agentes de IA e Inspeccionar, y también las tasas de +

Elige unas cuantas apps y destinos y todas las pantallas mostrarán solo eso: En vivo, Historial, Alertas, Agentes de IA e Inspeccionar, y también las tasas de la barra de menús. Sirve para ver trabajar a un agente sin el resto del Mac por medio.

    -
  • Haz clic derecho en cualquier fila de En vivo, Informes o Agentes de IA y elige Enfocar en…, o usa el control Enfoque al final de +
  • Haz clic derecho en cualquier fila de En vivo, Historial o Agentes de IA y elige Enfocar en…, o usa el control Enfoque al final de la barra lateral para elegir entre las apps que han estado activas y escribir destinos.
  • ⇧⌘F activa y desactiva el Enfoque, igual que la barra de menús, que además muestra qué está enfocado.
  • Un destino se lleva sus subdominios: example.com cubre api.example.com. Las direcciones IP funcionan; @@ -546,7 +546,7 @@

    Exportar a OpenTelemetry o a un SIEM

  • Nunca nada de la inspección HTTPS. Ni cabeceras, ni cuerpos, ni llamadas de herramientas: la exportación solo puede llevar agregados y alertas, así que no hay por dónde se escapen ni por accidente.
  • Las cabeceras de autenticación se guardan en tu llavero de inicio de sesión, no en las preferencias. Solo se muestran sus nombres.
  • -
  • Lo que Flowlight envía aparece en Flowlight, en En vivo y en Informes, como el tráfico de cualquier otra app, incluido +
  • Lo que Flowlight envía aparece en Flowlight, en En vivo y en Historial, como el tráfico de cualquier otra app, incluido un colector en 127.0.0.1.

Dos cosas que esperar: los agregados se consolidan con unos dos minutos de retraso, así que un intervalo de menos de un minuto consulta más a menudo sin que los datos diff --git a/site/pages/es/index.html b/site/pages/es/index.html index d63cc48a..fe2acc4e 100644 --- a/site/pages/es/index.html +++ b/site/pages/es/index.html @@ -80,15 +80,15 @@

Preguntas que responde en segundos

Agentes de IA

Un agente trabaja mientras estás en una reunión

Verás todos los hosts que él y sus herramientas tocaron además de su proveedor de modelo, y recibirás una alerta si sale de su lista de permitidos, envía correo o sube 100 MB a un sitio nuevo.

-
Informes

Tu subida se ha disparado y no sabes por qué

-

Pasa el cursor por el pico para ver qué app hay detrás, haz clic para bajar de la hora al minuto y sigue el rastro hasta el dominio y la IP exactos.

+
Historial

Tu subida se ha disparado y no sabes por qué

+

Pasa el cursor por el pico para ver una tarjeta desplazable con las apps que contribuyeron; usa los intervalos o el navegador para pasar de la hora al minuto y seguir el rastro hasta el dominio y la IP exactos.

Alertas

Una app nueva ha empezado a llamar a casa

El primer contacto con un dominio nuevo, un puerto no estándar o un pico de tráfico generan una alerta que nombra la app y la cifra que la activó.

En vivo

Algo está saturando tu conexión ahora mismo

Quién más habla, actualizado cada segundo, con el destino más activo de cada app y las tasas en vivo en la barra de menús.

-
Informes

Los datos de tu punto de acceso se han esfumado este mes

+
Historial

Los datos de tu punto de acceso se han esfumado este mes

Cambia a la vista de mes y agrupa por app. Quien más consume ocupa la primera fila, con exportación a CSV si necesitas pruebas.

-
Informes · Destino

Necesitas auditar adónde van los datos

+
Historial · Destino

Necesitas auditar adónde van los datos

Agrupa por destino para ver todas las apps que hablan con un dominio, o por IP para ver qué hay detrás de una dirección.

@@ -106,7 +106,7 @@

En vivo

¿Qué se mueve ahora mismo? Tasas por app, los dos últimos

Agentes de IA

¿Qué hacen mis agentes aparte de llamar a su modelo? Proveedores, otros hosts, distintivos de riesgo.

⌘2
-

Informes

¿Adónde ha ido todo? Del segundo al año, agrupado por app, destino o IP, con gráficos y CSV.

⌘3
+

Historial

¿Adónde ha ido todo? Del segundo al año, agrupado por app, destino o IP, con gráficos y CSV.

⌘3

Alertas

¿Qué ha pintado mal? Alertas por app, explicables, con el destino y el umbral.

⌘4
@@ -118,7 +118,7 @@

Dispositivos

Bluetooth, USB y cámaras: qué está emparejado, conect

Inspeccionar

Opcional. ¿Qué envió el agente en realidad y qué llamada de herramienta lo provocó? Peticiones descifradas, llamadas de herramientas, resultados.

⌘7
-

Visualizar

¿Qué se comunica? Un mapa Sankey ampliable del tráfico de apps y las rutas comprobadas de agentes de IA, con una lista exacta equivalente.

+

Conexiones

¿Qué se comunica? Un mapa Sankey ampliable del tráfico de apps y las rutas comprobadas de agentes de IA, con una lista exacta equivalente.

@@ -402,8 +402,8 @@

Un monitor que no tienes que vigilar

La vista Informes con barras por hora de datos recibidos y enviados y gráficos de anillo de apps, destinos y protocolos
-
Informes. Zoom del segundo al año, tres agrupaciones y gráficos que siguen legibles con cientos de apps.
+ alt="La vista Historial con barras por hora de datos recibidos y enviados y gráficos de anillo de apps, destinos y protocolos">
+
Historial. Zoom del segundo al año, tres agrupaciones y gráficos que siguen legibles con cientos de apps.
La vista Alertas con alertas de exfiltración por un agente, de correo, de FTP, de actividad mientras no estás y de picos de tráfico
Alertas. Cada una nombra la app, el destino y la cifra que la activó.
diff --git a/site/pages/fr/docs.html b/site/pages/fr/docs.html index a0e2e557..4c0f49a6 100644 --- a/site/pages/fr/docs.html +++ b/site/pages/fr/docs.html @@ -96,8 +96,8 @@

Les vues

- - + + @@ -110,11 +110,11 @@

Les vues

L’écran En direct : une liste d’applications avec leurs débits d’envoi et de réception actuels et leur destination la plus active.
En direct, l’écran sur lequel Flowlight s’ouvre.
-

Dans Rapports, survolez une barre pour voir quelles apps l’ont produite, cliquez pour zoomer, et double-cliquez n’importe quelle ligne pour y restreindre le rapport.

-

Visualiser le trafic

-

Visualiser affiche chaque app, destination exacte et relation observée dans la période, la recherche et le focus courants. La largeur représente les octets. De rares tirets roses et bleus se déplacent en sens opposés pour l’envoi et la réception ; chaque arête possède sa propre vitesse stable et Réduire les animations conserve les mêmes chemins statiques.

-

Par défaut, Trafic affiche les dix apps les plus actives et Activité IA les dix racines d’agents prouvées les plus actives, classées selon la totalité des octets reçus et envoyés. Les deux sélecteurs facultatifs avec recherche, source et destination, couvrent tous-vers-tous, un-vers-tous, tous-vers-un et un-vers-un. Chaque choix limite le sélecteur opposé aux extrémités disposant de preuves observées ou bloquées ; Tous reste disponible et Réinitialiser remet les deux sélecteurs à zéro. Une carte ciblée inclut chaque lanceur, agent, outil ou service MCP, passerelle, étape du proxy Flowlight, destination et relation observée ou bloquée connectés. Seuls les périmètres ciblés exceptionnellement grands sont regroupés progressivement ; chaque groupe conserve tous les identifiants exacts de ses membres. Liste et Rapports restent complets et numériquement identiques.

-

Sélectionnez un nœud ou une connexion pour obtenir les valeurs exactes, puis ouvrez Rapports, Inspecter ou une règle non enregistrée avec la même app et la même destination. Liste fournit le même graphe complet au clavier et à VoiceOver. Connexions signifie flux réseau, pas requêtes HTTP ; Observé n’est pas une décision d’autorisation.

+

Dans Historique, survolez une barre pour ouvrir une fiche défilante qui suit le pointeur et affiche les apps contributrices ; les barres ne zooment pas au clic. Double-cliquez une ligne pour y restreindre l’historique.

+

Connexions

+

Connexions affiche chaque app, destination exacte et relation observée dans la période, la recherche et le focus courants. La largeur représente les octets. De rares tirets roses et bleus se déplacent en sens opposés pour l’envoi et la réception ; chaque arête possède sa propre vitesse stable et Réduire les animations conserve les mêmes chemins statiques.

+

Par défaut, Trafic affiche les dix apps les plus actives et Activité IA les dix racines d’agents prouvées les plus actives, classées selon la totalité des octets reçus et envoyés. Les deux sélecteurs facultatifs avec recherche, source et destination, couvrent tous-vers-tous, un-vers-tous, tous-vers-un et un-vers-un. Chaque choix limite le sélecteur opposé aux extrémités disposant de preuves observées ou bloquées ; Tous reste disponible et Réinitialiser remet les deux sélecteurs à zéro. Une carte ciblée inclut chaque lanceur, agent, outil ou service MCP, passerelle, étape du proxy Flowlight, destination et relation observée ou bloquée connectés. Seuls les périmètres ciblés exceptionnellement grands sont regroupés progressivement ; chaque groupe conserve tous les identifiants exacts de ses membres. Liste et Historique restent complets et numériquement identiques.

+

Sélectionnez un nœud ou une connexion pour obtenir les valeurs exactes, puis ouvrez Historique, Inspecter ou une règle non enregistrée avec la même app et la même destination. Liste fournit le même graphe complet au clavier et à VoiceOver. Connexions signifie flux réseau, pas requêtes HTTP ; Observé n’est pas une décision d’autorisation.

Règles pour les agents IA

Une app compte comme agent si Flowlight la connaît par son nom (16 à ce jour, dont Claude Code, Codex, Cursor, GitHub Copilot, @@ -132,7 +132,7 @@

Outils & serveurs MCP

Les agents font une grande part de leur travail via d’autres processus : un outil shell lance curl, git ou npm, et les serveurs MCP tournent comme des processus à part. Flowlight remonte les parents de chaque processus jusqu’à l’agent qui l’a lancé, pour que ce trafic soit compté comme celui de l’agent. Dans Agents IA, le détail de l’agent les liste sous Outils & serveurs MCP, et les - destinations indiquent via curl ou via github MCP. Dans Rapports, la ligne du processus indique via Claude Code.

+ destinations indiquent via curl ou via github MCP. Dans Historique, la ligne du processus indique via Claude Code.

Les serveurs MCP sont nommés en rapprochant leur ligne de commande de la configuration MCP de Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed et Gemini CLI. Les serveurs MCP distants sont reconnus par le nom d’hôte de leur URL, et les serveurs non configurés par des noms de paquets identifiables comme @@ -175,7 +175,7 @@

Configuration des agents : ce que Flowlight li

À regarder de près

-

Un troisième mode dans Rapports, à côté de la répartition et des graphiques. Il compare entre elles les apps du rapport +

Un troisième mode dans Historique, à côté de la répartition et des graphiques. Il compare entre elles les apps du rapport et désigne celles dont les destinations ne ressemblent pas au reste : beaucoup plus d’endroits que leurs semblables, des adresses qui ne se sont jamais résolues en un nom, des noms d’hôte qui ont l’air générés plutôt que choisis, bien plus d’envoi que de réception, et des protocoles qui sont accessoires plutôt que la raison d’être de l’app. Chaque constat porte les indices qui le fondent, et cliquer dessus restreint le rapport à cette @@ -191,7 +191,7 @@

Par où les octets sont partis

sans nom.

Chaque flux porte désormais un canal : Réseau, Wi-Fi pair à pair, Ce Mac (boucle locale, qui n’a jamais quitté la machine) ou Tunnel (dans un VPN ; ce qui se passe ensuite n’est pas visible ici). Restreignez un rapport à - l’un d’eux depuis la barre d’outils de Rapports ; le canal voyage avec les exportations CSV et avec tout ce qui est envoyé à un collecteur.

+ l’un d’eux depuis la barre d’outils de Historique ; le canal voyage avec les exportations CSV et avec tout ce qui est envoyé à un collecteur.

Les lignes de pair à pair sont nommées d’après la fonctionnalité qui les a ouvertes — AirDrop and Handoff · nearby device, Continuity · nearby device — parce qu’une adresse lien-local ne vous apprend rien et que l’appareil dans la pièce n’a aucun nom que ce Mac puisse connaître. Une app qui utilise directement la radio garde son propre nom, ce qui est la réponse juste dans son cas.

@@ -212,7 +212,7 @@

Les autres alertes

Les apps d’Apple sont ignorées par défaut. macOS contacte Apple sans arrêt — mise à jour de logiciels, iCloud, notifications push, heure, tuiles de Plans — sur des hôtes et des ports qui sont nouveaux la première fois qu’ils apparaissent, et tout lister enterre la seule ligne qui vaut la peine d’être lue. Désactivez-le dans Réglages › Alertes si vous les voulez. Dans les deux cas le trafic est quand même - enregistré, apparaît toujours dans En direct, Rapports et Demander, et reste soumis à toutes les règles, garde-fous et listes d’autorisation : le réglage + enregistré, apparaît toujours dans En direct, Historique et Demander, et reste soumis à toutes les règles, garde-fous et listes d’autorisation : le réglage décide de ce qui est listé, jamais de ce qui est permis.

Demander

@@ -240,9 +240,9 @@

Demander

Des graphiques quand la forme compte. Une évolution dans le temps revient en courbe, une comparaison en barres, la répartition d’un tout en camembert. Flowlight les dessine à partir des lignes mêmes que la requête a renvoyées, donc l’image et la phrase ne peuvent pas se contredire, et le modèle peut demander une autre forme, ou aucune.

-

Chaque requête est listée sous la réponse, et un clic ouvre Rapports pour les données de trafic ou l’écran +

Chaque requête est listée sous la réponse, et un clic ouvre Historique pour les données de trafic ou l’écran approprié pour les réponses sur les appareils et la configuration. Une réponse que vous ne pouvez pas vérifier est une supposition en meilleure grammaire.

-

Flowlight s’applique à lui-même sa propre exigence. Tout ce que cette fonctionnalité envoie apparaît dans En direct et Rapports +

Flowlight s’applique à lui-même sa propre exigence. Tout ce que cette fonctionnalité envoie apparaît dans En direct et Historique comme le trafic de n’importe quelle autre app — y compris quand le serveur de modèle est sur ce Mac même, le cas qu’il aurait été le plus facile de passer discrètement sous silence.

@@ -314,7 +314,7 @@

Inspection HTTPS (facultative)

peut pas faire, c’est atteindre les agents déjà en cours — leurs réglages de proxy ont été lus au lancement, et plus rien ne peut les changer.

-

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Rapports ou Agents IA et +

Y arriver depuis une ligne. Faites un clic droit sur une app ou une destination dans En direct, Historique ou Agents IA et choisissez Inspecter le trafic de … : Inspecter s’ouvre en n’affichant que cette app, ou que cette destination, avec une étiquette qui le dit et que vous retirez d’un clic. C’est un cadrage, non une recherche — une version antérieure mettait le nom dans le champ de recherche, qui cherche aussi dans les corps des réponses : demander le trafic d’un agent renvoyait donc toutes les pages dont le HTML se @@ -342,13 +342,13 @@

Réponses simulées

Règles

Une liste d’autorisation, c’est l’idée qu’un agent se fait des endroits où il peut aller. Une règle en est la version générale : elle nomme un sujet — une app, un agent, une destination, une URL, ou un couple formé de deux d’entre eux — et dit bloquer - ou autoriser. Faites un clic droit sur n’importe quelle ligne dans En direct, Rapports, Agents IA ou Inspecter pour en écrire une sur ce que vous regardez ; + ou autoriser. Faites un clic droit sur n’importe quelle ligne dans En direct, Historique, Agents IA ou Inspecter pour en écrire une sur ce que vous regardez ; toutes atterrissent dans le même éditeur, sur l’écran Règles, parce qu’une règle qui prendrait effet hors de votre vue serait une règle que vous ne pourriez plus jamais retrouver.

Des modèles. Vingt-deux, en cinq groupes — empêcher un agent d’atteindre des registres de paquets ou d’autres fournisseurs de modèles, fermer les voies habituelles par lesquelles les données partent (sites de partage de texte, collecteurs de webhooks, dépôts de fichiers anonymes, tunnels, DNS over HTTPS), l’analytique produit et les rapports de plantage, les politiques d’horaires de travail, et le « bloque-moi ça une heure, le temps que je comprenne - ce que c’est ». Parcourez-les depuis la barre d’outils de Règles, ou faites un clic droit sur une ligne n’importe où dans En direct, Rapports, Agents IA ou Inspecter et + ce que c’est ». Parcourez-les depuis la barre d’outils de Règles, ou faites un clic droit sur une ligne n’importe où dans En direct, Historique, Agents IA ou Inspecter et appliquez-en un à ce que vous regardez.

Chaque modèle annonce ce qu’il va faire avant de le faire. Tout ce qui écrit plus d’une règle ouvre une fiche listant chaque hôte et chaque horaire ; tout ce qui est permanent ouvre l’éditeur prérempli ; et seules les règles qui se défont d’elles-mêmes — une @@ -507,10 +507,10 @@

Appareils : Bluetooth, USB et stockage externe

l’événement qui intéresse vraiment les gens. Le débit n’est pas là non plus, pour la même raison qu’il n’est pas sous Bluetooth.

Mode Focus

-

Choisissez quelques apps et destinations, et chaque écran n’affiche plus qu’elles — En direct, Rapports, Alertes, Agents IA et Inspecter, ainsi que les débits dans +

Choisissez quelques apps et destinations, et chaque écran n’affiche plus qu’elles — En direct, Historique, Alertes, Agents IA et Inspecter, ainsi que les débits dans la barre des menus. C’est fait pour regarder un agent travailler sans le reste du Mac dans le champ.

    -
  • Faites un clic droit sur n’importe quelle ligne dans En direct, Rapports ou Agents IA et choisissez Focus sur…, ou utilisez la commande Focus au bas de +
  • Faites un clic droit sur n’importe quelle ligne dans En direct, Historique ou Agents IA et choisissez Focus sur…, ou utilisez la commande Focus au bas de la barre latérale pour piocher parmi les apps qui ont été actives et saisir des destinations.
  • ⇧⌘F active et désactive Focus, et la barre des menus aussi, qui montre également ce qui est ciblé.
  • Une destination emmène ses sous-domaines avec elle : example.com couvre api.example.com. Les adresses IP fonctionnent ; @@ -551,7 +551,7 @@

    Exporter vers OpenTelemetry ou un SIEM

  • Jamais rien qui vienne de l’inspection HTTPS. Pas d’en-têtes, pas de corps, pas d’appels d’outils — l’exportation ne peut transporter que des agrégats et des alertes, donc ces choses-là n’ont nulle part où aller, même par accident.
  • Les en-têtes d’authentification sont gardés dans le trousseau de votre session, pas dans les préférences. Seuls leurs noms sont affichés.
  • -
  • Ce que Flowlight envoie apparaît dans Flowlight, dans En direct et Rapports, comme le trafic de n’importe quelle autre app — y compris +
  • Ce que Flowlight envoie apparaît dans Flowlight, dans En direct et Historique, comme le trafic de n’importe quelle autre app — y compris pour un collecteur sur 127.0.0.1.

Deux choses à prévoir : les agrégats sont consolidés avec environ deux minutes de retard, donc un intervalle inférieur à la minute interroge plus souvent sans que les données diff --git a/site/pages/fr/index.html b/site/pages/fr/index.html index 90af7737..ec829500 100644 --- a/site/pages/fr/index.html +++ b/site/pages/fr/index.html @@ -80,15 +80,15 @@

Des questions réglées en quelques secondes

Agents IA

Un agent travaille pendant que vous êtes en réunion

Voyez tous les hôtes que lui et ses outils ont contactés en dehors de son fournisseur de modèle, et recevez une alerte s’il sort de sa liste d’autorisation, envoie un e-mail ou expédie 100 MB vers une nouvelle destination.

-
Rapports

Votre débit d’envoi s’envole et vous ne savez pas pourquoi

-

Survolez le pic pour voir l’app qui en est la cause, cliquez pour passer de l’heure à la minute, et remontez jusqu’au domaine et à l’IP exacts.

+
Historique

Votre débit d’envoi s’envole et vous ne savez pas pourquoi

+

Survolez le pic pour afficher une fiche défilante des apps contributrices, puis utilisez les périodes ou le navigateur pour passer de l’heure à la minute et remonter jusqu’au domaine et à l’IP exacts.

Alertes

Une nouvelle app s’est mise à appeler son éditeur

Premier contact avec un nouveau domaine, port non standard, pic de trafic : chacun déclenche une alerte qui nomme l’app et le chiffre qui l’a déclenchée.

En direct

Quelque chose sature votre connexion à l’instant même

Les plus gros consommateurs actualisés chaque seconde, la destination la plus active de chaque app, et les débits en direct dans la barre des menus.

-
Rapports

Votre forfait de partage de connexion a fondu ce mois-ci

+
Historique

Votre forfait de partage de connexion a fondu ce mois-ci

Passez à la vue du mois et groupez par app. Le plus gros consommateur est en première ligne, avec une exportation CSV s’il vous faut des preuves.

-
Rapports · Destination

Vous devez auditer où partent les données

+
Historique · Destination

Vous devez auditer où partent les données

Groupez par destination pour voir toutes les apps qui parlent à un domaine, ou par IP pour voir ce qui se cache derrière une adresse.

@@ -106,7 +106,7 @@

En direct

Qu’est-ce qui circule en ce moment ? Les débits par

Agents IA

Que font mes agents en plus d’appeler leur modèle ? Fournisseurs, autres hôtes, badges de risque.

⌘2
-

Rapports

Où tout cela est-il parti ? De la seconde à l’année, par app, par destination ou par IP, avec graphiques et CSV.

⌘3
+

Historique

Où tout cela est-il parti ? De la seconde à l’année, par app, par destination ou par IP, avec graphiques et CSV.

⌘3

Alertes

Qu’est-ce qui clochait ? Des alertes explicables, par app, avec la destination et le seuil.

⌘4
@@ -118,7 +118,7 @@

Appareils

Bluetooth, USB et caméras : ce qui est appairé, bran

Inspecter

Facultatif. Qu’a réellement envoyé l’agent, et quel appel d’outil en est la cause ? Requêtes déchiffrées, appels d’outils, résultats.

⌘7
-

Visualiser

Qui communique ? Une carte Sankey zoomable du trafic des apps et des chemins attestés des agents IA, avec une liste exacte équivalente.

+

Connexions

Qui communique ? Une carte Sankey zoomable du trafic des apps et des chemins attestés des agents IA, avec une liste exacte équivalente.

@@ -402,8 +402,8 @@

Un moniteur que vous n’avez pas à surveiller

La vue Rapports avec les barres horaires des données reçues et envoyées et des anneaux pour les apps, les destinations et les protocoles
-
Rapports. Zoom de la seconde à l’année, trois regroupements, des graphiques qui restent lisibles avec des centaines d’apps.
+ alt="La vue Historique avec les barres horaires des données reçues et envoyées et des anneaux pour les apps, les destinations et les protocoles">
+
Historique. Zoom de la seconde à l’année, trois regroupements, des graphiques qui restent lisibles avec des centaines d’apps.
La vue Alertes listant des alertes d’exfiltration par un agent, d’e-mail, de FTP, d’activité pendant une absence et de pic de trafic
Alertes. Chacune nomme l’app, la destination et le chiffre qui l’a déclenchée.
diff --git a/site/pages/index.html b/site/pages/index.html index db835e72..7dd84177 100644 --- a/site/pages/index.html +++ b/site/pages/index.html @@ -89,15 +89,15 @@

Questions it answers in seconds

AI Agents

An agent is running while you're in a meeting

See every host it and its tools touched besides its model provider, and get an alert if it leaves its allowlist, sends email or uploads 100 MB somewhere new.

-
Reports

Your upload spiked and you don't know why

-

Hover the spike to see the app behind it, click to zoom from the hour to the minute, and follow it to the exact domain and IP.

+
History

Your upload spiked and you don't know why

+

Hover the spike for a scrollable contributor card, then use the range presets or navigator to move from hour to minute and follow it to the exact domain and IP.

Alerts

A new app started phoning home

First contact with a new domain, a non-standard port or a traffic spike each raise an alert that names the app and the number that tripped it.

Live

Something is saturating your connection right now

Top talkers updated every second, with the busiest destination for each app, and live rates in your menu bar.

-
Reports

Your hotspot data vanished this month

+
History

Your hotspot data vanished this month

Switch to the month view and group by app. The biggest consumer is the top row, with CSV export if you need receipts.

-
Reports · Destination

You need to audit where data goes

+
History · Destination

You need to audit where data goes

Group by destination to see every app that talks to a domain, or by IP to see what sits behind an address.

@@ -115,7 +115,7 @@

Live

What's moving right now? Per-app rates, the last two minutes, th

AI Agents

What are my agents doing besides calling their model? Providers, other hosts, risk badges.

⌘2
-

Reports

Where did it all go? Second to year, grouped by app, destination or IP, with charts and CSV.

⌘3
+

History

Where did it all go? From 15 minutes through all history, grouped by app, destination or IP, with charts and CSV.

⌘3

Alerts

What looked wrong? Explainable, per-app alerts with the destination and the threshold.

⌘4
@@ -127,7 +127,7 @@

Devices

Bluetooth, USB, and cameras: what's paired, what's attached o

Inspect

Optional. What did the agent actually send, and which tool call made it? Decrypted requests, tool calls, results.

⌘7
-

Visualize

What is communicating? A zoomable Sankey map for app traffic and proved AI-agent paths, with exact list parity.

+

Connections

What is communicating? A zoomable Sankey map for app traffic and proved AI-agent paths, with exact list parity.

@@ -425,8 +425,8 @@

A monitor you don't have to monitor

Reports view with hourly received and sent bars and donut charts of apps, destinations and protocols
-
Reports. Second-to-year zoom, three groupings, charts that stay readable with hundreds of apps.
+ alt="History view with hourly received and sent bars and donut charts of apps, destinations and protocols">
+
History. Preset ranges, a draggable navigator, three groupings, and charts that stay readable with hundreds of apps.
Alerts view listing agent exfiltration, email, FTP, while-away and traffic spike alerts
Alerts. Each one names the app, the destination and the number that tripped it.
diff --git a/site/pages/it/docs.html b/site/pages/it/docs.html index eb574193..2fbbd7ac 100644 --- a/site/pages/it/docs.html +++ b/site/pages/it/docs.html @@ -96,8 +96,8 @@

Le viste

- - + + @@ -110,11 +110,11 @@

Le viste

La schermata In diretta: un elenco di applicazioni con le loro velocità attuali di invio e ricezione e la destinazione più trafficata.
In diretta, la schermata con cui Flowlight si apre.
-

In Rapporti, passa il puntatore su una barra per vedere quali app l'hanno generata, fai clic per ingrandire e doppio clic su una riga per limitare il rapporto a essa.

-

Visualizzare il traffico

-

Visualizza mostra ogni app, destinazione esatta e relazione osservata nell’intervallo, nella ricerca e nel focus correnti. La larghezza rappresenta i byte. Trattini rosa e blu sparsi scorrono in direzioni opposte per invio e ricezione; ogni arco ha la propria velocità stabile e Riduci movimento mantiene gli stessi percorsi statici.

-

Per impostazione predefinita, Traffico mostra le dieci app più attive e Attività IA le dieci radici di agenti comprovate più attive, ordinate in base al totale completo dei byte ricevuti e inviati. I due selettori facoltativi con ricerca, origine e destinazione, coprono qualsiasi-a-qualsiasi, uno-a-qualsiasi, qualsiasi-a-uno e uno-a-uno. Ogni scelta limita il selettore opposto agli endpoint con prove osservate o bloccate; Qualsiasi resta sempre disponibile e Ripristina azzera entrambi i selettori. Una mappa focalizzata include ogni avvio, agente, strumento o servizio MCP, gateway, fase del proxy Flowlight, destinazione e relazione osservata o bloccata collegati. Solo gli ambiti focalizzati insolitamente grandi vengono raggruppati progressivamente; ogni gruppo conserva tutti gli ID esatti dei membri. Elenco e Rapporti restano completi e numericamente identici.

-

Seleziona un nodo o una connessione per i valori esatti, quindi apri Rapporti, Ispeziona o una regola non salvata con la stessa app e destinazione. Elenco offre lo stesso grafo completo per tastiera e VoiceOver. Connessioni significa flussi di rete, non richieste HTTP; Osservato non è una decisione di autorizzazione.

+

In Cronologia, passa il puntatore su una barra per aprire una scheda scorrevole che segue il cursore e mostra le app che hanno contribuito; le barre non ingrandiscono al clic. Fai doppio clic su una riga per limitare la cronologia a essa.

+

Connessioni

+

Connessioni mostra ogni app, destinazione esatta e relazione osservata nell’intervallo, nella ricerca e nel focus correnti. La larghezza rappresenta i byte. Trattini rosa e blu sparsi scorrono in direzioni opposte per invio e ricezione; ogni arco ha la propria velocità stabile e Riduci movimento mantiene gli stessi percorsi statici.

+

Per impostazione predefinita, Traffico mostra le dieci app più attive e Attività IA le dieci radici di agenti comprovate più attive, ordinate in base al totale completo dei byte ricevuti e inviati. I due selettori facoltativi con ricerca, origine e destinazione, coprono qualsiasi-a-qualsiasi, uno-a-qualsiasi, qualsiasi-a-uno e uno-a-uno. Ogni scelta limita il selettore opposto agli endpoint con prove osservate o bloccate; Qualsiasi resta sempre disponibile e Ripristina azzera entrambi i selettori. Una mappa focalizzata include ogni avvio, agente, strumento o servizio MCP, gateway, fase del proxy Flowlight, destinazione e relazione osservata o bloccata collegati. Solo gli ambiti focalizzati insolitamente grandi vengono raggruppati progressivamente; ogni gruppo conserva tutti gli ID esatti dei membri. Elenco e Cronologia restano completi e numericamente identici.

+

Seleziona un nodo o una connessione per i valori esatti, quindi apri Cronologia, Ispeziona o una regola non salvata con la stessa app e destinazione. Elenco offre lo stesso grafo completo per tastiera e VoiceOver. Connessioni significa flussi di rete, non richieste HTTP; Osservato non è una decisione di autorizzazione.

Regole per gli agenti IA

Un'app conta come agente se Flowlight la conosce per nome (oggi 16, tra cui Claude Code, Codex, Cursor, GitHub Copilot, @@ -132,7 +132,7 @@

Strumenti e server MCP

Gli agenti svolgono molto del loro lavoro tramite altri processi: uno strumento shell esegue curl, git o npm, e i server MCP girano come processi a sé. Flowlight risale la catena dei processi padre fino all'agente che li ha avviati, così quel traffico conta come traffico dell'agente. In Agenti IA, il dettaglio dell'agente li elenca sotto Strumenti e server MCP, e le - destinazioni riportano via curl o via github MCP. In Rapporti, la riga del processo riporta via Claude Code.

+ destinazioni riportano via curl o via github MCP. In Cronologia, la riga del processo riporta via Claude Code.

I server MCP prendono il nome confrontando la loro riga di comando con la configurazione MCP di Claude Code (~/.claude.json), Claude Desktop, Cursor (~/.cursor/mcp.json), Windsurf, VS Code, Codex (~/.codex/config.toml), Zed e Gemini CLI. I server MCP remoti vengono riconosciuti dal nome host nel loro URL, e quelli non configurati da nomi di pacchetto riconoscibili come @@ -175,7 +175,7 @@

Configurazione degli agenti: cosa legge Flowlight s

Vale un'occhiata

-

Una terza modalità in Rapporti, accanto alla ripartizione e ai grafici. Confronta tra loro le app presenti nel rapporto +

Una terza modalità in Cronologia, accanto alla ripartizione e ai grafici. Confronta tra loro le app presenti nel rapporto e indica quelle le cui destinazioni non assomigliano alle altre: molti più posti dei loro pari, indirizzi che non sono mai stati risolti in un nome, nomi host che sembrano generati anziché scelti, molto più inviato che ricevuto, e protocolli che sono un'attività collaterale anziché lo scopo dell'app. Ogni rilievo porta con sé le prove che lo sostengono, e facendo clic su uno il rapporto si limita a quell'app.

@@ -190,7 +190,7 @@

Da dove sono usciti i byte

senza nome.

Ogni flusso ora porta un canale: Rete, Wi-Fi peer-to-peer, Questo Mac (loopback, che non ha mai lasciato la macchina) o Tunnel (dentro una VPN; dove sia andato dopo non è visibile qui). Limita un rapporto a - uno di essi dalla barra strumenti di Rapporti; il canale viaggia con le esportazioni CSV e con tutto ciò che viene inviato a un collector.

+ uno di essi dalla barra strumenti di Cronologia; il canale viaggia con le esportazioni CSV e con tutto ciò che viene inviato a un collector.

Le righe peer-to-peer prendono il nome dalla funzione che le ha aperte — AirDrop and Handoff · nearby device, Continuity · nearby device — perché un indirizzo link-local non dice nulla e il dispositivo nella stanza non ha un nome che questo Mac possa apprendere. Un'app che usa la radio direttamente mantiene il proprio nome, che per lei è la risposta veritiera.

@@ -211,7 +211,7 @@

Altri avvisi

Le app di Apple sono escluse per impostazione predefinita. macOS comunica costantemente con Apple — Aggiornamento Software, iCloud, notifiche push, ora, riquadri di Mappe — su host e porte che la prima volta risultano nuovi, e segnalare tutto questo seppellisce l'unica riga che vale la pena leggere. Disattivalo in Impostazioni › Avvisi se li vuoi. In ogni caso il traffico viene comunque - registrato, compare in In diretta, Rapporti e Chiedi, e resta soggetto a ogni regola, protezione ed elenco consentiti: l'impostazione + registrato, compare in In diretta, Cronologia e Chiedi, e resta soggetto a ogni regola, protezione ed elenco consentiti: l'impostazione decide cosa viene elencato, mai cosa viene consentito.

Chiedi

@@ -239,9 +239,9 @@

Chiedi

Grafici quando conta la forma. Un andamento nel tempo torna come linea, un confronto come barre, la ripartizione di un intero come torta. Flowlight li disegna dalle stesse righe restituite dalla query, così immagine e frase non possono contraddirsi, e il modello può chiedere una forma diversa o nessuna.

-

Ogni query è elencata sotto la risposta e un clic apre Rapporti per i dati sul traffico o la schermata pertinente +

Ogni query è elencata sotto la risposta e un clic apre Cronologia per i dati sul traffico o la schermata pertinente per le risposte su dispositivi e configurazione. Una risposta che non puoi verificare è un'ipotesi con una grammatica migliore.

-

Flowlight applica a sé stesso il proprio standard. Tutto ciò che questa funzione invia compare in In diretta e Rapporti +

Flowlight applica a sé stesso il proprio standard. Tutto ciò che questa funzione invia compare in In diretta e Cronologia come il traffico di qualsiasi altra app — anche quando il server del modello è su questo stesso Mac, che è il caso che sarebbe stato più facile lasciar fuori in silenzio.

@@ -312,7 +312,7 @@

Ispezione HTTPS (opzionale)

inevitabile: tutto il senso sta nel fatto che ciò che lo sostituisce parte con un ambiente diverso. Quello che non può fare è raggiungere gli agenti già in esecuzione — le loro impostazioni proxy sono state lette all'avvio, e ora nulla può cambiarle.

-

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Rapporti o Agenti IA e scegli +

Come arrivarci da una riga. Fai clic destro su un'app o su una destinazione in In diretta, Cronologia o Agenti IA e scegli Ispeziona il traffico di …: Ispeziona si apre mostrando solo quell'app, o solo quella destinazione, con un'etichetta che lo dice e che puoi rimuovere con un clic. Delimita invece di cercare — una versione precedente metteva il nome nel campo di ricerca, che cerca anche nei corpi delle risposte, così chiedere il traffico di un agente restituiva ogni pagina il cui HTML si limitava a menzionarlo. Può comparire solo il traffico che è @@ -340,13 +340,13 @@

Risposte simulate

Regole

Un elenco consentiti è l'idea che un singolo agente ha di dove può andare. Una regola è la versione generale: indica un soggetto — un'app, un agente, una destinazione, un URL o una coppia di due di questi — e dice blocca - o consenti. Fai clic con il tasto destro su una riga in In diretta, Rapporti, Agenti IA o Ispeziona per scriverne una su ciò che stai guardando; + o consenti. Fai clic con il tasto destro su una riga in In diretta, Cronologia, Agenti IA o Ispeziona per scriverne una su ciò che stai guardando; tutte finiscono nello stesso editor della schermata Regole, perché una regola che entra in vigore fuori dalla vista sarebbe una regola che non potresti più ritrovare.

Modelli. Ventidue, in cinque gruppi: impedire a un agente di raggiungere i registri di pacchetti o altri provider di modelli, chiudere le vie più comuni per cui i dati escono (siti di paste, raccoglitori di webhook, servizi anonimi per caricare file, tunnel, DNS over HTTPS), analisi di prodotto e segnalazione degli arresti anomali, politiche sull'orario di lavoro, e il classico «blocca questo per un'ora mentre capisco - cos'è». Sfogliali dalla barra strumenti di Regole, oppure fai clic con il tasto destro su una riga in In diretta, Rapporti, Agenti IA o Ispeziona e + cos'è». Sfogliali dalla barra strumenti di Regole, oppure fai clic con il tasto destro su una riga in In diretta, Cronologia, Agenti IA o Ispeziona e applicane uno a ciò che stai guardando.

Ogni modello dice cosa farà prima di farlo. Tutto ciò che scrive più di una regola apre una scheda con l'elenco di ogni host e orario; tutto ciò che è permanente apre l'editor già compilato; e solo le regole che si annullano da sole — un'ora, @@ -505,10 +505,10 @@

Dispositivi: Bluetooth, USB e archiviazione esterna

l'evento che interessa davvero. Nemmeno qui c'è il throughput, per la stessa ragione per cui non c'è sotto Bluetooth.

Modalità Focus

-

Scegli qualche app e qualche destinazione e ogni schermata mostra solo quelle — In diretta, Rapporti, Avvisi, Agenti IA e Ispeziona, e le velocità +

Scegli qualche app e qualche destinazione e ogni schermata mostra solo quelle — In diretta, Cronologia, Avvisi, Agenti IA e Ispeziona, e le velocità nella barra dei menu. Serve a osservare un agente all'opera senza il resto del Mac di mezzo.

    -
  • Fai clic con il tasto destro su una riga in In diretta, Rapporti o Agenti IA e scegli Focus su…, oppure usa il controllo Focus in fondo +
  • Fai clic con il tasto destro su una riga in In diretta, Cronologia o Agenti IA e scegli Focus su…, oppure usa il controllo Focus in fondo alla barra laterale per scegliere tra le app che sono state attive e per digitare destinazioni.
  • ⇧⌘F attiva e disattiva Focus, come fa anche la barra dei menu, che mostra anche cosa è sotto focus.
  • Una destinazione porta con sé i suoi sottodomini: example.com copre api.example.com. Gli indirizzi IP funzionano; @@ -549,7 +549,7 @@

    Esportazione verso OpenTelemetry o un SIEM

  • Mai nulla dall'ispezione HTTPS. Nessuna intestazione, nessun corpo, nessuna chiamata agli strumenti: l'esportazione può trasportare solo aggregazioni e avvisi, quindi non c'è nessun posto dove possano finire, nemmeno per sbaglio.
  • Le intestazioni di autenticazione sono conservate nel portachiavi di accesso, non nelle preferenze. Di esse vengono mostrati solo i nomi.
  • -
  • Ciò che Flowlight invia compare in Flowlight, in In diretta e Rapporti, come il traffico di qualsiasi altra app — compreso +
  • Ciò che Flowlight invia compare in Flowlight, in In diretta e Cronologia, come il traffico di qualsiasi altra app — compreso un collector su 127.0.0.1.

Due cose da aspettarsi: le aggregazioni vengono consolidate con circa due minuti di ritardo, quindi un intervallo inferiore al minuto interroga più diff --git a/site/pages/it/index.html b/site/pages/it/index.html index 0cbcb7d1..6b2d448b 100644 --- a/site/pages/it/index.html +++ b/site/pages/it/index.html @@ -80,15 +80,15 @@

Domande a cui risponde in pochi secondi

Agenti IA

Un agente lavora mentre sei in riunione

Vedi tutti gli host che l'agente e i suoi strumenti hanno contattato oltre al provider del modello, e ricevi un avviso se esce dall'elenco consentiti, invia e-mail o carica 100 MB verso una destinazione nuova.

-
Rapporti

Il caricamento è schizzato e non sai perché

-

Passa il puntatore sul picco per vedere l'app che c'è dietro, fai clic per passare dall'ora al minuto e segui la traccia fino al dominio e all'IP esatti.

+
Cronologia

Il caricamento è schizzato e non sai perché

+

Passa il puntatore sul picco per vedere una scheda scorrevole delle app che hanno contribuito; usa gli intervalli o il navigatore per passare dall'ora al minuto e seguire la traccia fino al dominio e all'IP esatti.

Avvisi

Una nuova app ha iniziato a telefonare a casa

Primo contatto con un nuovo dominio, una porta non standard o un picco di traffico: ognuno genera un avviso che indica l'app e il numero che lo ha fatto scattare.

In diretta

Qualcosa sta saturando la connessione proprio ora

Le app più attive aggiornate ogni secondo, con la destinazione più trafficata per ciascuna, e le velocità in diretta nella barra dei menu.

-
Rapporti

I dati dell'hotspot sono spariti questo mese

+
Cronologia

I dati dell'hotspot sono spariti questo mese

Passa alla vista mensile e raggruppa per app. Chi consuma di più è la prima riga, con esportazione CSV se ti servono le prove.

-
Rapporti · Destinazione

Devi verificare dove finiscono i dati

+
Cronologia · Destinazione

Devi verificare dove finiscono i dati

Raggruppa per destinazione per vedere tutte le app che parlano con un dominio, o per IP per vedere che cosa c'è dietro un indirizzo.

@@ -106,7 +106,7 @@

In diretta

Cosa si muove adesso? Velocità per app, gli ultimi due mi

Agenti IA

Cosa fanno i miei agenti oltre a chiamare il modello? Provider, altri host, contrassegni di rischio.

⌘2
-

Rapporti

Dove è finito tutto? Dal secondo all'anno, per app, destinazione o IP, con grafici e CSV.

⌘3
+

Cronologia

Dove è finito tutto? Dal secondo all'anno, per app, destinazione o IP, con grafici e CSV.

⌘3

Avvisi

Cosa non tornava? Avvisi per app, spiegati, con la destinazione e la soglia.

⌘4
@@ -118,7 +118,7 @@

Dispositivi

Bluetooth, USB e fotocamere: che cosa è abbinato, colleg

Ispeziona

Opzionale. Cosa ha inviato davvero l'agente, e quale chiamata a uno strumento l'ha prodotta? Richieste decifrate, chiamate agli strumenti, risultati.

⌘7
-

Visualizza

Che cosa comunica? Una mappa Sankey ingrandibile del traffico delle app e dei percorsi comprovati degli agenti IA, con un elenco esatto equivalente.

+

Connessioni

Che cosa comunica? Una mappa Sankey ingrandibile del traffico delle app e dei percorsi comprovati degli agenti IA, con un elenco esatto equivalente.

@@ -402,8 +402,8 @@

Un monitoraggio che non devi monitorare

La vista Rapporti con le barre orarie dei dati ricevuti e inviati e i grafici ad anello di app, destinazioni e protocolli
-
Rapporti. Zoom dal secondo all'anno, tre raggruppamenti, grafici che restano leggibili con centinaia di app.
+ alt="La vista Cronologia con le barre orarie dei dati ricevuti e inviati e i grafici ad anello di app, destinazioni e protocolli">
+
Cronologia. Zoom dal secondo all'anno, tre raggruppamenti, grafici che restano leggibili con centinaia di app.
La vista Avvisi con avvisi di esfiltrazione da parte di un agente, e-mail, FTP, attività mentre sei via e picco di traffico
Avvisi. Ognuno indica l'app, la destinazione e il numero che lo ha fatto scattare.
diff --git a/site/pages/ja/docs.html b/site/pages/ja/docs.html index 80f6d499..0afd1ad1 100644 --- a/site/pages/ja/docs.html +++ b/site/pages/ja/docs.html @@ -94,8 +94,8 @@

各ビュー

- - + + @@ -108,11 +108,11 @@

各ビュー

ライブビュー。アプリの一覧に、現在の送信と受信の速度、そして最も忙しい接続先が並んでいます。
ライブ。Flowlight が最初に開く画面です。
-

レポートでは、棒にポインタを重ねるとどのアプリが押し上げたかがわかり、クリックすると拡大、どの行でもダブルクリックするとその行だけにレポートを絞り込めます。

-

トラフィックを可視化

-

可視化は、現在の期間・検索・フォーカス範囲にあるすべてのアプリ、正確な接続先、観測済みの関係を表示します。線の幅はバイト数を表します。疎らなローズ色と青色の破線が送信と受信で逆向きに動き、各エッジは固有で安定した速度を持ちます。「視差効果を減らす」では同じ正確な静止経路を保ちます。

-

既定では、トラフィックは受信と送信の全バイト数で上位 10 個のアプリを、AI アクティビティは証明済みエージェントルートの上位 10 個を表示します。検索可能な任意の送信元・接続先セレクタで、任意対任意、1 対任意、任意対 1、1 対 1 を調査できます。一方を選ぶと、反対側には観測済みまたはブロック済みの証拠で接続する候補だけが表示されます。「任意」は常に残り、「リセット」で両方を戻せます。絞り込んだマップには、接続されたすべてのランチャー、エージェント、ツールまたは MCP サービス、ゲートウェイ、Flowlight プロキシ段階、接続先、観測済みまたはブロック済みの関係が含まれます。非常に大きい範囲だけを段階的にグループ化し、各グループはすべての正確なメンバー ID を保持します。リストとレポートは完全で、数値も一致したままです。

-

ノードまたは接続を選ぶと正確な値を確認でき、同じアプリと接続先のままレポート、検査、未保存のルールへ進めます。リストはキーボードと VoiceOver に同じ完全なグラフを提供します。接続はネットワークフローであり HTTP リクエスト数ではなく、「観測済み」は許可の判断ではありません。

+

履歴では、棒にポインタを重ねると、原因のアプリを示すスクロール可能なカードがポインタに追従します。棒をクリックしても拡大しません。行をダブルクリックすると、その項目だけに履歴を絞り込めます。

+

接続

+

接続は、現在の期間・検索・フォーカス範囲にあるすべてのアプリ、正確な接続先、観測済みの関係を表示します。線の幅はバイト数を表します。疎らなローズ色と青色の破線が送信と受信で逆向きに動き、各エッジは固有で安定した速度を持ちます。「視差効果を減らす」では同じ正確な静止経路を保ちます。

+

既定では、トラフィックは受信と送信の全バイト数で上位 10 個のアプリを、AI アクティビティは証明済みエージェントルートの上位 10 個を表示します。検索可能な任意の送信元・接続先セレクタで、任意対任意、1 対任意、任意対 1、1 対 1 を調査できます。一方を選ぶと、反対側には観測済みまたはブロック済みの証拠で接続する候補だけが表示されます。「任意」は常に残り、「リセット」で両方を戻せます。絞り込んだマップには、接続されたすべてのランチャー、エージェント、ツールまたは MCP サービス、ゲートウェイ、Flowlight プロキシ段階、接続先、観測済みまたはブロック済みの関係が含まれます。非常に大きい範囲だけを段階的にグループ化し、各グループはすべての正確なメンバー ID を保持します。リストと履歴は完全で、数値も一致したままです。

+

ノードまたは接続を選ぶと正確な値を確認でき、同じアプリと接続先のまま履歴、検査、未保存のルールへ進めます。リストはキーボードと VoiceOver に同じ完全なグラフを提供します。接続はネットワークフローであり HTTP リクエスト数ではなく、「観測済み」は許可の判断ではありません。

AI エージェントのルール

Flowlight が名前で知っているアプリ(現在 16 種類。Claude Code、Codex、Cursor、GitHub Copilot、Gemini CLI、Ollama、ZCode を含みます)か、 @@ -130,7 +130,7 @@

ツールと MCP サーバ

エージェントは仕事の多くをほかのプロセスに任せます。シェルツールが curl や git、npm を実行し、MCP サーバはそれ自身のプロセスとして動きます。Flowlight は各プロセスの親をたどって起動元のエージェントまで戻るので、その通信はエージェントのものとして 数えられます。AI エージェントでは、エージェントの詳細のツールと MCP サーバにそれらが並び、接続先には - curl 経由や github MCP 経由と表示されます。レポートでは、プロセスの行が Claude Code 経由と読めます。

+ curl 経由や github MCP 経由と表示されます。履歴では、プロセスの行が Claude Code 経由と読めます。

MCP サーバの名前は、コマンドラインを Claude Code(~/.claude.json)、Claude Desktop、Cursor(~/.cursor/mcp.json)、 Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed、Gemini CLI の MCP 設定と照合して決まります。リモートの MCP サーバは URL のホスト名で照合し、設定のないサーバは @modelcontextprotocol/server-github のような見覚えのあるパッケージ名で照合します。

@@ -171,10 +171,10 @@

エージェントの設定:Flowlight がこの M

気になるもの

-

レポートにある 3 つめのモードで、内訳とグラフの隣にあります。レポート内のアプリを互いに比べ、接続先の様子がほかと違うものを指し示します。 +

履歴にある 3 つめのモードで、内訳とグラフの隣にあります。履歴内のアプリを互いに比べ、接続先の様子がほかと違うものを指し示します。 同種のアプリよりずっと多くの場所へつないでいる、名前に解決されたことのないアドレス、選んだというより生成されたように見えるホスト名、受信よりはるかに多い送信、 - そのアプリの本業とは言えない傍流のプロトコルなどです。どの指摘にも根拠が添えられ、クリックするとそのアプリだけにレポートが絞り込まれます。

-

これを疑わしいものではなく気になるものと呼んでいるのは意図的です。データが裏付けられるのは「このレポートのほかのアプリと比べて、いつもと違う」 + そのアプリの本業とは言えない傍流のプロトコルなどです。どの指摘にも根拠が添えられ、クリックするとそのアプリだけに履歴が絞り込まれます。

+

これを疑わしいものではなく気になるものと呼んでいるのは意図的です。データが裏付けられるのは「この履歴のほかのアプリと比べて、いつもと違う」 という事実までです。バックアップツールが多くの場所とつながるのには正当な理由がありますし、静かな Mac では指摘が 1 件も出ません。どのアプリにも共通するトラフィックについては、 何も述べていません。

@@ -183,7 +183,7 @@

バイトが出ていった経路

同じ部屋にあるデバイスへ直接届きます。ルータもインターネットもなく、ほかの誰かが到達できるアドレスもありません。Flowlight はそうしたフローをずっと数えていましたが、 それを呼ぶ言葉を持っていませんでした。そのため、4 GB のフォルダの AirDrop が、名前のないアドレスへの数メガバイトのように見えていたのです。

いまはどのフローにもチャンネルが付きます。ネットワーク、ピアツーピア Wi-Fi、この Mac 内(ループバック。マシンの外へ出ていません)、 - トンネル(VPN の中。その先どこへ行ったかはここでは見えません)です。レポートのツールバーからどれか 1 つに絞り込めますし、CSV の書き出しや + トンネル(VPN の中。その先どこへ行ったかはここでは見えません)です。履歴のツールバーからどれか 1 つに絞り込めますし、CSV の書き出しや コレクターへ送るデータにも一緒に付いていきます。

ピアツーピアの行には、それを開いた機能の名前が付きます。AirDrop and Handoff · nearby device、 Continuity · nearby device のように。リンクローカルアドレスからは何もわからず、同じ部屋のデバイスには、この Mac が知りうる名前がないからです。 @@ -204,7 +204,7 @@

そのほかのアラート

Apple 純正アプリはデフォルトで除外されます。macOS は絶えず Apple と通信します。ソフトウェアアップデート、iCloud、 プッシュ、時刻、マップのタイルなど、初めて現れたときは新しく見えるホストとポートが使われ、それを全部並べると、読む価値のある 1 行が埋もれてしまいます。 - 表示したい場合は設定 › アラートでオフにしてください。いずれにしてもトラフィックは記録され続け、ライブ、レポート、質問にも現れ、 + 表示したい場合は設定 › アラートでオフにしてください。いずれにしてもトラフィックは記録され続け、ライブ、履歴、質問にも現れ、 すべてのルール、ガードレール、許可リストの対象であり続けます。この設定が決めるのは何が一覧に載るかで、何が許されるかではありません。

質問

@@ -229,9 +229,9 @@

質問

その画面を開くことを申し出ます。クリックするのはあなたです。

形が意味を持つときはグラフで。時間による変化は折れ線、比較は棒、全体の内訳は円グラフで返ります。Flowlight は問い合わせが返した同じ行から 描くので、図と文が食い違うことはありません。モデルは別の形を頼むことも、グラフなしを選ぶこともできます。

-

実行した問い合わせはすべて回答の下に並び、クリックすると通信の根拠はレポート、デバイスや設定の回答は対応する画面で開きます。 +

実行した問い合わせはすべて回答の下に並び、クリックすると通信の根拠は履歴、デバイスや設定の回答は対応する画面で開きます。 確かめられない答えは、文法が上手なだけの当て推量です。

-

Flowlight は自分自身にも同じ基準を課します。この機能が送るものは、ほかのアプリのトラフィックと同じようにライブとレポートに現れます。 +

Flowlight は自分自身にも同じ基準を課します。この機能が送るものは、ほかのアプリのトラフィックと同じようにライブと履歴に現れます。 モデルサーバがこの Mac 上にある場合も含めてです。そこは、黙って省いてしまうのがいちばん簡単だった場面でした。

HTTPS インスペクション(任意)

@@ -290,7 +290,7 @@

HTTPS インスペクション(任意)

そこで Flowlight は、実行中のエージェントから上へたどり、シェルを飛び越して、実際に起動しているものを見つけます。それがターミナルなら、起動し直しは Terminal.app ではなくそのターミナルで開きます。それ以外なら、提案の内容が変わり、そのプロセスのほうをプロキシ環境を設定した状態で再起動することになります。こうすれば、そのあとそれが生み出すエージェントは設定を受け継ぎます。起動し直すときは、それが実行されていたときと同じコマンドを使います。サブコマンド付きで呼び出されたプログラムは、名前だけのプログラムとは別ものだからです。

再起動すると、それがいま実行しているセッションはすべて終了します。これは同意する前に伝えられることであり、あとから気づくことではありません。そして避けようがありません。置き換わったものが別の環境で起動することこそが、この機能の目的だからです。できないこともあります。すでに実行中のエージェントには届きません。それらのプロキシ設定は起動時に読み込まれており、いまからは何をしても変えられません。

-

行から辿ってここへ来る。ライブ、レポート、AI エージェントでアプリや宛先を右クリックし、 +

行から辿ってここへ来る。ライブ、履歴、AI エージェントでアプリや宛先を右クリックし、 … のトラフィックをインスペクトを選ぶと、そのアプリだけ、またはその宛先だけを表示した状態でインスペクトが開きます。 そうなっていることを示すチップが付き、ワンクリックで外せます。これは検索ではなく絞り込みです。以前のバージョンはその名前を検索欄に 入れていましたが、検索欄は応答の本文も検索するため、1 つのエージェントのトラフィックを見たいだけなのに、HTML にその名前が出てくる @@ -319,12 +319,12 @@

モック応答

ルール

許可リストは、1 つのエージェントについて「どこへ行ってよいか」を定めたものです。ルールはその一般版で、 対象(アプリ、エージェント、接続先、URL、またはそのうち 2 つの組み合わせ)を指定し、ブロックか - 許可を決めます。ライブ、レポート、AI エージェント、インスペクトのどの行でも右クリックすれば、いま見ているものについてルールを書けます。 + 許可を決めます。ライブ、履歴、AI エージェント、インスペクトのどの行でも右クリックすれば、いま見ているものについてルールを書けます。 そのどれもがルール画面の同じエディタに集まります。見えないところで効き始めるルールは、二度と見つけられないルールになってしまうからです。

テンプレート。22 種類あり、5 つのグループに分かれています。エージェントがパッケージレジストリやほかのモデルプロバイダへ届かないようにするもの、 データが出ていきやすい経路をふさぐもの(ペーストサイト、Webhook の受け口、匿名のファイル置き場、トンネル、DNS over HTTPS)、プロダクト分析とクラッシュレポート、 勤務時間のポリシー、そして「作業のあいだ 1 時間だけこれをブロックして、何なのか調べる」という単発のものです。ルールのツールバーから一覧を見るか、 - ライブ、レポート、AI エージェント、インスペクトのどこかで行を右クリックして、いま見ているものに当てはめてください。

+ ライブ、履歴、AI エージェント、インスペクトのどこかで行を右クリックして、いま見ているものに当てはめてください。

どのテンプレートも、実行する前に何をするかを述べます。2 つ以上のルールを書くものは、すべてのホストとスケジュールを並べたカードを開きます。恒久的なものは あらかじめ入力されたエディタを開きます。そして自分で元に戻るルールだけ(1 時間、またはこの回の Flowlight の実行中だけ)が、先に示されることなく 適用されます。どれも注意点も添えており、必要なエンジンも示します。HTTPS インスペクションがなければ動かないテンプレートは、そう書いてあります。

@@ -461,10 +461,10 @@

デバイス:Bluetooth、USB、外部ストレージ

ドライブが現れることこそ、人が実際に気にする出来事だからです。スループットもここにはありません。Bluetooth にない理由と同じです。

フォーカスモード

-

アプリと接続先をいくつか選ぶと、どの画面もそれだけを表示します。ライブ、レポート、アラート、AI エージェント、インスペクト、そしてメニューバーの速度もです。 +

アプリと接続先をいくつか選ぶと、どの画面もそれだけを表示します。ライブ、履歴、アラート、AI エージェント、インスペクト、そしてメニューバーの速度もです。 1 つのエージェントの仕事を、Mac のほかの部分に邪魔されずに見守るための機能です。

    -
  • ライブ、レポート、AI エージェントのどの行でも右クリックしてフォーカス…を選ぶか、サイドバー下部のフォーカスのコントロールから、 +
  • ライブ、履歴、AI エージェントのどの行でも右クリックしてフォーカス…を選ぶか、サイドバー下部のフォーカスのコントロールから、 動きのあったアプリを選び、接続先を入力します。
  • ⇧⌘F でフォーカスをオン・オフできます。メニューバーからも同じことができ、何にフォーカスしているかも表示されます。
  • 接続先はサブドメインも連れていきます。example.com は api.example.com を含みます。IP アドレスは使えますが、 @@ -503,7 +503,7 @@

    OpenTelemetry や SIEM への書き出し

  • HTTPS インスペクションのものは一切含みません。ヘッダも本文もツール呼び出しもありません。書き出しが運べるのは集計とアラートだけなので、 間違って混じる余地すらありません。
  • 認証ヘッダは環境設定ではなく、ログインキーチェーンに保存されます。表示されるのは名前だけです。
  • -
  • Flowlight が送るものは Flowlight に現れます。ほかのアプリのトラフィックと同じように、ライブとレポートに。 +
  • Flowlight が送るものは Flowlight に現れます。ほかのアプリのトラフィックと同じように、ライブと履歴に。 127.0.0.1 のコレクターも含めてです。

知っておくとよいことが 2 つあります。集計はおよそ 2 分遅れでまとめられるので、間隔を 1 分未満にしても、問い合わせが増えるだけでデータが早く届くわけでは diff --git a/site/pages/ja/index.html b/site/pages/ja/index.html index c6b641ed..19d10e58 100644 --- a/site/pages/ja/index.html +++ b/site/pages/ja/index.html @@ -80,15 +80,15 @@

数秒で答えが出る問い

AI エージェント

会議中もエージェントが動いている

モデルプロバイダ以外に、エージェントとそのツールが触れたホストをすべて確認できます。許可リストを外れたとき、メールを送ったとき、新しい相手へ 100 MB を送ったときはアラートが出ます。

-
レポート

送信量が急に跳ねた理由がわからない

-

山にポインタを重ねれば原因のアプリがわかり、クリックすれば 1 時間から 1 分へ拡大でき、そのままドメインと IP まで追えます。

+
履歴

送信量が急に跳ねた理由がわからない

+

山にポインタを重ねて原因のアプリをスクロール可能なカードで確認し、期間ボタンやナビゲータで 1 時間から 1 分へ移動して、ドメインと IP まで追えます。

アラート

見慣れないアプリが外部と通信を始めた

新しいドメインへの初回接続、非標準ポートへの接続、トラフィックの急増は、それぞれアラートになり、アプリ名ときっかけになった数値を示します。

ライブ

いま何かが回線を使い切っている

通信量の多いアプリを 1 秒ごとに更新し、アプリごとに最も忙しい接続先を表示します。現在の速度はメニューバーにも出ます。

-
レポート

今月のテザリング通信量が消えた

+
履歴

今月のテザリング通信量が消えた

月表示に切り替えてアプリでグループ化すれば、最も使ったアプリが一番上に来ます。証拠が必要なら CSV に書き出せます。

-
レポート · 接続先

データの行き先を監査したい

+
履歴 · 接続先

データの行き先を監査したい

接続先でグループ化すれば、そのドメインと通信するアプリがすべて並びます。IP でグループ化すれば、アドレスの向こうにあるものが見えます。

@@ -106,7 +106,7 @@

ライブ

いま何が動いている?アプリごとの速度、

AI エージェント

エージェントはモデルを呼ぶ以外に何をしている?プロバイダ、ほかのホスト、リスクバッジ。

⌘2
-

レポート

結局どこへ行った?秒から年まで、アプリ・接続先・IP でグループ化、グラフと CSV 付き。

⌘3
+

履歴

結局どこへ行った?秒から年まで、アプリ・接続先・IP でグループ化、グラフと CSV 付き。

⌘3

アラート

何がおかしかった?理由がわかるアプリ単位のアラートに、接続先としきい値を添えて。

⌘4
@@ -118,7 +118,7 @@

デバイス

Bluetooth、USB、カメラ。何がペアリング、

インスペクト

任意。エージェントは実際に何を送り、どのツール呼び出しが原因だった?復号したリクエスト、ツール呼び出し、結果。

⌘7
-

可視化

何が通信している?アプリのトラフィックと確認済み AI エージェント経路を、ズームできる Sankey マップと同じ内容のリストで表示します。

+

接続

何が通信している?アプリのトラフィックと確認済み AI エージェント経路を、ズームできる Sankey マップと同じ内容のリストで表示します。

@@ -401,8 +401,8 @@

監視しなくていい監視ツール

レポートビュー。1 時間ごとの受信と送信の棒グラフ、アプリ・接続先・プロトコルのドーナツグラフが表示されています
-
レポート。秒から年までのズーム、3 つのグループ化、アプリが数百あっても読めるグラフ。
+ alt="履歴ビュー。1 時間ごとの受信と送信の棒グラフ、アプリ・接続先・プロトコルのドーナツグラフが表示されています">
+
履歴。秒から年までのズーム、3 つのグループ化、アプリが数百あっても読めるグラフ。
アラートビュー。エージェントの情報流出、メール、FTP、離席中、トラフィック急増のアラートが並んでいます
アラート。どれもアプリ、接続先、きっかけになった数値を示します。
diff --git a/site/pages/ko/docs.html b/site/pages/ko/docs.html index ebc63cdf..e8c57156 100644 --- a/site/pages/ko/docs.html +++ b/site/pages/ko/docs.html @@ -95,8 +95,8 @@

여러 뷰

- - + + @@ -109,11 +109,11 @@

여러 뷰

실시간 뷰: 앱 목록에 각각의 현재 보내기·받기 속도와 가장 바쁜 목적지가 함께 나열되어 있습니다.
실시간, Flowlight가 처음 여는 화면.
-

보고서에서는 막대에 포인터를 올려 어떤 앱이 만든 것인지 보고, 클릭해 확대하고, 아무 행이나 두 번 클릭해 보고서를 그 항목으로 좁힐 수 있습니다.

-

트래픽 시각화

-

시각화는 현재 기간·검색·포커스 범위의 모든 앱, 정확한 목적지, 관찰된 관계를 표시합니다. 경로 너비는 바이트 수를 나타냅니다. 드문 분홍색과 파란색 대시가 보내기와 받기의 반대 방향으로 움직이고, 각 에지는 고유하면서 안정적인 속도를 가집니다. 동작 줄이기에서는 같은 정확한 정적 경로가 유지됩니다.

-

기본적으로 트래픽은 전체 받은 바이트와 보낸 바이트 합계가 가장 큰 앱 10개를, AI 활동은 입증된 에이전트 루트 10개를 표시합니다. 검색 가능한 선택적 출발지·목적지 선택기로 임의 대 임의, 하나 대 임의, 임의 대 하나, 하나 대 하나를 조사할 수 있습니다. 한쪽을 선택하면 반대쪽 선택기에는 관찰되거나 차단된 증거로 연결된 엔드포인트만 남습니다. ‘임의’는 항상 사용할 수 있고 ‘재설정’으로 두 선택기를 모두 되돌릴 수 있습니다. 포커스된 맵에는 연결된 모든 런처, 에이전트, 도구 또는 MCP 서비스, 게이트웨이, Flowlight 프록시 단계, 목적지, 관찰되거나 차단된 관계가 포함됩니다. 유난히 큰 포커스 범위만 점진적으로 그룹화하며 각 그룹은 모든 정확한 구성원 ID를 유지합니다. 목록과 보고서는 완전하고 수치도 동일하게 유지됩니다.

-

노드나 연결을 선택해 정확한 값을 확인한 뒤 같은 앱과 목적지로 보고서, 검사 또는 저장하지 않은 규칙을 열 수 있습니다. 목록은 키보드와 VoiceOver에 같은 전체 그래프를 제공합니다. 연결은 네트워크 흐름이며 HTTP 요청 수가 아니고, 관찰됨은 허용 결정이 아닙니다.

+

기록에서 막대에 포인터를 올리면 포인터를 따라다니는 스크롤 가능한 카드에 기여한 앱이 표시됩니다. 막대를 클릭해 확대하지는 않습니다. 행을 두 번 클릭하면 기록을 그 항목으로 좁힐 수 있습니다.

+

연결

+

연결는 현재 기간·검색·포커스 범위의 모든 앱, 정확한 목적지, 관찰된 관계를 표시합니다. 경로 너비는 바이트 수를 나타냅니다. 드문 분홍색과 파란색 대시가 보내기와 받기의 반대 방향으로 움직이고, 각 에지는 고유하면서 안정적인 속도를 가집니다. 동작 줄이기에서는 같은 정확한 정적 경로가 유지됩니다.

+

기본적으로 트래픽은 전체 받은 바이트와 보낸 바이트 합계가 가장 큰 앱 10개를, AI 활동은 입증된 에이전트 루트 10개를 표시합니다. 검색 가능한 선택적 출발지·목적지 선택기로 임의 대 임의, 하나 대 임의, 임의 대 하나, 하나 대 하나를 조사할 수 있습니다. 한쪽을 선택하면 반대쪽 선택기에는 관찰되거나 차단된 증거로 연결된 엔드포인트만 남습니다. ‘임의’는 항상 사용할 수 있고 ‘재설정’으로 두 선택기를 모두 되돌릴 수 있습니다. 포커스된 맵에는 연결된 모든 런처, 에이전트, 도구 또는 MCP 서비스, 게이트웨이, Flowlight 프록시 단계, 목적지, 관찰되거나 차단된 관계가 포함됩니다. 유난히 큰 포커스 범위만 점진적으로 그룹화하며 각 그룹은 모든 정확한 구성원 ID를 유지합니다. 목록과 기록은 완전하고 수치도 동일하게 유지됩니다.

+

노드나 연결을 선택해 정확한 값을 확인한 뒤 같은 앱과 목적지로 기록, 검사 또는 저장하지 않은 규칙을 열 수 있습니다. 목록은 키보드와 VoiceOver에 같은 전체 그래프를 제공합니다. 연결은 네트워크 흐름이며 HTTP 요청 수가 아니고, 관찰됨은 허용 결정이 아닙니다.

AI 에이전트 규칙

Flowlight가 이름으로 아는 앱(현재 16종, Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Ollama, ZCode 등)이거나 @@ -131,7 +131,7 @@

도구와 MCP 서버

에이전트는 일의 상당 부분을 다른 프로세스로 처리합니다. 셸 도구가 curl이나 git, npm을 실행하고, MCP 서버는 자기 프로세스로 돕니다. Flowlight는 각 프로세스의 부모를 거슬러 올라가 그것을 시작한 에이전트를 찾고, 그 트래픽을 에이전트의 것으로 집계합니다. AI 에이전트에서는 에이전트 상세의 도구와 MCP 서버에 이들이 나열되고, - 목적지에는 curl 경유나 github MCP 경유라고 표시됩니다. 보고서에서는 프로세스 행에 Claude Code 경유라고 나옵니다.

+ 목적지에는 curl 경유나 github MCP 경유라고 표시됩니다. 기록에서는 프로세스 행에 Claude Code 경유라고 나옵니다.

MCP 서버의 이름은 명령줄을 Claude Code(~/.claude.json), Claude Desktop, Cursor(~/.cursor/mcp.json), Windsurf, VS Code, Codex(~/.codex/config.toml), Zed, Gemini CLI의 MCP 설정과 맞춰 알아냅니다. 원격 MCP 서버는 URL의 호스트 이름으로, 설정에 없는 서버는 @@ -173,11 +173,11 @@

에이전트 설정: Flowlight가 Mac에서 읽는

눈여겨볼 것

-

보고서의 세 번째 모드로, 세부 내역과 차트 옆에 있습니다. 보고서에 있는 앱들을 서로 비교해, 목적지가 나머지와 +

기록의 세 번째 모드로, 세부 내역과 차트 옆에 있습니다. 기록에 있는 앱들을 서로 비교해, 목적지가 나머지와 닮지 않은 앱을 짚어 줍니다. 비슷한 앱들보다 훨씬 많은 곳, 끝내 이름으로 확인되지 않은 주소, 고른 것이 아니라 생성된 듯한 호스트 이름, 받은 것보다 훨씬 많이 보낸 경우, 그리고 그 앱의 목적이라기보다 부업 같은 프로토콜입니다. 발견마다 근거가 함께 - 붙고, 하나를 클릭하면 보고서가 그 앱으로 좁혀집니다.

-

이름이 의심스러움이 아니라 눈여겨볼 것인 것은 일부러입니다. 데이터가 뒷받침하는 말은 “이 보고서의 다른 앱들에 + 붙고, 하나를 클릭하면 기록이 그 앱으로 좁혀집니다.

+

이름이 의심스러움이 아니라 눈여겨볼 것인 것은 일부러입니다. 데이터가 뒷받침하는 말은 “이 기록의 다른 앱들에 비해 특이하다”까지입니다. 백업 도구는 이유가 있어서 여러 곳과 통신하고, 조용한 Mac에서는 아무 발견도 나오지 않습니다. 모든 앱이 공통으로 내는 트래픽에 대해서는 아무 말도 하지 않습니다.

@@ -187,8 +187,8 @@

바이트가 나간 길

늘 집계하고 있었지만 부를 말이 없었기에, 4 GB 폴더를 AirDrop으로 보내면 이름 없는 주소로 몇 메가바이트가 간 것처럼 보였습니다.

이제 모든 흐름에는 채널이 붙습니다. 네트워크, 피어 투 피어 Wi-Fi, 이 Mac(루프백, - 기기를 떠나지 않은 트래픽), 터널(VPN 안. 그 뒤로 어디로 갔는지는 여기서 보이지 않습니다) 중 하나입니다. 보고서 툴바에서 - 채널로 보고서를 좁힐 수 있고, 이 값은 CSV 내보내기와 수집기로 보내는 데이터에도 함께 실립니다.

+ 기기를 떠나지 않은 트래픽), 터널(VPN 안. 그 뒤로 어디로 갔는지는 여기서 보이지 않습니다) 중 하나입니다. 기록 툴바에서 + 채널로 기록을 좁힐 수 있고, 이 값은 CSV 내보내기와 수집기로 보내는 데이터에도 함께 실립니다.

피어 투 피어 행의 이름은 그 연결을 연 기능에서 옵니다. AirDrop and Handoff · nearby device, Continuity · nearby device처럼 말이죠. 링크 로컬 주소는 아무것도 알려주지 않고, 같은 공간의 기기는 이 Mac이 알아낼 수 있는 이름을 갖고 있지 않기 때문입니다. 무선을 직접 쓰는 앱은 자기 이름을 그대로 유지하는데, 그것이 그 앱에 대한 정직한 답입니다.

@@ -208,7 +208,7 @@

그 밖의 알림

Apple 기본 앱은 기본적으로 제외합니다. macOS는 소프트웨어 업데이트, iCloud, 푸시, 시간, 지도 타일처럼 끊임없이 Apple과 통신하고, 그 호스트와 포트는 처음 나타날 때마다 새 것입니다. 그것을 다 나열하면 정작 읽을 만한 한 줄이 - 묻힙니다. 보고 싶다면 설정 › 알림에서 끄세요. 어느 쪽이든 트래픽은 그대로 기록되고, 실시간과 보고서, 질문에 + 묻힙니다. 보고 싶다면 설정 › 알림에서 끄세요. 어느 쪽이든 트래픽은 그대로 기록되고, 실시간과 기록, 질문에 그대로 나타나며, 모든 규칙과 가드레일, 허용 목록의 적용도 그대로 받습니다. 이 설정이 정하는 것은 무엇이 목록에 오르는지일 뿐, 무엇이 허용되는지가 아닙니다.

@@ -236,10 +236,10 @@

질문

모양이 중요할 때는 차트로. 시간에 따른 변화는 선으로, 비교는 막대로, 하나의 전체를 나눈 것은 원으로 돌아옵니다. Flowlight는 질의가 돌려준 바로 그 행으로 차트를 그리므로 그림과 문장이 어긋날 수 없고, 모델은 다른 모양을 요청하거나 차트를 그리지 말라고 할 수도 있습니다.

-

모든 질의가 답 아래에 나열되고, 클릭하면 트래픽 근거는 보고서에서, 기기와 설정 답변은 관련 화면에서 열립니다. +

모든 질의가 답 아래에 나열되고, 클릭하면 트래픽 근거는 기록에서, 기기와 설정 답변은 관련 화면에서 열립니다. 확인할 수 없는 답은 문법만 좋은 추측입니다.

Flowlight는 자신에게도 같은 기준을 적용합니다. 이 기능이 보내는 것은 무엇이든 다른 앱의 트래픽과 똑같이 - 실시간과 보고서에 나타납니다. 모델 서버가 바로 이 Mac에 있는 경우까지 포함해서요. 조용히 빼기가 가장 쉬웠을 경우입니다.

+ 실시간과 기록에 나타납니다. 모델 서버가 바로 이 Mac에 있는 경우까지 포함해서요. 조용히 빼기가 가장 쉬웠을 경우입니다.

HTTPS 검사(선택 사항)

기본값은 끔입니다. 검사에서 켜면 Flowlight는 Mac 안에서 만든 자체 인증 기관을 가지고 127.0.0.1:8877에 @@ -308,7 +308,7 @@

HTTPS 검사(선택 사항)

피할 수 없습니다. 그 자리를 대신하는 것이 다른 환경으로 시작한다는 점이 이 기능의 전부이기 때문입니다. 할 수 없는 일도 있습니다. 이미 실행 중인 에이전트에는 닿지 못합니다. 그 프록시 설정은 시작할 때 읽혔고, 이제는 무엇으로도 바꿀 수 없습니다.

-

행에서 곧바로 오는 길. 실시간이나 보고서, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 +

행에서 곧바로 오는 길. 실시간이나 기록, AI 에이전트에서 앱이나 목적지를 오른쪽 클릭하고 …의 트래픽 검사를 고르면, 그 앱만 또는 그 목적지만 보이는 채로 검사 화면이 열립니다. 그렇다고 알려 주는 칩이 붙고, 한 번 눌러 없앨 수 있습니다. 검색하는 것이 아니라 범위를 좁히는 것입니다. 이전 버전은 그 이름을 검색란에 넣었는데, 검색란은 응답 본문까지 찾기 때문에 한 에이전트의 트래픽을 보자고 했을 뿐인데 HTML에 그 이름이 언급되었을 뿐인 페이지까지 모두 @@ -338,13 +338,13 @@

모의 응답

규칙

허용 목록은 에이전트 하나가 어디까지 갈 수 있는지에 대한 이야기입니다. 규칙은 그것의 일반형입니다. 대상, 즉 앱이나 에이전트, 목적지, URL, 또는 그 둘의 조합을 지목하고 차단인지 - 허용인지 정합니다. 실시간이나 보고서, AI 에이전트, 검사에서 아무 행이나 오른쪽 클릭하면 지금 보고 있는 것에 + 허용인지 정합니다. 실시간이나 기록, AI 에이전트, 검사에서 아무 행이나 오른쪽 클릭하면 지금 보고 있는 것에 대한 규칙을 쓸 수 있습니다. 어느 경로로 만들어도 모두 규칙 화면의 같은 편집기로 모입니다. 보이지 않는 곳에서 효력을 갖는 규칙은 다시는 찾을 수 없는 규칙이 되기 때문입니다.

템플릿. 스물두 개가 다섯 묶음으로 있습니다. 에이전트가 패키지 레지스트리나 다른 모델 제공업체에 닿지 못하게 막는 것, 데이터가 나가는 흔한 경로를 닫는 것(붙여넣기 사이트, 웹훅 수집기, 익명 파일 업로드, 터널, DNS over HTTPS), 제품 분석과 크래시 보고, 업무 시간 정책, 그리고 “이게 뭔지 알아내는 동안 한 시간만 막아 두기” 같은 일회성 규칙입니다. 규칙 툴바에서 - 둘러보거나, 실시간·보고서·AI 에이전트·검사의 아무 행에서 오른쪽 클릭해 지금 보고 있는 것에 적용하세요.

+ 둘러보거나, 실시간·기록·AI 에이전트·검사의 아무 행에서 오른쪽 클릭해 지금 보고 있는 것에 적용하세요.

각 템플릿은 무엇을 할지 먼저 알려줍니다. 규칙을 두 개 이상 쓰는 템플릿은 모든 호스트와 일정을 나열한 카드를 열고, 영구적인 것은 미리 채워진 편집기를 열며, 스스로 사라지는 규칙, 즉 한 시간짜리나 이번 Flowlight 실행 동안만 유효한 규칙만 먼저 보여주지 않고 바로 적용됩니다. 각 템플릿에는 주의 사항과 필요한 엔진도 함께 적혀 있습니다. HTTPS 검사가 있어야만 @@ -497,10 +497,10 @@

기기: Bluetooth와 USB, 외장 저장 장치

때문입니다. 처리량은 여기에도 없는데, 이유는 Bluetooth와 같습니다.

집중 모드

-

앱과 목적지 몇 개를 고르면 모든 화면이 그것만 보여줍니다. 실시간과 보고서, 알림, AI 에이전트, 검사, 그리고 메뉴 막대의 +

앱과 목적지 몇 개를 고르면 모든 화면이 그것만 보여줍니다. 실시간과 기록, 알림, AI 에이전트, 검사, 그리고 메뉴 막대의 속도까지요. Mac의 나머지에 방해받지 않고 에이전트 하나가 일하는 모습을 지켜보기 위한 기능입니다.

    -
  • 실시간이나 보고서, AI 에이전트에서 아무 행이나 오른쪽 클릭해 집중하기…를 고르거나, 사이드바 아래의 집중 +
  • 실시간이나 기록, AI 에이전트에서 아무 행이나 오른쪽 클릭해 집중하기…를 고르거나, 사이드바 아래의 집중 컨트롤에서 활동한 앱을 고르고 목적지를 입력하세요.
  • ⇧⌘F로 집중을 켜고 끌 수 있고, 메뉴 막대에서도 됩니다. 메뉴 막대에는 무엇에 집중 중인지도 표시됩니다.
  • 목적지는 서브도메인을 함께 데려갑니다. example.com은 api.example.com까지 포함합니다. IP 주소는 @@ -542,7 +542,7 @@

    OpenTelemetry나 SIEM으로 내보내기

  • HTTPS 검사에서 나온 것은 절대 보내지 않습니다. 헤더도, 본문도, 도구 호출도 없습니다. 내보내기가 실을 수 있는 것은 집계와 알림뿐이므로, 실수로라도 그것들이 갈 자리가 없습니다.
  • 인증 헤더는 설정이 아니라 로그인 키체인에 보관합니다. 화면에는 이름만 표시됩니다.
  • -
  • Flowlight가 보내는 것은 Flowlight에 나타납니다. 다른 앱의 트래픽과 똑같이 실시간과 보고서에요. +
  • Flowlight가 보내는 것은 Flowlight에 나타납니다. 다른 앱의 트래픽과 똑같이 실시간과 기록에요. 127.0.0.1에 있는 수집기까지 포함합니다.

예상해 둘 것이 두 가지 있습니다. 집계는 약 2분 뒤처져 접히므로, 간격을 1분 미만으로 잡으면 더 자주 물어보기만 하고 데이터가 diff --git a/site/pages/ko/index.html b/site/pages/ko/index.html index 528a41cb..fc83fa98 100644 --- a/site/pages/ko/index.html +++ b/site/pages/ko/index.html @@ -80,15 +80,15 @@

몇 초면 답이 나오는 질문들

AI 에이전트

회의 중인데 에이전트가 계속 돌고 있습니다

모델 제공업체 말고 에이전트와 그 도구가 닿은 호스트를 전부 확인하고, 허용 목록을 벗어나거나 이메일을 보내거나 처음 보는 곳에 100 MB를 올리면 알림을 받습니다.

-
보고서

업로드가 치솟았는데 이유를 모릅니다

-

치솟은 구간에 포인터를 올려 어떤 앱인지 보고, 클릭해 시간 단위에서 분 단위로 확대한 뒤 정확한 도메인과 IP까지 따라갑니다.

+
기록

업로드가 치솟았는데 이유를 모릅니다

+

치솟은 구간에 포인터를 올려 기여한 앱의 스크롤 가능한 카드를 보고, 범위 버튼이나 탐색기로 시간 단위에서 분 단위로 이동해 정확한 도메인과 IP까지 따라갑니다.

알림

새 앱이 어딘가로 연락을 시작했습니다

새 도메인에 대한 첫 연결, 비표준 포트, 트래픽 급증은 각각 알림을 띄우며, 앱 이름과 기준을 넘긴 수치를 함께 알려줍니다.

실시간

지금 무언가가 회선을 가득 채우고 있습니다

1초마다 갱신되는 상위 사용 앱, 앱별로 가장 바쁜 목적지, 그리고 메뉴 막대의 실시간 속도.

-
보고서

이번 달 핫스팟 데이터가 사라졌습니다

+
기록

이번 달 핫스팟 데이터가 사라졌습니다

월 단위 보기로 바꾸고 앱으로 묶으세요. 가장 많이 쓴 앱이 맨 윗줄에 오고, 증빙이 필요하면 CSV로 내보낼 수 있습니다.

-
보고서 · 목적지

데이터가 어디로 가는지 감사해야 합니다

+
기록 · 목적지

데이터가 어디로 가는지 감사해야 합니다

목적지로 묶으면 한 도메인과 통신하는 모든 앱이 보이고, IP로 묶으면 그 주소 뒤에 무엇이 있는지 보입니다.

@@ -106,7 +106,7 @@

실시간

지금 무엇이 움직이나? 앱별 속도, 지난 2분,

AI 에이전트

에이전트가 모델을 부르는 것 말고 무엇을 하나? 제공업체, 다른 호스트, 위험 배지.

⌘2
-

보고서

다 어디로 갔나? 초에서 연까지, 앱·목적지·IP로 묶어 차트와 CSV로.

⌘3
+

기록

다 어디로 갔나? 초에서 연까지, 앱·목적지·IP로 묶어 차트와 CSV로.

⌘3

알림

무엇이 이상했나? 목적지와 임계값까지 밝히는, 설명되는 앱별 알림.

⌘4
@@ -118,7 +118,7 @@

기기

Bluetooth, USB, 카메라: 무엇이 페어링, 연결 또는

검사

선택 사항. 에이전트가 실제로 무엇을 보냈고, 어떤 도구 호출이 그렇게 했나? 복호화된 요청, 도구 호출, 결과.

⌘7
-

시각화

무엇이 통신하나? 앱 트래픽과 입증된 AI 에이전트 경로를 확대 가능한 Sankey 지도와 동일한 내용의 목록으로 보여 줍니다.

+

연결

무엇이 통신하나? 앱 트래픽과 입증된 AI 에이전트 경로를 확대 가능한 Sankey 지도와 동일한 내용의 목록으로 보여 줍니다.

@@ -402,8 +402,8 @@

감시하지 않아도 되는 감시 도구

시간별 수신·송신 막대와 앱, 목적지, 프로토콜 도넛 차트가 있는 보고서 뷰
-
보고서. 초에서 연까지의 확대·축소, 세 가지 묶음, 앱이 수백 개여도 읽히는 차트.
+ alt="시간별 수신·송신 막대와 앱, 목적지, 프로토콜 도넛 차트가 있는 기록 뷰">
+
기록. 초에서 연까지의 확대·축소, 세 가지 묶음, 앱이 수백 개여도 읽히는 차트.
에이전트 유출, 이메일, FTP, 자리 비움, 트래픽 급증 알림이 나열된 알림 뷰
알림. 하나하나가 앱과 목적지, 그리고 기준을 넘긴 수치를 밝힙니다.
diff --git a/site/pages/pt-PT/docs.html b/site/pages/pt-PT/docs.html index c5e4a06c..5e6a3756 100644 --- a/site/pages/pt-PT/docs.html +++ b/site/pages/pt-PT/docs.html @@ -96,8 +96,8 @@

As vistas

- - + + @@ -110,11 +110,11 @@

As vistas

A vista Em direto: uma lista de aplicações com as suas taxas de envio e receção atuais e o destino mais ativo.
Em direto, a vista com que o Flowlight abre.
-

Em Relatórios, passe o rato sobre uma barra para ver que apps a produziram, clique nela para ampliar e faça duplo clique numa linha para restringir o relatório a essa linha.

-

Visualizar tráfego

-

Visualizar mostra cada aplicação, destino exato e relação observada no período, pesquisa e foco atuais. A largura representa bytes. Traços rosa e azuis esparsos movem-se em sentidos opostos para envio e receção; cada aresta tem a sua própria velocidade estável e Reduzir movimento mantém os mesmos percursos estáticos.

-

Por predefinição, Tráfego mostra as dez aplicações mais ativas e Atividade de IA as dez raízes de agentes comprovadas mais ativas, ordenadas pelo total completo de bytes recebidos e enviados. Os dois seletores opcionais pesquisáveis, origem e destino, abrangem qualquer-para-qualquer, um-para-qualquer, qualquer-para-um e um-para-um. Cada escolha limita o seletor oposto aos pontos finais com evidência observada ou bloqueada; Qualquer permanece disponível e Repor repõe ambos os seletores. Um mapa focado inclui cada iniciador, agente, ferramenta ou serviço MCP, gateway, etapa do proxy Flowlight, destino e relação observada ou bloqueada ligados. Apenas os âmbitos focados invulgarmente grandes são agrupados progressivamente; cada grupo mantém todos os IDs exatos dos membros. Lista e Relatórios permanecem completos e numericamente idênticos.

-

Selecione um nó ou ligação para ver valores exatos e continue para Relatórios, Inspecionar ou uma regra não guardada com a mesma aplicação e destino. Lista fornece o mesmo grafo completo ao teclado e VoiceOver. Ligações significa fluxos de rede, não pedidos HTTP; Observado não é uma decisão de permissão.

+

Em Histórico, passe o rato sobre uma barra para abrir um cartão deslocável que segue o ponteiro e mostra as apps que contribuíram; as barras não ampliam ao clicar. Faça duplo clique numa linha para restringir o histórico a essa linha.

+

Ligações

+

Ligações mostra cada aplicação, destino exato e relação observada no período, pesquisa e foco atuais. A largura representa bytes. Traços rosa e azuis esparsos movem-se em sentidos opostos para envio e receção; cada aresta tem a sua própria velocidade estável e Reduzir movimento mantém os mesmos percursos estáticos.

+

Por predefinição, Tráfego mostra as dez aplicações mais ativas e Atividade de IA as dez raízes de agentes comprovadas mais ativas, ordenadas pelo total completo de bytes recebidos e enviados. Os dois seletores opcionais pesquisáveis, origem e destino, abrangem qualquer-para-qualquer, um-para-qualquer, qualquer-para-um e um-para-um. Cada escolha limita o seletor oposto aos pontos finais com evidência observada ou bloqueada; Qualquer permanece disponível e Repor repõe ambos os seletores. Um mapa focado inclui cada iniciador, agente, ferramenta ou serviço MCP, gateway, etapa do proxy Flowlight, destino e relação observada ou bloqueada ligados. Apenas os âmbitos focados invulgarmente grandes são agrupados progressivamente; cada grupo mantém todos os IDs exatos dos membros. Lista e Histórico permanecem completos e numericamente idênticos.

+

Selecione um nó ou ligação para ver valores exatos e continue para Histórico, Inspecionar ou uma regra não guardada com a mesma aplicação e destino. Lista fornece o mesmo grafo completo ao teclado e VoiceOver. Ligações significa fluxos de rede, não pedidos HTTP; Observado não é uma decisão de permissão.

Regras dos agentes de IA

Uma app conta como agente se o Flowlight a conhecer pelo nome (16 hoje, entre elas o Claude Code, o Codex, o Cursor, o GitHub Copilot, @@ -132,7 +132,7 @@

Ferramentas e servidores MCP

Os agentes fazem grande parte do trabalho através de outros processos: uma ferramenta de shell executa o curl, o git ou o npm, e os servidores MCP correm como processos próprios. O Flowlight segue os pais de cada processo até ao agente que o iniciou, para que esse tráfego seja contado como sendo do agente. Em Agentes de IA, o detalhe do agente lista-os em Ferramentas e servidores MCP, e os - destinos aparecem como via curl ou via github MCP. Em Relatórios, a linha do processo diz via Claude Code.

+ destinos aparecem como via curl ou via github MCP. Em Histórico, a linha do processo diz via Claude Code.

Os servidores MCP recebem o nome ao comparar a sua linha de comandos com a configuração de MCP do Claude Code (~/.claude.json), do Claude Desktop, do Cursor (~/.cursor/mcp.json), do Windsurf, do VS Code, do Codex (~/.codex/config.toml), do Zed e do Gemini CLI. Os servidores MCP remotos são identificados pelo nome de anfitrião no seu URL, e os servidores não configurados por nomes de pacote reconhecíveis, como @@ -175,7 +175,7 @@

Configuração dos agentes: o que o Flowlight lê n

Vale a pena ver

-

Um terceiro modo em Relatórios, ao lado da discriminação e dos gráficos. Compara as apps do relatório entre si +

Um terceiro modo em Histórico, ao lado da discriminação e dos gráficos. Compara as apps do relatório entre si e aponta as que têm destinos diferentes do resto: muito mais sítios do que as suas semelhantes, endereços que nunca resolveram para um nome, nomes de anfitrião que parecem gerados e não escolhidos, muito mais enviado do que recebido, e protocolos que são um acessório e não o propósito da app. Cada constatação traz consigo as provas em que se baseia, e clicar numa delas restringe o relatório a essa @@ -191,7 +191,7 @@

Por onde saíram os bytes

sem nome.

Agora cada fluxo traz um canal: Rede, Wi-Fi ponto a ponto, Este Mac (loopback, que nunca saiu da máquina) ou Túnel (dentro de uma VPN; para onde foi depois disso não é visível aqui). Restrinja um relatório a - um deles na barra de ferramentas de Relatórios; o canal acompanha as exportações em CSV e tudo o que é enviado para um coletor.

+ um deles na barra de ferramentas de Histórico; o canal acompanha as exportações em CSV e tudo o que é enviado para um coletor.

As linhas ponto a ponto recebem o nome da funcionalidade que as abriu — AirDrop and Handoff · nearby device, Continuity · nearby device — porque um endereço de ligação local não diz nada e o dispositivo que está na sala não tem um nome que este Mac possa aprender. Uma app que usa a rádio diretamente mantém o seu próprio nome, que é a resposta verdadeira no seu caso.

@@ -212,7 +212,7 @@

Outros alertas

Por predefinição, as apps da Apple ficam de fora. O macOS contacta a Apple constantemente — atualização de software, iCloud, notificações, hora, mosaicos dos Mapas — em anfitriões e portas que são novos na primeira vez que aparecem, e listar tudo isso enterra a única linha que vale a pena ler. Desative essa exclusão nas Definições › Alertas se as quiser. De qualquer forma, o tráfego continua a ser - registado, continua a aparecer em Em direto, Relatórios e Perguntar, e continua sujeito a todas as regras, proteções e listas de permissões: a definição + registado, continua a aparecer em Em direto, Histórico e Perguntar, e continua sujeito a todas as regras, proteções e listas de permissões: a definição decide o que é listado, nunca o que é permitido.

Perguntar

@@ -240,9 +240,9 @@

Perguntar

Gráficos quando a forma importa. A variação ao longo do tempo volta como uma linha, uma comparação como barras, a divisão de um todo como um gráfico circular. O Flowlight desenha-os a partir das mesmas linhas que a consulta devolveu, por isso a imagem e a frase não podem discordar, e o modelo pode pedir uma forma diferente ou nenhuma.

-

Cada consulta aparece sob a resposta e um clique abre Relatórios para os dados de tráfego ou o ecrã relevante +

Cada consulta aparece sob a resposta e um clique abre Histórico para os dados de tráfego ou o ecrã relevante para respostas sobre dispositivos e configuração. Uma resposta que não se pode verificar é um palpite com melhor gramática.

-

O Flowlight aplica a si mesmo a sua própria exigência. O que esta funcionalidade envia aparece em Em direto e em Relatórios +

O Flowlight aplica a si mesmo a sua própria exigência. O que esta funcionalidade envia aparece em Em direto e em Histórico como o tráfego de qualquer outra app — inclusive quando o servidor de modelos está neste próprio Mac, que era o caso que teria sido mais fácil deixar de fora sem dizer nada.

@@ -314,7 +314,7 @@

Inspeção HTTPS (opcional)

inevitável: todo o sentido está em o que o substitui arrancar com um ambiente diferente. O que não consegue fazer é chegar aos agentes que já estão a correr — as suas definições de proxy foram lidas no arranque, e nada as pode mudar agora.

-

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Relatórios ou Agentes de +

Chegar aqui a partir de uma linha. Clique com o botão direito numa app ou num destino em Em direto, Histórico ou Agentes de IA e escolha Inspecionar o tráfego de …: o Inspecionar abre a mostrar só essa app, ou só esse destino, com um chip a dizê-lo que pode remover com um clique. Delimita em vez de pesquisar — uma versão anterior punha o nome no campo de pesquisa, que pesquisa também os corpos das respostas, e por isso pedir o tráfego de um agente devolvia todas as páginas cujo HTML por acaso o mencionava. Só pode aparecer o tráfego que passou @@ -342,13 +342,13 @@

Respostas simuladas

Regras

Uma lista de permissões é a ideia de um agente sobre onde pode ir. Uma regra é a versão geral: nomeia um sujeito — uma app, um agente, um destino, um URL, ou um par formado por dois deles — e diz bloquear - ou permitir. Clique com o botão direito em qualquer linha de Em direto, Relatórios, Agentes de IA ou Inspecionar para escrever uma sobre o que está a ver; + ou permitir. Clique com o botão direito em qualquer linha de Em direto, Histórico, Agentes de IA ou Inspecionar para escrever uma sobre o que está a ver; todas elas vão dar ao mesmo editor no ecrã Regras, porque uma regra que entrasse em vigor fora da vista seria uma regra que nunca mais conseguiria encontrar.

Modelos. Vinte e dois, em cinco grupos — impedir um agente de chegar a registos de pacotes ou a outros fornecedores de modelos, fechar as vias habituais por onde os dados saem (sites de paste, apanhadores de webhooks, depósitos anónimos de ficheiros, túneis, DNS over HTTPS), analítica de produto e relatórios de falhas, políticas de horário de trabalho, e o pontual «bloquear isto por uma hora enquanto descubro - o que é». Consulte-os na barra de ferramentas de Regras, ou clique com o botão direito numa linha em Em direto, Relatórios, Agentes de IA ou Inspecionar e + o que é». Consulte-os na barra de ferramentas de Regras, ou clique com o botão direito numa linha em Em direto, Histórico, Agentes de IA ou Inspecionar e aplique um ao que está a ver.

Cada modelo diz o que vai fazer antes de o fazer. Tudo o que escreva mais do que uma regra abre um cartão com todos os anfitriões e horários; tudo o que seja permanente abre o editor pré-preenchido; e só as regras que se desfazem sozinhas — uma @@ -505,10 +505,10 @@

Dispositivos: Bluetooth, USB e armazenamento externo

acontecimento que às pessoas realmente interessa. O débito também não está aqui, pela mesma razão que não está no Bluetooth.

Modo Foco

-

Escolha algumas apps e destinos e todos os ecrãs mostram só esses — Em direto, Relatórios, Alertas, Agentes de IA e Inspecionar, e as taxas na +

Escolha algumas apps e destinos e todos os ecrãs mostram só esses — Em direto, Histórico, Alertas, Agentes de IA e Inspecionar, e as taxas na barra de menus. Serve para observar um agente a trabalhar sem o resto do Mac a atrapalhar.

    -
  • Clique com o botão direito em qualquer linha de Em direto, Relatórios ou Agentes de IA e escolha Focar em…, ou use o controlo de Foco no fundo +
  • Clique com o botão direito em qualquer linha de Em direto, Histórico ou Agentes de IA e escolha Focar em…, ou use o controlo de Foco no fundo da barra lateral para escolher entre as apps que estiveram ativas e para escrever destinos.
  • ⇧⌘F ativa e desativa o Foco, e a barra de menus também, que mostra ainda o que está focado.
  • Um destino leva consigo os seus subdomínios: example.com abrange api.example.com. Os endereços IP funcionam; @@ -549,7 +549,7 @@

    Exportar para OpenTelemetry ou para um SIEM

  • Nunca nada da inspeção HTTPS. Sem cabeçalhos, sem corpos, sem chamadas de ferramentas — a exportação só pode levar agregações e alertas, por isso não há para onde irem, nem por acidente.
  • Os cabeçalhos de autenticação ficam no seu porta-chaves de início de sessão, não nas preferências. Só os seus nomes são mostrados.
  • -
  • O que o Flowlight envia aparece no Flowlight, em Em direto e em Relatórios, como o tráfego de qualquer outra app — inclusive +
  • O que o Flowlight envia aparece no Flowlight, em Em direto e em Histórico, como o tráfego de qualquer outra app — inclusive um coletor em 127.0.0.1.

Duas coisas a esperar: as agregações são fechadas com cerca de dois minutos de atraso, por isso um intervalo inferior a um minuto consulta mais vezes sem que os dados diff --git a/site/pages/pt-PT/index.html b/site/pages/pt-PT/index.html index 966709d6..986dd480 100644 --- a/site/pages/pt-PT/index.html +++ b/site/pages/pt-PT/index.html @@ -80,15 +80,15 @@

Perguntas que responde em segundos

Agentes de IA

Um agente trabalha enquanto está numa reunião

Veja todos os anfitriões que ele e as suas ferramentas tocaram além do fornecedor do modelo e receba um alerta se sair da lista de permissões, enviar e-mail ou enviar 100 MB para um sítio novo.

-
Relatórios

O seu envio disparou e não sabe porquê

-

Passe o rato sobre o pico para ver a app por trás dele, clique para passar da hora ao minuto e siga-o até ao domínio e ao IP exatos.

+
Histórico

O seu envio disparou e não sabe porquê

+

Passe o rato sobre o pico para ver um cartão deslocável das apps que contribuíram; use os intervalos ou o navegador para passar da hora ao minuto e siga-o até ao domínio e ao IP exatos.

Alertas

Uma app nova começou a comunicar com o exterior

O primeiro contacto com um novo domínio, uma porta não padrão ou um pico de tráfego geram, cada um, um alerta que nomeia a app e o número que o disparou.

Em direto

Alguma coisa está a saturar a sua ligação neste momento

As apps mais ativas, atualizadas a cada segundo, com o destino mais ativo de cada app e as taxas em direto na barra de menus.

-
Relatórios

Os dados do seu hotspot desapareceram este mês

+
Histórico

Os dados do seu hotspot desapareceram este mês

Mude para a vista do mês e agrupe por app. O maior consumidor fica na primeira linha, com exportação para CSV se precisar de provas.

-
Relatórios · Destino

Precisa de auditar para onde vão os dados

+
Histórico · Destino

Precisa de auditar para onde vão os dados

Agrupe por destino para ver todas as apps que falam com um domínio, ou por IP para ver o que está por trás de um endereço.

@@ -106,7 +106,7 @@

Em direto

O que se move agora? Taxas por app, os últimos dois minuto

Agentes de IA

O que fazem os meus agentes além de chamar o modelo? Fornecedores, outros anfitriões, indicadores de risco.

⌘2
-

Relatórios

Para onde foi tudo? Do segundo ao ano, agrupado por app, destino ou IP, com gráficos e CSV.

⌘3
+

Histórico

Para onde foi tudo? Do segundo ao ano, agrupado por app, destino ou IP, com gráficos e CSV.

⌘3

Alertas

O que pareceu errado? Alertas por app, explicáveis, com o destino e o limiar.

⌘4
@@ -118,7 +118,7 @@

Dispositivos

Bluetooth, USB e câmaras: o que está emparelhado, liga

Inspecionar

Opcional. O que é que o agente enviou de facto, e que chamada de ferramenta o fez? Pedidos desencriptados, chamadas de ferramentas, resultados.

⌘7
-

Visualizar

O que está a comunicar? Um mapa Sankey ampliável do tráfego das apps e dos percursos comprovados dos agentes de IA, com uma lista exata equivalente.

+

Ligações

O que está a comunicar? Um mapa Sankey ampliável do tráfego das apps e dos percursos comprovados dos agentes de IA, com uma lista exata equivalente.

@@ -402,8 +402,8 @@

Um monitor que não tem de monitorizar

A vista Relatórios com barras horárias de dados recebidos e enviados e gráficos circulares de apps, destinos e protocolos
-
Relatórios. Zoom do segundo ao ano, três agrupamentos, gráficos que continuam legíveis com centenas de apps.
+ alt="A vista Histórico com barras horárias de dados recebidos e enviados e gráficos circulares de apps, destinos e protocolos">
+
Histórico. Zoom do segundo ao ano, três agrupamentos, gráficos que continuam legíveis com centenas de apps.
A vista Alertas a listar alertas de exfiltração por um agente, de e-mail, de FTP, de atividade durante a ausência e de picos de tráfego
Alertas. Cada um nomeia a app, o destino e o número que o disparou.
diff --git a/site/pages/releases.html b/site/pages/releases.html index 9630e75e..bc36f978 100644 --- a/site/pages/releases.html +++ b/site/pages/releases.html @@ -13,7 +13,18 @@

What's new

-

0.16.11

Latest
+

0.17.0

Latest
+
    +
  • Find past traffic in History. Reports is now History, with concise presets from 15 minutes to all retained evidence, an explicit date range, adaptive resolution, and a native overview navigator whose selection can be dragged, resized, or panned.
  • +
  • Keep short windows controllable. The navigator magnifies a nearby context when the full retained timeline would collapse the brush, preserves a minimum handle width, and can switch back to All history without changing the selected dates.
  • +
  • Inspect every contributor without disturbing the chart. Hover follows the active time line, flips the card away from chart edges, and keeps its fixed-height contributor list scrollable while clicks no longer replace the chosen range.
  • +
  • Read relationships in Connections. Visualize is now Connections; entering the screen or switching Traffic and AI activity commits data, topology, layout, and viewport as one generation instead of flashing stale or simplified geometry.
  • +
  • Keep filter remediation visible. When the authoritative extension state requires a restart or reinstall, a persistent menu-bar warning opens Flowlight directly to the existing Capture notice and remains until the condition is resolved.
  • +
+
+ +
+

0.16.11

  • Keep every route in one visual language. Every connection is one smooth cubic curve; nearby obstacle corridors are preferred over deep canvas-edge U-turns, while card clearance, endpoint attachment, route separation, hit testing, and bounded layout remain intact.
  • Compare several endpoints at once. Source and destination selectors now support complete multi-selection with exclusive Any behavior, all-to-all evidence compatibility, blocked-only pairs, accessible selected states, and one-click Reset.
  • diff --git a/site/pages/zh-Hans/docs.html b/site/pages/zh-Hans/docs.html index dca8373c..a0966c15 100644 --- a/site/pages/zh-Hans/docs.html +++ b/site/pages/zh-Hans/docs.html @@ -92,8 +92,8 @@

    各个视图

- - + + @@ -106,12 +106,12 @@

各个视图

实时视图:一列应用,各自带着当前的发送与接收速率,以及最忙的目标。
实时,Flowlight 打开时进入的那个视图。
-

在报告里,把指针停在某根柱子上就能看到是哪些应用造成的,点它可以放大,双击任意一行则把报告收窄到那一项。

+

在历史里,把指针停在柱子上,就会打开一张跟随指针、可滚动的卡片,列出贡献流量的应用;点击柱子不会放大。双击任意一行可把历史收窄到那一项。

-

流量可视化

-

可视化会显示当前时间、搜索和专注范围内的每个应用、精确目标及已观察关系。路径宽度表示字节数;稀疏的玫红色和蓝色虚线分别向相反的发送与接收方向移动。每条边都有自己稳定且独特的速度,“减少动态效果”则保留同样准确的静态路径。

-

默认情况下,“流量”按完整的接收加发送字节数显示最繁忙的 10 个应用,“AI 活动”显示最繁忙的 10 个已证实代理根。两个可选的可搜索来源和目标选择器支持任意到任意、一个到任意、任意到一个以及一对一调查。选择一端后,另一端的选择器只保留有已观察或已拦截证据的端点;“任意”始终可用,“重置”会还原两个选择器。聚焦地图会包含所有相连的启动器、代理、工具或 MCP 服务、网关、Flowlight 代理阶段、目标以及已观察或已拦截关系。只有异常庞大的聚焦范围才会逐步分组,每个分组都保留全部精确成员 ID。列表和“报告”始终完整,数值也完全一致。

-

选择节点或连接即可查看精确数值,然后带着同一应用和目标前往“报告”、“检查”或未保存的规则。列表为键盘和 VoiceOver 提供同一张完整图。“连接”表示网络流,不是 HTTP 请求;“已观察”表示存在流量,并不表示允许决定。

+

连接

+

连接会显示当前时间、搜索和专注范围内的每个应用、精确目标及已观察关系。路径宽度表示字节数;稀疏的玫红色和蓝色虚线分别向相反的发送与接收方向移动。每条边都有自己稳定且独特的速度,“减少动态效果”则保留同样准确的静态路径。

+

默认情况下,“流量”按完整的接收加发送字节数显示最繁忙的 10 个应用,“AI 活动”显示最繁忙的 10 个已证实代理根。两个可选的可搜索来源和目标选择器支持任意到任意、一个到任意、任意到一个以及一对一调查。选择一端后,另一端的选择器只保留有已观察或已拦截证据的端点;“任意”始终可用,“重置”会还原两个选择器。聚焦地图会包含所有相连的启动器、代理、工具或 MCP 服务、网关、Flowlight 代理阶段、目标以及已观察或已拦截关系。只有异常庞大的聚焦范围才会逐步分组,每个分组都保留全部精确成员 ID。列表和“历史”始终完整,数值也完全一致。

+

选择节点或连接即可查看精确数值,然后带着同一应用和目标前往“历史”、“检查”或未保存的规则。列表为键盘和 VoiceOver 提供同一张完整图。“连接”表示网络流,不是 HTTP 请求;“已观察”表示存在流量,并不表示允许决定。

AI 代理规则

一个应用被算作代理,要么是 Flowlight 按名字认得它(目前 16 个,包括 Claude Code、Codex、Cursor、GitHub Copilot、 @@ -128,7 +128,7 @@

AI 代理规则

工具与 MCP 服务器

代理的许多工作是通过其他进程完成的:shell 工具会运行 curl、git 或 npm,MCP 服务器则作为独立进程运行。Flowlight 会沿着每个进程的父进程追回启动它的代理,于是那些流量都算作该代理的。在AI 代理里, - 代理详情会把它们列在工具与 MCP 服务器下,目标则显示为经由 curl 或经由 github MCP。在报告里,进程那一行显示经由 Claude Code。

+ 代理详情会把它们列在工具与 MCP 服务器下,目标则显示为经由 curl 或经由 github MCP。在历史里,进程那一行显示经由 Claude Code。

MCP 服务器的名字来自把它们的命令行与各家 MCP 配置比对:Claude Code(~/.claude.json)、Claude Desktop、 Cursor(~/.cursor/mcp.json)、Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed 和 Gemini CLI。远程 MCP 服务器 按其 URL 里的主机名匹配,未配置的服务器则按可识别的包名匹配,例如 @@ -165,11 +165,11 @@

代理配置:Flowlight 在你的 Mac 上读取什

值得一看

-

报告里的第三种模式,与明细和图表并列。它把报告中的各个应用互相比较, +

历史里的第三种模式,与明细和图表并列。它把历史中的各个应用互相比较, 指出那些目标看起来和其他应用不太一样的:去的地方比同类多得多、从未解析出名称的地址、看起来是生成而不是人取的主机名、发出的远多于接收的, - 以及那些属于副业而非该应用本职的协议。每条发现都带着背后的证据,点一下就把报告收窄到那个 + 以及那些属于副业而非该应用本职的协议。每条发现都带着背后的证据,点一下就把历史收窄到那个 应用。

-

它被叫作值得一看而不是可疑,这是有意的。数据能支持的说法是“和这份报告里的其他 +

它被叫作值得一看而不是可疑,这是有意的。数据能支持的说法是“和这份历史里的其他 应用相比不寻常”——备份工具去很多地方是有正当理由的,而一台安静的 Mac 根本不会产出任何发现。 对每个应用都有的那类流量,它什么也不说。

@@ -178,7 +178,7 @@

字节是从哪条出口离开的

设备——不经路由器、不经互联网,也没有别人能访问的地址。这些流 Flowlight 一直都在统计;只是没有一个词来称呼它们, 于是一次 4 GB 文件夹的 AirDrop,看上去就像是发往一个没有名字的地址的几兆字节。

现在每条流都带着一条出口:网络、点对点 Wi-Fi、本机(回环, - 从未离开这台机器)或隧道(在 VPN 内部;它之后去了哪里在这里看不到)。在报告工具栏里可以把报告限定到 + 从未离开这台机器)或隧道(在 VPN 内部;它之后去了哪里在这里看不到)。在历史工具栏里可以把历史限定到 其中之一,这个标记也会随 CSV 导出、以及发送给收集器的数据一起带走。

点对点的行以打开它们的功能命名——AirDrop and Handoff · nearby device、 Continuity · nearby device——因为链路本地地址什么都说明不了,而房间里那台设备没有这台 Mac 能学到的 @@ -200,7 +200,7 @@

其他警报

默认忽略 Apple 自带应用。macOS 会不断与 Apple 通信——软件更新、iCloud、 推送、时间、地图瓦片——用的主机和端口在第一次出现时都是新的,把这些全列出来只会把唯一值得读的 那一行埋掉。想要它们的话,在设置 › 警报里关掉这一项。无论如何,这些流量仍然被 - 记录,仍然出现在实时、报告和提问里,也仍然受每一条规则、护栏和允许列表约束:这项设置 + 记录,仍然出现在实时、历史和提问里,也仍然受每一条规则、护栏和允许列表约束:这项设置 决定列出什么,绝不决定允许什么。

提问

@@ -227,10 +227,10 @@

提问

形状要紧时就上图。随时间的变化以折线呈现,比较以柱状呈现,整体的 拆分以饼图呈现。Flowlight 用查询返回的同一批数据来绘制,所以图和文字不可能互相矛盾, 模型也可以要求换一种形状,或者干脆不要图。

-

每一条查询都列在答案下方,点一下会在“报告”里打开流量依据,设备和配置答案则打开相关界面。 +

每一条查询都列在答案下方,点一下会在“历史”里打开流量依据,设备和配置答案则打开相关界面。 无法核对的答案,只是语法更好的猜测。

Flowlight 对自己也用同一把尺子。这个功能发出的任何流量都会像别的应用的流量一样 - 出现在实时和报告里——包括模型服务器就在这台 Mac 上的情况,而那恰恰是最容易被悄悄 + 出现在实时和历史里——包括模型服务器就在这台 Mac 上的情况,而那恰恰是最容易被悄悄 省掉的一种。

HTTPS 检查(可选)

@@ -282,7 +282,7 @@

HTTPS 检查(可选)

于是 Flowlight 从一个正在运行的代理往上走,跨过那些 shell,找到真正在启动它们的东西。如果那是一个终端,重新启动就在那个终端里打开,而不是在 Terminal.app 里。如果是别的什么,提供的选择就变成重新启动那个进程,并且设置好代理服务器环境,这样它之后生成的代理就会继承下来——重新启动时用的是它原本运行的那条命令,因为带子命令调用的程序,和只有名字的程序并不是同一个。

重新启动它会结束它当前运行的每一个会话。这一点在你同意之前就说清楚,而不是事后才发现,而且它无法避免:这件事的全部意义,正在于接替它的东西会以不同的环境启动。它做不到的是触及已经在运行的代理——它们的代理服务器设置在启动时就读完了,现在什么也改不了。

-

从一行直接过来。在实时、报告或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: +

从一行直接过来。在实时、历史或 AI 代理里右键点击一个应用或一个目的地,选择检查 … 的流量: 检查会打开,并且只显示那个应用,或者只显示那个目的地,还会带上一个说明这一点的标签,点一下就能去掉。它限定的是范围, 而不是做搜索——早先的版本会把那个名字填进搜索框,而搜索框连响应正文也一起搜,于是你只是想看某一个代理的流量,结果每一个 HTML 里恰好提到过它的页面都被返回了。只有经过代理服务器的流量才可能出现,所以一行你知道很忙的记录,在这里仍可能什么都不显示。

@@ -309,13 +309,13 @@

模拟响应

规则

允许列表是某一个代理关于它可以去哪里的说法。规则是它的通用版本:它指明一个 对象——应用、代理、目标、URL,或其中两者的组合——并决定阻止 - 还是允许。在实时、报告、AI 代理或检查里右键任意一行,就能针对你正看着的东西写一条; + 还是允许。在实时、历史、AI 代理或检查里右键任意一行,就能针对你正看着的东西写一条; 它们全都落在规则界面上的同一个编辑器里,因为一条在看不见的地方生效的规则, 会是一条你再也找不到的规则。

模板。共 22 个,分为五组——阻止代理访问软件包仓库或其他 模型提供方;封住数据外流的常见途径(粘贴站点、webhook 接收器、匿名文件投放、隧道、DNS over HTTPS);产品分析与崩溃上报;工作时段策略;以及一次性的“先把这个拦一小时,我弄清它 - 是什么”。可以从规则工具栏浏览它们,也可以在实时、报告、AI 代理或检查的任意一行上右键, + 是什么”。可以从规则工具栏浏览它们,也可以在实时、历史、AI 代理或检查的任意一行上右键, 把某个模板应用到你正看着的东西上。

每个模板在动手之前都会说明它要做什么。凡是会写入多条规则的,都会打开一张卡片,列出每个 主机和时段;凡是永久生效的,都会打开预填好的编辑器;而只有会自行撤销的规则——一 @@ -466,10 +466,10 @@

设备:蓝牙、USB 与外置存储

事件。这里同样没有吞吐量,原因和蓝牙那边一样。

聚焦模式

-

挑几个应用和目标,所有界面就只显示它们——实时、报告、警报、AI 代理和检查,以及菜单栏里的 +

挑几个应用和目标,所有界面就只显示它们——实时、历史、警报、AI 代理和检查,以及菜单栏里的 速率。它适合在不受这台 Mac 其余部分干扰的情况下,看一个代理干活。

    -
  • 在实时、报告或 AI 代理里右键任意一行并选择聚焦于…,或者用边栏底部的聚焦控件, +
  • 在实时、历史或 AI 代理里右键任意一行并选择聚焦于…,或者用边栏底部的聚焦控件, 从活动过的应用里挑选,并手动输入目标。
  • ⇧⌘F 可以开关聚焦,菜单栏也可以,它还会显示当前聚焦的内容。
  • 目标会连带它的子域名:example.com 覆盖 api.example.com。IP 地址可以用; @@ -509,7 +509,7 @@

    导出到 OpenTelemetry 或 SIEM

  • 绝不包含来自 HTTPS 检查的任何内容。没有标头、没有正文、没有工具调用——导出只能携带 汇总数据和警报,所以它们连误发的去处都没有。
  • 认证标头保存在你的登录钥匙串里,而不是偏好设置里。显示出来的永远只有它们的名称。
  • -
  • Flowlight 发出的内容会出现在 Flowlight 里,在实时和报告中,和别的应用的流量一样——包括 +
  • Flowlight 发出的内容会出现在 Flowlight 里,在实时和历史中,和别的应用的流量一样——包括 位于 127.0.0.1 的收集器。

有两件事要预料到:汇总数据大约滞后两分钟才折叠,所以把间隔设成小于一分钟只会更频繁地轮询,而数据 diff --git a/site/pages/zh-Hans/index.html b/site/pages/zh-Hans/index.html index 3a506a18..2e1aa978 100644 --- a/site/pages/zh-Hans/index.html +++ b/site/pages/zh-Hans/index.html @@ -80,15 +80,15 @@

几秒钟就能回答的问题

AI 代理

你在开会,代理还在跑

除了模型提供方,它和它的工具碰过的每一台主机都在列;一旦它离开允许列表、发送邮件,或向新地方上传 100 MB,你就会收到警报。

-
报告

上传量突然飙升,你却不知道为什么

-

把指针停在峰值上,就看到背后的应用;点一下从小时下钻到分钟,再顺着它找到具体的域名和 IP。

+
历史

上传量突然飙升,你却不知道为什么

+

把指针停在峰值上,用可滚动卡片查看贡献流量的应用;再用范围按钮或导航器从小时移到分钟,顺着它找到具体的域名和 IP。

警报

某个新应用开始往外联络

首次连接新域名、连接到非标准端口、流量突增,都会各自触发一条警报,点明是哪个应用,以及触发它的那个数字。

实时

此刻有东西正把带宽吃满

每秒更新的流量最高应用排行,带上每个应用最忙的目标,菜单栏里还有实时速率。

-
报告

这个月的热点流量莫名其妙就没了

+
历史

这个月的热点流量莫名其妙就没了

切到月视图并按应用分组。用得最多的那个就在第一行;需要凭据时还能导出 CSV。

-
报告 · 目标

你需要审计数据流向

+
历史 · 目标

你需要审计数据流向

按目标分组,看每个与某域名通信的应用;按 IP 分组,看某个地址背后究竟是什么。

@@ -106,7 +106,7 @@

实时

现在什么在动?按应用的速率、最近两分钟、

AI 代理

我的代理除了调用模型还在做什么?提供方、其他主机、风险标记。

⌘2
-

报告

流量究竟去了哪?从秒到年,按应用、目标或 IP 分组,配图表与 CSV。

⌘3
+

历史

流量究竟去了哪?从秒到年,按应用、目标或 IP 分组,配图表与 CSV。

⌘3

警报

哪里不对?逐应用、讲得清道理的警报,带上目标和阈值。

⌘4
@@ -118,7 +118,7 @@

设备

蓝牙、USB 和摄像头:配对了什么、接入或启用

检查

可选。代理究竟发出了什么,是哪次工具调用引起的?解密后的请求、工具调用和结果。

⌘7
-

可视化

谁在通信?用可缩放的 Sankey 图展示应用流量和已证实的 AI 代理路径,并提供内容完全一致的列表。

+

连接

谁在通信?用可缩放的 Sankey 图展示应用流量和已证实的 AI 代理路径,并提供内容完全一致的列表。

@@ -399,8 +399,8 @@

一个不用你盯着的监控工具

报告视图,含每小时接收与发送的柱状图,以及应用、目标和协议的环形图
-
报告。从秒到年的缩放、三种分组方式,几百个应用也读得清的图表。
+ alt="历史视图,含每小时接收与发送的柱状图,以及应用、目标和协议的环形图">
+
历史。从秒到年的缩放、三种分组方式,几百个应用也读得清的图表。
警报视图,列出代理外泄、邮件、FTP、你离开时活动和流量突增等警报
警报。每一条都点明应用、目标和触发它的那个数字。
diff --git a/site/pages/zh-Hant/docs.html b/site/pages/zh-Hant/docs.html index f05ab695..e2d2c8eb 100644 --- a/site/pages/zh-Hant/docs.html +++ b/site/pages/zh-Hant/docs.html @@ -95,8 +95,8 @@

各個畫面

- - + + @@ -109,11 +109,11 @@

各個畫面

即時畫面:一列 App,各自帶著目前的傳送與接收速率,以及最忙的目標。
即時,Flowlight 開啟時的那個畫面。
-

在「報告」中,把指標移到長條上可以看出是哪些 App 造成的,點一下可以放大,任一列雙按則把報告縮小到那一列。

-

流量視覺化

-

視覺化會顯示目前時間、搜尋與專注範圍內的每個 App、精確目標和已觀察關係。路徑寬度代表位元組數;稀疏的玫紅色與藍色虛線分別朝相反的傳送與接收方向移動。每條邊都有自己穩定且獨特的速度,而「減少動態效果」會保留同樣準確的靜態路徑。

-

預設情況下,「流量」會依完整的接收加傳送位元組數顯示最繁忙的 10 個 App,「AI 活動」則顯示最繁忙的 10 個已證實代理根。兩個可選且可搜尋的來源與目標選擇器支援任意對任意、一對任意、任意對一與一對一調查。選擇一端後,另一端的選擇器只保留具有已觀察或已阻擋證據的端點;「任意」始終可用,「重設」會還原兩個選擇器。聚焦地圖會包含所有相連的啟動器、代理、工具或 MCP 服務、閘道、Flowlight 代理階段、目標,以及已觀察或已阻擋關係。只有異常龐大的聚焦範圍才會逐步群組,每個群組都保留所有精確成員 ID。列表與「報告」始終完整,數值也完全一致。

-

選取節點或連線即可查看精確數值,接著帶著同一 App 與目標前往「報告」、「檢查」或未儲存的規則。列表為鍵盤與 VoiceOver 提供同一張完整圖。連線代表網路流,不是 HTTP 請求數;已觀察並不是允許決定。

+

在「歷史」中,把指標移到長條上,就會開啟一張跟隨指標、可捲動的卡片,列出貢獻流量的 App;點選長條不會放大。任一列雙按可把歷史縮小到那一列。

+

連線

+

連線會顯示目前時間、搜尋與專注範圍內的每個 App、精確目標和已觀察關係。路徑寬度代表位元組數;稀疏的玫紅色與藍色虛線分別朝相反的傳送與接收方向移動。每條邊都有自己穩定且獨特的速度,而「減少動態效果」會保留同樣準確的靜態路徑。

+

預設情況下,「流量」會依完整的接收加傳送位元組數顯示最繁忙的 10 個 App,「AI 活動」則顯示最繁忙的 10 個已證實代理根。兩個可選且可搜尋的來源與目標選擇器支援任意對任意、一對任意、任意對一與一對一調查。選擇一端後,另一端的選擇器只保留具有已觀察或已阻擋證據的端點;「任意」始終可用,「重設」會還原兩個選擇器。聚焦地圖會包含所有相連的啟動器、代理、工具或 MCP 服務、閘道、Flowlight 代理階段、目標,以及已觀察或已阻擋關係。只有異常龐大的聚焦範圍才會逐步群組,每個群組都保留所有精確成員 ID。列表與「歷史」始終完整,數值也完全一致。

+

選取節點或連線即可查看精確數值,接著帶著同一 App 與目標前往「歷史」、「檢查」或未儲存的規則。列表為鍵盤與 VoiceOver 提供同一張完整圖。連線代表網路流,不是 HTTP 請求數;已觀察並不是允許決定。

AI 代理規則

只要 Flowlight 認得一個 App 的名字(目前有 16 個,包含 Claude Code、Codex、Cursor、GitHub Copilot、 @@ -131,7 +131,7 @@

工具與 MCP 伺服器

代理有很多工作是透過其他程序完成的:shell 工具會跑 curl、git 或 npm,而 MCP 伺服器也是獨立的程序在跑。Flowlight 會沿著每個程序的上層一路追回啟動它的代理,所以那些流量會 算成該代理的。在「AI 代理」中,代理的詳細資料會把這些列在「工具與 MCP 伺服器」下, - 目標則會顯示透過 curl 或 透過 github MCP。在「報告」中,程序那一列會顯示透過 Claude Code。

+ 目標則會顯示透過 curl 或 透過 github MCP。在「歷史」中,程序那一列會顯示透過 Claude Code。

MCP 伺服器的名稱,是把它的命令列與 Claude Code(~/.claude.json)、Claude Desktop、 Cursor(~/.cursor/mcp.json)、Windsurf、VS Code、Codex(~/.codex/config.toml)、Zed 和 Gemini CLI 的 MCP 設定比對而來。遠端 MCP 伺服器以其 URL 中的主機名稱比對,沒有設定的伺服器則靠可辨識的套件名稱,例如 @@ -169,11 +169,11 @@

代理設定:Flowlight 在你的 Mac 上讀取什

值得一看

-

這是「報告」裡的第三種模式,和分項明細與圖表並列。它會把報告中的 App 互相比較, +

這是「歷史」裡的第三種模式,和分項明細與圖表並列。它會把歷史中的 App 互相比較, 指出哪些 App 的目標看起來和其他人不一樣:連的地方比同類多很多、位址從來沒有解析出名稱、主機名稱看起來像 自動產生而不是有人取的、傳出遠多於接收,以及協定只是附帶而非該 App 的本業。每一項發現都附上背後的 - 證據,點一下就把報告縮小到那個 App。

-

它刻意叫做「值得一看」而不是「可疑」。資料能支持的說法只是「和這份報告裡的其他 + 證據,點一下就把歷史縮小到那個 App。

+

它刻意叫做「值得一看」而不是「可疑」。資料能支持的說法只是「和這份歷史裡的其他 App 相比並不尋常」 — 備份工具連很多地方有它的道理,而一台安靜的 Mac 根本不會產生任何發現。 對每個 App 都有的那些流量,它不會多說什麼。

@@ -183,7 +183,7 @@

位元組從哪裡離開

一直都算進去了,只是沒有名字稱呼它們,所以用 AirDrop 傳一個 4 GB 的檔案夾,看起來只像是幾 MB 傳到 一個沒有名稱的位址。

現在每一筆流量都帶著一個出口:「網路」、「點對點 Wi-Fi」、「這台 Mac」(回路, - 從未離開這台機器)或「通道」(在 VPN 內部;之後去了哪裡在這裡看不到)。你可以從「報告」工具列把報告限定到 + 從未離開這台機器)或「通道」(在 VPN 內部;之後去了哪裡在這裡看不到)。你可以從「歷史」工具列把歷史限定到 其中一種,這項資訊也會隨 CSV 匯出,以及傳送給收集器的資料一起帶走。

點對點的列是以開啟它的功能命名 — AirDrop and Handoff · nearby device、 Continuity · nearby device — 因為連結本地位址什麼也說明不了,而同一空間裡的那台裝置沒有這台 Mac @@ -205,7 +205,7 @@

其他警示

預設會把 Apple 內建 App 排除在外。macOS 會不斷與 Apple 通訊 — 軟體更新、iCloud、 推播、時間、地圖圖磚 — 這些主機和連接埠第一次出現時都算是新的,把它們全部列出來,會把唯一 值得讀的那一行埋掉。想看的話,可以在「設定」› 「警示」中關掉這個選項。無論哪一種,這些流量仍然 - 會被記錄,仍然出現在「即時」、「報告」和「提問」中,也仍然受到每一條規則、防護機制和允許清單的約束:這個設定 + 會被記錄,仍然出現在「即時」、「歷史」和「提問」中,也仍然受到每一條規則、防護機制和允許清單的約束:這個設定 只決定列出什麼,永遠不決定允許什麼。

提問

@@ -232,10 +232,10 @@

提問

形狀重要的時候就畫圖。隨時間的變化會回傳成折線,比較是長條,整體的 切分是圓餅。Flowlight 用查詢回傳的同一批資料列來畫,所以圖和文字不可能互相矛盾, 而模型也可以要求換一種形狀,或完全不要圖。

-

每一條查詢都列在答案下方,點一下會在「報告」中開啟流量依據,裝置和設定答案則開啟相關畫面。 +

每一條查詢都列在答案下方,點一下會在「歷史」中開啟流量依據,裝置和設定答案則開啟相關畫面。 無法查證的答案,只是文法比較好的猜測。

Flowlight 用同一套標準檢視自己。這項功能送出的任何內容,都會像其他 App 的流量一樣 - 出現在「即時」和「報告」中 — 包含模型伺服器就在這台 Mac 上的情況,而那正是最容易被默默 + 出現在「即時」和「歷史」中 — 包含模型伺服器就在這台 Mac 上的情況,而那正是最容易被默默 省略掉的一種。

HTTPS 檢查(選用)

@@ -287,7 +287,7 @@

HTTPS 檢查(選用)

於是 Flowlight 從一個正在執行的代理往上走,跨過那些 shell,找出真正在啟動它們的東西。如果那是一個終端機,重新啟動就在那個終端機裡開啟,而不是在 Terminal.app 裡。如果是別的什麼,提供的選擇就變成重新啟動那個程序,並且設好代理伺服器環境,這樣它之後產生的代理就會繼承下來 — 重新啟動時用的是它原本執行的那條指令,因為帶子指令呼叫的程式,和只有名字的程式並不是同一個。

重新啟動它會結束它目前正在執行的每一個工作階段。這一點在你同意之前就說清楚,而不是事後才發現,而且無法避免:這件事的全部意義,正在於接替它的東西會以不同的環境啟動。它做不到的是觸及已經在執行的代理 — 它們的代理伺服器設定在啟動時就讀完了,現在什麼也改不了。

-

從一列直接過來。在即時、報告或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: +

從一列直接過來。在即時、歷史或 AI 代理裡按右鍵點一個 App 或一個目的地,選「檢查 … 的流量」: 檢查會開啟,而且只顯示那個 App,或只顯示那個目的地,還會帶上一個說明這一點的標籤,點一下就能移除。它限定的是範圍, 而不是做搜尋 — 早先的版本會把那個名稱填進搜尋欄,而搜尋欄連回應的內文也一起搜,於是你只是想看某一個代理的流量,結果每一個 HTML 裡剛好提到過它的頁面都被找了回來。只有經過代理伺服器的流量才可能出現,所以一列你知道很忙的記錄,在這裡仍可能什麼都看不到。

@@ -314,13 +314,13 @@

模擬回應

規則

允許清單講的是某一個代理可以去哪裡。規則是它的通用版本:它會指名一個 對象 — 一個 App、一個代理、一個目標、一個 URL,或其中兩者的組合 — 然後說封鎖 - 或允許。在「即時」、「報告」、「AI 代理」或「檢查」的任一列上按右鍵,就能針對你正在看的東西寫一條; + 或允許。在「即時」、「歷史」、「AI 代理」或「檢查」的任一列上按右鍵,就能針對你正在看的東西寫一條; 每一條都會進到「規則」畫面的同一個編輯器,因為在你看不到的地方生效的規則, 會是一條你再也找不到的規則。

範本。共二十二個,分成五組 — 阻止代理連到套件登錄或其他 模型供應商、關上資料外流的常見途徑(貼文網站、webhook 接收器、匿名檔案上傳、通道、DNS over HTTPS)、產品分析與當掉回報、工作時段政策,以及一次性的「先封鎖一小時,讓我弄清楚 - 這是什麼」。你可以從「規則」工具列瀏覽它們,或在「即時」、「報告」、「AI 代理」或「檢查」的任一列上按右鍵, + 這是什麼」。你可以從「規則」工具列瀏覽它們,或在「即時」、「歷史」、「AI 代理」或「檢查」的任一列上按右鍵, 把範本套用到你正在看的東西上。

每個範本都會在動手之前先說明它要做什麼。會寫入多條規則的,會開一張卡片列出每一台 主機和時程;任何永久性的,會開啟已預先填好的編輯器;而只有會自己失效的規則 — @@ -470,10 +470,10 @@

裝置:藍牙、USB 與外接儲存裝置

事件。這裡同樣沒有傳輸量,理由和藍牙那邊一樣。

焦點模式

-

選幾個 App 和目標,每個畫面就只顯示那些 — 「即時」、「報告」、「警示」、「AI 代理」和「檢查」,還有選單列上的 +

選幾個 App 和目標,每個畫面就只顯示那些 — 「即時」、「歷史」、「警示」、「AI 代理」和「檢查」,還有選單列上的 速率。它適合在不受這台 Mac 其他部分干擾的情況下,專心看一個代理工作。

    -
  • 在「即時」、「報告」或「AI 代理」的任一列上按右鍵,選擇「以此為焦點…」,或用側邊欄底部的 +
  • 在「即時」、「歷史」或「AI 代理」的任一列上按右鍵,選擇「以此為焦點…」,或用側邊欄底部的 「焦點」控制項,從活動過的 App 中挑選,並輸入目標。
  • ⇧⌘F 可以開關「焦點」,選單列也可以,而且會顯示目前聚焦在什麼上。
  • 一個目標會連帶包含它的子網域:example.com 涵蓋 api.example.com。IP 位址可以用; @@ -514,7 +514,7 @@

    匯出到 OpenTelemetry 或 SIEM

  • 絕不包含 HTTPS 檢查的任何內容。沒有標頭、沒有內文、沒有工具呼叫 — 匯出只能承載 彙總資料和警示,所以就算出錯,它們也無處可去。
  • 驗證標頭存放在你的登入鑰匙串,而不是偏好設定中。畫面上只會顯示它們的名稱。
  • -
  • Flowlight 送出的東西會出現在 Flowlight 裡,在「即時」和「報告」中,和其他 App 的流量一樣 — 包含 +
  • Flowlight 送出的東西會出現在 Flowlight 裡,在「即時」和「歷史」中,和其他 App 的流量一樣 — 包含 位於 127.0.0.1 的收集器。

有兩點要有心理準備:彙總資料大約落後兩分鐘才折算完成,所以間隔設得比一分鐘還短,只是查詢得 diff --git a/site/pages/zh-Hant/index.html b/site/pages/zh-Hant/index.html index c5307880..2212e616 100644 --- a/site/pages/zh-Hant/index.html +++ b/site/pages/zh-Hant/index.html @@ -80,15 +80,15 @@

幾秒內就能回答的問題

AI 代理

你在開會,代理還在跑

看見它和它的工具在模型供應商之外連過的每一台主機;一旦它離開允許清單、寄出郵件,或往新的地方上傳 100 MB,就會收到警示。

-
報告

上傳量突然暴增,你不知道為什麼

-

把指標移到尖峰上就看到背後的 App,點一下從小時放大到分鐘,再一路追到確切的網域和 IP。

+
歷史

上傳量突然暴增,你不知道為什麼

+

把指標移到尖峰上,用可捲動卡片查看貢獻流量的 App;再用範圍按鈕或導覽器從小時移到分鐘,一路追到確切的網域和 IP。

警示

有個新 App 開始往外回報

首次連線新網域、連到非標準連接埠,或流量出現尖峰,都會發出警示,並指出是哪個 App、以及是哪個數字觸發的。

即時

現在有東西把你的連線塞滿了

每秒更新的流量排行,附上每個 App 最忙的目標,選單列上還有即時速率。

-
報告

這個月的熱點流量莫名用光了

+
歷史

這個月的熱點流量莫名用光了

切到月檢視,並依 App 分組。用最多的就在第一列;需要憑據的話,還能匯出 CSV。

-
報告 · 目標

你需要稽核資料去了哪裡

+
歷史 · 目標

你需要稽核資料去了哪裡

依目標分組,看有哪些 App 連到某個網域;依 IP 分組,看某個位址背後是什麼。

@@ -106,7 +106,7 @@

即時

現在有什麼在傳?各 App 的速率、最近兩分鐘,

AI 代理

我的代理除了呼叫模型,還在做什麼?供應商、其他主機、風險標記。

⌘2
-

報告

流量都到哪去了?從秒到年,依 App、目標或 IP 分組,附圖表與 CSV。

⌘3
+

歷史

流量都到哪去了?從秒到年,依 App、目標或 IP 分組,附圖表與 CSV。

⌘3

警示

哪裡看起來不對?每個 App 都有說得清楚的警示,附上目標和閾值。

⌘4
@@ -118,7 +118,7 @@

裝置

藍牙、USB 和攝影機:配對了什麼、接上或啟用

檢查

選用功能。代理實際送出了什麼,又是哪一次工具呼叫造成的?解密後的請求、工具呼叫、結果。

⌘7
-

視覺化

誰在通訊?用可縮放的 Sankey 圖顯示 App 流量和已證實的 AI 代理路徑,並提供內容完全一致的列表。

+

連線

誰在通訊?用可縮放的 Sankey 圖顯示 App 流量和已證實的 AI 代理路徑,並提供內容完全一致的列表。

@@ -400,8 +400,8 @@

一個不用你盯著的監控工具

「報告」畫面:每小時接收與傳送的長條圖,以及 App、目標和協定的環圈圖
-
報告。 從秒到年的縮放、三種分組方式,即使有上百個 App,圖表依然看得清楚。
+ alt="「歷史」畫面:每小時接收與傳送的長條圖,以及 App、目標和協定的環圈圖">
+
歷史。 從秒到年的縮放、三種分組方式,即使有上百個 App,圖表依然看得清楚。
「警示」畫面:列出代理資料外洩、郵件、FTP、離開期間活動和流量尖峰等警示
警示。 每一則都指出 App、目標,以及觸發它的那個數字。
Reports view with hourly traffic bars and donut charts for apps, destinations and protocolsHistory view with hourly traffic bars and donut charts for apps, destinations and protocols Alerts view listing agent exfiltration, SMTP, FTP and traffic spike alerts
Reports: every granularity, every groupingHistory: every range, every grouping Alerts: explainable, per app
AnsichtKurzbefehlWas sie beantwortet
Live⌘1Was sich gerade bewegt: Raten pro App über die letzten Sekunden und das meistgenutzte Ziel.
KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben.
Berichte⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export.
Visualisieren—Eine stabile Karte der Apps und ihrer genauen Ziele mit gewichteten Pfaden, bewegten Richtungsmarkern, Verbindungszahlen und einer gleichwertigen Liste.
Verlauf⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export.
Verbindungen—Eine stabile Karte der Apps und ihrer genauen Ziele mit gewichteten Pfaden, bewegten Richtungsmarkern, Verbindungszahlen und einer gleichwertigen Liste.
Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat.
Regeln⌘5Jede Erlaubnisliste und jede Verweigerung, die du gesetzt hast, was jede davon abdeckt und was sie tatsächlich gestoppt hat.
Fragen⌘6Fragen zu deinem eigenen Datenverkehr in normaler Sprache, beantwortet aus der aufgezeichneten Historie von einem lokalen oder einem gehosteten Modell.
ViewShortcutWhat it answers
Live⌘1What's moving right now: per-app rates over the last few seconds and the busiest destination.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
Reports⌘3Where traffic went, from second to year. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Visualize—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list.
History⌘3Where traffic went, from a 15-minute preset through all retained history. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Connections—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Rules⌘5Every allowlist and refusal you have set, what each one covers, and what it has actually stopped.
Ask⌘6Questions about your own traffic in plain language, answered from the recorded history by a local or a hosted model.
VistaAtajoQué responde
En vivo⌘1Qué se mueve ahora mismo: tasas por app en los últimos segundos y el destino más activo.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Informes⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Visualizar—Un mapa estable de apps y sus destinos exactos, con rutas ponderadas, marcadores de dirección en movimiento, recuentos de conexiones y una lista equivalente.
Historial⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Conexiones—Un mapa estable de apps y sus destinos exactos, con rutas ponderadas, marcadores de dirección en movimiento, recuentos de conexiones y una lista equivalente.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Reglas⌘5Cada lista de permitidos y cada rechazo que hayas puesto, qué abarca cada uno y qué ha detenido realmente.
Preguntar⌘6Preguntas sobre tu propio tráfico en lenguaje corriente, respondidas a partir del historial registrado por un modelo local o alojado.
VueRaccourciLa question à laquelle elle répond
En direct⌘1Ce qui circule en ce moment : les débits par app sur les dernières secondes et la destination la plus active.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Rapports⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Visualiser—Une carte stable des apps et de leurs destinations exactes, avec des chemins pondérés, des marqueurs de direction animés, le nombre de connexions et une liste équivalente.
Historique⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Connexions—Une carte stable des apps et de leurs destinations exactes, avec des chemins pondérés, des marqueurs de direction animés, le nombre de connexions et une liste équivalente.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Règles⌘5Chaque liste d’autorisation et chaque refus que vous avez posés, ce que chacun couvre, et ce qu’il a réellement arrêté.
Demander⌘6Des questions sur votre propre trafic en langage courant, auxquelles un modèle local ou hébergé répond à partir de l’historique enregistré.
VistaScorciatoiaA cosa risponde
In diretta⌘1Cosa si muove adesso: velocità per app negli ultimi secondi e la destinazione più trafficata.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Rapporti⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Visualizza—Una mappa stabile delle app e delle destinazioni esatte, con percorsi ponderati, indicatori di direzione in movimento, conteggi delle connessioni e un elenco equivalente.
Cronologia⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Connessioni—Una mappa stabile delle app e delle destinazioni esatte, con percorsi ponderati, indicatori di direzione in movimento, conteggi delle connessioni e un elenco equivalente.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Regole⌘5Ogni elenco consentiti e ogni rifiuto che hai impostato, cosa copre ciascuno e cosa ha fermato davvero.
Chiedi⌘6Domande sul tuo traffico in linguaggio naturale, a cui un modello locale o ospitato risponde a partire dalla cronologia registrata.
ビューショートカット答えてくれること
ライブ⌘1いま何が動いているか。直近数秒間のアプリごとの速度と、最も忙しい接続先。
AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。
レポート⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。
可視化—アプリと正確な接続先を、重み付き経路、動く方向マーカー、接続数、同等のリストで示す安定したマップ。
履歴⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。
接続—アプリと正確な接続先を、重み付き経路、動く方向マーカー、接続数、同等のリストで示す安定したマップ。
アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。
ルール⌘5設定したすべての許可リストと拒否。それぞれが何を対象にし、実際に何を止めたか。
質問⌘6自分のトラフィックについての、ふつうの言葉での質問。記録された履歴から、ローカルまたはホスト型のモデルが答えます。
뷰단축키답해 주는 질문
실시간⌘1지금 무엇이 움직이나. 지난 몇 초 동안의 앱별 속도와 가장 바쁜 목적지.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
보고서⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
시각화—앱과 정확한 목적지를 가중 경로, 움직이는 방향 표시, 연결 수, 동등한 목록으로 보여 주는 안정적인 지도입니다.
기록⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
연결—앱과 정확한 목적지를 가중 경로, 움직이는 방향 표시, 연결 수, 동등한 목록으로 보여 주는 안정적인 지도입니다.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
규칙⌘5설정해 둔 모든 허용 목록과 거부, 각각이 무엇을 포괄하는지, 그리고 실제로 무엇을 막았는지.
질문⌘6내 트래픽에 대한 평범한 말로 된 질문. 기록된 이력에서 로컬 모델이나 호스팅 모델이 답합니다.
VistaAtalhoA que responde
Em direto⌘1O que se move neste momento: taxas por app nos últimos segundos e o destino mais ativo.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Relatórios⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Visualizar—Um mapa estável das aplicações e dos destinos exatos, com caminhos ponderados, marcadores de direção em movimento, contagens de ligações e uma lista equivalente.
Histórico⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Ligações—Um mapa estável das aplicações e dos destinos exatos, com caminhos ponderados, marcadores de direção em movimento, contagens de ligações e uma lista equivalente.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Regras⌘5Todas as listas de permissões e recusas que definiu, o que cada uma abrange e o que de facto travou.
Perguntar⌘6Perguntas sobre o seu próprio tráfego em linguagem simples, respondidas a partir do histórico registado por um modelo local ou alojado.
视图快捷键它回答什么
实时⌘1现在什么在动:最近几秒按应用的速率,以及最忙的目标。
AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。
报告⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。
可视化—应用与其精确目标的稳定地图,带有按流量加权的路径、移动的方向标记、连接数以及等价列表。
历史⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。
连接—应用与其精确目标的稳定地图,带有按流量加权的路径、移动的方向标记、连接数以及等价列表。
警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。
规则⌘5你设过的每一条允许列表和拒绝,各自管到哪里,以及实际拦下了什么。
提问⌘6用平常的话问你自己的流量,由本地模型或托管模型从记录下来的历史里作答。
畫面快速鍵它回答什麼
即時⌘1現在有什麼在傳:最近幾秒各 App 的速率,以及最忙的目標。
AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。
報告⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。
視覺化—應用程式與精確目的地的穩定地圖,包含加權路徑、移動方向標記、連線數與等價列表。
歷史⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。
連線—應用程式與精確目的地的穩定地圖,包含加權路徑、移動方向標記、連線數與等價列表。
警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。
規則⌘5你設過的每一條允許清單和拒絕,各自管到哪裡,以及實際攔下了什麼。
提問⌘6用平常的話問你自己的流量,由本機模型或託管模型從記錄下來的歷史裡作答。
AnsichtKurzbefehlWas sie beantwortet
Live⌘1Was sich gerade bewegt: Raten pro App über die letzten Sekunden und das meistgenutzte Ziel.
KI-Agenten⌘2Welche Agenten aktiv sind, welche KI-Anbieter sie nutzen und mit wem sie sonst gesprochen haben.
Berichte⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export.
Visualisieren—Eine stabile Karte der Apps und ihrer genauen Ziele mit gewichteten Pfaden, bewegten Richtungsmarkern, Verbindungszahlen und einer gleichwertigen Liste.
Verlauf⌘3Wohin der Datenverkehr ging, von der Sekunde bis zum Jahr. Gruppiert nach App, Ziel oder IP; umschaltbar auf Diagramme oder Genauer hinsehen; CSV-Export.
Verbindungen—Eine stabile Karte der Apps und ihrer genauen Ziele mit gewichteten Pfaden, bewegten Richtungsmarkern, Verbindungszahlen und einer gleichwertigen Liste.
Warnungen⌘4Alles, was ungewöhnlich aussah, mit App, Ziel und dem Wert, der die Regel ausgelöst hat.
Regeln⌘5Jede Erlaubnisliste und jede Verweigerung, die du gesetzt hast, was jede davon abdeckt und was sie tatsächlich gestoppt hat.
Fragen⌘6Fragen zu deinem eigenen Datenverkehr in normaler Sprache, beantwortet aus der aufgezeichneten Historie von einem lokalen oder einem gehosteten Modell.
ViewShortcutWhat it answers
Live⌘1What's moving right now: per-app rates over the last few seconds and the busiest destination.
AI Agents⌘2Which agents are active, which AI providers they use, and what else they contacted.
Reports⌘3Where traffic went, from second to year. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Visualize—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list.
History⌘3Where traffic went, from a 15-minute preset through all retained history. Group by App, Destination or IP; switch to Charts or Worth a look; export CSV.
Connections—A stable map of apps and their exact destinations, with weighted paths, moving direction markers, connection counts, and an equivalent list.
Alerts⌘4Everything that looked unusual, with the app, the destination and the number that tripped the rule.
Rules⌘5Every allowlist and refusal you have set, what each one covers, and what it has actually stopped.
Ask⌘6Questions about your own traffic in plain language, answered from the recorded history by a local or a hosted model.
VistaAtajoQué responde
En vivo⌘1Qué se mueve ahora mismo: tasas por app en los últimos segundos y el destino más activo.
Agentes de IA⌘2Qué agentes están activos, qué proveedores de IA usan y con qué más han contactado.
Informes⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Visualizar—Un mapa estable de apps y sus destinos exactos, con rutas ponderadas, marcadores de dirección en movimiento, recuentos de conexiones y una lista equivalente.
Historial⌘3Adónde fue el tráfico, del segundo al año. Agrupa por App, Destino o IP; cambia a Gráficos o a Merece un vistazo; exporta a CSV.
Conexiones—Un mapa estable de apps y sus destinos exactos, con rutas ponderadas, marcadores de dirección en movimiento, recuentos de conexiones y una lista equivalente.
Alertas⌘4Todo lo que ha resultado inusual, con la app, el destino y la cifra que activó la regla.
Reglas⌘5Cada lista de permitidos y cada rechazo que hayas puesto, qué abarca cada uno y qué ha detenido realmente.
Preguntar⌘6Preguntas sobre tu propio tráfico en lenguaje corriente, respondidas a partir del historial registrado por un modelo local o alojado.
VueRaccourciLa question à laquelle elle répond
En direct⌘1Ce qui circule en ce moment : les débits par app sur les dernières secondes et la destination la plus active.
Agents IA⌘2Quels agents sont actifs, quels fournisseurs d’IA ils utilisent, et quoi d’autre ils ont contacté.
Rapports⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Visualiser—Une carte stable des apps et de leurs destinations exactes, avec des chemins pondérés, des marqueurs de direction animés, le nombre de connexions et une liste équivalente.
Historique⌘3Où le trafic est parti, de la seconde à l’année. Groupez par App, Destination ou IP ; passez aux Graphiques ou à À regarder de près ; exportez en CSV.
Connexions—Une carte stable des apps et de leurs destinations exactes, avec des chemins pondérés, des marqueurs de direction animés, le nombre de connexions et une liste équivalente.
Alertes⌘4Tout ce qui a paru inhabituel, avec l’app, la destination et le chiffre qui a déclenché la règle.
Règles⌘5Chaque liste d’autorisation et chaque refus que vous avez posés, ce que chacun couvre, et ce qu’il a réellement arrêté.
Demander⌘6Des questions sur votre propre trafic en langage courant, auxquelles un modèle local ou hébergé répond à partir de l’historique enregistré.
VistaScorciatoiaA cosa risponde
In diretta⌘1Cosa si muove adesso: velocità per app negli ultimi secondi e la destinazione più trafficata.
Agenti IA⌘2Quali agenti sono attivi, quali provider IA usano e cos'altro hanno contattato.
Rapporti⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Visualizza—Una mappa stabile delle app e delle destinazioni esatte, con percorsi ponderati, indicatori di direzione in movimento, conteggi delle connessioni e un elenco equivalente.
Cronologia⌘3Dove è andato il traffico, dal secondo all'anno. Raggruppa per App, Destinazione o IP; passa a Grafici o a Vale un'occhiata; esporta in CSV.
Connessioni—Una mappa stabile delle app e delle destinazioni esatte, con percorsi ponderati, indicatori di direzione in movimento, conteggi delle connessioni e un elenco equivalente.
Avvisi⌘4Tutto ciò che è sembrato insolito, con l'app, la destinazione e il numero che ha fatto scattare la regola.
Regole⌘5Ogni elenco consentiti e ogni rifiuto che hai impostato, cosa copre ciascuno e cosa ha fermato davvero.
Chiedi⌘6Domande sul tuo traffico in linguaggio naturale, a cui un modello locale o ospitato risponde a partire dalla cronologia registrata.
ビューショートカット答えてくれること
ライブ⌘1いま何が動いているか。直近数秒間のアプリごとの速度と、最も忙しい接続先。
AI エージェント⌘2どのエージェントが動いていて、どの AI プロバイダを使い、ほかに何と通信したか。
レポート⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。
可視化—アプリと正確な接続先を、重み付き経路、動く方向マーカー、接続数、同等のリストで示す安定したマップ。
履歴⌘3トラフィックがどこへ行ったか。秒から年まで。アプリ・接続先・IP でグループ化し、グラフや気になるものに切り替え、CSV に書き出せます。
接続—アプリと正確な接続先を、重み付き経路、動く方向マーカー、接続数、同等のリストで示す安定したマップ。
アラート⌘4いつもと違って見えたものすべて。アプリ、接続先、そしてルールのしきい値を超えた数値とともに。
ルール⌘5設定したすべての許可リストと拒否。それぞれが何を対象にし、実際に何を止めたか。
質問⌘6自分のトラフィックについての、ふつうの言葉での質問。記録された履歴から、ローカルまたはホスト型のモデルが答えます。
뷰단축키답해 주는 질문
실시간⌘1지금 무엇이 움직이나. 지난 몇 초 동안의 앱별 속도와 가장 바쁜 목적지.
AI 에이전트⌘2어떤 에이전트가 활동 중이고, 어떤 AI 제공업체를 쓰며, 그 밖에 어디에 접속했나.
보고서⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
시각화—앱과 정확한 목적지를 가중 경로, 움직이는 방향 표시, 연결 수, 동등한 목록으로 보여 주는 안정적인 지도입니다.
기록⌘3트래픽이 어디로 갔나. 초에서 연까지. 앱, 목적지, IP로 묶고, 차트나 눈여겨볼 것으로 바꾸고, CSV로 내보냅니다.
연결—앱과 정확한 목적지를 가중 경로, 움직이는 방향 표시, 연결 수, 동등한 목록으로 보여 주는 안정적인 지도입니다.
알림⌘4이상해 보인 모든 것. 앱과 목적지, 그리고 규칙의 기준을 넘긴 수치와 함께.
규칙⌘5설정해 둔 모든 허용 목록과 거부, 각각이 무엇을 포괄하는지, 그리고 실제로 무엇을 막았는지.
질문⌘6내 트래픽에 대한 평범한 말로 된 질문. 기록된 이력에서 로컬 모델이나 호스팅 모델이 답합니다.
VistaAtalhoA que responde
Em direto⌘1O que se move neste momento: taxas por app nos últimos segundos e o destino mais ativo.
Agentes de IA⌘2Que agentes estão ativos, que fornecedores de IA usam e com que mais contactaram.
Relatórios⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Visualizar—Um mapa estável das aplicações e dos destinos exatos, com caminhos ponderados, marcadores de direção em movimento, contagens de ligações e uma lista equivalente.
Histórico⌘3Para onde foi o tráfego, do segundo ao ano. Agrupe por App, Destino ou IP; mude para Gráficos ou Vale a pena ver; exporte em CSV.
Ligações—Um mapa estável das aplicações e dos destinos exatos, com caminhos ponderados, marcadores de direção em movimento, contagens de ligações e uma lista equivalente.
Alertas⌘4Tudo o que pareceu invulgar, com a app, o destino e o número que disparou a regra.
Regras⌘5Todas as listas de permissões e recusas que definiu, o que cada uma abrange e o que de facto travou.
Perguntar⌘6Perguntas sobre o seu próprio tráfego em linguagem simples, respondidas a partir do histórico registado por um modelo local ou alojado.
视图快捷键它回答什么
实时⌘1现在什么在动:最近几秒按应用的速率,以及最忙的目标。
AI 代理⌘2哪些代理在活动、它们用哪些 AI 提供方,以及它们还联系了什么。
报告⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。
可视化—应用与其精确目标的稳定地图,带有按流量加权的路径、移动的方向标记、连接数以及等价列表。
历史⌘3流量去了哪里,从秒到年。按应用、目标或 IP 分组;切到图表或值得一看;导出 CSV。
连接—应用与其精确目标的稳定地图,带有按流量加权的路径、移动的方向标记、连接数以及等价列表。
警报⌘4所有看起来不寻常的事,带上应用、目标和触发规则的那个数字。
规则⌘5你设过的每一条允许列表和拒绝,各自管到哪里,以及实际拦下了什么。
提问⌘6用平常的话问你自己的流量,由本地模型或托管模型从记录下来的历史里作答。
畫面快速鍵它回答什麼
即時⌘1現在有什麼在傳:最近幾秒各 App 的速率,以及最忙的目標。
AI 代理⌘2哪些代理在活動、它們用哪些 AI 供應商,以及它們還連過什麼。
報告⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。
視覺化—應用程式與精確目的地的穩定地圖,包含加權路徑、移動方向標記、連線數與等價列表。
歷史⌘3流量去了哪裡,從秒到年。依 App、目標或 IP 分組;切換到「圖表」或「值得一看」;匯出 CSV。
連線—應用程式與精確目的地的穩定地圖,包含加權路徑、移動方向標記、連線數與等價列表。
警示⌘4所有看起來不尋常的事,附上 App、目標,以及觸發規則的那個數字。
規則⌘5你設過的每一條允許清單和拒絕,各自管到哪裡,以及實際攔下了什麼。
提問⌘6用平常的話問你自己的流量,由本機模型或託管模型從記錄下來的歷史裡作答。