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