diff --git a/PHASE28-NOTES.md b/PHASE28-NOTES.md
new file mode 100644
index 0000000..ebe72fe
--- /dev/null
+++ b/PHASE28-NOTES.md
@@ -0,0 +1,9 @@
+# Phase 28 — Front-screen charts
+
+- The application opens on the Dashboard instead of the SQL editor.
+- A Dashboard toolbar button returns to the performance dashboard from anywhere.
+- Six colour-coded Swift Charts panels are embedded above server counters: queries/sec, connected threads, running threads, slow queries/sec, bytes received/sec, and bytes sent/sec.
+- Charts use actual MySQL SHOW GLOBAL STATUS readings and refresh every 5 seconds while the administration screen is open.
+- The first rate value requires two successful samples; no synthetic data is used.
+- Retains the Phase 27 SQL-based schema editor and the existing Trends window for other administration pages.
+- Build and live MySQL verification must be performed on macOS with Xcode.
diff --git a/WorkbenchReplacement/MainView.swift b/WorkbenchReplacement/MainView.swift
index ab82dc4..ad5d9f5 100644
--- a/WorkbenchReplacement/MainView.swift
+++ b/WorkbenchReplacement/MainView.swift
@@ -52,7 +52,7 @@ struct MainView: View {
@State private var outputExpanded = true
@State private var navigatorMode = 1
- @State private var administrationPage: WorkbenchAdminPage? = nil
+ @State private var administrationPage: WorkbenchAdminPage? = .dashboard
var body: some View {
@@ -142,6 +142,11 @@ struct MainView: View {
.fill(WB.border)
.frame(width: 1, height: 30)
+ toolbarButton("Dashboard", icon: "chart.xyaxis.line") {
+ navigatorMode = 0
+ administrationPage = .dashboard
+ }
+
toolbarButton(
"New Connection",
icon: "plus.rectangle.on.rectangle"
@@ -2215,7 +2220,7 @@ struct WorkbenchAdministrationView: View {
@State private var errorMessage: String?
@State private var lastUpdated: Date?
@State private var searchText = ""
- @State private var autoRefresh = false
+ @State private var autoRefresh = true
@State private var selectedAccount: String? = nil
@State private var grants: [String] = []
@State private var grantsError: String? = nil
@@ -2307,7 +2312,7 @@ struct WorkbenchAdministrationView: View {
.padding(.vertical, 8)
}
- if supportsTrends && !diagnosticSamples.isEmpty {
+ if supportsTrends && !diagnosticSamples.isEmpty && page != .dashboard && page != .serverStatus {
HStack(spacing: 12) {
Label("\(diagnosticSamples.count) samples", systemImage: "chart.xyaxis.line")
.foregroundStyle(.secondary)
@@ -2539,7 +2544,11 @@ struct WorkbenchAdministrationView: View {
private var resultContent: some View {
if page == .dashboard || page == .serverStatus {
ScrollView {
- LazyVGrid(
+ VStack(alignment: .leading, spacing: 18) {
+ WorkbenchInlinePerformanceDashboard(samples: diagnosticSamples)
+ Text("Server counters")
+ .font(.headline)
+ LazyVGrid(
columns: [
GridItem(.adaptive(minimum: 180), spacing: 12)
],
@@ -2586,6 +2595,7 @@ struct WorkbenchAdministrationView: View {
}
}
}
+ }
.padding(18)
}
} else {
@@ -4103,6 +4113,90 @@ private struct WorkbenchAccountManagerView: View {
}
+// MARK: - Phase 28: Front-screen performance charts
+
+private struct WorkbenchInlinePerformanceDashboard: View {
+ let samples: [DiagnosticSample]
+
+ private struct Reading: Identifiable {
+ let id: Int
+ let time: Date
+ let value: Double
+ }
+
+ private func counter(_ sample: DiagnosticSample, _ name: String) -> Double? {
+ guard let row = sample.rows.first(where: {
+ $0.count > 1 && $0[0].caseInsensitiveCompare(name) == .orderedSame
+ }) else { return nil }
+ return Double(row[1])
+ }
+
+ private func points(_ name: String, rate: Bool) -> [Reading] {
+ samples.indices.compactMap { i in
+ guard let current = counter(samples[i], name) else { return nil }
+ if !rate { return Reading(id: i, time: samples[i].at, value: current) }
+ guard i > 0, let previous = counter(samples[i - 1], name) else { return nil }
+ let interval = samples[i].at.timeIntervalSince(samples[i - 1].at)
+ guard interval > 0, current >= previous else { return nil }
+ return Reading(id: i, time: samples[i].at, value: (current - previous) / interval)
+ }
+ }
+
+ private func panel(_ title: String, metric: String, rate: Bool, tint: Color) -> some View {
+ let readings = points(metric, rate: rate)
+ return VStack(alignment: .leading, spacing: 10) {
+ HStack {
+ Text(title).font(.headline)
+ Spacer()
+ Circle().fill(tint).frame(width: 9, height: 9)
+ }
+ if let last = readings.last {
+ Text(last.value.formatted(.number.precision(.fractionLength(1))) + (rate ? " /sec" : ""))
+ .font(.system(size: 24, weight: .semibold, design: .rounded))
+ .foregroundStyle(tint)
+ } else {
+ Text("Collecting samples…")
+ .font(.caption).foregroundStyle(.secondary)
+ }
+ Chart(readings) { reading in
+ AreaMark(x: .value("Time", reading.time), y: .value("Value", reading.value))
+ .foregroundStyle(tint.opacity(0.14))
+ LineMark(x: .value("Time", reading.time), y: .value("Value", reading.value))
+ .foregroundStyle(tint)
+ .lineStyle(StrokeStyle(lineWidth: 2.5))
+ }
+ .chartYAxis { AxisMarks(position: .leading) }
+ .frame(height: 130)
+ }
+ .padding(14)
+ .frame(maxWidth: .infinity, alignment: .leading)
+ .background(Color(nsColor: .controlBackgroundColor))
+ .clipShape(RoundedRectangle(cornerRadius: 12))
+ }
+
+ var body: some View {
+ VStack(alignment: .leading, spacing: 12) {
+ HStack {
+ Label("Live server performance", systemImage: "waveform.path.ecg")
+ .font(.title2.bold())
+ Spacer()
+ Text("\(samples.count) samples · refreshes every 5 seconds")
+ .font(.caption).foregroundStyle(.secondary)
+ }
+ LazyVGrid(columns: [GridItem(.adaptive(minimum: 270), spacing: 12)], spacing: 12) {
+ panel("Queries per second", metric: "Queries", rate: true, tint: .blue)
+ panel("Active connections", metric: "Threads_connected", rate: false, tint: .teal)
+ panel("Running threads", metric: "Threads_running", rate: false, tint: .orange)
+ panel("Slow queries per second", metric: "Slow_queries", rate: true, tint: .red)
+ panel("Bytes received per second", metric: "Bytes_received", rate: true, tint: .purple)
+ panel("Bytes sent per second", metric: "Bytes_sent", rate: true, tint: .green)
+ }
+ Text("Rates are calculated from consecutive MySQL status snapshots. Counters reset after server restarts; graphs show up to 60 in-session samples.")
+ .font(.caption).foregroundStyle(.secondary)
+ }
+ }
+}
+
// MARK: - Phase 25/26: Live performance samples and counter rates
private struct DiagnosticSample: Identifiable {
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps
index 55ae087..594333e 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps differ
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o
index 8728a20..de3aec2 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o differ
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata
index 21fd9a8..c3ddd2b 100644
--- a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata
+++ b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata
@@ -55,7 +55,7 @@
"key": "Navigator",
"location": {
"startingColumn": 20,
- "startingLine": 226
+ "startingLine": 231
}
},
{
@@ -63,7 +63,7 @@
"key": "Administration",
"location": {
"startingColumn": 22,
- "startingLine": 227
+ "startingLine": 232
}
},
{
@@ -71,7 +71,7 @@
"key": "Schemas",
"location": {
"startingColumn": 22,
- "startingLine": 228
+ "startingLine": 233
}
},
{
@@ -79,7 +79,7 @@
"key": "SCHEMAS",
"location": {
"startingColumn": 22,
- "startingLine": 248
+ "startingLine": 253
}
},
{
@@ -87,7 +87,7 @@
"key": "Edit Connection",
"location": {
"startingColumn": 36,
- "startingLine": 302
+ "startingLine": 307
}
},
{
@@ -95,7 +95,7 @@
"key": "Set as Default Schema",
"location": {
"startingColumn": 24,
- "startingLine": 425
+ "startingLine": 430
}
},
{
@@ -103,7 +103,7 @@
"key": "Refresh Tables",
"location": {
"startingColumn": 24,
- "startingLine": 429
+ "startingLine": 434
}
},
{
@@ -111,7 +111,7 @@
"key": "Create Table…",
"location": {
"startingColumn": 24,
- "startingLine": 432
+ "startingLine": 437
}
},
{
@@ -119,7 +119,7 @@
"key": "Load Tables",
"location": {
"startingColumn": 28,
- "startingLine": 502
+ "startingLine": 507
}
},
{
@@ -127,7 +127,7 @@
"key": "Tables",
"location": {
"startingColumn": 22,
- "startingLine": 475
+ "startingLine": 480
}
},
{
@@ -135,7 +135,7 @@
"key": "Select First 100 Rows",
"location": {
"startingColumn": 20,
- "startingLine": 558
+ "startingLine": 563
}
},
{
@@ -143,7 +143,7 @@
"key": "Edit Table Schema…",
"location": {
"startingColumn": 20,
- "startingLine": 565
+ "startingLine": 570
}
},
{
@@ -151,7 +151,7 @@
"key": "New Query Tab",
"location": {
"startingColumn": 19,
- "startingLine": 682
+ "startingLine": 687
}
},
{
@@ -159,7 +159,7 @@
"key": "Default Schema:",
"location": {
"startingColumn": 18,
- "startingLine": 747
+ "startingLine": 752
}
},
{
@@ -167,7 +167,7 @@
"key": "SQL Editor",
"location": {
"startingColumn": 18,
- "startingLine": 757
+ "startingLine": 762
}
},
{
@@ -175,7 +175,7 @@
"key": "Execute SQL",
"location": {
"startingColumn": 19,
- "startingLine": 695
+ "startingLine": 700
}
},
{
@@ -183,7 +183,7 @@
"key": "Execute selected SQL without modifying the editor",
"location": {
"startingColumn": 19,
- "startingLine": 703
+ "startingLine": 708
}
},
{
@@ -191,7 +191,7 @@
"key": "Inspect the optimizer plan for the selected SQL or editor contents",
"location": {
"startingColumn": 19,
- "startingLine": 711
+ "startingLine": 716
}
},
{
@@ -199,7 +199,7 @@
"key": "Format SQL",
"location": {
"startingColumn": 19,
- "startingLine": 718
+ "startingLine": 723
}
},
{
@@ -207,7 +207,7 @@
"key": "Query execution history",
"location": {
"startingColumn": 19,
- "startingLine": 728
+ "startingLine": 733
}
},
{
@@ -215,7 +215,7 @@
"key": "Open saved SQL queries",
"location": {
"startingColumn": 19,
- "startingLine": 735
+ "startingLine": 740
}
},
{
@@ -223,7 +223,7 @@
"key": "Save current SQL query",
"location": {
"startingColumn": 19,
- "startingLine": 743
+ "startingLine": 748
}
},
{
@@ -231,7 +231,7 @@
"key": "Run Selection",
"location": {
"startingColumn": 23,
- "startingLine": 700
+ "startingLine": 705
}
},
{
@@ -239,7 +239,7 @@
"key": "Explain",
"location": {
"startingColumn": 23,
- "startingLine": 708
+ "startingLine": 713
}
},
{
@@ -247,7 +247,7 @@
"key": "History",
"location": {
"startingColumn": 23,
- "startingLine": 726
+ "startingLine": 731
}
},
{
@@ -255,7 +255,7 @@
"key": "Saved",
"location": {
"startingColumn": 23,
- "startingLine": 733
+ "startingLine": 738
}
},
{
@@ -263,7 +263,7 @@
"key": "%lld",
"location": {
"startingColumn": 26,
- "startingLine": 811
+ "startingLine": 816
}
},
{
@@ -271,7 +271,7 @@
"key": "Result Grid",
"location": {
"startingColumn": 22,
- "startingLine": 843
+ "startingLine": 848
}
},
{
@@ -279,7 +279,7 @@
"key": "Filter rows",
"location": {
"startingColumn": 31,
- "startingLine": 849
+ "startingLine": 854
}
},
{
@@ -287,7 +287,7 @@
"key": "Sort",
"location": {
"startingColumn": 28,
- "startingLine": 852
+ "startingLine": 857
}
},
{
@@ -295,7 +295,7 @@
"key": "Ascending",
"location": {
"startingColumn": 50,
- "startingLine": 858
+ "startingLine": 863
}
},
{
@@ -303,7 +303,7 @@
"key": "Descending",
"location": {
"startingColumn": 64,
- "startingLine": 858
+ "startingLine": 863
}
},
{
@@ -311,7 +311,7 @@
"key": "Columns",
"location": {
"startingColumn": 26,
- "startingLine": 861
+ "startingLine": 866
}
},
{
@@ -319,7 +319,7 @@
"key": "Export CSV",
"location": {
"startingColumn": 28,
- "startingLine": 876
+ "startingLine": 881
}
},
{
@@ -327,7 +327,7 @@
"key": "Show All Columns",
"location": {
"startingColumn": 32,
- "startingLine": 862
+ "startingLine": 867
}
},
{
@@ -335,7 +335,7 @@
"key": "No query results",
"location": {
"startingColumn": 26,
- "startingLine": 893
+ "startingLine": 898
}
},
{
@@ -343,7 +343,7 @@
"key": "%lld matching rows · showing %lld–%lld",
"location": {
"startingColumn": 26,
- "startingLine": 900
+ "startingLine": 905
}
},
{
@@ -351,7 +351,7 @@
"key": "Page %lld / %lld",
"location": {
"startingColumn": 26,
- "startingLine": 905
+ "startingLine": 910
}
},
{
@@ -359,7 +359,7 @@
"key": "Previous",
"location": {
"startingColumn": 28,
- "startingLine": 903
+ "startingLine": 908
}
},
{
@@ -367,7 +367,7 @@
"key": "Next",
"location": {
"startingColumn": 28,
- "startingLine": 906
+ "startingLine": 911
}
},
{
@@ -375,7 +375,7 @@
"key": "Action Output",
"location": {
"startingColumn": 22,
- "startingLine": 991
+ "startingLine": 996
}
},
{
@@ -383,7 +383,7 @@
"key": "UTF-8",
"location": {
"startingColumn": 18,
- "startingLine": 1066
+ "startingLine": 1071
}
},
{
@@ -391,7 +391,7 @@
"key": "Filter SQL or connection",
"location": {
"startingColumn": 23,
- "startingLine": 1117
+ "startingLine": 1122
}
},
{
@@ -399,7 +399,7 @@
"key": "Query History",
"location": {
"startingColumn": 22,
- "startingLine": 1111
+ "startingLine": 1116
}
},
{
@@ -407,7 +407,7 @@
"key": "Clear History",
"location": {
"startingColumn": 24,
- "startingLine": 1113
+ "startingLine": 1118
}
},
{
@@ -415,7 +415,7 @@
"key": "Done",
"location": {
"startingColumn": 24,
- "startingLine": 1115
+ "startingLine": 1120
}
},
{
@@ -423,7 +423,7 @@
"key": "Open in New Tab",
"location": {
"startingColumn": 32,
- "startingLine": 1129
+ "startingLine": 1134
}
},
{
@@ -431,7 +431,7 @@
"key": "Filter saved queries",
"location": {
"startingColumn": 23,
- "startingLine": 1159
+ "startingLine": 1164
}
},
{
@@ -439,7 +439,7 @@
"key": "Saved SQL Queries",
"location": {
"startingColumn": 22,
- "startingLine": 1155
+ "startingLine": 1160
}
},
{
@@ -447,7 +447,7 @@
"key": "Done",
"location": {
"startingColumn": 24,
- "startingLine": 1157
+ "startingLine": 1162
}
},
{
@@ -455,7 +455,7 @@
"key": "Open",
"location": {
"startingColumn": 28,
- "startingLine": 1172
+ "startingLine": 1177
}
},
{
@@ -463,7 +463,7 @@
"key": "Uses MySQL EXPLAIN to inspect the optimizer's estimated plan without executing the SELECT statement itself.",
"location": {
"startingColumn": 18,
- "startingLine": 1597
+ "startingLine": 1602
}
},
{
@@ -471,7 +471,7 @@
"key": "Select a SELECT or WITH query in the SQL editor before opening EXPLAIN.",
"location": {
"startingColumn": 124,
- "startingLine": 1638
+ "startingLine": 1643
}
},
{
@@ -479,7 +479,7 @@
"key": "No additional index warnings for this plan format.",
"location": {
"startingColumn": 26,
- "startingLine": 1712
+ "startingLine": 1717
}
},
{
@@ -487,7 +487,7 @@
"key": "EXPLAIN shows estimates, not actual query execution times. Observations are heuristics, not index recommendations. Confirm with representative data before changing production indexes.",
"location": {
"startingColumn": 18,
- "startingLine": 1746
+ "startingLine": 1751
}
},
{
@@ -495,7 +495,7 @@
"key": "SELECT query required",
"location": {
"startingColumn": 40,
- "startingLine": 1638
+ "startingLine": 1643
}
},
{
@@ -503,7 +503,7 @@
"key": "No plan loaded",
"location": {
"startingColumn": 40,
- "startingLine": 1656
+ "startingLine": 1661
}
},
{
@@ -511,7 +511,7 @@
"key": "Saved plans for this query (%lld)",
"location": {
"startingColumn": 33,
- "startingLine": 1659
+ "startingLine": 1664
}
},
{
@@ -519,7 +519,7 @@
"key": "Changed plan steps (%lld)",
"location": {
"startingColumn": 33,
- "startingLine": 1718
+ "startingLine": 1723
}
},
{
@@ -527,7 +527,7 @@
"key": "Plan observations (%lld)",
"location": {
"startingColumn": 33,
- "startingLine": 1732
+ "startingLine": 1737
}
},
{
@@ -535,7 +535,7 @@
"key": "Query Execution Plan",
"location": {
"startingColumn": 23,
- "startingLine": 1592
+ "startingLine": 1597
}
},
{
@@ -543,7 +543,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 1595
+ "startingLine": 1600
}
},
{
@@ -551,7 +551,7 @@
"key": "Comparing with %@",
"location": {
"startingColumn": 26,
- "startingLine": 1620
+ "startingLine": 1625
}
},
{
@@ -559,7 +559,7 @@
"key": "Plan format",
"location": {
"startingColumn": 24,
- "startingLine": 1608
+ "startingLine": 1613
}
},
{
@@ -567,7 +567,7 @@
"key": "Run EXPLAIN",
"location": {
"startingColumn": 24,
- "startingLine": 1614
+ "startingLine": 1619
}
},
{
@@ -575,7 +575,7 @@
"key": "Save Snapshot",
"location": {
"startingColumn": 24,
- "startingLine": 1616
+ "startingLine": 1621
}
},
{
@@ -583,7 +583,7 @@
"key": "History",
"location": {
"startingColumn": 24,
- "startingLine": 1618
+ "startingLine": 1623
}
},
{
@@ -591,7 +591,7 @@
"key": "Clear Baseline",
"location": {
"startingColumn": 28,
- "startingLine": 1623
+ "startingLine": 1628
}
},
{
@@ -599,7 +599,7 @@
"key": "Copy Plan",
"location": {
"startingColumn": 24,
- "startingLine": 1625
+ "startingLine": 1630
}
},
{
@@ -607,7 +607,7 @@
"key": "Table",
"location": {
"startingColumn": 26,
- "startingLine": 1609
+ "startingLine": 1614
}
},
{
@@ -615,7 +615,7 @@
"key": "JSON",
"location": {
"startingColumn": 26,
- "startingLine": 1610
+ "startingLine": 1615
}
},
{
@@ -623,7 +623,7 @@
"key": "No saved plans for this connection, schema and SQL statement.",
"location": {
"startingColumn": 30,
- "startingLine": 1661
+ "startingLine": 1666
}
},
{
@@ -631,7 +631,7 @@
"key": "Compare",
"location": {
"startingColumn": 48,
- "startingLine": 1671
+ "startingLine": 1676
}
},
{
@@ -639,7 +639,7 @@
"key": "Delete",
"location": {
"startingColumn": 48,
- "startingLine": 1672
+ "startingLine": 1677
}
},
{
@@ -647,7 +647,7 @@
"key": "Index analysis",
"location": {
"startingColumn": 27,
- "startingLine": 1692
+ "startingLine": 1697
}
},
{
@@ -655,7 +655,7 @@
"key": "Copy Diagnostics",
"location": {
"startingColumn": 28,
- "startingLine": 1695
+ "startingLine": 1700
}
},
{
@@ -663,7 +663,7 @@
"key": "Connection Settings",
"location": {
"startingColumn": 18,
- "startingLine": 1814
+ "startingLine": 1819
}
},
{
@@ -671,7 +671,7 @@
"key": "Connection Name",
"location": {
"startingColumn": 21,
- "startingLine": 1819
+ "startingLine": 1824
}
},
{
@@ -679,7 +679,7 @@
"key": "Hostname",
"location": {
"startingColumn": 21,
- "startingLine": 1824
+ "startingLine": 1829
}
},
{
@@ -687,20 +687,12 @@
"key": "Port",
"location": {
"startingColumn": 21,
- "startingLine": 1829
+ "startingLine": 1834
}
},
{
"comment": "",
"key": "Username",
- "location": {
- "startingColumn": 21,
- "startingLine": 1835
- }
- },
- {
- "comment": "",
- "key": "Password (macOS Keychain)",
"location": {
"startingColumn": 21,
"startingLine": 1840
@@ -708,18 +700,26 @@
},
{
"comment": "",
- "key": "Default Schema",
+ "key": "Password (macOS Keychain)",
"location": {
"startingColumn": 21,
"startingLine": 1845
}
},
+ {
+ "comment": "",
+ "key": "Default Schema",
+ "location": {
+ "startingColumn": 21,
+ "startingLine": 1850
+ }
+ },
{
"comment": "",
"key": "Cancel",
"location": {
"startingColumn": 24,
- "startingLine": 1853
+ "startingLine": 1858
}
},
{
@@ -727,7 +727,7 @@
"key": "Save",
"location": {
"startingColumn": 24,
- "startingLine": 1857
+ "startingLine": 1862
}
},
{
@@ -735,7 +735,7 @@
"key": "Terminate MySQL session?",
"location": {
"startingColumn": 13,
- "startingLine": 2374
+ "startingLine": 2379
}
},
{
@@ -743,7 +743,7 @@
"key": "The server did not return any columns.",
"location": {
"startingColumn": 25,
- "startingLine": 2293
+ "startingLine": 2298
}
},
{
@@ -751,7 +751,7 @@
"key": "Loading %@…",
"location": {
"startingColumn": 30,
- "startingLine": 2271
+ "startingLine": 2276
}
},
{
@@ -759,7 +759,7 @@
"key": "No Data",
"location": {
"startingColumn": 21,
- "startingLine": 2290
+ "startingLine": 2295
}
},
{
@@ -767,7 +767,7 @@
"key": "Unable to Load %@",
"location": {
"startingColumn": 25,
- "startingLine": 2277
+ "startingLine": 2282
}
},
{
@@ -775,7 +775,7 @@
"key": "Retry",
"location": {
"startingColumn": 28,
- "startingLine": 2283
+ "startingLine": 2288
}
},
{
@@ -783,7 +783,7 @@
"key": "Samples are kept in memory for this screen only",
"location": {
"startingColumn": 26,
- "startingLine": 2317
+ "startingLine": 2322
}
},
{
@@ -791,7 +791,7 @@
"key": "%lld samples",
"location": {
"startingColumn": 27,
- "startingLine": 2312
+ "startingLine": 2317
}
},
{
@@ -799,7 +799,7 @@
"key": "View Trends…",
"location": {
"startingColumn": 28,
- "startingLine": 2314
+ "startingLine": 2319
}
},
{
@@ -807,7 +807,7 @@
"key": "Clear Samples",
"location": {
"startingColumn": 28,
- "startingLine": 2315
+ "startingLine": 2320
}
},
{
@@ -815,7 +815,7 @@
"key": "Changes require confirmation",
"location": {
"startingColumn": 26,
- "startingLine": 2351
+ "startingLine": 2356
}
},
{
@@ -823,7 +823,7 @@
"key": "Account",
"location": {
"startingColumn": 28,
- "startingLine": 2330
+ "startingLine": 2335
}
},
{
@@ -831,7 +831,7 @@
"key": "Show Grants",
"location": {
"startingColumn": 28,
- "startingLine": 2341
+ "startingLine": 2346
}
},
{
@@ -839,7 +839,7 @@
"key": "Manage Accounts…",
"location": {
"startingColumn": 28,
- "startingLine": 2345
+ "startingLine": 2350
}
},
{
@@ -847,7 +847,7 @@
"key": "Select account",
"location": {
"startingColumn": 30,
- "startingLine": 2331
+ "startingLine": 2336
}
},
{
@@ -855,7 +855,7 @@
"key": "%@@%@",
"location": {
"startingColumn": 38,
- "startingLine": 2335
+ "startingLine": 2340
}
},
{
@@ -863,7 +863,7 @@
"key": "%@ session %@",
"location": {
"startingColumn": 24,
- "startingLine": 2382
+ "startingLine": 2387
}
},
{
@@ -871,7 +871,7 @@
"key": "Cancel",
"location": {
"startingColumn": 20,
- "startingLine": 2387
+ "startingLine": 2392
}
},
{
@@ -879,7 +879,7 @@
"key": "This operation affects a live MySQL session. Terminating a connection can interrupt transactions and roll back uncommitted work. Verify the session ID before proceeding.",
"location": {
"startingColumn": 18,
- "startingLine": 2389
+ "startingLine": 2394
}
},
{
@@ -887,7 +887,7 @@
"key": "Grants: %@",
"location": {
"startingColumn": 22,
- "startingLine": 2406
+ "startingLine": 2411
}
},
{
@@ -895,7 +895,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 2418
+ "startingLine": 2423
}
},
{
@@ -903,7 +903,7 @@
"key": "Requires PROCESS privilege to see other users' sessions and appropriate privileges to terminate them.",
"location": {
"startingColumn": 18,
- "startingLine": 2448
+ "startingLine": 2453
}
},
{
@@ -911,7 +911,7 @@
"key": "Session",
"location": {
"startingColumn": 24,
- "startingLine": 2428
+ "startingLine": 2433
}
},
{
@@ -919,7 +919,7 @@
"key": "Stop Query",
"location": {
"startingColumn": 24,
- "startingLine": 2435
+ "startingLine": 2440
}
},
{
@@ -927,7 +927,7 @@
"key": "Disconnect Session",
"location": {
"startingColumn": 24,
- "startingLine": 2437
+ "startingLine": 2442
}
},
{
@@ -935,7 +935,7 @@
"key": "Select a session",
"location": {
"startingColumn": 26,
- "startingLine": 2429
+ "startingLine": 2434
}
},
{
@@ -943,7 +943,7 @@
"key": "ID %@",
"location": {
"startingColumn": 30,
- "startingLine": 2431
+ "startingLine": 2436
}
},
{
@@ -951,7 +951,7 @@
"key": "Filter results",
"location": {
"startingColumn": 27,
- "startingLine": 2513
+ "startingLine": 2518
}
},
{
@@ -959,7 +959,7 @@
"key": "Auto-refresh",
"location": {
"startingColumn": 20,
- "startingLine": 2518
+ "startingLine": 2523
}
},
{
@@ -967,7 +967,7 @@
"key": "Refresh every five seconds",
"location": {
"startingColumn": 23,
- "startingLine": 2520
+ "startingLine": 2525
}
},
{
@@ -975,7 +975,7 @@
"key": "Refresh",
"location": {
"startingColumn": 23,
- "startingLine": 2525
+ "startingLine": 2530
}
},
{
@@ -983,7 +983,15 @@
"key": "SQL Editor",
"location": {
"startingColumn": 23,
- "startingLine": 2532
+ "startingLine": 2537
+ }
+ },
+ {
+ "comment": "",
+ "key": "Server counters",
+ "location": {
+ "startingColumn": 26,
+ "startingLine": 2549
}
},
{
@@ -991,7 +999,7 @@
"key": "Not loaded",
"location": {
"startingColumn": 22,
- "startingLine": 2610
+ "startingLine": 2620
}
},
{
@@ -999,7 +1007,7 @@
"key": "Updated %@",
"location": {
"startingColumn": 21,
- "startingLine": 2607
+ "startingLine": 2617
}
},
{
@@ -1007,7 +1015,7 @@
"key": "%lld rows",
"location": {
"startingColumn": 18,
- "startingLine": 2615
+ "startingLine": 2625
}
},
{
@@ -1015,7 +1023,7 @@
"key": "Import SQL into %@?",
"location": {
"startingColumn": 13,
- "startingLine": 2928
+ "startingLine": 2938
}
},
{
@@ -1023,7 +1031,7 @@
"key": "Operation",
"location": {
"startingColumn": 20,
- "startingLine": 2731
+ "startingLine": 2741
}
},
{
@@ -1031,7 +1039,7 @@
"key": "Data Export",
"location": {
"startingColumn": 22,
- "startingLine": 2732
+ "startingLine": 2742
}
},
{
@@ -1039,7 +1047,7 @@
"key": "Data Import / Restore",
"location": {
"startingColumn": 22,
- "startingLine": 2733
+ "startingLine": 2743
}
},
{
@@ -1047,7 +1055,7 @@
"key": "MySQL Connection",
"location": {
"startingColumn": 26,
- "startingLine": 2740
+ "startingLine": 2750
}
},
{
@@ -1055,7 +1063,7 @@
"key": "Export Options",
"location": {
"startingColumn": 30,
- "startingLine": 2764
+ "startingLine": 2774
}
},
{
@@ -1063,7 +1071,7 @@
"key": "Import Options",
"location": {
"startingColumn": 30,
- "startingLine": 2820
+ "startingLine": 2830
}
},
{
@@ -1071,7 +1079,7 @@
"key": "Progress",
"location": {
"startingColumn": 26,
- "startingLine": 2832
+ "startingLine": 2842
}
},
{
@@ -1079,7 +1087,7 @@
"key": "Connection",
"location": {
"startingColumn": 36,
- "startingLine": 2742
+ "startingLine": 2752
}
},
{
@@ -1087,7 +1095,7 @@
"key": "Database",
"location": {
"startingColumn": 28,
- "startingLine": 2746
+ "startingLine": 2756
}
},
{
@@ -1095,7 +1103,7 @@
"key": "Select Database",
"location": {
"startingColumn": 30,
- "startingLine": 2747
+ "startingLine": 2757
}
},
{
@@ -1103,7 +1111,7 @@
"key": "Refresh Databases",
"location": {
"startingColumn": 32,
- "startingLine": 2755
+ "startingLine": 2765
}
},
{
@@ -1111,7 +1119,7 @@
"key": "No tables found. Select a database or refresh the list.",
"location": {
"startingColumn": 34,
- "startingLine": 2786
+ "startingLine": 2796
}
},
{
@@ -1119,7 +1127,7 @@
"key": "InnoDB data is exported using a consistent snapshot and a single streamed query per table. Tables without unique indexes are supported.",
"location": {
"startingColumn": 30,
- "startingLine": 2815
+ "startingLine": 2825
}
},
{
@@ -1127,7 +1135,7 @@
"key": "Table structure",
"location": {
"startingColumn": 32,
- "startingLine": 2766
+ "startingLine": 2776
}
},
{
@@ -1135,7 +1143,7 @@
"key": "Table data",
"location": {
"startingColumn": 32,
- "startingLine": 2767
+ "startingLine": 2777
}
},
{
@@ -1143,7 +1151,7 @@
"key": "Add DROP TABLE IF EXISTS",
"location": {
"startingColumn": 32,
- "startingLine": 2768
+ "startingLine": 2778
}
},
{
@@ -1151,7 +1159,7 @@
"key": "Include views (definitions)",
"location": {
"startingColumn": 32,
- "startingLine": 2770
+ "startingLine": 2780
}
},
{
@@ -1159,7 +1167,7 @@
"key": "Include triggers",
"location": {
"startingColumn": 32,
- "startingLine": 2772
+ "startingLine": 2782
}
},
{
@@ -1167,7 +1175,7 @@
"key": "Include stored procedures and functions",
"location": {
"startingColumn": 32,
- "startingLine": 2774
+ "startingLine": 2784
}
},
{
@@ -1175,7 +1183,7 @@
"key": "Loading tables…",
"location": {
"startingColumn": 57,
- "startingLine": 2784
+ "startingLine": 2794
}
},
{
@@ -1183,7 +1191,7 @@
"key": "Tables (%lld selected)",
"location": {
"startingColumn": 34,
- "startingLine": 2777
+ "startingLine": 2787
}
},
{
@@ -1191,7 +1199,7 @@
"key": "All",
"location": {
"startingColumn": 36,
- "startingLine": 2779
+ "startingLine": 2789
}
},
{
@@ -1199,7 +1207,7 @@
"key": "None",
"location": {
"startingColumn": 36,
- "startingLine": 2780
+ "startingLine": 2790
}
},
{
@@ -1207,7 +1215,7 @@
"key": "Refresh",
"location": {
"startingColumn": 36,
- "startingLine": 2781
+ "startingLine": 2791
}
},
{
@@ -1215,7 +1223,7 @@
"key": "Views (%lld selected)",
"location": {
"startingColumn": 38,
- "startingLine": 2800
+ "startingLine": 2810
}
},
{
@@ -1223,7 +1231,7 @@
"key": "All",
"location": {
"startingColumn": 40,
- "startingLine": 2802
+ "startingLine": 2812
}
},
{
@@ -1231,7 +1239,7 @@
"key": "None",
"location": {
"startingColumn": 40,
- "startingLine": 2803
+ "startingLine": 2813
}
},
{
@@ -1239,7 +1247,7 @@
"key": "Import SQL statements into the selected database.",
"location": {
"startingColumn": 30,
- "startingLine": 2822
+ "startingLine": 2832
}
},
{
@@ -1247,7 +1255,7 @@
"key": "Supports MySQL DELIMITER directives, triggers and stored routines. Import is not transactional; use a verified backup before restoring.",
"location": {
"startingColumn": 30,
- "startingLine": 2825
+ "startingLine": 2835
}
},
{
@@ -1255,7 +1263,7 @@
"key": "Current table: %@ / %@ rows · Total exported: %@",
"location": {
"startingColumn": 30,
- "startingLine": 2849
+ "startingLine": 2859
}
},
{
@@ -1263,7 +1271,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 2863
+ "startingLine": 2873
}
},
{
@@ -1271,7 +1279,7 @@
"key": "Verify Backup…",
"location": {
"startingColumn": 28,
- "startingLine": 2871
+ "startingLine": 2881
}
},
{
@@ -1279,7 +1287,7 @@
"key": "Verify an SQL file against its SHA-256 checksum sidecar",
"location": {
"startingColumn": 27,
- "startingLine": 2874
+ "startingLine": 2884
}
},
{
@@ -1287,7 +1295,7 @@
"key": "Verify Restored Database…",
"location": {
"startingColumn": 28,
- "startingLine": 2875
+ "startingLine": 2885
}
},
{
@@ -1295,7 +1303,7 @@
"key": "Compare restored table row counts and object names with the export manifest",
"location": {
"startingColumn": 27,
- "startingLine": 2879
+ "startingLine": 2889
}
},
{
@@ -1303,7 +1311,7 @@
"key": "Cancel",
"location": {
"startingColumn": 28,
- "startingLine": 2883
+ "startingLine": 2893
}
},
{
@@ -1311,7 +1319,7 @@
"key": "Export SQL…",
"location": {
"startingColumn": 31,
- "startingLine": 2890
+ "startingLine": 2900
}
},
{
@@ -1319,7 +1327,7 @@
"key": "Import SQL…",
"location": {
"startingColumn": 31,
- "startingLine": 2891
+ "startingLine": 2901
}
},
{
@@ -1327,7 +1335,7 @@
"key": "Import SQL",
"location": {
"startingColumn": 20,
- "startingLine": 2931
+ "startingLine": 2941
}
},
{
@@ -1335,7 +1343,7 @@
"key": "Cancel",
"location": {
"startingColumn": 20,
- "startingLine": 2939
+ "startingLine": 2949
}
},
{
@@ -1343,7 +1351,7 @@
"key": "SQL files can modify or delete existing database objects and data. Ensure you have a backup before continuing.",
"location": {
"startingColumn": 17,
- "startingLine": 2944
+ "startingLine": 2954
}
},
{
@@ -1351,7 +1359,7 @@
"key": "Database Import / Export",
"location": {
"startingColumn": 22,
- "startingLine": 2956
+ "startingLine": 2966
}
},
{
@@ -1359,7 +1367,7 @@
"key": "Built-in native MySQL database tools",
"location": {
"startingColumn": 22,
- "startingLine": 2959
+ "startingLine": 2969
}
},
{
@@ -1367,7 +1375,7 @@
"key": "Confirm %@",
"location": {
"startingColumn": 16,
- "startingLine": 4010
+ "startingLine": 4020
}
},
{
@@ -1375,7 +1383,7 @@
"key": "Manage MySQL Accounts",
"location": {
"startingColumn": 18,
- "startingLine": 3960
+ "startingLine": 3970
}
},
{
@@ -1383,7 +1391,7 @@
"key": "Account changes run on %@. Review the SQL before applying it.",
"location": {
"startingColumn": 18,
- "startingLine": 3961
+ "startingLine": 3971
}
},
{
@@ -1391,7 +1399,7 @@
"key": "Operation",
"location": {
"startingColumn": 24,
- "startingLine": 3964
+ "startingLine": 3974
}
},
{
@@ -1399,7 +1407,7 @@
"key": "Username",
"location": {
"startingColumn": 27,
- "startingLine": 3969
+ "startingLine": 3979
}
},
{
@@ -1407,7 +1415,7 @@
"key": "Host",
"location": {
"startingColumn": 27,
- "startingLine": 3971
+ "startingLine": 3981
}
},
{
@@ -1415,7 +1423,7 @@
"key": "Password",
"location": {
"startingColumn": 33,
- "startingLine": 3973
+ "startingLine": 3983
}
},
{
@@ -1423,7 +1431,7 @@
"key": "Database",
"location": {
"startingColumn": 31,
- "startingLine": 3976
+ "startingLine": 3986
}
},
{
@@ -1431,7 +1439,7 @@
"key": "Privilege",
"location": {
"startingColumn": 28,
- "startingLine": 3977
+ "startingLine": 3987
}
},
{
@@ -1439,7 +1447,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 3992
+ "startingLine": 4002
}
},
{
@@ -1447,7 +1455,7 @@
"key": "Review SQL…",
"location": {
"startingColumn": 24,
- "startingLine": 3994
+ "startingLine": 4004
}
},
{
@@ -1455,7 +1463,7 @@
"key": "Cancel",
"location": {
"startingColumn": 20,
- "startingLine": 4011
+ "startingLine": 4021
}
},
{
@@ -1463,7 +1471,7 @@
"key": "Apply Change",
"location": {
"startingColumn": 20,
- "startingLine": 4012
+ "startingLine": 4022
}
},
{
@@ -1471,7 +1479,71 @@
"key": "Run this operation against %@?\n\n%@",
"location": {
"startingColumn": 18,
- "startingLine": 4017
+ "startingLine": 4027
+ }
+ },
+ {
+ "comment": "",
+ "key": "Collecting samples…",
+ "location": {
+ "startingColumn": 22,
+ "startingLine": 4158
+ }
+ },
+ {
+ "comment": "",
+ "key": "Time",
+ "location": {
+ "startingColumn": 36,
+ "startingLine": 4162
+ }
+ },
+ {
+ "comment": "",
+ "key": "Value",
+ "location": {
+ "startingColumn": 69,
+ "startingLine": 4162
+ }
+ },
+ {
+ "comment": "",
+ "key": "Time",
+ "location": {
+ "startingColumn": 36,
+ "startingLine": 4164
+ }
+ },
+ {
+ "comment": "",
+ "key": "Value",
+ "location": {
+ "startingColumn": 69,
+ "startingLine": 4164
+ }
+ },
+ {
+ "comment": "",
+ "key": "Rates are calculated from consecutive MySQL status snapshots. Counters reset after server restarts; graphs show up to 60 in-session samples.",
+ "location": {
+ "startingColumn": 18,
+ "startingLine": 4194
+ }
+ },
+ {
+ "comment": "",
+ "key": "%lld samples · refreshes every 5 seconds",
+ "location": {
+ "startingColumn": 22,
+ "startingLine": 4183
+ }
+ },
+ {
+ "comment": "",
+ "key": "Live server performance",
+ "location": {
+ "startingColumn": 23,
+ "startingLine": 4180
}
},
{
@@ -1479,7 +1551,7 @@
"key": "%lld samples. Rates compare the two latest successful refreshes; cumulative counters can reset when MySQL restarts or statistics are cleared.",
"location": {
"startingColumn": 18,
- "startingLine": 4190
+ "startingLine": 4284
}
},
{
@@ -1487,7 +1559,7 @@
"key": "Refresh this screen twice, or enable auto-refresh.",
"location": {
"startingColumn": 58,
- "startingLine": 4223
+ "startingLine": 4317
}
},
{
@@ -1495,7 +1567,7 @@
"key": "Query digest counts are grouped by SQL fingerprint. This is a sampled comparison, not a durable monitoring database.",
"location": {
"startingColumn": 18,
- "startingLine": 4249
+ "startingLine": 4343
}
},
{
@@ -1503,7 +1575,7 @@
"key": "More samples needed",
"location": {
"startingColumn": 40,
- "startingLine": 4222
+ "startingLine": 4316
}
},
{
@@ -1511,7 +1583,7 @@
"key": "%@ — Trends",
"location": {
"startingColumn": 22,
- "startingLine": 4186
+ "startingLine": 4280
}
},
{
@@ -1519,7 +1591,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 4188
+ "startingLine": 4282
}
},
{
@@ -1527,7 +1599,7 @@
"key": "Chart metric",
"location": {
"startingColumn": 28,
- "startingLine": 4194
+ "startingLine": 4288
}
},
{
@@ -1535,7 +1607,7 @@
"key": "Live samples",
"location": {
"startingColumn": 27,
- "startingLine": 4201
+ "startingLine": 4295
}
},
{
@@ -1543,7 +1615,7 @@
"key": "Time",
"location": {
"startingColumn": 40,
- "startingLine": 4208
+ "startingLine": 4302
}
},
{
@@ -1551,7 +1623,7 @@
"key": "Value",
"location": {
"startingColumn": 71,
- "startingLine": 4208
+ "startingLine": 4302
}
},
{
@@ -1559,7 +1631,7 @@
"key": "Time",
"location": {
"startingColumn": 40,
- "startingLine": 4211
+ "startingLine": 4305
}
},
{
@@ -1567,7 +1639,7 @@
"key": "Value",
"location": {
"startingColumn": 71,
- "startingLine": 4211
+ "startingLine": 4305
}
},
{
@@ -1575,7 +1647,7 @@
"key": "Time",
"location": {
"startingColumn": 41,
- "startingLine": 4215
+ "startingLine": 4309
}
},
{
@@ -1583,7 +1655,7 @@
"key": "Value",
"location": {
"startingColumn": 72,
- "startingLine": 4215
+ "startingLine": 4309
}
},
{
@@ -1591,7 +1663,7 @@
"key": "Metric",
"location": {
"startingColumn": 34,
- "startingLine": 4228
+ "startingLine": 4322
}
},
{
@@ -1599,7 +1671,7 @@
"key": "Current",
"location": {
"startingColumn": 34,
- "startingLine": 4229
+ "startingLine": 4323
}
},
{
@@ -1607,7 +1679,7 @@
"key": "Previous",
"location": {
"startingColumn": 34,
- "startingLine": 4230
+ "startingLine": 4324
}
},
{
@@ -1615,7 +1687,7 @@
"key": "Change/sec",
"location": {
"startingColumn": 34,
- "startingLine": 4231
+ "startingLine": 4325
}
},
{
@@ -1623,7 +1695,7 @@
"key": "Execute schema modification?",
"location": {
"startingColumn": 29,
- "startingLine": 4347
+ "startingLine": 4441
}
},
{
@@ -1631,7 +1703,7 @@
"key": "Create Table",
"location": {
"startingColumn": 45,
- "startingLine": 4301
+ "startingLine": 4395
}
},
{
@@ -1639,7 +1711,7 @@
"key": "Table Schema Editor",
"location": {
"startingColumn": 62,
- "startingLine": 4301
+ "startingLine": 4395
}
},
{
@@ -1647,7 +1719,7 @@
"key": "Close",
"location": {
"startingColumn": 24,
- "startingLine": 4306
+ "startingLine": 4400
}
},
{
@@ -1655,7 +1727,7 @@
"key": "Columns",
"location": {
"startingColumn": 56,
- "startingLine": 4315
+ "startingLine": 4409
}
},
{
@@ -1663,7 +1735,7 @@
"key": "Indexes",
"location": {
"startingColumn": 56,
- "startingLine": 4316
+ "startingLine": 4410
}
},
{
@@ -1671,7 +1743,7 @@
"key": "Original DDL",
"location": {
"startingColumn": 38,
- "startingLine": 4321
+ "startingLine": 4415
}
},
{
@@ -1679,7 +1751,7 @@
"key": "SQL schema changes",
"location": {
"startingColumn": 22,
- "startingLine": 4326
+ "startingLine": 4420
}
},
{
@@ -1687,7 +1759,7 @@
"key": "Review before execution",
"location": {
"startingColumn": 22,
- "startingLine": 4328
+ "startingLine": 4422
}
},
{
@@ -1695,7 +1767,7 @@
"key": "DDL may implicitly commit and cannot reliably be rolled back.",
"location": {
"startingColumn": 22,
- "startingLine": 4335
+ "startingLine": 4429
}
},
{
@@ -1703,7 +1775,7 @@
"key": "Reload",
"location": {
"startingColumn": 24,
- "startingLine": 4338
+ "startingLine": 4432
}
},
{
@@ -1711,7 +1783,7 @@
"key": "Execute DDL…",
"location": {
"startingColumn": 24,
- "startingLine": 4339
+ "startingLine": 4433
}
},
{
@@ -1719,7 +1791,7 @@
"key": "Execute SQL",
"location": {
"startingColumn": 20,
- "startingLine": 4349
+ "startingLine": 4443
}
},
{
@@ -1727,7 +1799,7 @@
"key": "Cancel",
"location": {
"startingColumn": 20,
- "startingLine": 4350
+ "startingLine": 4444
}
},
{
@@ -1735,7 +1807,7 @@
"key": "This SQL changes the database schema and may implicitly commit. Verify the statement and take a backup first.",
"location": {
"startingColumn": 18,
- "startingLine": 4352
+ "startingLine": 4446
}
},
{
@@ -1743,7 +1815,7 @@
"key": "No metadata loaded",
"location": {
"startingColumn": 22,
- "startingLine": 4359
+ "startingLine": 4453
}
}
]
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps
index 2c6e462..bcab614 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps differ
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors
index 175f99b..f2888de 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors differ
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule
index febac8a..d8fbc20 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule differ
diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo
index 274d394..e4cf319 100644
Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo differ
diff --git a/build/Build/Intermediates.noindex/XCBuildData/build.db b/build/Build/Intermediates.noindex/XCBuildData/build.db
index 855bccc..1ab093f 100644
Binary files a/build/Build/Intermediates.noindex/XCBuildData/build.db and b/build/Build/Intermediates.noindex/XCBuildData/build.db differ
diff --git a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt
index 616c1cf..4137a6f 100644
--- a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt
+++ b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt
@@ -32,3 +32,4 @@
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
+/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement
index 7e23bb2..6f7bf20 100755
Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement differ
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib
index c0fce3e..a6c998f 100755
Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib differ
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib
index 118e23e..28119cb 100755
Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib differ
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources
index a0a0bb4..ed9cd9d 100644
--- a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources
+++ b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources
@@ -19,7 +19,7 @@
cdhash
- HkhN7yfGWFkk5ENSYPEwPzG7Oxw=
+ hwxQ/HWDtKhUDsc6szxKFot4NHU=
requirement
identifier "WorkbenchReplacement.debug" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Mark Gregory (FLBRJ3BYDD)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo
index 274d394..e4cf319 100644
Binary files a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo and b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo differ
diff --git a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule
index febac8a..d8fbc20 100644
Binary files a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule and b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule differ
diff --git a/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 b/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3
index 7cd4705..3126df1 100644
Binary files a/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 and b/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 differ
diff --git a/build/Logs/Build/LogStoreManifest.plist b/build/Logs/Build/LogStoreManifest.plist
index 6548a96..746fc9d 100644
--- a/build/Logs/Build/LogStoreManifest.plist
+++ b/build/Logs/Build/LogStoreManifest.plist
@@ -48,7 +48,7 @@
uniqueIdentifier
4C1297D6-59C6-453E-95AE-E4B963DF2DA6
- F4C8C8BA-B9A7-46F3-8FF6-180215A4D5E4
+ FDF8B075-055A-4667-94AC-5A68755964AD
className
IDECommandLineBuildLog
@@ -57,7 +57,7 @@
domainType
Xcode.IDEActivityLogDomainType.BuildLog
fileName
- F4C8C8BA-B9A7-46F3-8FF6-180215A4D5E4.xcactivitylog
+ FDF8B075-055A-4667-94AC-5A68755964AD.xcactivitylog
hasPrimaryLog
primaryObservable
@@ -82,13 +82,13 @@
signature
Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug
timeStartedRecording
- 813918930.91679394
+ 813923798.47520006
timeStoppedRecording
- 813918948.64702797
+ 813923817.27732801
title
Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug
uniqueIdentifier
- F4C8C8BA-B9A7-46F3-8FF6-180215A4D5E4
+ FDF8B075-055A-4667-94AC-5A68755964AD
diff --git a/build/ModuleCache.noindex/Session.modulevalidation b/build/ModuleCache.noindex/Session.modulevalidation
index 298b4da..fbf2006 100644
--- a/build/ModuleCache.noindex/Session.modulevalidation
+++ b/build/ModuleCache.noindex/Session.modulevalidation
@@ -1 +1 @@
-1792230778.133908: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex")
+1792230998.8597: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex")
diff --git a/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache b/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache
index ccf06bf..4466a4d 100644
Binary files a/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache and b/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache differ
diff --git a/build/info.plist b/build/info.plist
index 170a5ed..9deea60 100644
--- a/build/info.plist
+++ b/build/info.plist
@@ -3,7 +3,7 @@
LastAccessedDate
- 2026-10-17T09:52:58Z
+ 2026-10-17T09:56:38Z
WorkspacePath
/Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj