From f4234f274edf210d965c040ab30443b410ad04f6 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 21:39:03 -0400 Subject: [PATCH 1/8] chore: add SwiftFormat config Conservative rule set (preserve existing wrap/collection style, 4-space indent, 120-col max) chosen to minimize churn while still catching real issues (trailing whitespace, inconsistent brace spacing, etc). Co-Authored-By: Claude Sonnet 5 --- .swiftformat | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .swiftformat diff --git a/.swiftformat b/.swiftformat new file mode 100644 index 0000000..d8c48fa --- /dev/null +++ b/.swiftformat @@ -0,0 +1,9 @@ +--swiftversion 5.9 +--indent 4 +--maxwidth 120 +--wraparguments preserve +--wrapparameters preserve +--wrapcollections preserve +--closingparen balanced +--exclude .build,**/Frameworks,**/python_site,**/python_stdlib +--disable redundantSelf From 4d57122a261e204a6b96c095eb9d9d64a37e9929 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 21:39:09 -0400 Subject: [PATCH 2/8] style: apply SwiftFormat across the Swift source tree One-time reformat -- the codebase never had a formatter run against it. Purely mechanical (verified: builds clean, all 108 Swift tests pass, no logic changes). Adding the commit SHA to .git-blame-ignore-revs next so `git blame` still resolves through this reformat. Co-Authored-By: Claude Sonnet 5 --- .../Sources/MarcutApp/AboutView.swift | 13 +- .../MarcutApp/BundleResourceLocator.swift | 14 +- .../Sources/MarcutApp/ContentView.swift | 405 +++++--- .../Sources/MarcutApp/DefaultsKey.swift | 4 +- .../Sources/MarcutApp/DiskSpaceCheck.swift | 12 +- .../Sources/MarcutApp/DocumentModels.swift | 396 ++++---- .../DocumentRedactionViewModel.swift | 955 ++++++++++++------ .../MarcutApp/ExcludedWordMatcher.swift | 7 +- .../MarcutApp/FileAccessCoordinator.swift | 289 ++++-- .../Sources/MarcutApp/HelpHTMLView.swift | 10 +- .../Sources/MarcutApp/LaunchDiagnostics.swift | 8 +- .../Sources/MarcutApp/LogViewerSheet.swift | 3 +- .../MarcutApp/Sources/MarcutApp/Main.swift | 6 +- .../Sources/MarcutApp/MarcutApp.swift | 135 ++- .../Sources/MarcutApp/MarkdownTextView.swift | 184 ++-- .../MarcutApp/MetadataCleaningSettings.swift | 529 +++++++--- .../MarcutApp/MetadataCleaningSheet.swift | 514 ++++++++-- .../Sources/MarcutApp/ModelCatalog.swift | 12 +- .../MarcutApp/OutputSaveLocation.swift | 10 +- .../PermissionAuthorizationView.swift | 8 +- .../Sources/MarcutApp/PermissionManager.swift | 78 +- .../MarcutApp/PowerAssertionGuard.swift | 4 +- .../Sources/MarcutApp/PythonBridge.swift | 918 +++++++++++------ .../Sources/MarcutApp/PythonKitBridge.swift | 222 ++-- .../Sources/MarcutApp/ReportViewer.swift | 89 +- .../Sources/MarcutApp/SettingsView.swift | 314 +++--- .../MarcutApp/UnsavedReportQuitBehavior.swift | 10 +- .../MarcutApp/UserOverridesManager.swift | 72 +- .../Tests/MarcutAppTests/MarcutAppTests.swift | 292 ++++-- 29 files changed, 3628 insertions(+), 1885 deletions(-) diff --git a/src/swift/MarcutApp/Sources/MarcutApp/AboutView.swift b/src/swift/MarcutApp/Sources/MarcutApp/AboutView.swift index f745162..d8fcadd 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/AboutView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/AboutView.swift @@ -4,6 +4,7 @@ struct AboutView: View { private var appVersion: String { Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown" } + private var buildNumber: String { Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "" } @@ -73,8 +74,16 @@ struct AboutView: View { // Links HStack(spacing: 8) { - AboutLinkButton(icon: "globe", title: "Website", url: URL(string: "https://github.com/legalmarc/marcut")!) - AboutLinkButton(icon: "person.bubble.fill", title: "Support", url: URL(string: "https://www.linkedin.com/in/marcmandel/")!) + AboutLinkButton( + icon: "globe", + title: "Website", + url: URL(string: "https://github.com/legalmarc/marcut")! + ) + AboutLinkButton( + icon: "person.bubble.fill", + title: "Support", + url: URL(string: "https://www.linkedin.com/in/marcmandel/")! + ) AboutActionButton(icon: "book.fill", title: "Help") { Task { @MainActor in LifecycleUtils.openHelpWindow(anchor: "marcutapp-help") diff --git a/src/swift/MarcutApp/Sources/MarcutApp/BundleResourceLocator.swift b/src/swift/MarcutApp/Sources/MarcutApp/BundleResourceLocator.swift index 9557d5b..9e3b41f 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/BundleResourceLocator.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/BundleResourceLocator.swift @@ -21,7 +21,8 @@ enum BundleResourceLocator { // 2. Check Package Bundle (e.g. if we are inside a Swift Package structure) if let packageURL = Bundle.main.url(forResource: "MarcutApp_MarcutApp", withExtension: "bundle"), - let packageBundle = Bundle(url: packageURL) { + let packageBundle = Bundle(url: packageURL) + { if let url = packageBundle.url(forResource: name, withExtension: ext) { return url } @@ -31,10 +32,11 @@ enum BundleResourceLocator { } #if SWIFT_PACKAGE && DEBUG - if let url = Bundle.module.url(forResource: name, withExtension: ext) ?? - Bundle.module.url(forResource: name, withExtension: ext, subdirectory: "Resources") { - return url - } + if let url = Bundle.module.url(forResource: name, withExtension: ext) ?? + Bundle.module.url(forResource: name, withExtension: ext, subdirectory: "Resources") + { + return url + } #endif // 3. Check development paths (relative to CWD or known locations) @@ -43,7 +45,7 @@ enum BundleResourceLocator { "\(name).\(ext)", "MarcutApp/Sources/MarcutApp/Resources/\(name).\(ext)", "src/swift/MarcutApp/Sources/MarcutApp/Resources/\(name).\(ext)", - "marcut/\(name).\(ext)" + "marcut/\(name).\(ext)", ] for path in candidatePaths { diff --git a/src/swift/MarcutApp/Sources/MarcutApp/ContentView.swift b/src/swift/MarcutApp/Sources/MarcutApp/ContentView.swift index e47b4be..23df417 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/ContentView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/ContentView.swift @@ -1,9 +1,10 @@ +import AppKit +import Foundation import SwiftUI import UniformTypeIdentifiers -import Foundation -import AppKit // MARK: - AttributeGraph Debugging Extensions + extension ContentView { private func debugAttributeGraph() { print("🔍 ContentView AttributeGraph Analysis:") @@ -32,7 +33,7 @@ extension ContentView { var previousHasDocuments = viewModel.hasDocuments var previousIsEnvironmentReady = viewModel.isEnvironmentReady - for i in 0..<30 { // Monitor for 30 seconds + for i in 0 ..< 30 { // Monitor for 30 seconds try? await Task.sleep(nanoseconds: 1_000_000_000) // 1 second let currentItemsCount = viewModel.items.count @@ -40,15 +41,18 @@ extension ContentView { let currentIsEnvironmentReady = viewModel.isEnvironmentReady if currentItemsCount != previousItemsCount || - currentHasDocuments != previousHasDocuments || - currentIsEnvironmentReady != previousIsEnvironmentReady { - + currentHasDocuments != previousHasDocuments || + currentIsEnvironmentReady != previousIsEnvironmentReady + { print("🔄 AttributeGraph state change detected at \(i)s:") print(" - items.count: \(previousItemsCount) → \(currentItemsCount)") print(" - hasDocuments: \(previousHasDocuments) → \(currentHasDocuments)") print(" - isEnvironmentReady: \(previousIsEnvironmentReady) → \(currentIsEnvironmentReady)") - ContentView.logToFile("AttributeGraph state change at \(i)s - items:\(currentItemsCount) docs:\(currentHasDocuments) env:\(currentIsEnvironmentReady)") + ContentView + .logToFile( + "AttributeGraph state change at \(i)s - items:\(currentItemsCount) docs:\(currentHasDocuments) env:\(currentIsEnvironmentReady)" + ) previousItemsCount = currentItemsCount previousHasDocuments = currentHasDocuments @@ -62,8 +66,9 @@ extension ContentView { } // MARK: - Custom Color Palette (Adaptive for Light/Dark Mode) -struct CustomColors { - // Adaptive color properties that respond to color scheme + +enum CustomColors { + /// Adaptive color properties that respond to color scheme static func appBackground(for scheme: ColorScheme) -> Color { switch scheme { case .light: @@ -183,10 +188,11 @@ struct CustomColors { } // MARK: - Window Background Helper + struct WindowBackgroundView: NSViewRepresentable { @Environment(\.colorScheme) var colorScheme - func makeNSView(context: Context) -> NSView { + func makeNSView(context _: Context) -> NSView { let view = NSView() DispatchQueue.main.async { if let window = view.window { @@ -197,7 +203,7 @@ struct WindowBackgroundView: NSViewRepresentable { return view } - func updateNSView(_ nsView: NSView, context: Context) { + func updateNSView(_ nsView: NSView, context _: Context) { if let window = nsView.window { let bgColor = CustomColors.appBackground(for: colorScheme) window.backgroundColor = NSColor(bgColor) @@ -206,6 +212,7 @@ struct WindowBackgroundView: NSViewRepresentable { } // MARK: - Main Content View + struct ContentView: View { @EnvironmentObject private var viewModel: DocumentRedactionViewModel @State private var isTargeted = false @@ -218,7 +225,8 @@ struct ContentView: View { @State private var hasCheckedEnvironment = false @State private var pendingDropLoads = 0 @Environment(\.colorScheme) private var colorScheme - @AppStorage(DefaultsKey.outputSaveLocationPreference.key) private var outputSaveLocationRaw = OutputSaveLocation.alwaysAsk.rawValue + @AppStorage(DefaultsKey.outputSaveLocationPreference.key) private var outputSaveLocationRaw = OutputSaveLocation + .alwaysAsk.rawValue @AppStorage(DefaultsKey.lastExplicitOutputDirectoryPath.key) private var lastExplicitOutputDirectoryPath = "" private let actionButtonHeight: CGFloat = 52 @@ -226,11 +234,11 @@ struct ContentView: View { OutputSaveLocation(rawValue: outputSaveLocationRaw) ?? .alwaysAsk } - // Check if first run has been completed before + /// Check if first run has been completed before private var hasCompletedFirstRun: Bool { UserDefaults.standard.bool(forKey: DefaultsKey.hasCompletedFirstRun.key) } - + var body: some View { VStack(spacing: 24) { // Drop zone @@ -307,7 +315,8 @@ struct ContentView: View { ) } .buttonStyle(.plain) - .disabled(isPreparing || isStopping || viewModel.hasProcessingDocuments || currentProcessingTask != nil) + .disabled(isPreparing || isStopping || viewModel + .hasProcessingDocuments || currentProcessingTask != nil) .accessibilityIdentifier("content.retryFailed") } Spacer() @@ -372,7 +381,7 @@ struct ContentView: View { hasCheckedEnvironment = true // OPTIMIZATION: Check first-run status immediately before heavy environment checks - if !hasCompletedFirstRun && viewModel.availableModels.isEmpty { + if !hasCompletedFirstRun, viewModel.availableModels.isEmpty { ContentView.logToFile("🚀 Fast-path: Launching first-run setup immediately") viewModel.requestFirstRunSetup() // We still run environment check in background to populate status, but don't block UI @@ -420,7 +429,8 @@ struct ContentView: View { ContentView.logToFile("❌ Automatic recovery failed - showing detailed error") // Show detailed error with recovery options let diagnostics = viewModel.getDetailedEnvironmentDiagnostics() - let diagnosticText = diagnostics.map { "\($0.key): \($0.value)" }.joined(separator: "\n") + let diagnosticText = diagnostics.map { "\($0.key): \($0.value)" } + .joined(separator: "\n") alertInfo = AlertInfo( title: "Environment Issues Detected", @@ -493,8 +503,9 @@ struct ContentView: View { Text("Resume \(record.documentPaths.count) pending document(s) from your last session?") } } - + // MARK: - Drop Zone + private var dropZone: some View { VStack(spacing: 0) { // Drop area @@ -515,7 +526,8 @@ struct ContentView: View { .overlay( RoundedRectangle(cornerRadius: 12) .strokeBorder( - isTargeted ? CustomColors.accentColor(for: colorScheme) : CustomColors.subtleBorder(for: colorScheme).opacity(0.2), + isTargeted ? CustomColors.accentColor(for: colorScheme) : CustomColors + .subtleBorder(for: colorScheme).opacity(0.2), style: StrokeStyle(lineWidth: 2.5, dash: isTargeted ? [] : [8, 4]) ) .animation(.easeInOut(duration: 0.2), value: isTargeted) @@ -540,9 +552,9 @@ struct ContentView: View { .buttonStyle(.borderedProminent) .controlSize(.large) .accessibilityIdentifier("content.browse") - + Spacer() - + Button(action: { showSettings = true }) { HStack(spacing: 6) { Image(systemName: "gearshape.fill") @@ -567,8 +579,9 @@ struct ContentView: View { .stroke(CustomColors.subtleBorder(for: colorScheme).opacity(0.3), lineWidth: 1) ) } - + // MARK: - Action Buttons + private var actionButtons: some View { HStack(spacing: 12) { // Metadata-only report (no scrubbing) @@ -592,12 +605,12 @@ struct ContentView: View { } .disabled( !hasMetadataReportWork || - isPreparing || - isStopping || - viewModel.hasProcessingDocuments || - currentProcessingTask != nil || - viewModel.isPythonInitializing || - viewModel.pythonInitializationError != nil + isPreparing || + isStopping || + viewModel.hasProcessingDocuments || + currentProcessingTask != nil || + viewModel.isPythonInitializing || + viewModel.pythonInitializationError != nil ) .buttonStyle(.plain) .scaleEffect(hasMetadataReportWork ? 1.0 : 0.98) @@ -625,18 +638,18 @@ struct ContentView: View { } .disabled( !hasScrubWork || - isPreparing || - isStopping || - viewModel.hasProcessingDocuments || - currentProcessingTask != nil || - viewModel.isPythonInitializing || - viewModel.pythonInitializationError != nil + isPreparing || + isStopping || + viewModel.hasProcessingDocuments || + currentProcessingTask != nil || + viewModel.isPythonInitializing || + viewModel.pythonInitializationError != nil ) .buttonStyle(.plain) .scaleEffect(hasScrubWork ? 1.0 : 0.98) .animation(.easeInOut(duration: 0.2), value: hasScrubWork) .accessibilityIdentifier("content.scrubMetadata") - + // Process/Stop Button (right side) if isPreparing { // Show progress indicator while preparing @@ -681,7 +694,8 @@ struct ContentView: View { Image(systemName: "stop.fill") .font(.system(size: 16, weight: .semibold)) // If any item is in analyzing state (model download), reflect that in label - Text(viewModel.items.contains(where: { $0.status == .analyzing }) ? "Cancel Download" : "Stop Processing") + Text(viewModel.items + .contains(where: { $0.status == .analyzing }) ? "Cancel Download" : "Stop Processing") .font(.system(size: 16, weight: .semibold)) } .frame(maxWidth: .infinity) @@ -692,7 +706,11 @@ struct ContentView: View { .background( RoundedRectangle(cornerRadius: 12) .fill(CustomColors.destructiveColor(for: colorScheme)) - .shadow(color: CustomColors.destructiveColor(for: colorScheme).opacity(0.2), radius: 6, y: 3) + .shadow( + color: CustomColors.destructiveColor(for: colorScheme).opacity(0.2), + radius: 6, + y: 3 + ) ) } .buttonStyle(.plain) @@ -748,11 +766,18 @@ struct ContentView: View { .foregroundColor(.white) .background( RoundedRectangle(cornerRadius: 12) - .fill(hasReadyDocuments ? CustomColors.accentColor(for: colorScheme) : Color.gray.opacity(0.4)) - .shadow(color: hasReadyDocuments ? CustomColors.accentColor(for: colorScheme).opacity(0.2) : Color.clear, radius: 6, y: 3) + .fill(hasReadyDocuments ? CustomColors.accentColor(for: colorScheme) : Color.gray + .opacity(0.4)) + .shadow( + color: hasReadyDocuments ? CustomColors.accentColor(for: colorScheme) + .opacity(0.2) : Color.clear, + radius: 6, + y: 3 + ) ) } - .disabled(!hasReadyDocuments || !viewModel.isEnvironmentReady || isPreparing || viewModel.isPythonInitializing || viewModel.pythonInitializationError != nil) + .disabled(!hasReadyDocuments || !viewModel.isEnvironmentReady || isPreparing || viewModel + .isPythonInitializing || viewModel.pythonInitializationError != nil) .buttonStyle(.plain) .scaleEffect(hasReadyDocuments ? 1.0 : 0.98) .animation(.easeInOut(duration: 0.2), value: hasReadyDocuments) @@ -760,8 +785,9 @@ struct ContentView: View { } } } - + // MARK: - Actions + private func handleDrop(providers: [NSItemProvider]) { ContentView.logToFile("=== HANDLING FILE DROP ===") ContentView.logToFile("Number of providers: \(providers.count)") @@ -776,13 +802,14 @@ struct ContentView: View { provider.loadItem(forTypeIdentifier: UTType.fileURL.identifier, options: nil) { item, error in DispatchQueue.main.async { defer { finishDropLoad() } - if let error = error { + if let error { ContentView.logToFile("Error loading item: \(error.localizedDescription)") return } if let data = item as? Data, - let url = URL(dataRepresentation: data, relativeTo: nil) { + let url = URL(dataRepresentation: data, relativeTo: nil) + { ContentView.logToFile("Adding file: \(url.lastPathComponent)") viewModel.add(urls: [url]) ContentView.logToFile("After adding - hasValidDocuments: \(viewModel.hasValidDocuments)") @@ -796,14 +823,14 @@ struct ContentView: View { } } } - + private func openPanel() { // Permissions are handled centrally by FileAccessCoordinator - no need to check on every browse ContentView.logToFile("🔐 File browser - using centralized permission system") let panel = NSOpenPanel() panel.allowsMultipleSelection = true - panel.allowedContentTypes = [UTType.init(filenameExtension: "docx") ?? UTType.data] + panel.allowedContentTypes = [UTType(filenameExtension: "docx") ?? UTType.data] panel.message = "Select Microsoft Word documents (.docx) to redact" NSApp.activate(ignoringOtherApps: true) @@ -812,7 +839,7 @@ struct ContentView: View { Task { await viewModel.refreshEnvironmentStatus() } } } - + private func startProcessing() { // Log that the button was clicked ContentView.logToFile("=== REDACT DOCUMENTS BUTTON CLICKED ===") @@ -1007,7 +1034,7 @@ struct ContentView: View { private static func logToFile(_ message: String) { DebugLogger.shared.log(message, component: "ContentView") } - + private func stopProcessing() { isStopping = true currentProcessingTask?.cancel() @@ -1144,10 +1171,10 @@ struct ContentView: View { // Show preparing state isStopping = false isPreparing = true - + Task { try? await Task.sleep(nanoseconds: 100_000_000) // 0.1 second - + await MainActor.run { if outputSaveLocation.requiresPrompt { let panel = NSOpenPanel() @@ -1159,11 +1186,11 @@ struct ContentView: View { panel.prompt = "Save Here" isPreparing = false - + if panel.runModal() == .OK, let destination = panel.url { ContentView.logToFile("Metadata scrub destination: \(destination.path)") rememberExplicitDestination(destination) - + // Validate destination if let error = viewModel.validateDestination(destination) { alertInfo = AlertInfo(title: "Destination Error", message: error) @@ -1185,7 +1212,7 @@ struct ContentView: View { ) return } - + // Start metadata-only processing currentProcessingTask = Task { await viewModel.scrubMetadataOnly(to: destination) @@ -1218,7 +1245,7 @@ struct ContentView: View { } } } - + isPreparing = false } } @@ -1241,7 +1268,9 @@ struct ContentView: View { guard !trimmed.isEmpty else { return nil } let candidate = URL(fileURLWithPath: trimmed, isDirectory: true).standardizedFileURL var isDirectory: ObjCBool = false - guard FileManager.default.fileExists(atPath: candidate.path, isDirectory: &isDirectory), isDirectory.boolValue else { + guard FileManager.default.fileExists(atPath: candidate.path, isDirectory: &isDirectory), + isDirectory.boolValue + else { return nil } return candidate @@ -1298,13 +1327,14 @@ struct ContentView: View { } // MARK: - Document List View + struct DocumentListView: View { @ObservedObject var viewModel: DocumentRedactionViewModel @Binding var alertInfo: AlertInfo? @Environment(\.colorScheme) private var colorScheme let onRetry: (DocumentItem) -> Void private let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() - + var body: some View { ScrollView { LazyVStack(spacing: 12) { @@ -1329,7 +1359,7 @@ struct DocumentListView: View { } } } - + private func handleTap(on item: DocumentItem) { switch item.status { case .failed: @@ -1350,6 +1380,7 @@ struct DocumentListView: View { } // MARK: - Document Row + struct DocumentRow: View { @ObservedObject var item: DocumentItem @ObservedObject var viewModel: DocumentRedactionViewModel @@ -1357,7 +1388,7 @@ struct DocumentRow: View { @Environment(\.colorScheme) private var colorScheme private let heartbeatTimeout: TimeInterval = 30.0 let onRetry: (DocumentItem) -> Void - + var body: some View { HStack(spacing: 12) { // Trash button to remove this document @@ -1372,13 +1403,13 @@ struct DocumentRow: View { .opacity(item.status.isProcessing ? 0.3 : 1.0) .help("Remove from list") .accessibilityIdentifier("document.remove.\(item.id.uuidString)") - + // Status icon Image(systemName: iconName) .font(.system(size: 20, weight: .medium)) .foregroundColor(iconColor) .frame(width: 24, height: 24) - + // Document info and progress VStack(alignment: .leading, spacing: 6) { // Document name @@ -1403,7 +1434,7 @@ struct DocumentRow: View { } } } - + // Enhanced status display for processing documents if item.status.isProcessing { VStack(alignment: .leading, spacing: 8) { @@ -1429,34 +1460,51 @@ struct DocumentRow: View { } } } - + Spacer(minLength: 12) - + if item.status.isComplete { // Action buttons for completed items with enhanced tooltips HStack(spacing: 8) { TooltipButton( - action: { performUserAction(failureMessage: "The document is not available yet.") { viewModel.openRedactedDocument(item) } }, + action: { + performUserAction(failureMessage: "The document is not available yet.") { + viewModel.openRedactedDocument(item) + } + }, icon: "doc.text.fill", - tooltip: item.reportOutputURL != nil ? "Open Redacted Document" : "Open Metadata Scrubbed Document", - description: item.reportOutputURL != nil ? "Opens the redacted .docx file with sensitive information removed" : "Opens the metadata-cleaned .docx file", + tooltip: item + .reportOutputURL != nil ? "Open Redacted Document" : "Open Metadata Scrubbed Document", + description: item + .reportOutputURL != nil ? + "Opens the redacted .docx file with sensitive information removed" : + "Opens the metadata-cleaned .docx file", isEnabled: item.redactedOutputURL != nil, accessibilityId: "document.openRedacted.\(item.id.uuidString)" ) TooltipButton( - action: { performUserAction(failureMessage: "Output files could not be revealed in Finder.") { viewModel.revealInFinder(item) } }, + action: { + performUserAction(failureMessage: "Output files could not be revealed in Finder.") { + viewModel.revealInFinder(item) + } + }, icon: "folder.fill", tooltip: "Show in Finder", description: "Reveals output files in Finder for easy access", - isEnabled: item.redactedOutputURL != nil || item.reportOutputURL != nil || item.scrubReportOutputURL != nil, + isEnabled: item.redactedOutputURL != nil || item.reportOutputURL != nil || item + .scrubReportOutputURL != nil, accessibilityId: "document.revealInFinder.\(item.id.uuidString)" ) - + // Show redaction report button if available if item.reportOutputURL != nil { TooltipButton( - action: { performUserAction(failureMessage: "The audit report is not available yet.") { viewModel.openReport(item) } }, + action: { + performUserAction(failureMessage: "The audit report is not available yet.") { + viewModel.openReport(item) + } + }, icon: "doc.text.magnifyingglass", tooltip: "View Audit Report", description: "Shows detailed report of all detected entities and redactions", @@ -1464,19 +1512,28 @@ struct DocumentRow: View { accessibilityId: "document.openReport.\(item.id.uuidString)" ) } - + // Show scrub report button (always available, enabled if URL exists) TooltipButton( - action: { performUserAction(failureMessage: "The scrub report is not available yet.") { viewModel.openScrubReport(item) } }, + action: { + performUserAction(failureMessage: "The scrub report is not available yet.") { + viewModel.openScrubReport(item) + } + }, icon: "magnifyingglass.circle.fill", tooltip: "View Scrub Report", description: "Shows metadata report (before/after or observed) with raw JSON link", - isEnabled: item.scrubReportOutputURL != nil || item.metadataReportOutputURL != nil || item.reportOutputURL != nil, + isEnabled: item.scrubReportOutputURL != nil || item.metadataReportOutputURL != nil || item + .reportOutputURL != nil, accessibilityId: "document.openScrubReport.\(item.id.uuidString)" ) TooltipButton( - action: { performUserAction(failureMessage: "The document is not available yet.") { viewModel.shareDocument(item) } }, + action: { + performUserAction(failureMessage: "The document is not available yet.") { + viewModel.shareDocument(item) + } + }, icon: "square.and.arrow.up", tooltip: "Send Document", description: "Choose between a final redacted copy or a review copy with Track Changes", @@ -1484,11 +1541,15 @@ struct DocumentRow: View { accessibilityId: "document.share.\(item.id.uuidString)" ) } - } else if metadataReportAvailable { - VStack(alignment: .trailing, spacing: 6) { - HStack(spacing: 8) { - TooltipButton( - action: { performUserAction(failureMessage: "The metadata report is not available yet.") { viewModel.openMetadataReport(item) } }, + } else if metadataReportAvailable { + VStack(alignment: .trailing, spacing: 6) { + HStack(spacing: 8) { + TooltipButton( + action: { + performUserAction(failureMessage: "The metadata report is not available yet.") { + viewModel.openMetadataReport(item) + } + }, icon: "magnifyingglass.circle.fill", tooltip: "View Metadata Report", description: "Opens the metadata-only report (HTML preferred)", @@ -1496,7 +1557,11 @@ struct DocumentRow: View { accessibilityId: "document.openMetadataReport.\(item.id.uuidString)" ) TooltipButton( - action: { performUserAction(failureMessage: "The metadata report is not available yet.") { viewModel.saveMetadataReport(item) } }, + action: { + performUserAction(failureMessage: "The metadata report is not available yet.") { + viewModel.saveMetadataReport(item) + } + }, icon: "square.and.arrow.down", tooltip: "Save metadata report (HTML + JSON)", description: "Saves the HTML report and JSON data to a location you choose", @@ -1524,50 +1589,55 @@ struct DocumentRow: View { .background( RoundedRectangle(cornerRadius: 12) .fill(CustomColors.cardBackground(for: colorScheme)) - .shadow(color: colorScheme == .dark ? Color.black.opacity(0.2) : Color.black.opacity(0.03), radius: 6, x: 0, y: 1) + .shadow( + color: colorScheme == .dark ? Color.black.opacity(0.2) : Color.black.opacity(0.03), + radius: 6, + x: 0, + y: 1 + ) ) .overlay( RoundedRectangle(cornerRadius: 12) .stroke(CustomColors.subtleBorder(for: colorScheme), lineWidth: 1) ) } - + private var metadataReportAvailable: Bool { item.metadataReportOutputURL != nil || item.metadataReportHTMLOutputURL != nil } - + private var iconName: String { switch item.status { - case .checking: return "doc.text.magnifyingglass" - case .validDocument: return "doc.text.fill" - case .invalidDocument: return "doc.badge.exclamationmark" - case .processing, .analyzing, .redacting: return "doc.text.magnifyingglass" - case .completed: return "checkmark.circle.fill" - case .failed: return "xmark.circle.fill" - case .cancelled: return "stop.circle.fill" + case .checking: "doc.text.magnifyingglass" + case .validDocument: "doc.text.fill" + case .invalidDocument: "doc.badge.exclamationmark" + case .processing, .analyzing, .redacting: "doc.text.magnifyingglass" + case .completed: "checkmark.circle.fill" + case .failed: "xmark.circle.fill" + case .cancelled: "stop.circle.fill" } } - + private var iconColor: Color { switch item.status { - case .validDocument, .completed: return CustomColors.accentColor(for: colorScheme) - case .invalidDocument, .failed: return CustomColors.destructiveColor(for: colorScheme) - case .cancelled: return CustomColors.secondaryText(for: colorScheme) - default: return CustomColors.accentColor(for: colorScheme) + case .validDocument, .completed: CustomColors.accentColor(for: colorScheme) + case .invalidDocument, .failed: CustomColors.destructiveColor(for: colorScheme) + case .cancelled: CustomColors.secondaryText(for: colorScheme) + default: CustomColors.accentColor(for: colorScheme) } } - + private func getStageColor(_ stage: ProcessingStage) -> Color { switch stage { - case .preflight: return .blue - case .ruleDetection: return .green - case .llmValidation: return .orange - case .enhancedDetection: return .purple - case .merging: return .indigo - case .outputGeneration: return .teal + case .preflight: .blue + case .ruleDetection: .green + case .llmValidation: .orange + case .enhancedDetection: .purple + case .merging: .indigo + case .outputGeneration: .teal } } - + private func performUserAction(failureMessage: String, action: () -> Bool) { guard action() else { alertInfo = AlertInfo(title: "Action Unavailable", message: failureMessage) @@ -1577,10 +1647,11 @@ struct DocumentRow: View { } // MARK: - Status View + struct StatusView: View { let status: RedactionStatus @Environment(\.colorScheme) private var colorScheme - + var body: some View { Group { switch status { @@ -1649,6 +1720,7 @@ struct StatusView: View { } // MARK: - Footer View + struct FooterView: View { @Environment(\.colorScheme) private var colorScheme var body: some View { @@ -1661,17 +1733,18 @@ struct FooterView: View { .lineLimit(2) .multilineTextAlignment(.center) .font(.system(size: 13, weight: .medium)) - + HStack(spacing: 4) { Text("Got bugs? Message me at") .foregroundColor(CustomColors.secondaryText(for: colorScheme)) - Link("linkedin.com/in/marcmandel/", destination: URL(string: "https://www.linkedin.com/in/marcmandel/")!) + Link( + "linkedin.com/in/marcmandel/", + destination: URL(string: "https://www.linkedin.com/in/marcmandel/")! + ) } .lineLimit(2) .multilineTextAlignment(.center) .font(.system(size: 13, weight: .medium)) - - } .multilineTextAlignment(.center) .padding(.top, 8) @@ -1696,15 +1769,15 @@ struct EnvironmentStatusBanner: View { ? ("bolt.circle.fill", .green, "Ollama running") : ("bolt.slash.fill", .orange, "Ollama offline") } - + private var environmentStatusComponents: (String, String?) { let baseStatus = viewModel.environmentStatus if baseStatus.contains("Starting") { let dots = String(repeating: ".", count: animationDotCount) // Clean status text (remove any existing dots just in case) let cleanStatus = baseStatus.replacingOccurrences(of: "...", with: "") - .replacingOccurrences(of: "..", with: "") - .trimmingCharacters(in: .punctuationCharacters) + .replacingOccurrences(of: "..", with: "") + .trimmingCharacters(in: .punctuationCharacters) return (cleanStatus, dots) } return (baseStatus, nil) @@ -1714,22 +1787,26 @@ struct EnvironmentStatusBanner: View { HStack(spacing: 16) { StatusLabel(icon: frameworkStatus.0, color: frameworkStatus.1, text: frameworkStatus.2) StatusLabel(icon: ollamaStatus.0, color: ollamaStatus.1, text: ollamaStatus.2) - StatusLabel(icon: "shippingbox.fill", color: viewModel.availableModels.isEmpty ? .orange : .blue, text: "\(viewModel.availableModels.count) models") + StatusLabel( + icon: "shippingbox.fill", + color: viewModel.availableModels.isEmpty ? .orange : .blue, + text: "\(viewModel.availableModels.count) models" + ) Spacer() - + // Simplified ready status - just checkmark and "Ready with AI" if viewModel.isEnvironmentReady { StatusLabel( - icon: "checkmark.circle.fill", - color: .green, + icon: "checkmark.circle.fill", + color: .green, text: viewModel.settings.mode == .rules ? "Ready (Rules Only)" : "Ready with AI", animatingDots: nil ) } else { let (statusText, dots) = environmentStatusComponents StatusLabel( - icon: "hourglass", - color: .orange, + icon: "hourglass", + color: .orange, text: statusText, animatingDots: dots ) @@ -1752,7 +1829,7 @@ struct EnvironmentStatusBanner: View { stopAnimation() } } - + private func startAnimation() { stopAnimation() timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { _ in @@ -1767,7 +1844,7 @@ struct EnvironmentStatusBanner: View { } } } - + private func stopAnimation() { timer?.invalidate() timer = nil @@ -1777,13 +1854,13 @@ struct EnvironmentStatusBanner: View { let icon: String let color: Color let text: String - var animatingDots: String? = nil + var animatingDots: String? var body: some View { HStack(spacing: 6) { Image(systemName: icon) .foregroundColor(color) - + HStack(spacing: 0) { Text(text) if let dots = animatingDots { @@ -1864,7 +1941,7 @@ extension DocumentRow { private func formatTimeRemaining(_ timeInterval: TimeInterval) -> String { let minutes = Int(timeInterval) / 60 let seconds = Int(timeInterval) % 60 - + if minutes > 60 { let hours = minutes / 60 let remainingMinutes = minutes % 60 @@ -1877,9 +1954,8 @@ extension DocumentRow { } } - -// Batch-level "time remaining" indicator shown above the action buttons during a multi-document -// run, once BatchETACalculator has enough completed-document samples to produce an estimate. +/// Batch-level "time remaining" indicator shown above the action buttons during a multi-document +/// run, once BatchETACalculator has enough completed-document samples to produce an estimate. struct BatchETAView: View { let remainingSeconds: TimeInterval @Environment(\.colorScheme) private var colorScheme @@ -1913,59 +1989,57 @@ struct BatchETAView: View { } } -// Countdown timer component +/// Countdown timer component struct CountdownTimerView: View { let remainingSeconds: TimeInterval let isActive: Bool @Environment(\.colorScheme) private var colorScheme - + var body: some View { - Group { - if isActive { - HStack(spacing: 2) { - Image(systemName: remainingSeconds > 0 ? "clock" : "hourglass") - .font(.system(size: 10, weight: .medium)) - .foregroundColor(CustomColors.accentColor(for: colorScheme)) + if isActive { + HStack(spacing: 2) { + Image(systemName: remainingSeconds > 0 ? "clock" : "hourglass") + .font(.system(size: 10, weight: .medium)) + .foregroundColor(CustomColors.accentColor(for: colorScheme)) - Text(remainingSeconds > 0 ? formatTime(remainingSeconds) : "Processing...") - .font(.system(size: 12, weight: .semibold, design: .monospaced)) - .foregroundColor(CustomColors.accentColor(for: colorScheme)) - } - .padding(.horizontal, 8) - .padding(.vertical, 3) - .background( - Capsule() - .fill(CustomColors.accentColor(for: colorScheme).opacity(0.1)) - .overlay( - Capsule() - .stroke(CustomColors.accentColor(for: colorScheme).opacity(0.2), lineWidth: 0.5) - ) - ) - } else if !isActive { - HStack(spacing: 2) { - Image(systemName: "checkmark.circle.fill") - .font(.system(size: 12, weight: .medium)) - .foregroundColor(.green) - - Text("Done") - .font(.system(size: 12, weight: .semibold)) - .foregroundColor(.green) - } - .padding(.horizontal, 8) - .padding(.vertical, 3) - .background( - Capsule() - .fill(Color.green.opacity(0.1)) - ) + Text(remainingSeconds > 0 ? formatTime(remainingSeconds) : "Processing...") + .font(.system(size: 12, weight: .semibold, design: .monospaced)) + .foregroundColor(CustomColors.accentColor(for: colorScheme)) } + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background( + Capsule() + .fill(CustomColors.accentColor(for: colorScheme).opacity(0.1)) + .overlay( + Capsule() + .stroke(CustomColors.accentColor(for: colorScheme).opacity(0.2), lineWidth: 0.5) + ) + ) + } else if !isActive { + HStack(spacing: 2) { + Image(systemName: "checkmark.circle.fill") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.green) + + Text("Done") + .font(.system(size: 12, weight: .semibold)) + .foregroundColor(.green) + } + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background( + Capsule() + .fill(Color.green.opacity(0.1)) + ) } } - + private func formatTime(_ timeInterval: TimeInterval) -> String { let totalSeconds = Int(timeInterval) let minutes = totalSeconds / 60 let seconds = totalSeconds % 60 - + if minutes > 60 { let hours = minutes / 60 let remainingMinutes = minutes % 60 @@ -2041,12 +2115,13 @@ struct HeartbeatStatusView: View { } // MARK: - Enhanced Tooltip Button + struct TooltipButton: View { let action: () -> Void let iconView: (Color) -> AnyView let tooltip: String let description: String - var isEnabled: Bool = true // Default to enabled + var isEnabled: Bool = true // Default to enabled let iconName: String? let accessibilityId: String? diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DefaultsKey.swift b/src/swift/MarcutApp/Sources/MarcutApp/DefaultsKey.swift index 8804272..4f059ac 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DefaultsKey.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DefaultsKey.swift @@ -34,5 +34,7 @@ enum DefaultsKey: String { case metadataCleaningSettings = "MetadataCleaningSettings" /// Convenience for call sites that need the raw string (e.g. `@AppStorage`, `defaults.object(forKey:)`). - var key: String { rawValue } + var key: String { + rawValue + } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DiskSpaceCheck.swift b/src/swift/MarcutApp/Sources/MarcutApp/DiskSpaceCheck.swift index 75d42a1..00343d9 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DiskSpaceCheck.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DiskSpaceCheck.swift @@ -27,11 +27,16 @@ enum DiskSpaceCheck { let cleaned = label.trimmingCharacters(in: .whitespaces) let pattern = #"(\d+\.?\d*)\s*([KMGT]B)"# guard let regex = try? NSRegularExpression(pattern: pattern, options: [.caseInsensitive]), - let match = regex.firstMatch(in: cleaned, options: [], range: NSRange(cleaned.startIndex..., in: cleaned)), + let match = regex.firstMatch( + in: cleaned, + options: [], + range: NSRange(cleaned.startIndex..., in: cleaned) + ), let valueRange = Range(match.range(at: 1), in: cleaned), let unitRange = Range(match.range(at: 2), in: cleaned), let value = Double(cleaned[valueRange]), - value > 0 else { + value > 0 + else { return nil } @@ -66,7 +71,8 @@ enum DiskSpaceCheck { ) -> String? { guard estimatedBytesNeeded > 0, let available = freeSpaceProvider(directory), - available < estimatedBytesNeeded else { + available < estimatedBytesNeeded + else { return nil } return "Not enough free disk space to \(subject) (needs ~\(formatGB(estimatedBytesNeeded)), " diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift b/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift index d1b17aa..69350e3 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift @@ -1,6 +1,6 @@ +import Foundation import SwiftUI import UniformTypeIdentifiers -import Foundation // MARK: - Data Models @@ -20,7 +20,7 @@ final class DocumentItem: Identifiable, ObservableObject { @Published var redactedOutputURL: URL? = nil @Published var reportOutputURL: URL? = nil @Published var reportHTMLOutputURL: URL? = nil - + // Metadata scrubbing results @Published var scrubOutputURL: URL? = nil @Published var scrubReportOutputURL: URL? = nil @@ -33,8 +33,8 @@ final class DocumentItem: Identifiable, ObservableObject { @Published var lastOperation: DocumentOperation? = nil // File paths for Python processing - var outputPath: String? = nil - var reportPath: String? = nil + var outputPath: String? + var reportPath: String? // Enhanced progress tracking @Published var currentStage: ProcessingStage = .preflight @@ -42,48 +42,49 @@ final class DocumentItem: Identifiable, ObservableObject { @Published var estimatedTimeRemaining: TimeInterval = 0.0 @Published var startTime: Date? = nil @Published var documentComplexity: DocumentComplexity = .unknown - @Published var lastTimeUpdate: Date = Date() + @Published var lastTimeUpdate: Date = .init() @Published var allStages: [ProcessingStage] = ProcessingStage.allCases - private var stageStartTime: Date? = nil + private var stageStartTime: Date? private var stageExpectedDuration: TimeInterval = 0.0 private var stageBaseDuration: TimeInterval = 0.0 - private var progressRange: ClosedRange = 0.0...1.0 + private var progressRange: ClosedRange = 0.0 ... 1.0 @Published var wordCount: Int? = nil @Published var lastHeartbeat: Date? = nil @Published var lastHeartbeatChunk: Int = 0 @Published var totalHeartbeatChunks: Int = 0 @Published var lastDestinationURL: URL? = nil - + // Mass-based progress tracking @Published var totalMass: Int = 0 @Published var processedMass: Int = 0 private var currentChunkMass: Int = 0 - private var massStartTime: Date? = nil - private var pendingTotalMass: Int? = nil - private var chunkStartTime: Date? = nil - private var smoothedCharsPerSecond: Double? = nil + private var massStartTime: Date? + private var pendingTotalMass: Int? + private var chunkStartTime: Date? + private var smoothedCharsPerSecond: Double? - // File access management + /// File access management private(set) var hasSecurityScope: Bool = false // MARK: - Smooth Progress Animation Properties + private var smoothProgressTimer: Timer? private var targetProgress: Double = 0.0 private var currentVelocity: Double = 0.0 - private var lastProgressUpdate: Date = Date() + private var lastProgressUpdate: Date = .init() private var microProgressActive: Bool = false private var microProgressTimer: Timer? // Animation parameters - private let smoothingFactor: Double = 0.15 // Higher = smoother but slower response - private let maxVelocity: Double = 0.8 // Max progress units per second - private let acceleration: Double = 0.3 // Acceleration rate - private let microProgressSpeed: Double = 0.02 // Small forward movement per tick - private let microProgressInterval: TimeInterval = 0.1 // 100ms micro-updates + private let smoothingFactor: Double = 0.15 // Higher = smoother but slower response + private let maxVelocity: Double = 0.8 // Max progress units per second + private let acceleration: Double = 0.3 // Acceleration rate + private let microProgressSpeed: Double = 0.02 // Small forward movement per tick + private let microProgressInterval: TimeInterval = 0.1 // 100ms micro-updates - // Computed property for file path + /// Computed property for file path var path: String { - return url.path + url.path } init(url: URL) { @@ -97,8 +98,8 @@ final class DocumentItem: Identifiable, ObservableObject { url.stopAccessingSecurityScopedResource() } } - - // Smart time estimation that can adjust up or down + + /// Smart time estimation that can adjust up or down func updateTimeEstimate(_ newEstimate: TimeInterval) { let now = Date() let clampedEstimate = max(0.0, newEstimate) @@ -119,7 +120,7 @@ final class DocumentItem: Identifiable, ObservableObject { lastTimeUpdate = now } - + func beginStage(_ stage: ProcessingStage) { // Stop any existing animations before stage transition stopMicroProgress() @@ -195,7 +196,8 @@ final class DocumentItem: Identifiable, ObservableObject { func applyStageProgressFraction(_ fraction: Double) { let clamped = min(max(fraction, 0.0), 1.0) stageProgress = clamped - let targetStageProgress = progressRange.lowerBound + clamped * (progressRange.upperBound - progressRange.lowerBound) + let targetStageProgress = progressRange + .lowerBound + clamped * (progressRange.upperBound - progressRange.lowerBound) setTargetProgress(targetStageProgress, isChunkUpdate: false) startMicroProgress() } @@ -257,7 +259,7 @@ final class DocumentItem: Identifiable, ObservableObject { @MainActor private func startMomentumAnimation() { smoothProgressTimer = Timer.scheduledTimer(withTimeInterval: 0.016, repeats: true) { [weak self] timer in - guard let self = self else { + guard let self else { timer.invalidate() return } @@ -315,7 +317,7 @@ final class DocumentItem: Identifiable, ObservableObject { let startTime = Date() smoothProgressTimer = Timer.scheduledTimer(withTimeInterval: 0.016, repeats: true) { [weak self] timer in - guard let self = self else { + guard let self else { timer.invalidate() return } @@ -323,7 +325,8 @@ final class DocumentItem: Identifiable, ObservableObject { let elapsed = Date().timeIntervalSince(startTime) let progress = min(elapsed * 3.0, 1.0) // 0.33 second animation - self.progress = initialProgress + (self.targetProgress - initialProgress) * self.applyAngularEasing(progress) + self.progress = initialProgress + (self.targetProgress - initialProgress) * self + .applyAngularEasing(progress) if progress >= 1.0 { self.progress = self.targetProgress @@ -342,33 +345,34 @@ final class DocumentItem: Identifiable, ObservableObject { microProgressActive = true microProgressTimer?.invalidate() - microProgressTimer = Timer.scheduledTimer(withTimeInterval: microProgressInterval, repeats: true) { [weak self] timer in - guard let self = self else { - timer.invalidate() - return - } - Task { @MainActor in - // Only add forward movement, never backward - let forwardSpace = self.targetProgress - self.progress - if forwardSpace > 0.001 { - // Take smaller steps as we get closer to target - let microIncrement = min(self.microProgressSpeed, forwardSpace * 0.5) - let newProgress = self.progress + microIncrement - - // Ensure we don't exceed target - if newProgress < self.targetProgress { - self.progress = newProgress + microProgressTimer = Timer + .scheduledTimer(withTimeInterval: microProgressInterval, repeats: true) { [weak self] timer in + guard let self else { + timer.invalidate() + return + } + Task { @MainActor in + // Only add forward movement, never backward + let forwardSpace = self.targetProgress - self.progress + if forwardSpace > 0.001 { + // Take smaller steps as we get closer to target + let microIncrement = min(self.microProgressSpeed, forwardSpace * 0.5) + let newProgress = self.progress + microIncrement + + // Ensure we don't exceed target + if newProgress < self.targetProgress { + self.progress = newProgress + } else { + self.progress = self.targetProgress + self.stopMicroProgress() + } } else { + // We're at or very close to target self.progress = self.targetProgress self.stopMicroProgress() } - } else { - // We're at or very close to target - self.progress = self.targetProgress - self.stopMicroProgress() } } - } } /// Stops micro-progress animation @@ -404,11 +408,11 @@ final class DocumentItem: Identifiable, ObservableObject { func updateEstimatesForCurrentTime() { // If using mass-based tracking during extraction phase, use specialized logic - if currentStage == .enhancedDetection && totalMass > 0 { + if currentStage == .enhancedDetection, totalMass > 0 { updateMassBasedEstimate() return } - + guard let start = stageStartTime else { return } let elapsed = Date().timeIntervalSince(start) @@ -444,11 +448,12 @@ final class DocumentItem: Identifiable, ObservableObject { guard trimmed.hasPrefix("{"), let data = trimmed.data(using: .utf8), let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], - let type = json["type"] as? String else { + let type = json["type"] as? String + else { return false } - if currentStage != .enhancedDetection && type == "mass_total" { + if currentStage != .enhancedDetection, type == "mass_total" { pendingTotalMass = intValue(from: json["value"]) return true } @@ -477,14 +482,15 @@ final class DocumentItem: Identifiable, ObservableObject { // Keep-alive signals carry chunk info for progress updates during LLM calls // This ensures the progress bar advances even when waiting on long LLM responses if let chunk = intValue(from: json["chunk"]), - let total = intValue(from: json["total"]) { + let total = intValue(from: json["total"]) + { lastHeartbeat = Date() lastHeartbeatChunk = chunk totalHeartbeatChunks = total - + // Update progress based on chunk ratio if we don't have mass tracking // or if mass tracking underestimates progress - if totalMass == 0 && total > 0 { + if totalMass == 0, total > 0 { let chunkFraction = min(max(Double(chunk) / Double(total), 0.0), 1.0) let stageLower = progressRange.lowerBound let stageUpper = progressRange.upperBound @@ -502,7 +508,7 @@ final class DocumentItem: Identifiable, ObservableObject { private func updateMassBasedEstimate() { guard totalMass > 0 else { return } - + if massStartTime == nil { massStartTime = Date() } @@ -521,20 +527,20 @@ final class DocumentItem: Identifiable, ObservableObject { progressThroughChunk = min(chunkElapsed / expected, 0.95) interpolatedChunkMass = chunkContribution * progressThroughChunk } - + let effectiveProcessed = Double(processedMass) + interpolatedChunkMass let totalFraction = min(max(effectiveProcessed / Double(totalMass), 0.0), 1.0) - + // Apply to valid range for this stage let stageLower = progressRange.lowerBound let stageUpper = progressRange.upperBound let globalProgress = stageLower + (totalFraction * (stageUpper - stageLower)) - + if globalProgress > targetProgress { setTargetProgress(globalProgress, isChunkUpdate: false) } - - if overallElapsed > 0.0 && effectiveProcessed > 0.0 { + + if overallElapsed > 0.0, effectiveProcessed > 0.0 { let rate = effectiveProcessed / overallElapsed let remainingMass = max(Double(totalMass) - effectiveProcessed, 0.0) let remainingCurrentStage = remainingMass / max(rate, 1.0) @@ -572,7 +578,7 @@ final class DocumentItem: Identifiable, ObservableObject { if let start = chunkStartTime, size > 0 { let duration = max(Date().timeIntervalSince(start), 0.5) let rate = Double(size) / duration - if rate.isFinite && rate > 0 { + if rate.isFinite, rate > 0 { if let existing = smoothedCharsPerSecond { smoothedCharsPerSecond = existing * 0.7 + rate * 0.3 } else { @@ -678,66 +684,66 @@ enum ProcessingStage: CaseIterable { case enhancedDetection case merging case outputGeneration - + var displayName: String { switch self { - case .preflight: return "Loading Document" - case .ruleDetection: return "Detecting Data" - case .llmValidation: return "Validating Entities" - case .enhancedDetection: return "AI Analysis" - case .merging: return "Merging Results" - case .outputGeneration: return "Creating Output" + case .preflight: "Loading Document" + case .ruleDetection: "Detecting Data" + case .llmValidation: "Validating Entities" + case .enhancedDetection: "AI Analysis" + case .merging: "Merging Results" + case .outputGeneration: "Creating Output" } } var expectedDuration: TimeInterval { switch self { - case .preflight: return 5 - case .ruleDetection: return 15 - case .llmValidation: return 20 - case .enhancedDetection: return 120 // Most time-consuming - case .merging: return 12 - case .outputGeneration: return 18 + case .preflight: 5 + case .ruleDetection: 15 + case .llmValidation: 20 + case .enhancedDetection: 120 // Most time-consuming + case .merging: 12 + case .outputGeneration: 18 } } var icon: String { switch self { - case .preflight: return "checkmark.shield" - case .ruleDetection: return "text.magnifyingglass" - case .llmValidation: return "brain" - case .enhancedDetection: return "sparkles" - case .merging: return "arrow.triangle.merge" - case .outputGeneration: return "doc.badge.gearshape" + case .preflight: "checkmark.shield" + case .ruleDetection: "text.magnifyingglass" + case .llmValidation: "brain" + case .enhancedDetection: "sparkles" + case .merging: "arrow.triangle.merge" + case .outputGeneration: "doc.badge.gearshape" } } var progressRange: ClosedRange { switch self { - case .preflight: return 0.0...0.12 - case .ruleDetection: return 0.12...0.25 - case .llmValidation: return 0.25...0.40 - case .enhancedDetection: return 0.40...0.80 - case .merging: return 0.80...0.92 - case .outputGeneration: return 0.92...1.0 + case .preflight: 0.0 ... 0.12 + case .ruleDetection: 0.12 ... 0.25 + case .llmValidation: 0.25 ... 0.40 + case .enhancedDetection: 0.40 ... 0.80 + case .merging: 0.80 ... 0.92 + case .outputGeneration: 0.92 ... 1.0 } } } enum DocumentComplexity { case unknown - case simple // < 10 pages - case moderate // 10-50 pages - case complex // 50-100 pages - case massive // 100+ pages + case simple // < 10 pages + case moderate // 10-50 pages + case complex // 50-100 pages + case massive // 100+ pages var multiplier: Double { switch self { - case .unknown: return 1.0 - case .simple: return 0.5 - case .moderate: return 1.0 - case .complex: return 2.0 - case .massive: return 4.0 + case .unknown: 1.0 + case .simple: 0.5 + case .moderate: 1.0 + case .complex: 2.0 + case .massive: 4.0 } } @@ -761,13 +767,13 @@ enum DocumentComplexity { static func fallback(forFileSize size: Int64) -> DocumentComplexity { switch size { case ..<150_000: // <150 KB - return .simple + .simple case ..<600_000: // <600 KB - return .moderate + .moderate case ..<2_500_000: // <2.5 MB - return .complex + .complex default: - return .massive + .massive } } } @@ -788,54 +794,54 @@ enum RedactionStatus: Sendable { case completed case failed case cancelled - + var displayText: String { switch self { - case .checking: return "[Checking...]" - case .validDocument: return "[Valid DOCX]" - case .invalidDocument: return "[Invalid File]" - case .processing: return "[Processing...]" - case .analyzing: return "[Analyzing...]" - case .redacting: return "[Redacting...]" - case .completed: return "[Completed]" - case .failed: return "[Failed]" - case .cancelled: return "[Cancelled]" - } - } - + case .checking: "[Checking...]" + case .validDocument: "[Valid DOCX]" + case .invalidDocument: "[Invalid File]" + case .processing: "[Processing...]" + case .analyzing: "[Analyzing...]" + case .redacting: "[Redacting...]" + case .completed: "[Completed]" + case .failed: "[Failed]" + case .cancelled: "[Cancelled]" + } + } + var isProcessing: Bool { switch self { case .checking, .processing, .analyzing, .redacting: - return true + true default: - return false + false } } - + var isComplete: Bool { switch self { case .completed: - return true + true default: - return false + false } } - + var isPendingReview: Bool { switch self { case .validDocument, .checking: - return true + true default: - return false + false } } - + var canRetry: Bool { switch self { case .failed, .cancelled: - return true + true default: - return false + false } } } @@ -846,7 +852,7 @@ enum DocumentOperation: String, Sendable { } enum RedactionMode: String, CaseIterable, Codable { - case rules = "rules" + case rules case rulesOverride = "rules_override" case constrainedOverrides = "constrained_overrides" case llmOverrides = "llm_overrides" @@ -854,26 +860,26 @@ enum RedactionMode: String, CaseIterable, Codable { var displayName: String { switch self { case .rules: - return "Rules Only" + "Rules Only" case .rulesOverride: - return "Rules + AI (Rules Override)" + "Rules + AI (Rules Override)" case .constrainedOverrides: - return "Rules + AI (Constrained LLM Overrides)" + "Rules + AI (Constrained LLM Overrides)" case .llmOverrides: - return "Rules + AI (LLM Overrides)" + "Rules + AI (LLM Overrides)" } } var description: String { switch self { case .rules: - return "Fast rule-based detection for structured PII" + "Fast rule-based detection for structured PII" case .rulesOverride: - return "AI expands coverage, but deterministic rules always win" + "AI expands coverage, but deterministic rules always win" case .constrainedOverrides: - return "LLM can veto rules for ORG/NAME/LOC with high confidence" + "LLM can veto rules for ORG/NAME/LOC with high confidence" case .llmOverrides: - return "LLM can override any rule when confident" + "LLM can override any rule when confident" } } @@ -900,63 +906,65 @@ enum RedactionRule: String, CaseIterable, Identifiable, Codable, Hashable { case signatureNames = "SIGNATURE" case images = "IMAGES" - var id: String { rawValue } + var id: String { + rawValue + } var displayName: String { switch self { - case .email: return "EMAIL" - case .phone: return "PHONE" - case .ssn: return "SSN" - case .money: return "MONEY" - case .percent: return "PERCENT" - case .number: return "NUMBER" - case .date: return "DATE" - case .account: return "ACCOUNT" - case .swift: return "SWIFT/BIC" - case .card: return "CARD" - case .url: return "URL" - case .ip: return "IP" - case .org: return "ORG" - case .loc: return "Address (LOC)" - case .signatureNames: return "Signature Names" - case .images: return "IMAGES" + case .email: "EMAIL" + case .phone: "PHONE" + case .ssn: "SSN" + case .money: "MONEY" + case .percent: "PERCENT" + case .number: "NUMBER" + case .date: "DATE" + case .account: "ACCOUNT" + case .swift: "SWIFT/BIC" + case .card: "CARD" + case .url: "URL" + case .ip: "IP" + case .org: "ORG" + case .loc: "Address (LOC)" + case .signatureNames: "Signature Names" + case .images: "IMAGES" } } var description: String { switch self { case .email: - return "RFC-like email addresses: sample123@domain.tld (case-insensitive)." + "RFC-like email addresses: sample123@domain.tld (case-insensitive)." case .phone: - return "U.S./international phone numbers with country codes, separators, or parentheses." + "U.S./international phone numbers with country codes, separators, or parentheses." case .ssn: - return "U.S. Social Security numbers in ###-##-#### format." + "U.S. Social Security numbers in ###-##-#### format." case .money: - return "Currency amounts, ISO codes, bracketed dollars, or spelled-out figures." + "Currency amounts, ISO codes, bracketed dollars, or spelled-out figures." case .percent: - return "Numeric percentages (0.06%) and spelled-out (six-hundredths of one percent)." + "Numeric percentages (0.06%) and spelled-out (six-hundredths of one percent)." case .number: - return "Bracketed numeric quantities like [1,200] when not preceded by currency." + "Bracketed numeric quantities like [1,200] when not preceded by currency." case .date: - return "Numeric, ISO, written date formats, plus placeholders like \"June ___, 2025\"." + "Numeric, ISO, written date formats, plus placeholders like \"June ___, 2025\"." case .account: - return "Bank/account-style digit sequences (8–20 digits)." + "Bank/account-style digit sequences (8–20 digits)." case .swift: - return "SWIFT/BIC codes (8 or 11 characters)." + "SWIFT/BIC codes (8 or 11 characters)." case .card: - return "Credit/debit card numbers (13–19 digits) with Luhn validation." + "Credit/debit card numbers (13–19 digits) with Luhn validation." case .url: - return "HTTP/HTTPS/FTP URLs, mailto links, www hosts, bare domains with paths." + "HTTP/HTTPS/FTP URLs, mailto links, www hosts, bare domains with paths." case .ip: - return "IPv4 addresses." + "IPv4 addresses." case .org: - return "Company names ending with legal suffixes (Inc., LLC, Ltd., etc.)." + "Company names ending with legal suffixes (Inc., LLC, Ltd., etc.)." case .loc: - return "Street addresses (US/Intl) including PO Boxes and explicit address labels." + "Street addresses (US/Intl) including PO Boxes and explicit address labels." case .signatureNames: - return "Names extracted from signature blocks (Name: John Q. Public …)." + "Names extracted from signature blocks (Name: John Q. Public …)." case .images: - return "Delete ALL images in the document (if disabled, only thumbnails are deleted)." + "Delete ALL images in the document (if disabled, only thumbnails are deleted)." } } @@ -966,7 +974,7 @@ enum RedactionRule: String, CaseIterable, Identifiable, Codable, Hashable { static func serializedList(from set: Set) -> String { set.sorted { $0.rawValue < $1.rawValue } - .map { $0.rawValue } + .map(\.rawValue) .joined(separator: ",") } } @@ -981,13 +989,13 @@ struct RedactionSettings: Codable, Equatable { var mode: RedactionMode = RedactionSettings.standardNormalMode var model: String = ModelCatalog.shared.defaultModelId var backend: String = "ollama" // 'ollama' or 'mock' (for fast tests) - var debug: Bool = false // Default to false for production + var debug: Bool = false // Default to false for production var temperature: Double = RedactionSettings.standardNormalModeTemperature var seed: Int = 42 var chunkTokens: Int = RedactionSettings.standardNormalModeChunkTokens var overlap: Int = RedactionSettings.standardNormalModeOverlap var llmConcurrency: Int = 2 - var processingTimeoutSeconds: Int = 7200 // 120 minutes + var processingTimeoutSeconds: Int = 7200 // 120 minutes var enabledRules: Set = RedactionRule.defaultSelection var llmConfidenceThreshold: Int = RedactionSettings.standardNormalModeConfidence @@ -1038,10 +1046,10 @@ struct RedactionProfile: Codable, Equatable { var errorDescription: String? { switch self { - case .unsupportedSchemaVersion(let found, let supported): - return "This profile was created with an unsupported schema version (\(found)). This version of Marcut supports schema version \(supported)." - case .malformed(let detail): - return "This profile file could not be read: \(detail)" + case let .unsupportedSchemaVersion(found, supported): + "This profile was created with an unsupported schema version (\(found)). This version of Marcut supports schema version \(supported)." + case let .malformed(detail): + "This profile file could not be read: \(detail)" } } } @@ -1103,18 +1111,25 @@ enum DebugPreferences { class DebugLogger { static let shared = DebugLogger() - private var isDebugEnabled: Bool = false // Default to false for production + private var isDebugEnabled: Bool = false // Default to false for production private let logDirectoryURL: URL private let writeQueue = DispatchQueue(label: "com.marclaw.marcutapp.debuglogger", qos: .utility) - // Centralized log location under Application Support - // ~/Library/Application Support/MarcutApp/logs/marcut.log - var logURL: URL { logDirectoryURL.appendingPathComponent("marcut.log") } - var logPath: String { logURL.path } + /// Centralized log location under Application Support + /// ~/Library/Application Support/MarcutApp/logs/marcut.log + var logURL: URL { + logDirectoryURL.appendingPathComponent("marcut.log") + } + + var logPath: String { + logURL.path + } /// Directory containing this instance's log files (`~/Library/Application Support/MarcutApp/logs`, /// or a fallback under the temporary directory if Application Support is unavailable/sandboxed). - var logsDirectoryURL: URL { logDirectoryURL } + var logsDirectoryURL: URL { + logDirectoryURL + } private init() { logDirectoryURL = DebugLogger.resolveLogDirectory() @@ -1134,7 +1149,9 @@ class DebugLogger { } } - if let groupBase = fm.containerURL(forSecurityApplicationGroupIdentifier: "QG85EMCQ75.group.com.marclaw.marcutapp") { + if let groupBase = fm + .containerURL(forSecurityApplicationGroupIdentifier: "QG85EMCQ75.group.com.marclaw.marcutapp") + { let dir = groupBase .appendingPathComponent("Library", isDirectory: true) .appendingPathComponent("Application Support", isDirectory: true) @@ -1162,7 +1179,7 @@ class DebugLogger { } } - public func ensureLogInitialized() { + func ensureLogInitialized() { writeQueue.async { [logURL = self.logURL, logDirectoryURL = self.logDirectoryURL] in DebugLogger.ensureLogInitializedAsync(logURL: logURL, logDirectoryURL: logDirectoryURL) } @@ -1173,12 +1190,12 @@ class DebugLogger { let version = bundle.infoDictionary?["CFBundleShortVersionString"] as? String ?? "?" let build = bundle.infoDictionary?["CFBundleVersion"] as? String ?? "?" let header = "=== MarcutApp Log Started (v\(version) b\(build)) ===\n" - + // Ensure directory exists first if !FileManager.default.fileExists(atPath: logDirectoryURL.path) { _ = ensureDirectoryExists(logDirectoryURL, fileManager: FileManager.default) } - + if !FileManager.default.fileExists(atPath: logURL.path) { try? header.write(to: logURL, atomically: true, encoding: .utf8) } @@ -1227,7 +1244,10 @@ class DebugLogger { let logURL = self.logURL writeQueue.async { // Ensure directory exists before writing - try? FileManager.default.createDirectory(at: logURL.deletingLastPathComponent(), withIntermediateDirectories: true) + try? FileManager.default.createDirectory( + at: logURL.deletingLastPathComponent(), + withIntermediateDirectories: true + ) if FileManager.default.fileExists(atPath: logURL.path) { if let fileHandle = try? FileHandle(forWritingTo: logURL) { @@ -1262,8 +1282,10 @@ class DebugLogger { let logFiles = entries.filter { $0.pathExtension.lowercased() == "log" } return logFiles.sorted { lhs, rhs in - let lhsDate = (try? lhs.resourceValues(forKeys: [.contentModificationDateKey]))?.contentModificationDate ?? .distantPast - let rhsDate = (try? rhs.resourceValues(forKeys: [.contentModificationDateKey]))?.contentModificationDate ?? .distantPast + let lhsDate = (try? lhs.resourceValues(forKeys: [.contentModificationDateKey]))? + .contentModificationDate ?? .distantPast + let rhsDate = (try? rhs.resourceValues(forKeys: [.contentModificationDateKey]))? + .contentModificationDate ?? .distantPast if lhsDate != rhsDate { return lhsDate > rhsDate } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift b/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift index df8226e..87b514e 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift @@ -1,7 +1,7 @@ -import SwiftUI -import UniformTypeIdentifiers import AppKit import Foundation +import SwiftUI +import UniformTypeIdentifiers enum ProcessingState { static var isProcessing = false @@ -17,7 +17,7 @@ final class DocumentRedactionViewModel: ObservableObject { if parts.count >= 3 { relevant = Array(parts.suffix(2)) } - if relevant.count == 2 && relevant.first == "library" { + if relevant.count == 2, relevant.first == "library" { return String(relevant[1]).lowercased() } return relevant.map { String($0).lowercased() }.joined(separator: "/") @@ -49,6 +49,7 @@ final class DocumentRedactionViewModel: ObservableObject { ofItemAtPath: url.path ) } + @Published var items: [DocumentItem] = [] @Published var hasDocuments: Bool = false @Published var hasValidDocuments: Bool = false @@ -93,6 +94,7 @@ final class DocumentRedactionViewModel: ObservableObject { private var didJustResumePendingJob = false // MARK: - Initialization & Cleanup + private var pythonInitObservers: [NSObjectProtocol] = [] /// `NSWorkspace` sleep/wake observer tokens (B5). Kept separate from `pythonInitObservers` /// since they're registered on a different notification center. @@ -125,30 +127,35 @@ final class DocumentRedactionViewModel: ObservableObject { await self?.refreshEnvironmentStatus(triggerFirstRunCheck: true) } } - let failed = center.addObserver(forName: .pythonRunnerFailed, object: nil, queue: .main) { [weak self] notification in - let failureMessage: String? = { - if let message = notification.userInfo?["error"] as? String { - return message - } - if let message = notification.object as? String { - return message - } - return nil - }() - Task { @MainActor [weak self] in - guard let self else { return } - self.isPythonInitializing = false - if let message = failureMessage { - self.pythonInitializationError = message - } else { - self.pythonInitializationError = "Failed to initialize the AI engine. Please restart Marcut." + let failed = center + .addObserver(forName: .pythonRunnerFailed, object: nil, queue: .main) { [weak self] notification in + let failureMessage: String? = { + if let message = notification.userInfo?["error"] as? String { + return message + } + if let message = notification.object as? String { + return message + } + return nil + }() + Task { @MainActor [weak self] in + guard let self else { return } + self.isPythonInitializing = false + if let message = failureMessage { + self.pythonInitializationError = message + } else { + self.pythonInitializationError = "Failed to initialize the AI engine. Please restart Marcut." + } } } - } pythonInitObservers = [ready, failed] let workspaceCenter = NSWorkspace.shared.notificationCenter - let wakeObserver = workspaceCenter.addObserver(forName: NSWorkspace.didWakeNotification, object: nil, queue: .main) { [weak self] _ in + let wakeObserver = workspaceCenter.addObserver( + forName: NSWorkspace.didWakeNotification, + object: nil, + queue: .main + ) { [weak self] _ in Task { @MainActor [weak self] in await self?.handleSystemWake() } @@ -163,7 +170,7 @@ final class DocumentRedactionViewModel: ObservableObject { // Fast-path: Check for models asynchronously. // The service method handles off-main-thread I/O and MainActor state updates internally. Task { @MainActor [weak self] in - guard let self = self else { return } + guard let self else { return } if await self.pythonBridge.populateInstalledModelsFromDisk() { self.hasPrefetchedModels = true if !self.hasCompletedFirstRun { @@ -221,6 +228,7 @@ final class DocumentRedactionViewModel: ObservableObject { private var activeAttemptTokens: [UUID: UUID] = [:] // MARK: - Batch ETA Tracking + /// Wall-clock time each document started processing in the current run, keyed by item id. /// Used to compute a per-document duration sample once the document reaches a terminal state. private var batchProcessingStartTimes: [UUID: Date] = [:] @@ -263,21 +271,21 @@ final class DocumentRedactionViewModel: ObservableObject { private func markMetadataScrubUsed() { UserDefaults.standard.set(true, forKey: DefaultsKey.hasUsedMetadataScrub.key) } - + // MARK: - Document Management - + func add(urls: [URL]) { for url in urls where !items.contains(where: { $0.url == url }) { let item = DocumentItem(url: url) items.append(item) Task { [weak self, weak item] in - guard let self = self, let item = item else { return } + guard let self, let item else { return } await self.checkDocument(item) } } updateState() } - + private func checkDocument(_ item: DocumentItem) async { item.status = .checking @@ -354,9 +362,9 @@ final class DocumentRedactionViewModel: ObservableObject { item.status = .validDocument updateState() } - + // MARK: - Batch Processing - + func processAllDocuments(to destination: URL? = nil, includeRetryItems: Bool = false) async { // Clear any lingering cancellation flags from previous operations AppDelegate.pythonRunner?.clearCancellationRequest() @@ -391,19 +399,31 @@ final class DocumentRedactionViewModel: ObservableObject { var processedIDs = Set() - while let item = items.first(where: { needsRedaction($0, includeRetryItems: includeRetryItems) && !processedIDs.contains($0.id) }) { + while let item = items + .first(where: { needsRedaction($0, includeRetryItems: includeRetryItems) && !processedIDs.contains($0.id) + }) + { guard items.contains(where: { $0.id == item.id }) else { - DebugLogger.shared.log("Skipping removed document: \(item.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Skipping removed document: \(item.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) continue } processedIDs.insert(item.id) // CRITICAL: Clear any lingering cancellation state before starting new document // This prevents race conditions where the previous document's cleanup affects the next AppDelegate.pythonRunner?.clearCancellationRequest() - DebugLogger.shared.log("🔄 Cleared cancellation state before processing: \(item.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🔄 Cleared cancellation state before processing: \(item.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) if Task.isCancelled { - DebugLogger.shared.log("processAllDocuments cancelled before processing next item", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "processAllDocuments cancelled before processing next item", + component: "DocumentRedactionViewModel" + ) updateState() return } @@ -439,10 +459,16 @@ final class DocumentRedactionViewModel: ObservableObject { // Clear cancellation again after document completion to ensure clean state AppDelegate.pythonRunner?.clearCancellationRequest() - DebugLogger.shared.log("🔄 Cleared cancellation state after completing: \(item.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🔄 Cleared cancellation state after completing: \(item.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) if Task.isCancelled { - DebugLogger.shared.log("processAllDocuments cancelled during processing", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "processAllDocuments cancelled during processing", + component: "DocumentRedactionViewModel" + ) updateState() return } @@ -458,7 +484,7 @@ final class DocumentRedactionViewModel: ObservableObject { fileHandle.closeFile() } } - + // Send completion notification with accurate counts let processedItems = items.filter { processedIDs.contains($0.id) } let succeeded = processedItems.filter { $0.status == .completed }.count @@ -467,7 +493,7 @@ final class DocumentRedactionViewModel: ObservableObject { let body = "Finished processing \(processedItems.count) document(s). Success: \(succeeded), Failed: \(failed)." PermissionManager.shared.sendSystemNotification(title: title, body: body) } - + /// Scrub metadata only - no rules or LLM redaction /// This is a fast operation that only applies metadata cleaning based on saved preferences func scrubMetadataOnly(to destination: URL? = nil, includeRetryItems: Bool = true) async { @@ -479,7 +505,7 @@ final class DocumentRedactionViewModel: ObservableObject { DebugLogger.shared.log("Metadata scrub cancelled before start", component: "DocumentRedactionViewModel") return } - + let validItems = items.filter { item in if item.status.canRetry && !includeRetryItems { return false @@ -487,15 +513,18 @@ final class DocumentRedactionViewModel: ObservableObject { let eligibleStatus = item.status == .validDocument || item.status.canRetry || item.status.isComplete return eligibleStatus && item.scrubOutputURL == nil } - + guard !validItems.isEmpty else { DebugLogger.shared.log("No valid items for metadata scrub", component: "DocumentRedactionViewModel") return } - + for item in validItems { if Task.isCancelled { - DebugLogger.shared.log("Metadata scrub cancelled while processing queue", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Metadata scrub cancelled while processing queue", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.status = .cancelled updateState() @@ -519,9 +548,9 @@ final class DocumentRedactionViewModel: ObservableObject { await scrubDocumentMetadataOnly(item, destination: resolvedDestination) } - + updateState() - + // Send completion notification let succeeded = items.filter { $0.status == .completed }.count PermissionManager.shared.sendSystemNotification( @@ -558,16 +587,25 @@ final class DocumentRedactionViewModel: ObservableObject { applyMetadataSettingsEnvironment(metadataSettings, context: "report only") guard let runner = AppDelegate.pythonRunner else { - DebugLogger.shared.log("❌ Python runtime unavailable for metadata report", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Python runtime unavailable for metadata report", + component: "DocumentRedactionViewModel" + ) await MainActor.run { - setMetadataReportError("Metadata reports are unavailable until the AI engine finishes starting.", needsPermissionRetry: false) + setMetadataReportError( + "Metadata reports are unavailable until the AI engine finishes starting.", + needsPermissionRetry: false + ) } return } for item in validItems { if Task.isCancelled { - DebugLogger.shared.log("Metadata report cancelled while processing queue", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Metadata report cancelled while processing queue", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.status = .cancelled updateState() @@ -651,7 +689,10 @@ final class DocumentRedactionViewModel: ObservableObject { item.lastDestinationURL = destination } if result.success { - DebugLogger.shared.log("✅ Metadata report generated in-place: \(reportURL.path)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "✅ Metadata report generated in-place: \(reportURL.path)", + component: "DocumentRedactionViewModel" + ) item.metadataReport = result.report item.metadataReportOutputURL = reportURL item.errorMessage = nil @@ -663,14 +704,24 @@ final class DocumentRedactionViewModel: ObservableObject { let message = "Metadata report HTML was not generated. Please retry." item.errorMessage = message setMetadataReportError(message, needsPermissionRetry: false, item: item) - DebugLogger.shared.log("❌ Metadata report HTML missing for: \(reportURL.path)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Metadata report HTML missing for: \(reportURL.path)", + component: "DocumentRedactionViewModel" + ) } } else { let rawError = result.error ?? "Metadata report failed." let payload = metadataReportErrorPayload(for: item, error: rawError) item.errorMessage = payload.message - DebugLogger.shared.log("❌ Metadata report failed: \(rawError)", component: "DocumentRedactionViewModel") - setMetadataReportError(payload.message, needsPermissionRetry: payload.needsPermissionRetry, item: item) + DebugLogger.shared.log( + "❌ Metadata report failed: \(rawError)", + component: "DocumentRedactionViewModel" + ) + setMetadataReportError( + payload.message, + needsPermissionRetry: payload.needsPermissionRetry, + item: item + ) } updateState() } @@ -682,12 +733,17 @@ final class DocumentRedactionViewModel: ObservableObject { setMetadataReportError(payload.message, needsPermissionRetry: payload.needsPermissionRetry, item: item) updateState() } - DebugLogger.shared.log("❌ Metadata report exception: \(error.localizedDescription)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Metadata report exception: \(error.localizedDescription)", + component: "DocumentRedactionViewModel" + ) } item.releaseSecurityScope() } - private func metadataReportErrorPayload(for item: DocumentItem, error: String) -> (message: String, needsPermissionRetry: Bool) { + private func metadataReportErrorPayload(for item: DocumentItem, + error: String) -> (message: String, needsPermissionRetry: Bool) + { let lowercased = error.lowercased() let isPermissionIssue = lowercased.contains("operation not permitted") || lowercased.contains("permission denied") || @@ -719,12 +775,14 @@ final class DocumentRedactionViewModel: ObservableObject { } private func metadataReportPermissionMessage(for item: DocumentItem) -> String { - return "\(item.url.lastPathComponent): Couldn't save the metadata report. Retry file access permissions." + "\(item.url.lastPathComponent): Couldn't save the metadata report. Retry file access permissions." } var outputSaveLocationPreference: OutputSaveLocation { let defaults = UserDefaults.standard - let rawValue = defaults.object(forKey: DefaultsKey.outputSaveLocationPreference.key) as? Int ?? OutputSaveLocation.alwaysAsk.rawValue + let rawValue = defaults + .object(forKey: DefaultsKey.outputSaveLocationPreference.key) as? Int ?? OutputSaveLocation.alwaysAsk + .rawValue return OutputSaveLocation(rawValue: rawValue) ?? .alwaysAsk } @@ -732,7 +790,12 @@ final class DocumentRedactionViewModel: ObservableObject { "Output location unavailable. Retry file access permissions or choose another output location." } - private func setOutputAccessError(_ message: String, isMetadataOperation: Bool, needsPermissionRetry: Bool, item: DocumentItem? = nil) { + private func setOutputAccessError( + _ message: String, + isMetadataOperation: Bool, + needsPermissionRetry: Bool, + item: DocumentItem? = nil + ) { if isMetadataOperation { setMetadataReportError(message, needsPermissionRetry: needsPermissionRetry, item: item) } else { @@ -743,7 +806,10 @@ final class DocumentRedactionViewModel: ObservableObject { private func resolveTemporaryReportDirectory() -> URL? { let fm = FileManager.default guard let cacheDir = FileAccessCoordinator.shared.metadataReportCacheDirectory() else { - DebugLogger.shared.log("❌ Failed to resolve metadata report cache directory", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Failed to resolve metadata report cache directory", + component: "DocumentRedactionViewModel" + ) return nil } do { @@ -751,7 +817,10 @@ final class DocumentRedactionViewModel: ObservableObject { try? fm.setAttributes([.posixPermissions: NSNumber(value: Int16(0o700))], ofItemAtPath: cacheDir.path) return cacheDir } catch { - DebugLogger.shared.log("❌ Failed to create temporary report directory: \(error)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Failed to create temporary report directory: \(error)", + component: "DocumentRedactionViewModel" + ) return nil } } @@ -766,29 +835,54 @@ final class DocumentRedactionViewModel: ObservableObject { switch preference { case .alwaysAsk: guard let baseDestination else { - setOutputAccessError(outputLocationErrorMessage(), isMetadataOperation: isMetadataOperation, needsPermissionRetry: false, item: item) + setOutputAccessError( + outputLocationErrorMessage(), + isMetadataOperation: isMetadataOperation, + needsPermissionRetry: false, + item: item + ) return nil } if let error = validateDestination(baseDestination, estimatedBytesNeeded: estimatedBytesNeeded) { - setOutputAccessError(error, isMetadataOperation: isMetadataOperation, needsPermissionRetry: false, item: item) + setOutputAccessError( + error, + isMetadataOperation: isMetadataOperation, + needsPermissionRetry: false, + item: item + ) return nil } return baseDestination case .sameAsOriginal: let destination = item.url.deletingLastPathComponent() if let error = validateDestination(destination, estimatedBytesNeeded: estimatedBytesNeeded) { - setOutputAccessError(error, isMetadataOperation: isMetadataOperation, needsPermissionRetry: false, item: item) + setOutputAccessError( + error, + isMetadataOperation: isMetadataOperation, + needsPermissionRetry: false, + item: item + ) return nil } return destination case .downloads: let granted = await FileAccessCoordinator.shared.requestDownloadsAccessForReports() guard granted, let downloadsURL = FileAccessCoordinator.shared.downloadsDirectoryForReports() else { - setOutputAccessError(outputLocationErrorMessage(), isMetadataOperation: isMetadataOperation, needsPermissionRetry: true, item: item) + setOutputAccessError( + outputLocationErrorMessage(), + isMetadataOperation: isMetadataOperation, + needsPermissionRetry: true, + item: item + ) return nil } if let error = validateDestination(downloadsURL, estimatedBytesNeeded: estimatedBytesNeeded) { - setOutputAccessError(error, isMetadataOperation: isMetadataOperation, needsPermissionRetry: false, item: item) + setOutputAccessError( + error, + isMetadataOperation: isMetadataOperation, + needsPermissionRetry: false, + item: item + ) return nil } return downloadsURL @@ -848,7 +942,7 @@ final class DocumentRedactionViewModel: ObservableObject { func clearReportError() { reportErrorMessage = nil } - + /// Process a single document for metadata-only scrubbing private func scrubDocumentMetadataOnly(_ item: DocumentItem, destination: URL) async { defer { @@ -871,20 +965,20 @@ final class DocumentRedactionViewModel: ObservableObject { } return } - + DebugLogger.shared.log("Metadata scrub for: \(item.path)", component: "DocumentRedactionViewModel") - + let inputPath = item.path let inputURL = URL(fileURLWithPath: inputPath) - + let formatter = DateFormatter() formatter.dateFormat = "M-d-yy hmma" let timestamp = formatter.string(from: Date()) let label = "(metadata-scrubbed \(timestamp))" - + let outputFileName = inputURL.deletingPathExtension().lastPathComponent + " " + label + ".docx" let outputPath = destination.appendingPathComponent(outputFileName).path - + guard let runner = AppDelegate.pythonRunner else { DebugLogger.shared.log("❌ Python runtime unavailable", component: "DocumentRedactionViewModel") await MainActor.run { @@ -894,24 +988,24 @@ final class DocumentRedactionViewModel: ObservableObject { } return } - + // Load metadata settings and set environment variable let metadataSettings = MetadataCleaningSettings.load() applyMetadataSettingsEnvironment(metadataSettings, context: "metadata scrub") - + // Also set flag to skip rules and LLM setenv("MARCUT_METADATA_ONLY", "1", 1) defer { unsetenv("MARCUT_METADATA_ONLY") } - + // Process using Python do { let result = try await runner.scrubMetadataOnlyAsync( inputPath: inputPath, outputPath: outputPath ) - + if Task.isCancelled { await MainActor.run { item.status = .cancelled @@ -933,46 +1027,73 @@ final class DocumentRedactionViewModel: ObservableObject { let cleaned = summary?["total_cleaned"] as? Int ?? 0 let preserved = summary?["total_preserved"] as? Int ?? 0 let embedded = (report["embedded_docs_found"] as? [String])?.count ?? 0 - - DebugLogger.shared.log("✅ Metadata scrub complete: \(outputPath)", component: "DocumentRedactionViewModel") - DebugLogger.shared.log("📊 Report: \(cleaned) cleaned, \(preserved) preserved, \(embedded) embedded docs", component: "DocumentRedactionViewModel") - + + DebugLogger.shared.log( + "✅ Metadata scrub complete: \(outputPath)", + component: "DocumentRedactionViewModel" + ) + DebugLogger.shared.log( + "📊 Report: \(cleaned) cleaned, \(preserved) preserved, \(embedded) embedded docs", + component: "DocumentRedactionViewModel" + ) + // Save report JSON file matching redaction report naming convention let reportFileName = inputURL.deletingPathExtension().lastPathComponent + " \(label)_scrub_report.json" let reportOutputPath = destination.appendingPathComponent(reportFileName) - - do { - let reportData = try JSONSerialization.data(withJSONObject: report, options: [.prettyPrinted, .sortedKeys]) - try reportData.write(to: reportOutputPath) - Self.makeSensitiveReportFilePrivate(reportOutputPath) - scrubReportURL = reportOutputPath - item.metadataReportOutputURL = reportOutputPath - - // Check for HTML report (generated by Python alongside JSON) - let htmlReportURL = reportOutputPath.deletingPathExtension().appendingPathExtension("html") - if FileManager.default.fileExists(atPath: htmlReportURL.path) { - Self.makeSensitiveReportFilePrivate(htmlReportURL) - scrubHTMLURL = htmlReportURL - item.metadataReportHTMLOutputURL = htmlReportURL - DebugLogger.shared.log("📄 HTML Report found: \(htmlReportURL.path)", component: "DocumentRedactionViewModel") - } else if let generatedHTML = await generateScrubHTMLIfMissing(at: reportOutputPath) { - Self.makeSensitiveReportFilePrivate(generatedHTML) - scrubHTMLURL = generatedHTML - item.metadataReportHTMLOutputURL = generatedHTML - DebugLogger.shared.log("📄 Generated HTML report: \(generatedHTML.path)", component: "DocumentRedactionViewModel") - } - - DebugLogger.shared.log("📄 Report saved: \(reportOutputPath.path)", component: "DocumentRedactionViewModel") + + do { + let reportData = try JSONSerialization.data( + withJSONObject: report, + options: [.prettyPrinted, .sortedKeys] + ) + try reportData.write(to: reportOutputPath) + Self.makeSensitiveReportFilePrivate(reportOutputPath) + scrubReportURL = reportOutputPath + item.metadataReportOutputURL = reportOutputPath + + // Check for HTML report (generated by Python alongside JSON) + let htmlReportURL = reportOutputPath.deletingPathExtension().appendingPathExtension("html") + if FileManager.default.fileExists(atPath: htmlReportURL.path) { + Self.makeSensitiveReportFilePrivate(htmlReportURL) + scrubHTMLURL = htmlReportURL + item.metadataReportHTMLOutputURL = htmlReportURL + DebugLogger.shared.log( + "📄 HTML Report found: \(htmlReportURL.path)", + component: "DocumentRedactionViewModel" + ) + } else if let generatedHTML = await generateScrubHTMLIfMissing(at: reportOutputPath) { + Self.makeSensitiveReportFilePrivate(generatedHTML) + scrubHTMLURL = generatedHTML + item.metadataReportHTMLOutputURL = generatedHTML + DebugLogger.shared.log( + "📄 Generated HTML report: \(generatedHTML.path)", + component: "DocumentRedactionViewModel" + ) + } + + DebugLogger.shared.log( + "📄 Report saved: \(reportOutputPath.path)", + component: "DocumentRedactionViewModel" + ) } catch { - DebugLogger.shared.log("⚠️ Failed to save report: \(error)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Failed to save report: \(error)", + component: "DocumentRedactionViewModel" + ) } - + // Log embedded docs warning if any if let embeddedDocs = report["embedded_docs_found"] as? [String], !embeddedDocs.isEmpty { - DebugLogger.shared.log("⚠️ Embedded documents found (need recursive cleaning): \(embeddedDocs)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Embedded documents found (need recursive cleaning): \(embeddedDocs)", + component: "DocumentRedactionViewModel" + ) } } else { - DebugLogger.shared.log("✅ Metadata scrub complete: \(outputPath)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "✅ Metadata scrub complete: \(outputPath)", + component: "DocumentRedactionViewModel" + ) } } @@ -980,7 +1101,7 @@ final class DocumentRedactionViewModel: ObservableObject { if outputValid { item.status = .completed markMetadataScrubUsed() - + // Set output URLs for document and report item.redactedOutputURL = outputURL item.scrubOutputURL = outputURL @@ -996,7 +1117,10 @@ final class DocumentRedactionViewModel: ObservableObject { } else { item.status = .failed item.errorMessage = "Scrubbed file appears to be a corrupt DOCX package" - DebugLogger.shared.log("❌ Metadata scrub output failed validation: \(outputPath)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Metadata scrub output failed validation: \(outputPath)", + component: "DocumentRedactionViewModel" + ) } updateState() } @@ -1007,7 +1131,10 @@ final class DocumentRedactionViewModel: ObservableObject { // `scrubMetadataOnlyAsync`) is logged below, not shown to the user -- // see `FailureMessagePresenter`. item.errorMessage = FailureMessagePresenter.message(forCode: nil) - DebugLogger.shared.log("❌ Metadata scrub failed: \(result.error ?? "Unknown")", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Metadata scrub failed: \(result.error ?? "Unknown")", + component: "DocumentRedactionViewModel" + ) updateState() } } @@ -1019,7 +1146,7 @@ final class DocumentRedactionViewModel: ObservableObject { } } } - + func processDocument(_ item: DocumentItem, destination: URL) async { // Show immediate progress indication on main thread await MainActor.run { @@ -1031,23 +1158,26 @@ final class DocumentRedactionViewModel: ObservableObject { } // Add logging at ViewModel level - DebugLogger.shared.log("ViewModel.processDocument called for: \(item.path)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "ViewModel.processDocument called for: \(item.path)", + component: "DocumentRedactionViewModel" + ) // Prepare file paths for PythonKit processing let inputPath = item.path let inputURL = URL(fileURLWithPath: inputPath) - + let formatter = DateFormatter() formatter.dateFormat = "M-d-yy hmma" // e.g., 12-20-25 1130PM let timestamp = formatter.string(from: Date()) let label = "(redacted \(timestamp))" - + // Output format: Filename (redacted M-d-yy hmma).docx let outputFileName = inputURL.deletingPathExtension().lastPathComponent + " " + label + ".docx" // Report format: Filename (redacted M-d-yy hmma)_report.json let reportFileName = inputURL.deletingPathExtension().lastPathComponent + " " + label + "_report.json" let scrubReportFileName = inputURL.deletingPathExtension().lastPathComponent + " " + label + "_scrub_report.json" - + let outputPath = destination.appendingPathComponent(outputFileName).path let reportPath = destination.appendingPathComponent(reportFileName).path let scrubReportPath = destination.appendingPathComponent(scrubReportFileName).path @@ -1057,18 +1187,24 @@ final class DocumentRedactionViewModel: ObservableObject { let modelName = settings.model let backend = settings.backend.lowercased() let runnerStatus = AppDelegate.pythonRunner == nil ? "nil" : "ready" - DebugLogger.shared.log("Pre-flight: runner=\(runnerStatus) backend=\(backend)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Pre-flight: runner=\(runnerStatus) backend=\(backend)", + component: "DocumentRedactionViewModel" + ) logAdvancedSettingsSnapshot(useEnhanced: useEnhanced, modelName: modelName, backend: backend) guard let runner = AppDelegate.pythonRunner else { - DebugLogger.shared.log("❌ Python runtime unavailable; cannot process document", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Python runtime unavailable; cannot process document", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.status = .failed item.errorMessage = "Processing unavailable: embedded Python runtime not initialized. Please restart the app." updateState() } PermissionManager.shared.sendSystemNotification( - title: "Processing Failed", + title: "Processing Failed", body: "Fatal Error: Embedded AI runtime could not be initialized." ) return @@ -1076,7 +1212,10 @@ final class DocumentRedactionViewModel: ObservableObject { if settings.mode.usesLLM { guard backend == "ollama" else { - DebugLogger.shared.log("❌ Unsupported backend for App Store-safe build: \(backend)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Unsupported backend for App Store-safe build: \(backend)", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.status = .failed item.errorMessage = "Unsupported backend. Use Ollama in Settings and restart." @@ -1090,7 +1229,10 @@ final class DocumentRedactionViewModel: ObservableObject { if useEnhanced { let ready = await pythonBridge.ensureOllamaReadyForPythonKit(requiredModel: modelName) if !ready { - DebugLogger.shared.log("❌ Pre-flight failed: Ollama service or model \(modelName) unavailable", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Pre-flight failed: Ollama service or model \(modelName) unavailable", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.status = .failed item.errorMessage = "AI service is not ready (missing model or offline). Please restart the app or redownload the model. Check App Log in Settings." @@ -1100,7 +1242,10 @@ final class DocumentRedactionViewModel: ObservableObject { } } - DebugLogger.shared.log("🚀 Using in-process PythonKit pipeline (\(useEnhanced ? "LLM" : "Rules") mode) -> output=\(outputPath), report=\(reportPath)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🚀 Using in-process PythonKit pipeline (\(useEnhanced ? "LLM" : "Rules") mode) -> output=\(outputPath), report=\(reportPath)", + component: "DocumentRedactionViewModel" + ) await processDocumentWithPythonKit( item, outputPath: outputPath, @@ -1128,7 +1273,8 @@ final class DocumentRedactionViewModel: ObservableObject { private func applyAdvancedSettingsEnvironment() { let defaults = UserDefaults.standard let advancedEnabled = defaults.bool(forKey: DefaultsKey.advancedModeEnabled.key) - let advancedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride.rawValue + let advancedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride + .rawValue let advancedConfidence = defaults.integer(forKey: DefaultsKey.advancedLLMConfidence.key) setenv("MARCUT_ADVANCED_MODE_ENABLED", advancedEnabled ? "1" : "0", 1) setenv("MARCUT_ADVANCED_AI_MODE", advancedModeRaw, 1) @@ -1186,16 +1332,28 @@ final class DocumentRedactionViewModel: ObservableObject { item.scrubReportHTMLOutputURL = htmlURL item.metadataReportHTMLOutputURL = htmlURL } - DebugLogger.shared.log("📄 Found scrub report at alternate path: \(foundScrubReport.path)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "📄 Found scrub report at alternate path: \(foundScrubReport.path)", + component: "DocumentRedactionViewModel" + ) } else { - DebugLogger.shared.log("⚠️ Scrub report missing: \(scrubReportPath)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Scrub report missing: \(scrubReportPath)", + component: "DocumentRedactionViewModel" + ) } } } else { - DebugLogger.shared.log("ℹ️ Metadata cleaning disabled; skipping scrub report lookup.", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "ℹ️ Metadata cleaning disabled; skipping scrub report lookup.", + component: "DocumentRedactionViewModel" + ) } - DebugLogger.shared.log("📄 Set output URLs - DOCX: \(outputPath), JSON: \(reportPath)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "📄 Set output URLs - DOCX: \(outputPath), JSON: \(reportPath)", + component: "DocumentRedactionViewModel" + ) } private func processDocumentWithPythonKit( @@ -1212,7 +1370,10 @@ final class DocumentRedactionViewModel: ObservableObject { // completion from an earlier, abandoned attempt on this same item can't clobber it. let attemptToken = UUID() activeAttemptTokens[item.id] = attemptToken - DebugLogger.shared.log("🔄 processDocumentWithPythonKit started for item.id=\(item.id) (\(item.url.lastPathComponent))", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🔄 processDocumentWithPythonKit started for item.id=\(item.id) (\(item.url.lastPathComponent))", + component: "DocumentRedactionViewModel" + ) if settings.debug { setenv("MARCUT_LOG_PATH", DebugLogger.shared.logPath, 1) } else { @@ -1224,13 +1385,19 @@ final class DocumentRedactionViewModel: ObservableObject { item.beginStage(.preflight) let debug = settings.debug let cancellationChecker: () -> Bool = { [weak self] in - guard let self = self else { - DebugLogger.shared.log("⚠️ cancellationChecker: self is nil, returning true", component: "CancellationCheck") + guard let self else { + DebugLogger.shared.log( + "⚠️ cancellationChecker: self is nil, returning true", + component: "CancellationCheck" + ) return true } let isCancelled = self.processingTasks[item.id]?.isCancelled ?? false if isCancelled { - DebugLogger.shared.log("⚠️ cancellationChecker: task for item.id=\(item.id) is cancelled", component: "CancellationCheck") + DebugLogger.shared.log( + "⚠️ cancellationChecker: task for item.id=\(item.id) is cancelled", + component: "CancellationCheck" + ) } return isCancelled } @@ -1244,7 +1411,10 @@ final class DocumentRedactionViewModel: ObservableObject { if !modelReady { item.status = .failed item.errorMessage = "Model \(modelName) is not ready yet. Please try again in a moment." - DebugLogger.shared.log("❌ Model readiness check failed for \(modelName)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Model readiness check failed for \(modelName)", + component: "DocumentRedactionViewModel" + ) finalizeProcessing(for: item) return } @@ -1253,8 +1423,8 @@ final class DocumentRedactionViewModel: ObservableObject { setenv("MARCUT_SCRUB_REPORT_PATH", scrubReportPath, 1) DebugLogger.shared.log("📄 Scrub report path: \(scrubReportPath)", component: "DocumentRedactionViewModel") - let streamAndResult: (AsyncStream, Task) = { - runner.runEnhancedOllamaWithProgress( + let streamAndResult: (AsyncStream, Task) = runner + .runEnhancedOllamaWithProgress( inputPath: item.path, outputPath: outputPath, reportPath: reportPath, @@ -1267,22 +1437,28 @@ final class DocumentRedactionViewModel: ObservableObject { overlap: settings.overlap, temperature: settings.temperature, seed: settings.seed, - processingStepTimeout: useEnhanced && settings.processingTimeoutSeconds != Int.max ? TimeInterval(settings.processingTimeoutSeconds) : nil, + processingStepTimeout: useEnhanced && settings.processingTimeoutSeconds != Int + .max ? TimeInterval(settings.processingTimeoutSeconds) : nil, cancellationChecker: cancellationChecker ) - }() let progressTask = Task.detached { [weak self] in - guard let self = self else { + guard let self else { DebugLogger.shared.log("⚠️ Progress task: self is nil", component: "ProgressMonitor") return } - DebugLogger.shared.log("🔄 Progress task started for item.id=\(item.id) (\(item.url.lastPathComponent))", component: "ProgressMonitor") + DebugLogger.shared.log( + "🔄 Progress task started for item.id=\(item.id) (\(item.url.lastPathComponent))", + component: "ProgressMonitor" + ) var updateCount = 0 for await update in streamAndResult.0 { updateCount += 1 if Task.isCancelled { - DebugLogger.shared.log("⚠️ Progress task cancelled after \(updateCount) updates for \(item.url.lastPathComponent)", component: "ProgressMonitor") + DebugLogger.shared.log( + "⚠️ Progress task cancelled after \(updateCount) updates for \(item.url.lastPathComponent)", + component: "ProgressMonitor" + ) break } let updateIndex = updateCount @@ -1291,20 +1467,26 @@ final class DocumentRedactionViewModel: ObservableObject { let updateSnapshot = update let enhancedMode = useEnhanced await MainActor.run { [weak self] in - guard let self = self else { return } + guard let self else { return } guard let currentItem = self.items.first(where: { $0.id == itemId }) else { - DebugLogger.shared.log("⚠️ Progress update #\(updateIndex) dropped: item.id=\(itemId) not found in items", component: "ProgressMonitor") + DebugLogger.shared.log( + "⚠️ Progress update #\(updateIndex) dropped: item.id=\(itemId) not found in items", + component: "ProgressMonitor" + ) return } - + // Always update heartbeat timestamp to prevent false stall detection // This is critical during status transitions (processing → completed) currentItem.lastHeartbeat = Date() - + // Allow progress updates during processing OR completed (to handle race at completion) // Block only for failed/cancelled states where updates are meaningless guard currentItem.status == .processing || currentItem.status == .completed else { - DebugLogger.shared.log("⚠️ Progress update #\(updateIndex) dropped: item status=\(currentItem.status) (expected .processing or .completed) for \(itemName)", component: "ProgressMonitor") + DebugLogger.shared.log( + "⚠️ Progress update #\(updateIndex) dropped: item status=\(currentItem.status) (expected .processing or .completed) for \(itemName)", + component: "ProgressMonitor" + ) return } @@ -1313,12 +1495,15 @@ final class DocumentRedactionViewModel: ObservableObject { self.applyPythonKitProgress(updateSnapshot, to: currentItem, isEnhanced: enhancedMode) } } - DebugLogger.shared.log("🔄 Progress task finished for \(item.url.lastPathComponent) after \(updateCount) updates", component: "ProgressMonitor") + DebugLogger.shared.log( + "🔄 Progress task finished for \(item.url.lastPathComponent) after \(updateCount) updates", + component: "ProgressMonitor" + ) } let completionTask = Task.detached { [weak self] in defer { unsetenv("MARCUT_SCRUB_REPORT_PATH") } - guard let self = self else { return } + guard let self else { return } let outcome = await self.awaitPythonOutcome(streamAndResult.1, runner: runner) progressTask.cancel() @@ -1329,11 +1514,17 @@ final class DocumentRedactionViewModel: ObservableObject { // user retried it. If a newer attempt has since taken over `item.id`, this // result is stale: apply nothing. guard self.activeAttemptTokens[item.id] == attemptToken else { - DebugLogger.shared.log("⚠️ Ignoring stale completion for \(item.url.lastPathComponent) (superseded by a newer attempt or abandoned)", component: "CompletionTask") + DebugLogger.shared.log( + "⚠️ Ignoring stale completion for \(item.url.lastPathComponent) (superseded by a newer attempt or abandoned)", + component: "CompletionTask" + ) return } guard let currentItem = self.items.first(where: { $0.id == item.id }) else { - DebugLogger.shared.log("⚠️ Completion task: item.id=\(item.id) not found in items", component: "CompletionTask") + DebugLogger.shared.log( + "⚠️ Completion task: item.id=\(item.id) not found in items", + component: "CompletionTask" + ) return } @@ -1348,11 +1539,14 @@ final class DocumentRedactionViewModel: ObservableObject { scrubReportPath: scrubReportPath ) currentItem.errorMessage = nil - DebugLogger.shared.log("✅ PythonKit processing completed for \(currentItem.url.lastPathComponent) (prevStatus=\(previousStatus))", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "✅ PythonKit processing completed for \(currentItem.url.lastPathComponent) (prevStatus=\(previousStatus))", + component: "DocumentRedactionViewModel" + ) case .cancelled: let outputExists = FileManager.default.fileExists(atPath: outputPath) let reportExists = FileManager.default.fileExists(atPath: reportPath) - if outputExists && reportExists { + if outputExists, reportExists { currentItem.status = .completed self.applyOutputArtifacts( to: currentItem, @@ -1361,10 +1555,16 @@ final class DocumentRedactionViewModel: ObservableObject { scrubReportPath: scrubReportPath ) currentItem.errorMessage = nil - DebugLogger.shared.log("⚠️ Cancellation received after outputs were written; marking completed for \(currentItem.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Cancellation received after outputs were written; marking completed for \(currentItem.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) } else { currentItem.status = .cancelled - DebugLogger.shared.log("⏹️ PythonKit processing cancelled for \(currentItem.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⏹️ PythonKit processing cancelled for \(currentItem.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) } case .failure: currentItem.status = .failed @@ -1374,20 +1574,29 @@ final class DocumentRedactionViewModel: ObservableObject { // (see `FailureMessagePresenter`) -- never the bare pipeline error_code // or message as the headline. currentItem.errorMessage = FailureMessagePresenter.message(forCode: failure.code) - DebugLogger.shared.log("❌ PythonKit processing failed for \(currentItem.url.lastPathComponent) code=\(failure.code) message=\(failure.message) details=\(failure.details)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ PythonKit processing failed for \(currentItem.url.lastPathComponent) code=\(failure.code) message=\(failure.message) details=\(failure.details)", + component: "DocumentRedactionViewModel" + ) // Dump Ollama logs to see why the runner crashed PythonBridgeService.shared.dumpOllamaLogs() } else { if currentItem.errorMessage == nil { currentItem.errorMessage = FailureMessagePresenter.message(forCode: nil) } - DebugLogger.shared.log("❌ PythonKit processing failed for \(currentItem.url.lastPathComponent) (no failure report found)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ PythonKit processing failed for \(currentItem.url.lastPathComponent) (no failure report found)", + component: "DocumentRedactionViewModel" + ) } self.assignFailureMessageIfNeeded(currentItem) case .stalled: currentItem.status = .failed currentItem.errorMessage = Self.processingStalledMessage - DebugLogger.shared.log("❌ PythonKit processing stalled (bridge watchdog abandoned the worker) for \(currentItem.url.lastPathComponent)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ PythonKit processing stalled (bridge watchdog abandoned the worker) for \(currentItem.url.lastPathComponent)", + component: "DocumentRedactionViewModel" + ) } self.finalizeProcessing(for: currentItem) } @@ -1452,7 +1661,7 @@ final class DocumentRedactionViewModel: ObservableObject { func retryDocument(_ item: DocumentItem, destination: URL? = nil, operation: DocumentOperation) { item.errorMessage = nil Task { [weak self, weak item] in - guard let self = self, let item = item else { return } + guard let self, let item else { return } guard let resolvedDestination = await self.resolveOutputDirectory( for: item, baseDestination: destination, @@ -1462,7 +1671,11 @@ final class DocumentRedactionViewModel: ObservableObject { await MainActor.run { item.status = .failed item.errorMessage = message - self.setOutputAccessError(message, isMetadataOperation: operation == .scrub, needsPermissionRetry: true) + self.setOutputAccessError( + message, + isMetadataOperation: operation == .scrub, + needsPermissionRetry: true + ) self.updateState() } return @@ -1528,7 +1741,7 @@ final class DocumentRedactionViewModel: ObservableObject { } return false } - + private func updateState() { hasDocuments = !items.isEmpty hasValidDocuments = items.contains { $0.status == .validDocument } @@ -1554,7 +1767,8 @@ final class DocumentRedactionViewModel: ObservableObject { let hasPendingDocuments = items.contains { $0.status.isPendingReview } let hasPendingRedaction = items.contains { needsRedaction($0) } - hasFinishedProcessing = hasCompletedDocuments && !hasProcessingDocuments && !hasPendingDocuments && !hasPendingRedaction + hasFinishedProcessing = hasCompletedDocuments && !hasProcessingDocuments && !hasPendingDocuments && + !hasPendingRedaction ProcessingState.isProcessing = hasProcessingDocuments persistPendingBatchJobIfNeeded() @@ -1566,7 +1780,7 @@ final class DocumentRedactionViewModel: ObservableObject { private var pendingBatchJobPaths: [String] { items .filter { $0.status == .validDocument || $0.status.isProcessing } - .map { $0.url.path } + .map(\.url.path) } /// Persists the current pending/in-progress document set whenever it changes, or clears the @@ -1654,9 +1868,9 @@ final class DocumentRedactionViewModel: ObservableObject { items.removeAll { $0.id == item.id } updateState() } - + // MARK: - Output Management - + @discardableResult func openRedactedDocument(_ item: DocumentItem) -> Bool { guard let url = item.redactedOutputURL else { return false } @@ -1773,7 +1987,7 @@ final class DocumentRedactionViewModel: ObservableObject { picker.show(relativeTo: .zero, of: view, preferredEdge: .minY) return true } - + @discardableResult func openReport(_ item: DocumentItem) -> Bool { let title = "Audit Report — \(item.url.lastPathComponent)" @@ -1787,13 +2001,14 @@ final class DocumentRedactionViewModel: ObservableObject { } return false } - + @discardableResult func openScrubReport(_ item: DocumentItem) -> Bool { let title = "Scrub Report — \(item.url.lastPathComponent)" if item.scrubReportOutputURL == nil { let baseName = item.url.deletingPathExtension().lastPathComponent - let searchDir = item.reportOutputURL?.deletingLastPathComponent() ?? item.redactedOutputURL?.deletingLastPathComponent() + let searchDir = item.reportOutputURL?.deletingLastPathComponent() ?? item.redactedOutputURL? + .deletingLastPathComponent() if let directory = searchDir, let found = findScrubReport(in: directory, matching: baseName) { item.scrubReportOutputURL = found item.metadataReportOutputURL = found @@ -1824,7 +2039,10 @@ final class DocumentRedactionViewModel: ObservableObject { } return true } - if let htmlURL = resolvedHTMLURL(preferred: item.metadataReportHTMLOutputURL, from: item.metadataReportOutputURL) { + if let htmlURL = resolvedHTMLURL( + preferred: item.metadataReportHTMLOutputURL, + from: item.metadataReportOutputURL + ) { return presentReport(url: htmlURL, title: "Metadata Report — \(item.url.lastPathComponent)") } if let jsonURL = item.metadataReportOutputURL { @@ -1850,7 +2068,10 @@ final class DocumentRedactionViewModel: ObservableObject { @discardableResult func openMetadataReport(_ item: DocumentItem) -> Bool { let title = "Metadata Report — \(item.url.lastPathComponent)" - if let htmlURL = resolvedHTMLURL(preferred: item.metadataReportHTMLOutputURL, from: item.metadataReportOutputURL) { + if let htmlURL = resolvedHTMLURL( + preferred: item.metadataReportHTMLOutputURL, + from: item.metadataReportOutputURL + ) { return presentReport(url: htmlURL, title: title) } if let jsonURL = item.metadataReportOutputURL { @@ -1895,7 +2116,8 @@ final class DocumentRedactionViewModel: ObservableObject { } let existingHTML = item.metadataReportHTMLOutputURL - let htmlURL = (existingHTML != nil && FileManager.default.fileExists(atPath: existingHTML!.path)) ? existingHTML : nil + let htmlURL = (existingHTML != nil && FileManager.default.fileExists(atPath: existingHTML!.path)) ? + existingHTML : nil switch outputSaveLocationPreference { case .downloads: @@ -1987,7 +2209,12 @@ final class DocumentRedactionViewModel: ObservableObject { await saveMetadataReportToDirectory(downloadsURL, htmlURL: htmlURL, jsonURL: jsonURL, item: item) } - private func saveMetadataReportToDirectory(_ destinationDir: URL, htmlURL: URL?, jsonURL: URL, item: DocumentItem) async { + private func saveMetadataReportToDirectory( + _ destinationDir: URL, + htmlURL: URL?, + jsonURL: URL, + item: DocumentItem + ) async { let estimatedBytesNeeded = estimatedOutputBytes(for: item, isMetadataOperation: true) if let error = validateDestination(destinationDir, estimatedBytesNeeded: estimatedBytesNeeded) { await MainActor.run { @@ -2028,11 +2255,18 @@ final class DocumentRedactionViewModel: ObservableObject { // 1. Copy HTML if requested if let finalHTMLURL, let htmlURL { guard fm.fileExists(atPath: htmlURL.path) else { - throw NSError(domain: "MarcutApp", code: 404, userInfo: [NSLocalizedDescriptionKey: "Source HTML report not found at \(htmlURL.path)"]) + throw NSError( + domain: "MarcutApp", + code: 404, + userInfo: [NSLocalizedDescriptionKey: "Source HTML report not found at \(htmlURL.path)"] + ) } - + if htmlURL.standardizedFileURL == finalHTMLURL.standardizedFileURL { - DebugLogger.shared.log("⚠️ Skip copy: source and destination HTML are identical (\(htmlURL.path))", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Skip copy: source and destination HTML are identical (\(htmlURL.path))", + component: "DocumentRedactionViewModel" + ) } else { if fm.fileExists(atPath: finalHTMLURL.path) { try fm.removeItem(at: finalHTMLURL) @@ -2046,13 +2280,20 @@ final class DocumentRedactionViewModel: ObservableObject { let destinationJSONURL = htmlURL != nil ? destinationDir.appendingPathComponent(jsonURL.lastPathComponent) : destinationURL - + guard fm.fileExists(atPath: jsonURL.path) else { - throw NSError(domain: "MarcutApp", code: 404, userInfo: [NSLocalizedDescriptionKey: "Source JSON report not found at \(jsonURL.path)"]) + throw NSError( + domain: "MarcutApp", + code: 404, + userInfo: [NSLocalizedDescriptionKey: "Source JSON report not found at \(jsonURL.path)"] + ) } if jsonURL.standardizedFileURL == destinationJSONURL.standardizedFileURL { - DebugLogger.shared.log("⚠️ Skip copy: source and destination JSON are identical (\(jsonURL.path))", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Skip copy: source and destination JSON are identical (\(jsonURL.path))", + component: "DocumentRedactionViewModel" + ) } else { if fm.fileExists(atPath: destinationJSONURL.path) { try fm.removeItem(at: destinationJSONURL) @@ -2061,7 +2302,10 @@ final class DocumentRedactionViewModel: ObservableObject { } Self.makeSensitiveReportFilePrivate(destinationJSONURL) - DebugLogger.shared.log("✅ Saved metadata report to \(destinationURL.path)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "✅ Saved metadata report to \(destinationURL.path)", + component: "DocumentRedactionViewModel" + ) await MainActor.run { item.metadataReportErrorMessage = nil item.metadataReportNeedsPermissionRetry = false @@ -2069,21 +2313,27 @@ final class DocumentRedactionViewModel: ObservableObject { } catch { DebugLogger.shared.log("❌ Save metadata report failed: \(error)", component: "DocumentRedactionViewModel") await MainActor.run { - setMetadataReportError("Save failed: \(error.localizedDescription)", needsPermissionRetry: false, item: item) + setMetadataReportError( + "Save failed: \(error.localizedDescription)", + needsPermissionRetry: false, + item: item + ) } } } - + @discardableResult func revealInFinder(_ item: DocumentItem) -> Bool { - if let url = item.redactedOutputURL ?? item.reportOutputURL ?? item.scrubReportOutputURL ?? item.metadataReportOutputURL { + if let url = item.redactedOutputURL ?? item.reportOutputURL ?? item.scrubReportOutputURL ?? item + .metadataReportOutputURL + { return NSWorkspace.shared.selectFile(url.path, inFileViewerRootedAtPath: "") } return false } - + // MARK: - Settings Management - + func updateSettings(_ newSettings: RedactionSettings) { settings = newSettings // Sync debug setting with global logger @@ -2110,14 +2360,19 @@ final class DocumentRedactionViewModel: ObservableObject { } if defaults.object(forKey: DefaultsKey.advancedLLMConfidenceMigratedTo99.key) == nil { if let storedConfidence = defaults.object(forKey: DefaultsKey.advancedLLMConfidence.key) as? NSNumber, - storedConfidence.intValue == 95 { - defaults.set(RedactionSettings.standardNormalModeConfidence, forKey: DefaultsKey.advancedLLMConfidence.key) + storedConfidence.intValue == 95 + { + defaults.set( + RedactionSettings.standardNormalModeConfidence, + forKey: DefaultsKey.advancedLLMConfidence.key + ) } defaults.set(true, forKey: DefaultsKey.advancedLLMConfidenceMigratedTo99.key) } let advancedEnabled = defaults.bool(forKey: DefaultsKey.advancedModeEnabled.key) - let storedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride.rawValue + let storedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride + .rawValue let storedMode = RedactionMode(rawValue: storedModeRaw) ?? .rulesOverride let normalizedMode = storedMode == .rules ? .rulesOverride : storedMode let storedConfidence = defaults.integer(forKey: DefaultsKey.advancedLLMConfidence.key) @@ -2140,8 +2395,11 @@ final class DocumentRedactionViewModel: ObservableObject { } func requestFirstRunSetup(entryPoint: FirstRunEntryPoint = .onboarding) { - if entryPoint == .onboarding && shouldSuppressModelSetupPrompt { - DebugLogger.shared.log("🧽 Skipping setup prompt (metadata-only usage, no models installed)", component: "DocumentRedactionViewModel") + if entryPoint == .onboarding, shouldSuppressModelSetupPrompt { + DebugLogger.shared.log( + "🧽 Skipping setup prompt (metadata-only usage, no models installed)", + component: "DocumentRedactionViewModel" + ) shouldShowFirstRunSetup = false return } @@ -2225,12 +2483,13 @@ final class DocumentRedactionViewModel: ObservableObject { return Int64(words) } guard let attributes = try? FileManager.default.attributesOfItem(atPath: item.url.path), - let size = attributes[.size] as? Int64 else { + let size = attributes[.size] as? Int64 + else { return 0 } return size } - + private func loadFailureReport(at path: String) -> (code: String, message: String, details: String)? { let url = URL(fileURLWithPath: path) guard FileManager.default.fileExists(atPath: url.path) else { return nil } @@ -2244,7 +2503,10 @@ final class DocumentRedactionViewModel: ObservableObject { let details = (json["technical_details"] as? String) ?? "" return (code: code, message: message, details: details) } catch { - DebugLogger.shared.log("⚠️ Failed to parse failure report at \(path): \(error)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Failed to parse failure report at \(path): \(error)", + component: "DocumentRedactionViewModel" + ) return nil } } @@ -2262,9 +2524,11 @@ final class DocumentRedactionViewModel: ObservableObject { specificError = "AI service unreachable - check if Ollama is running" } else if logContent.contains("AI_MODEL_UNAVAILABLE") { specificError = "AI model missing - please download it in Settings" - } else if logContent.contains("PK_PROCESSING_TIMEOUT") || logContent.contains("AI_PROCESSING_TIMEOUT") || logContent.contains("Step timeout") { + } else if logContent.contains("PK_PROCESSING_TIMEOUT") || logContent + .contains("AI_PROCESSING_TIMEOUT") || logContent.contains("Step timeout") + { specificError = "AI processing timed out - try increasing Processing Timeout or reducing Chunk Size/Overlap" - } else if logContent.contains("OLLAMA_HOST") && logContent.contains("empty") && settings.mode.usesLLM { + } else if logContent.contains("OLLAMA_HOST"), logContent.contains("empty"), settings.mode.usesLLM { specificError = "Ollama service not configured - check settings" } else if logContent.contains("KeyboardInterrupt") { specificError = "Processing was interrupted" @@ -2279,15 +2543,15 @@ final class DocumentRedactionViewModel: ObservableObject { item.errorMessage = "\(specificError). See \(URL(fileURLWithPath: DebugLogger.shared.logPath).lastPathComponent) for details." } - + // MARK: - Environment Status - + var isEnvironmentReady: Bool { // In Rules Only mode, we don't need Ollama or models if settings.mode == .rules { return frameworkAvailable } - + // Environment is only truly ready when the Ollama service is confirmed to be running. // The UI will reflect the startup process until this is true. // In LLM modes, we also require at least one model to be installed. @@ -2300,12 +2564,15 @@ final class DocumentRedactionViewModel: ObservableObject { private func getOllamaPath() -> String? { // Correctly check Contents/MacOS for the binary if let executableURL = Bundle.main.executableURL { - let macosOllamaURL = executableURL.deletingLastPathComponent().appendingPathComponent("ollama", isDirectory: false) + let macosOllamaURL = executableURL.deletingLastPathComponent().appendingPathComponent( + "ollama", + isDirectory: false + ) if FileManager.default.fileExists(atPath: macosOllamaURL.path) { return macosOllamaURL.path } } - + // Fallback to legacy Resources location (just in case) if let bundledPath = Bundle.main.path(forResource: "ollama", ofType: nil) { return bundledPath @@ -2313,7 +2580,7 @@ final class DocumentRedactionViewModel: ObservableObject { return nil } - + var environmentStatus: String { let supportedModels = availableModels @@ -2321,7 +2588,7 @@ final class DocumentRedactionViewModel: ObservableObject { if !frameworkAvailable { return "❌ Python framework missing - Please reinstall MarcutApp" } - + // In Rules Only mode, we bypass AI checks if settings.mode == .rules { return "✅ Ready (Rules Only Mode)" @@ -2330,8 +2597,8 @@ final class DocumentRedactionViewModel: ObservableObject { if let launchError = pythonBridge.ollamaLaunchError, !pythonBridge.isOllamaRunning { return "❌ \(launchError)" } - - if !pythonBridge.isOllamaRunning && getOllamaPath() == nil { + + if !pythonBridge.isOllamaRunning, getOllamaPath() == nil { return "❌ Ollama service not found - Check installation" } else if !pythonBridge.isOllamaRunning { return "Starting Ollama service..." @@ -2357,7 +2624,10 @@ final class DocumentRedactionViewModel: ObservableObject { // 1. Try to refresh environment status let refreshSuccess = await refreshEnvironmentStatus(triggerFirstRunCheck: false) recoveryAttempts += 1 - DebugLogger.shared.log("Recovery attempt \(recoveryAttempts): Environment refresh - \(refreshSuccess ? "✅" : "❌")", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Recovery attempt \(recoveryAttempts): Environment refresh - \(refreshSuccess ? "✅" : "❌")", + component: "DocumentRedactionViewModel" + ) if refreshSuccess { return true @@ -2365,7 +2635,10 @@ final class DocumentRedactionViewModel: ObservableObject { // 2. If framework is missing, we can't recover without reinstall if !frameworkAvailable { - DebugLogger.shared.log("❌ Cannot recover - Python framework missing", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Cannot recover - Python framework missing", + component: "DocumentRedactionViewModel" + ) return false } @@ -2382,12 +2655,18 @@ final class DocumentRedactionViewModel: ObservableObject { // Check again await pythonBridge.checkOllamaStatus() - DebugLogger.shared.log("Recovery attempt \(recoveryAttempts): Ollama restart - \(pythonBridge.isOllamaRunning ? "✅" : "❌")", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "Recovery attempt \(recoveryAttempts): Ollama restart - \(pythonBridge.isOllamaRunning ? "✅" : "❌")", + component: "DocumentRedactionViewModel" + ) } // Final status check let finalStatus = isEnvironmentReady - DebugLogger.shared.log("🏁 Recovery completed - Final status: \(finalStatus ? "✅ Ready" : "❌ Still not ready")", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🏁 Recovery completed - Final status: \(finalStatus ? "✅ Ready" : "❌ Still not ready")", + component: "DocumentRedactionViewModel" + ) return finalStatus } @@ -2419,14 +2698,14 @@ final class DocumentRedactionViewModel: ObservableObject { var lastModelDownloadError: String? { pythonBridge.lastModelDownloadError } - + func checkEnvironment() { pythonBridge.checkEnvironment() Task { @MainActor [weak self] in self?.frameworkAvailable = Bundle.main.path(forResource: "python_launcher", ofType: "sh") != nil } } - + func downloadModel(_ modelName: String, progress: @escaping (Double) -> Void) async -> Bool { let result = await pythonBridge.downloadModel(modelName, progress: progress) if result { @@ -2458,7 +2737,7 @@ final class DocumentRedactionViewModel: ObservableObject { settings.mode == .rules || (hasUsedMetadataScrub && availableModels.isEmpty) } - @discardableResult + @discardableResult func refreshEnvironmentStatus(triggerFirstRunCheck: Bool = true) async -> Bool { DebugLogger.shared.log("=== REFRESHING ENVIRONMENT STATUS ===", component: "DocumentRedactionViewModel") @@ -2467,7 +2746,10 @@ final class DocumentRedactionViewModel: ObservableObject { let initStart = Date() while isPythonInitializing && pythonInitializationError == nil { if Date().timeIntervalSince(initStart) > 30 { - DebugLogger.shared.log("⚠️ Python initialization timeout in refreshEnvironmentStatus", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Python initialization timeout in refreshEnvironmentStatus", + component: "DocumentRedactionViewModel" + ) break } try? await Task.sleep(nanoseconds: 100_000_000) // 100ms @@ -2485,7 +2767,10 @@ final class DocumentRedactionViewModel: ObservableObject { } else if cliScriptAvailable { DebugLogger.shared.log("✅ CLI subprocess launcher available", component: "DocumentRedactionViewModel") } else { - DebugLogger.shared.log("❌ Neither PythonKit nor CLI launcher available", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "❌ Neither PythonKit nor CLI launcher available", + component: "DocumentRedactionViewModel" + ) } // Check Python bridge with error handling @@ -2497,10 +2782,16 @@ final class DocumentRedactionViewModel: ObservableObject { let ready = isEnvironmentReady let hasSupportedModels = !availableModels.isEmpty - if hasSupportedModels && !availableModels.contains(where: { Self.normalizeModelIdentifier($0) == Self.normalizeModelIdentifier(settings.model) }) { + if hasSupportedModels, + !availableModels + .contains(where: { Self.normalizeModelIdentifier($0) == Self.normalizeModelIdentifier(settings.model) }) + { if let first = availableModels.first { settings.model = first - DebugLogger.shared.log("🎯 Auto-selected available model \(first) as default", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🎯 Auto-selected available model \(first) as default", + component: "DocumentRedactionViewModel" + ) } } @@ -2510,29 +2801,47 @@ final class DocumentRedactionViewModel: ObservableObject { if triggerFirstRunCheck { if shouldSuppressModelSetupPrompt { shouldShowFirstRunSetup = false - DebugLogger.shared.log("🧽 Metadata-only usage detected with no models; skipping setup prompt", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🧽 Metadata-only usage detected with no models; skipping setup prompt", + component: "DocumentRedactionViewModel" + ) return ready } if !hasCompletedFirstRun { - if ready && hasSupportedModels { - DebugLogger.shared.log("✅ Detected configured environment with \(availableModels.count) model(s); auto-completing onboarding", component: "DocumentRedactionViewModel") + if ready, hasSupportedModels { + DebugLogger.shared.log( + "✅ Detected configured environment with \(availableModels.count) model(s); auto-completing onboarding", + component: "DocumentRedactionViewModel" + ) markFirstRunComplete() shouldShowFirstRunSetup = false } else { firstRunEntryPoint = .onboarding shouldShowFirstRunSetup = true - DebugLogger.shared.log("🔧 Showing first-time setup (onboarding not completed)", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "🔧 Showing first-time setup (onboarding not completed)", + component: "DocumentRedactionViewModel" + ) } } else if !ready { // Provide specific guidance based on what's missing if !frameworkAvailable { - DebugLogger.shared.log("⚠️ Framework missing - prompting setup", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Framework missing - prompting setup", + component: "DocumentRedactionViewModel" + ) firstRunEntryPoint = .onboarding } else if !pythonBridge.isOllamaRunning { - DebugLogger.shared.log("⚠️ Ollama not running - prompting setup", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Ollama not running - prompting setup", + component: "DocumentRedactionViewModel" + ) firstRunEntryPoint = .manageModels } else { - DebugLogger.shared.log("⚠️ Other environment issue - prompting setup", component: "DocumentRedactionViewModel") + DebugLogger.shared.log( + "⚠️ Other environment issue - prompting setup", + component: "DocumentRedactionViewModel" + ) firstRunEntryPoint = .onboarding } shouldShowFirstRunSetup = true @@ -2544,7 +2853,7 @@ final class DocumentRedactionViewModel: ObservableObject { return ready } - + // MARK: - Pre-flight Validation /// Rough multiplier applied to an input document's size to estimate the disk space a full @@ -2563,7 +2872,8 @@ final class DocumentRedactionViewModel: ObservableObject { /// source file's size can't be determined. private func estimatedOutputBytes(for item: DocumentItem, isMetadataOperation: Bool) -> Int64 { guard let attributes = try? FileManager.default.attributesOfItem(atPath: item.url.path), - let sizeNumber = attributes[.size] as? NSNumber else { + let sizeNumber = attributes[.size] as? NSNumber + else { return 0 } let inputBytes = sizeNumber.int64Value @@ -2616,7 +2926,7 @@ final class DocumentRedactionViewModel: ObservableObject { let fallback = jsonURL.deletingPathExtension().appendingPathExtension("html") return FileManager.default.fileExists(atPath: fallback.path) ? fallback : nil } - + /// Search for scrub report file in directory matching document basename /// Handles both naming conventions: "(scrub-report DATE).json" and "_scrub_report.json" /// Find scrub report file in directory matching the document base name. @@ -2627,9 +2937,9 @@ final class DocumentRedactionViewModel: ObservableObject { guard let contents = try? fm.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil) else { return nil } - + func normalizeForMatch(_ value: String) -> String { - return value.lowercased() + value.lowercased() .replacingOccurrences(of: " ", with: "_") .replacingOccurrences(of: "-", with: "_") } @@ -2667,10 +2977,10 @@ final class DocumentRedactionViewModel: ObservableObject { return nil } - } // MARK: - Heartbeat Monitoring (B1 watchdog) + // // Detects a genuinely wedged embedded Python call: one where not even the keepalive signal // Python emits roughly every 3s during a long LLM call (`send_keepalive` in @@ -2740,21 +3050,25 @@ extension DocumentRedactionViewModel { item.errorMessage = Self.processingStalledMessage activeAttemptTokens.removeValue(forKey: item.id) AppDelegate.pythonRunner?.cancelCurrentOperation(source: "heartbeat_watchdog_stall") - DebugLogger.shared.log("❌ Heartbeat watchdog marked \(item.url.lastPathComponent) failed (processing stalled)", component: "HeartbeatWatchdog") + DebugLogger.shared.log( + "❌ Heartbeat watchdog marked \(item.url.lastPathComponent) failed (processing stalled)", + component: "HeartbeatWatchdog" + ) finalizeProcessing(for: item) } } // MARK: - Sleep/Wake Handling (B5) -// -// `PowerAssertionGuard` (held/released via `updateState()` above) prevents *idle* sleep while -// processing, but not a forced lid-close or an explicit Apple-menu "Sleep" -- so processing can -// still be interrupted by a real sleep/wake cycle. The wall-clock time spent asleep counts toward -// the heartbeat watchdog's silence window (`heartbeatTimeout`) even though nothing was actually -// stalled, which would otherwise surface the generic, misleading `processingStalledMessage` a few -// heartbeat-poll cycles after wake. This gets ahead of that with an immediate, wake-specific -// health check so the user gets a clearer signal and, when the engine did survive, doesn't lose -// the run to a false positive. + +/// +/// `PowerAssertionGuard` (held/released via `updateState()` above) prevents *idle* sleep while +/// processing, but not a forced lid-close or an explicit Apple-menu "Sleep" -- so processing can +/// still be interrupted by a real sleep/wake cycle. The wall-clock time spent asleep counts toward +/// the heartbeat watchdog's silence window (`heartbeatTimeout`) even though nothing was actually +/// stalled, which would otherwise surface the generic, misleading `processingStalledMessage` a few +/// heartbeat-poll cycles after wake. This gets ahead of that with an immediate, wake-specific +/// health check so the user gets a clearer signal and, when the engine did survive, doesn't lose +/// the run to a false positive. extension DocumentRedactionViewModel { /// Shown when a document was mid-processing when the Mac slept, and the health check taken /// immediately on wake found the embedded engine unresponsive. @@ -2784,7 +3098,10 @@ extension DocumentRedactionViewModel { for item in processingItems { item.lastHeartbeat = now } - DebugLogger.shared.log("✅ Wake health check passed; resuming in-flight processing", component: "PowerAssertion") + DebugLogger.shared.log( + "✅ Wake health check passed; resuming in-flight processing", + component: "PowerAssertion" + ) return } @@ -2800,6 +3117,7 @@ extension DocumentRedactionViewModel { } // MARK: - Progress Mapping + private extension DocumentRedactionViewModel { func applyPythonKitProgress( _ update: PythonRunnerProgressUpdate, @@ -2825,7 +3143,7 @@ private extension DocumentRedactionViewModel { } if let chunkInfo = extractChunkInfo(from: update) { - if item.isMassTrackingActive && stage == .enhancedDetection { + if item.isMassTrackingActive, stage == .enhancedDetection { item.recordHeartbeatOnly(chunkIndex: chunkInfo.chunk, totalChunks: chunkInfo.total) } else { item.recordHeartbeat(chunkIndex: chunkInfo.chunk, totalChunks: chunkInfo.total) @@ -2868,14 +3186,16 @@ private extension DocumentRedactionViewModel { } if let message = update.message, - let match = message.range(of: #"Processing chunk\s+(\d+)\s*/\s*(\d+)"#, options: .regularExpression) { + let match = message.range(of: #"Processing chunk\s+(\d+)\s*/\s*(\d+)"#, options: .regularExpression) + { let substring = message[match] let numbers = substring.replacingOccurrences(of: "Processing chunk", with: "") let parts = numbers.split(separator: "/").map { $0.trimmingCharacters(in: .whitespaces) } if parts.count == 2, let chunk = Int(parts[0]), let total = Int(parts[1]), - total > 0 { + total > 0 + { return (chunk, total) } } @@ -2885,6 +3205,7 @@ private extension DocumentRedactionViewModel { } // MARK: - DOCX Validation + extension DocumentRedactionViewModel { /// Deep validation of DOCX structure to catch corrupt files before processing func validateDocxStructure(at url: URL) async -> Bool { @@ -2893,7 +3214,8 @@ extension DocumentRedactionViewModel { guard let attributes = try? FileManager.default.attributesOfItem(atPath: url.path), let fileSize = attributes[.size] as? Int64, fileSize > 4, - let handle = try? FileHandle(forReadingFrom: url) else { + let handle = try? FileHandle(forReadingFrom: url) + else { DebugLogger.shared.log("DOCX validation: File too small or unreadable", component: "DocValidation") return false } @@ -2901,7 +3223,8 @@ extension DocumentRedactionViewModel { // Step 2: Check ZIP signature (PK\x03\x04) without loading the whole file guard let header = try? handle.read(upToCount: 4), - header.count == 4 else { + header.count == 4 + else { DebugLogger.shared.log("DOCX validation: Unable to read ZIP signature", component: "DocValidation") return false } @@ -2911,18 +3234,23 @@ extension DocumentRedactionViewModel { return false } - // Step 3: Try to open as ZIP archive and extract entries - do { - let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) - try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true) - defer { + // Step 3: Try to open as ZIP archive and extract entries + do { + let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true) + defer { // Secure deletion: zero all files before removing to prevent recovery - if let enumerator = FileManager.default.enumerator(at: tempDir, includingPropertiesForKeys: [.isRegularFileKey]) { + if let enumerator = FileManager.default.enumerator( + at: tempDir, + includingPropertiesForKeys: [.isRegularFileKey] + ) { while let fileURL = enumerator.nextObject() as? URL { if let attrs = try? fileURL.resourceValues(forKeys: [.isRegularFileKey]), attrs.isRegularFile == true, - let size = try? FileManager.default.attributesOfItem(atPath: fileURL.path)[.size] as? Int, - size > 0 { + let size = try? FileManager.default + .attributesOfItem(atPath: fileURL.path)[.size] as? Int, + size > 0 + { // Overwrite with zeros if let handle = try? FileHandle(forWritingTo: fileURL) { let zeros = Data(repeating: 0, count: size) @@ -2935,21 +3263,24 @@ extension DocumentRedactionViewModel { } try? FileManager.default.removeItem(at: tempDir) } - + // IMPORTANT: In sandboxed apps, Process() cannot access security-scoped URLs directly. // Copy the file to temp directory first so unzip can access it. let tempCopy = tempDir.appendingPathComponent("validate.docx") try FileManager.default.copyItem(at: url, to: tempCopy) - + func runProcess(_ process: Process, timeout: TimeInterval, label: String) -> Bool { do { try process.run() } catch { - DebugLogger.shared.log("DOCX validation: Failed to start \(label): \(error.localizedDescription)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Failed to start \(label): \(error.localizedDescription)", + component: "DocValidation" + ) return false } let deadline = Date().addingTimeInterval(timeout) - while process.isRunning && Date() < deadline { + while process.isRunning, Date() < deadline { Thread.sleep(forTimeInterval: 0.1) } if process.isRunning { @@ -2964,15 +3295,18 @@ extension DocumentRedactionViewModel { // Use unzip to extract and verify integrity let process = Process() process.executableURL = URL(fileURLWithPath: "/usr/bin/unzip") - process.arguments = ["-t", "-q", tempCopy.path] // Test archive integrity + process.arguments = ["-t", "-q", tempCopy.path] // Test archive integrity process.standardOutput = FileHandle.nullDevice process.standardError = FileHandle.nullDevice guard runProcess(process, timeout: 15, label: "unzip -t") else { - DebugLogger.shared.log("DOCX validation: ZIP archive corrupt (unzip test failed)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: ZIP archive corrupt (unzip test failed)", + component: "DocValidation" + ) return false } - + // Step 3.5: List zip entries for duplicate/relationship validation var zipEntries: [String] = [] let listProcess = Process() @@ -2982,7 +3316,10 @@ extension DocumentRedactionViewModel { listProcess.standardOutput = listPipe listProcess.standardError = FileHandle.nullDevice guard runProcess(listProcess, timeout: 15, label: "unzip -Z") else { - DebugLogger.shared.log("DOCX validation: Failed to list ZIP entries (unzip -Z)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Failed to list ZIP entries (unzip -Z)", + component: "DocValidation" + ) return false } let data = listPipe.fileHandleForReading.readDataToEndOfFile() @@ -3003,8 +3340,8 @@ extension DocumentRedactionViewModel { "_rels/.rels", "word/document.xml", "word/_rels/document.xml.rels", - "\\[Content_Types\\].xml", // Escape brackets for unzip glob pattern - "-d", tempDir.path + "\\[Content_Types\\].xml", // Escape brackets for unzip glob pattern + "-d", tempDir.path, ] extractProcess.standardOutput = FileHandle.nullDevice extractProcess.standardError = FileHandle.nullDevice @@ -3014,13 +3351,12 @@ extension DocumentRedactionViewModel { return false } - // Check required files were extracted let rootRelsPath = tempDir.appendingPathComponent("_rels/.rels") let documentXmlPath = tempDir.appendingPathComponent("word/document.xml") let relsPath = tempDir.appendingPathComponent("word/_rels/document.xml.rels") let contentTypesPath = tempDir.appendingPathComponent("[Content_Types].xml") - + guard FileManager.default.fileExists(atPath: rootRelsPath.path) else { DebugLogger.shared.log("DOCX validation: Missing _rels/.rels", component: "DocValidation") return false @@ -3030,63 +3366,71 @@ extension DocumentRedactionViewModel { DebugLogger.shared.log("DOCX validation: Missing word/document.xml", component: "DocValidation") return false } - + guard FileManager.default.fileExists(atPath: contentTypesPath.path) else { DebugLogger.shared.log("DOCX validation: Missing [Content_Types].xml", component: "DocValidation") return false } guard FileManager.default.fileExists(atPath: relsPath.path) else { - DebugLogger.shared.log("DOCX validation: Missing word/_rels/document.xml.rels", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Missing word/_rels/document.xml.rels", + component: "DocValidation" + ) return false } - + // Step 5: Verify document.xml is valid XML with correct namespace and relationships guard let xmlData = try? Data(contentsOf: documentXmlPath) else { DebugLogger.shared.log("DOCX validation: Cannot read document.xml", component: "DocValidation") return false } - + // Parse XML to verify it's well-formed do { let xmlDoc = try XMLDocument(data: xmlData) - + // Check for WordprocessingML namespace let rootElement = xmlDoc.rootElement() let namespaceURI = rootElement?.uri ?? "" - - guard namespaceURI.contains("wordprocessingml") || - rootElement?.name == "document" else { - DebugLogger.shared.log("DOCX validation: Invalid WordprocessingML namespace: \(namespaceURI)", component: "DocValidation") + + guard namespaceURI.contains("wordprocessingml") || + rootElement?.name == "document" + else { + DebugLogger.shared.log( + "DOCX validation: Invalid WordprocessingML namespace: \(namespaceURI)", + component: "DocValidation" + ) return false } - + // Step 6: Relationship Integrity Check // Corrupt files often have elements referring to missing relationships if FileManager.default.fileExists(atPath: relsPath.path), let relsData = try? Data(contentsOf: relsPath), - let relsDoc = try? XMLDocument(data: relsData) { - + let relsDoc = try? XMLDocument(data: relsData) + { // Collect valid Relationship IDs var validRelIds = Set() if let relsRoot = relsDoc.rootElement() { for child in relsRoot.children ?? [] { if let element = child as? XMLElement, - let id = element.attribute(forName: "Id")?.stringValue { + let id = element.attribute(forName: "Id")?.stringValue + { validRelIds.insert(id) } } } - + // Scan document.xml for relationship references (r:id) // Using XPath to find elements with r:id attributes would be ideal but complex with namespaces // Simple recursive scan var orphanedRels: [String] = [] - + func scanForRels(_ element: XMLElement) { if let attributes = element.attributes { for attr in attributes { - if attr.localName == "id" && (attr.prefix == "r" || attr.name == "r:id") { + if attr.localName == "id", attr.prefix == "r" || attr.name == "r:id" { if let val = attr.stringValue, !validRelIds.contains(val) { orphanedRels.append(val) } @@ -3099,15 +3443,18 @@ extension DocumentRedactionViewModel { } } } - + if let root = xmlDoc.rootElement() { scanForRels(root) } - + if !orphanedRels.isEmpty { - DebugLogger.shared.log("⚠️ DOCX validation warning: Found \(orphanedRels.count) orphaned relationships (e.g., \(orphanedRels.first ?? "?")) - Proceeding despite warnings", component: "DocValidation") + DebugLogger.shared.log( + "⚠️ DOCX validation warning: Found \(orphanedRels.count) orphaned relationships (e.g., \(orphanedRels.first ?? "?")) - Proceeding despite warnings", + component: "DocValidation" + ) // Relaxed validation: Allow files with orphaned relationships to proceed - // return false + // return false } } @@ -3118,14 +3465,19 @@ extension DocumentRedactionViewModel { for name in zipEntries { entryCounts[name, default: 0] += 1 } - let duplicateEntries = Set(entryCounts.filter { $0.value > 1 }.map { $0.key }) + let duplicateEntries = Set(entryCounts.filter { $0.value > 1 }.map(\.key)) if !duplicateEntries.isEmpty { - DebugLogger.shared.log("DOCX validation: Duplicate ZIP entries detected (e.g., \(duplicateEntries.first ?? "?"))", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Duplicate ZIP entries detected (e.g., \(duplicateEntries.first ?? "?"))", + component: "DocValidation" + ) return false } func relsSourceDir(_ relsPath: String) -> String { - if relsPath == "_rels/.rels" { return "" } + if relsPath == "_rels/.rels" { + return "" + } if !relsPath.contains("/_rels/") { return (relsPath as NSString).deletingLastPathComponent } @@ -3140,9 +3492,13 @@ extension DocumentRedactionViewModel { var parts: [String] = [] for raw in path.split(separator: "/") { let part = String(raw) - if part.isEmpty || part == "." { continue } + if part.isEmpty || part == "." { + continue + } if part == ".." { - if !parts.isEmpty { parts.removeLast() } + if !parts.isEmpty { + parts.removeLast() + } continue } parts.append(part) @@ -3162,18 +3518,27 @@ extension DocumentRedactionViewModel { func validateTargets(relsPath: String, relsData: Data) -> Bool { guard let relsDoc = try? XMLDocument(data: relsData), - let relsRoot = relsDoc.rootElement() else { - DebugLogger.shared.log("DOCX validation: Unable to parse \(relsPath)", component: "DocValidation") + let relsRoot = relsDoc.rootElement() + else { + DebugLogger.shared.log( + "DOCX validation: Unable to parse \(relsPath)", + component: "DocValidation" + ) return false } for child in relsRoot.children ?? [] { guard let element = child as? XMLElement else { continue } let targetMode = element.attribute(forName: "TargetMode")?.stringValue ?? "" - if targetMode == "External" { continue } + if targetMode == "External" { + continue + } guard let target = element.attribute(forName: "Target")?.stringValue else { continue } let resolved = resolveTarget(relsPath: relsPath, target: target) if !entrySet.contains(resolved) { - DebugLogger.shared.log("DOCX validation: Missing relationship target \(resolved) from \(relsPath)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Missing relationship target \(resolved) from \(relsPath)", + component: "DocValidation" + ) return false } } @@ -3191,17 +3556,23 @@ extension DocumentRedactionViewModel { } } } - + DebugLogger.shared.log("DOCX validation: Document passes all checks", component: "DocValidation") return true - + } catch { - DebugLogger.shared.log("DOCX validation: XML parsing failed: \(error.localizedDescription)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: XML parsing failed: \(error.localizedDescription)", + component: "DocValidation" + ) return false } - + } catch { - DebugLogger.shared.log("DOCX validation: Process error: \(error.localizedDescription)", component: "DocValidation") + DebugLogger.shared.log( + "DOCX validation: Process error: \(error.localizedDescription)", + component: "DocValidation" + ) return false } }.value @@ -3225,7 +3596,8 @@ extension DocumentRedactionViewModel { func extractWordCount(at url: URL) async -> Int? { await Task.detached(priority: .utility) { () -> Int? in let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) - guard (try? FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true)) != nil else { + guard (try? FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true)) != nil + else { return nil } defer { try? FileManager.default.removeItem(at: tempDir) } @@ -3259,7 +3631,8 @@ extension DocumentRedactionViewModel { let documentXmlPath = tempDir.appendingPathComponent("word/document.xml") guard let xmlData = try? Data(contentsOf: documentXmlPath), let xmlDoc = try? XMLDocument(data: xmlData), - let root = xmlDoc.rootElement() else { + let root = xmlDoc.rootElement() + else { return nil } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/ExcludedWordMatcher.swift b/src/swift/MarcutApp/Sources/MarcutApp/ExcludedWordMatcher.swift index 1aa57d7..438fe9e 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/ExcludedWordMatcher.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/ExcludedWordMatcher.swift @@ -126,7 +126,8 @@ enum ExcludedWordMatcher { let trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines) let range = NSRange(trimmed.startIndex..., in: trimmed) guard let match = determinerPrefixRegex.firstMatch(in: trimmed, options: [], range: range), - let matchRange = Range(match.range, in: trimmed) else { + let matchRange = Range(match.range, in: trimmed) + else { return trimmed } return String(trimmed[matchRange.upperBound...]) @@ -154,9 +155,9 @@ enum ExcludedWordMatcher { return normalized .replacingOccurrences(of: "\\(s\\)\\s*$", with: "", options: .regularExpression) .trimmingCharacters(in: .whitespaces) - } else if normalized.hasSuffix("ies") && normalized.count > 3 { + } else if normalized.hasSuffix("ies"), normalized.count > 3 { return String(normalized.dropLast(3)) + "y" - } else if normalized.hasSuffix("s") && normalized.count > 1 { + } else if normalized.hasSuffix("s"), normalized.count > 1 { return String(normalized.dropLast()).trimmingTrailingWhitespace() } return nil diff --git a/src/swift/MarcutApp/Sources/MarcutApp/FileAccessCoordinator.swift b/src/swift/MarcutApp/Sources/MarcutApp/FileAccessCoordinator.swift index a0f9fa1..acf74db 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/FileAccessCoordinator.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/FileAccessCoordinator.swift @@ -11,6 +11,7 @@ class FileAccessCoordinator: ObservableObject { private let desktopBookmarkKey = "MarcutApp_DesktopBookmark" // MARK: - Permission State Management + private let permissionVersionKey = "MarcutApp_PermissionVersion" private let onboardingCompletedKey = "MarcutApp_OnboardingCompleted" private let comprehensivePermissionKey = "MarcutApp_ComprehensivePermission" @@ -27,6 +28,7 @@ class FileAccessCoordinator: ObservableObject { private var activeScopedURLs: Set = [] // MARK: - Session Permission Management + private var hasRequestedPermissionsThisSession = false private var sessionPermissionsEstablished = false private let permissionSessionKey = "MarcutApp_PermissionSessionUUID" @@ -35,8 +37,8 @@ class FileAccessCoordinator: ObservableObject { private var downloadsPromptInProgress = false private init() { - initializePermissionState() // Initialize state first - initializeSessionTracking() // Track new app session + initializePermissionState() // Initialize state first + initializeSessionTracking() // Track new app session // DEFERRED: restoreAuthorizedDirectories() // Then restore bookmarks (may update state) } @@ -46,7 +48,10 @@ class FileAccessCoordinator: ObservableObject { private func initializePermissionState() { isOnboardingCompleted = userDefaults.bool(forKey: onboardingCompletedKey) needsPermissionRequest = shouldRequestPermissions() - DebugLogger.shared.log("🔐 Permission state - Onboarding: \(isOnboardingCompleted), Needs Request: \(needsPermissionRequest)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Permission state - Onboarding: \(isOnboardingCompleted), Needs Request: \(needsPermissionRequest)", + component: "FileAccessCoordinator" + ) } /// Initializes session-based permission tracking to detect new app launches @@ -59,9 +64,15 @@ class FileAccessCoordinator: ObservableObject { hasRequestedPermissionsThisSession = false sessionPermissionsEstablished = false userDefaults.set(currentSessionUUID, forKey: permissionSessionKey) - DebugLogger.shared.log("🆔 New app session detected: \(currentSessionUUID)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🆔 New app session detected: \(currentSessionUUID)", + component: "FileAccessCoordinator" + ) } else { - DebugLogger.shared.log("🆔 Continuing existing session: \(currentSessionUUID)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🆔 Continuing existing session: \(currentSessionUUID)", + component: "FileAccessCoordinator" + ) } } @@ -69,7 +80,10 @@ class FileAccessCoordinator: ObservableObject { private func shouldRequestPermissions() -> Bool { // If onboarding never completed, always request guard isOnboardingCompleted else { - DebugLogger.shared.log("🔐 Onboarding not completed - permission request needed", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Onboarding not completed - permission request needed", + component: "FileAccessCoordinator" + ) return true } @@ -78,13 +92,19 @@ class FileAccessCoordinator: ObservableObject { let storedVersion = userDefaults.string(forKey: permissionVersionKey) if currentVersion != storedVersion { - DebugLogger.shared.log("🔐 Version mismatch - current: \(currentVersion), stored: \(storedVersion ?? "none")", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Version mismatch - current: \(currentVersion), stored: \(storedVersion ?? "none")", + component: "FileAccessCoordinator" + ) return true } // Check if we have valid bookmarks guard hasValidBookmarks() else { - DebugLogger.shared.log("🔐 Invalid or missing bookmarks - permission request needed", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Invalid or missing bookmarks - permission request needed", + component: "FileAccessCoordinator" + ) return true } @@ -93,7 +113,7 @@ class FileAccessCoordinator: ObservableObject { /// Gets the current app version private func getCurrentAppVersion() -> String { - return Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "unknown" + Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "unknown" } /// Establish permissions proactively at app startup (optional, can be called once) @@ -101,13 +121,19 @@ class FileAccessCoordinator: ObservableObject { DebugLogger.shared.log("🚀 Startup permission establishment check", component: "FileAccessCoordinator") // If permissions are already valid from previous sessions, just mark session as established - if !needsPermissionRequest && (hasValidBookmarks() || hasEntitlementAccess()) { + if !needsPermissionRequest, hasValidBookmarks() || hasEntitlementAccess() { sessionPermissionsEstablished = true - DebugLogger.shared.log("✅ Startup: Existing permissions are valid, session established", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Startup: Existing permissions are valid, session established", + component: "FileAccessCoordinator" + ) return } - DebugLogger.shared.log("⚠️ Startup: No existing permissions found, will request on first file access", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Startup: No existing permissions found, will request on first file access", + component: "FileAccessCoordinator" + ) } /// Checks if we have valid bookmarks and accessible directories @@ -119,7 +145,7 @@ class FileAccessCoordinator: ObservableObject { let comprehensiveBookmark = userDefaults.data(forKey: comprehensivePermissionKey) let hasAnyBookmark = documentsBookmark != nil || downloadsBookmark != nil || - desktopBookmark != nil || comprehensiveBookmark != nil + desktopBookmark != nil || comprehensiveBookmark != nil guard hasAnyBookmark else { DebugLogger.shared.log("🔐 No bookmarks found", component: "FileAccessCoordinator") @@ -143,7 +169,10 @@ class FileAccessCoordinator: ObservableObject { } let isValid = accessibleDirectories > 0 - DebugLogger.shared.log("🔐 Bookmark validation: \(accessibleDirectories) directories accessible", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Bookmark validation: \(accessibleDirectories) directories accessible", + component: "FileAccessCoordinator" + ) return isValid } @@ -157,7 +186,10 @@ class FileAccessCoordinator: ObservableObject { isOnboardingCompleted = true needsPermissionRequest = false - DebugLogger.shared.log("✅ Onboarding completed for version \(getCurrentAppVersion())", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Onboarding completed for version \(getCurrentAppVersion())", + component: "FileAccessCoordinator" + ) } /// Checks if silent entitlement access works @@ -172,7 +204,10 @@ class FileAccessCoordinator: ObservableObject { // Test read access without file creation let isReadable = fileManager.isReadableFile(atPath: url.path) results[directory] = isReadable - DebugLogger.shared.log("🔍 Entitlement test for \(directory): \(isReadable ? "✅ PASS" : "❌ FAIL")", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔍 Entitlement test for \(directory): \(isReadable ? "✅ PASS" : "❌ FAIL")", + component: "FileAccessCoordinator" + ) } } @@ -190,13 +225,19 @@ class FileAccessCoordinator: ObservableObject { let hasEntitlementAccess = entitlementResults.values.allSatisfy { $0 } if hasEntitlementAccess { - DebugLogger.shared.log("✅ All directories accessible via enhanced entitlements", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ All directories accessible via enhanced entitlements", + component: "FileAccessCoordinator" + ) await setupFromEntitlements() markOnboardingCompleted() return true } - DebugLogger.shared.log("⚠️ Entitlements insufficient, requesting comprehensive permission", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Entitlements insufficient, requesting comprehensive permission", + component: "FileAccessCoordinator" + ) // Fall back to unified permission request let success = await requestComprehensivePermission() @@ -218,24 +259,33 @@ class FileAccessCoordinator: ObservableObject { } // If permissions are already established for this session, trust them - if sessionPermissionsEstablished && (hasValidBookmarks() || hasEntitlementAccess()) { + if sessionPermissionsEstablished, hasValidBookmarks() || hasEntitlementAccess() { return true } // If we already tried to get permissions this session and failed, don't try again if hasRequestedPermissionsThisSession { - DebugLogger.shared.log("🔐 Permissions already requested this session - returning cached result", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Permissions already requested this session - returning cached result", + component: "FileAccessCoordinator" + ) return hasValidBookmarks() || hasEntitlementAccess() } // If we already have valid permissions from previous sessions, use them immediately - if !needsPermissionRequest && (hasValidBookmarks() || hasEntitlementAccess()) { + if !needsPermissionRequest, hasValidBookmarks() || hasEntitlementAccess() { sessionPermissionsEstablished = true - DebugLogger.shared.log("✅ Using existing valid permissions for this session", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Using existing valid permissions for this session", + component: "FileAccessCoordinator" + ) return true } - DebugLogger.shared.log("🔐 First file access request this session - establishing permissions", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 First file access request this session - establishing permissions", + component: "FileAccessCoordinator" + ) // Mark that we're requesting permissions for this session hasRequestedPermissionsThisSession = true @@ -245,9 +295,15 @@ class FileAccessCoordinator: ObservableObject { if success { sessionPermissionsEstablished = true - DebugLogger.shared.log("✅ File access permissions established for this session", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ File access permissions established for this session", + component: "FileAccessCoordinator" + ) } else { - DebugLogger.shared.log("❌ File access permissions denied for this session", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ File access permissions denied for this session", + component: "FileAccessCoordinator" + ) } return success @@ -346,24 +402,33 @@ class FileAccessCoordinator: ObservableObject { // Try to derive Downloads and Desktop from the base await deriveRelatedDirectories(from: baseURL) - DebugLogger.shared.log("✅ Created comprehensive bookmark for base directory: \(baseURL.lastPathComponent)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Created comprehensive bookmark for base directory: \(baseURL.lastPathComponent)", + component: "FileAccessCoordinator" + ) } else { DebugLogger.shared.log("❌ Failed to access comprehensive bookmark", component: "FileAccessCoordinator") } } catch { - DebugLogger.shared.log("❌ Failed to create comprehensive bookmark: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to create comprehensive bookmark: \(error)", + component: "FileAccessCoordinator" + ) } } /// Attempts to derive Downloads and Desktop access from Documents bookmark - private func deriveRelatedDirectories(from baseURL: URL) async { + private func deriveRelatedDirectories(from _: URL) async { let fileManager = FileManager.default // Try to access Downloads directory if let downloadsURL = fileManager.urls(for: .downloadsDirectory, in: .userDomainMask).first { if fileManager.isReadableFile(atPath: downloadsURL.path) { authorizedDownloadsURL = downloadsURL - DebugLogger.shared.log("✅ Downloads access derived from comprehensive permission", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Downloads access derived from comprehensive permission", + component: "FileAccessCoordinator" + ) } } @@ -371,7 +436,10 @@ class FileAccessCoordinator: ObservableObject { if let desktopURL = fileManager.urls(for: .desktopDirectory, in: .userDomainMask).first { if fileManager.isReadableFile(atPath: desktopURL.path) { authorizedDesktopURL = desktopURL - DebugLogger.shared.log("✅ Desktop access derived from comprehensive permission", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Desktop access derived from comprehensive permission", + component: "FileAccessCoordinator" + ) } } } @@ -387,12 +455,18 @@ class FileAccessCoordinator: ObservableObject { if let docsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first { do { try fileManager.createDirectory(at: docsURL.appendingPathComponent(".marcut_test"), - withIntermediateDirectories: true) + withIntermediateDirectories: true) try fileManager.removeItem(at: docsURL.appendingPathComponent(".marcut_test")) authorizedDocumentsURL = docsURL - DebugLogger.shared.log("✅ Documents directory authorized via entitlement", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Documents directory authorized via entitlement", + component: "FileAccessCoordinator" + ) } catch { - DebugLogger.shared.log("⚠️ Documents directory requires explicit authorization", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Documents directory requires explicit authorization", + component: "FileAccessCoordinator" + ) // Fall back to bookmark system await createBookmarkForDirectory(.documentDirectory, key: documentsBookmarkKey) } @@ -403,12 +477,18 @@ class FileAccessCoordinator: ObservableObject { if let downloadsURL = fileManager.urls(for: .downloadsDirectory, in: .userDomainMask).first { do { try fileManager.createDirectory(at: downloadsURL.appendingPathComponent(".marcut_test"), - withIntermediateDirectories: true) + withIntermediateDirectories: true) try fileManager.removeItem(at: downloadsURL.appendingPathComponent(".marcut_test")) authorizedDownloadsURL = downloadsURL - DebugLogger.shared.log("✅ Downloads directory authorized via entitlement", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Downloads directory authorized via entitlement", + component: "FileAccessCoordinator" + ) } catch { - DebugLogger.shared.log("⚠️ Downloads directory requires explicit authorization", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Downloads directory requires explicit authorization", + component: "FileAccessCoordinator" + ) await createBookmarkForDirectory(.downloadsDirectory, key: downloadsBookmarkKey) } } @@ -418,12 +498,18 @@ class FileAccessCoordinator: ObservableObject { if let desktopURL = fileManager.urls(for: .desktopDirectory, in: .userDomainMask).first { do { try fileManager.createDirectory(at: desktopURL.appendingPathComponent(".marcut_test"), - withIntermediateDirectories: true) + withIntermediateDirectories: true) try fileManager.removeItem(at: desktopURL.appendingPathComponent(".marcut_test")) authorizedDesktopURL = desktopURL - DebugLogger.shared.log("✅ Desktop directory authorized via entitlement", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Desktop directory authorized via entitlement", + component: "FileAccessCoordinator" + ) } catch { - DebugLogger.shared.log("⚠️ Desktop directory requires explicit authorization", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Desktop directory requires explicit authorization", + component: "FileAccessCoordinator" + ) await createBookmarkForDirectory(.desktopDirectory, key: desktopBookmarkKey) } } @@ -434,7 +520,8 @@ class FileAccessCoordinator: ObservableObject { private func createBookmarkForDirectory(_ directory: FileManager.SearchPathDirectory, key: String) async -> Bool { guard let url = FileManager.default.urls(for: directory, in: .userDomainMask).first else { return false } - let directoryName = directory == .documentDirectory ? "Documents" : directory == .downloadsDirectory ? "Downloads" : "Desktop" + let directoryName = directory == .documentDirectory ? "Documents" : directory == .downloadsDirectory ? + "Downloads" : "Desktop" let selectedURL = await promptForDirectoryAccess( message: "Authorize access to \(directoryName) folder", prompt: "Authorize", @@ -468,7 +555,10 @@ class FileAccessCoordinator: ObservableObject { } return success } catch { - DebugLogger.shared.log("❌ Failed to create bookmark for \(directory): \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to create bookmark for \(directory): \(error)", + component: "FileAccessCoordinator" + ) return false } } @@ -512,7 +602,10 @@ class FileAccessCoordinator: ObservableObject { let newState = shouldRequestPermissions() if needsPermissionRequest != newState { needsPermissionRequest = newState - DebugLogger.shared.log("🔐 Permission state updated after restoration: needsRequest=\(newState)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🔐 Permission state updated after restoration: needsRequest=\(newState)", + component: "FileAccessCoordinator" + ) } } @@ -521,9 +614,9 @@ class FileAccessCoordinator: ObservableObject { do { var isStale = false let url = try URL(resolvingBookmarkData: bookmark, - options: .withSecurityScope, - relativeTo: nil, - bookmarkDataIsStale: &isStale) + options: .withSecurityScope, + relativeTo: nil, + bookmarkDataIsStale: &isStale) guard !isStale else { userDefaults.removeObject(forKey: comprehensivePermissionKey) @@ -540,13 +633,19 @@ class FileAccessCoordinator: ObservableObject { await deriveRelatedDirectories(from: url) } - DebugLogger.shared.log("✅ Restored comprehensive permission from bookmark: \(url.lastPathComponent)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Restored comprehensive permission from bookmark: \(url.lastPathComponent)", + component: "FileAccessCoordinator" + ) return true } DebugLogger.shared.log("❌ Failed to access comprehensive bookmark", component: "FileAccessCoordinator") return false } catch { - DebugLogger.shared.log("❌ Failed to restore comprehensive bookmark: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to restore comprehensive bookmark: \(error)", + component: "FileAccessCoordinator" + ) // Remove invalid bookmark userDefaults.removeObject(forKey: comprehensivePermissionKey) return false @@ -560,9 +659,9 @@ class FileAccessCoordinator: ObservableObject { do { var isStale = false let url = try URL(resolvingBookmarkData: bookmark, - options: .withSecurityScope, - relativeTo: nil, - bookmarkDataIsStale: &isStale) + options: .withSecurityScope, + relativeTo: nil, + bookmarkDataIsStale: &isStale) guard !isStale else { userDefaults.removeObject(forKey: key) @@ -572,10 +671,16 @@ class FileAccessCoordinator: ObservableObject { let success = startAccessingScopedResource(url) if success { completion(url) - DebugLogger.shared.log("✅ Restored directory access from bookmark: \(url.lastPathComponent)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Restored directory access from bookmark: \(url.lastPathComponent)", + component: "FileAccessCoordinator" + ) } } catch { - DebugLogger.shared.log("❌ Failed to restore directory from bookmark: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to restore directory from bookmark: \(error)", + component: "FileAccessCoordinator" + ) } } @@ -606,7 +711,10 @@ class FileAccessCoordinator: ObservableObject { do { try fm.createDirectory(at: container, withIntermediateDirectories: true) } catch { - DebugLogger.shared.log("❌ Failed to prepare Application Support container: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to prepare Application Support container: \(error)", + component: "FileAccessCoordinator" + ) } return container } @@ -635,7 +743,10 @@ class FileAccessCoordinator: ObservableObject { let localCopy = processingDir.appendingPathComponent(uniqueName) try FileManager.default.copyItem(at: originalURL, to: localCopy) - DebugLogger.shared.log("✅ Copied file to app support container: \(originalURL.lastPathComponent)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Copied file to app support container: \(originalURL.lastPathComponent)", + component: "FileAccessCoordinator" + ) return localCopy } @@ -658,7 +769,10 @@ class FileAccessCoordinator: ObservableObject { } try FileManager.default.copyItem(at: processedURL, to: userURL) - DebugLogger.shared.log("✅ Copied processed file to user location: \(userURL.path)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Copied processed file to user location: \(userURL.path)", + component: "FileAccessCoordinator" + ) } /// Cleans up temporary files from the Application Support container @@ -672,10 +786,16 @@ class FileAccessCoordinator: ObservableObject { do { if FileManager.default.fileExists(atPath: url.path) { try FileManager.default.removeItem(at: url) - DebugLogger.shared.log("🧹 Cleaned up directory: \(url.lastPathComponent)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🧹 Cleaned up directory: \(url.lastPathComponent)", + component: "FileAccessCoordinator" + ) } } catch { - DebugLogger.shared.log("⚠️ Failed to cleanup directory \(url.lastPathComponent): \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Failed to cleanup directory \(url.lastPathComponent): \(error)", + component: "FileAccessCoordinator" + ) } } @@ -696,7 +816,10 @@ class FileAccessCoordinator: ObservableObject { try fm.createDirectory(at: cacheURL, withIntermediateDirectories: true) try? fm.setAttributes([.posixPermissions: NSNumber(value: Int16(0o700))], ofItemAtPath: cacheURL.path) } catch { - DebugLogger.shared.log("❌ Failed to prepare metadata report cache: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Failed to prepare metadata report cache: \(error)", + component: "FileAccessCoordinator" + ) return nil } } @@ -705,7 +828,7 @@ class FileAccessCoordinator: ObservableObject { /// Location for temporary metadata reports (cleared on app open/close). func metadataReportCacheDirectory() -> URL? { - return metadataReportCacheURL(createIfMissing: true) + metadataReportCacheURL(createIfMissing: true) } /// Clear temporary metadata reports from the app cache. @@ -715,9 +838,15 @@ class FileAccessCoordinator: ObservableObject { guard fm.fileExists(atPath: cacheURL.path) else { return } do { try fm.removeItem(at: cacheURL) - DebugLogger.shared.log("🧹 Cleared metadata report cache: \(cacheURL.path)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "🧹 Cleared metadata report cache: \(cacheURL.path)", + component: "FileAccessCoordinator" + ) } catch { - DebugLogger.shared.log("⚠️ Failed to clear metadata report cache: \(error)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "⚠️ Failed to clear metadata report cache: \(error)", + component: "FileAccessCoordinator" + ) } } @@ -732,8 +861,13 @@ class FileAccessCoordinator: ObservableObject { ] for dir in candidateDirs where fm.fileExists(atPath: dir.path) { - if let contents = try? fm.contentsOfDirectory(at: dir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]), - !contents.isEmpty { + if let contents = try? fm.contentsOfDirectory( + at: dir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ), + !contents.isEmpty + { return true } } @@ -745,7 +879,8 @@ class FileAccessCoordinator: ObservableObject { func downloadsDirectoryForReports() -> URL? { restoreDownloadsBookmarkIfNeeded() guard let downloadsURL = authorizedDownloadsURL, - FileManager.default.isWritableFile(atPath: downloadsURL.path) else { + FileManager.default.isWritableFile(atPath: downloadsURL.path) + else { return nil } return downloadsURL @@ -854,7 +989,10 @@ class FileAccessCoordinator: ObservableObject { } try FileManager.default.copyItem(at: source, to: destination) - DebugLogger.shared.log("✅ Copied file: \(source.path) -> \(destination.path)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Copied file: \(source.path) -> \(destination.path)", + component: "FileAccessCoordinator" + ) } /// Safe file move within authorized directories @@ -868,7 +1006,10 @@ class FileAccessCoordinator: ObservableObject { } try FileManager.default.moveItem(at: source, to: destination) - DebugLogger.shared.log("✅ Moved file: \(source.path) -> \(destination.path)", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "✅ Moved file: \(source.path) -> \(destination.path)", + component: "FileAccessCoordinator" + ) } /// Safe file removal within authorized directories @@ -885,7 +1026,10 @@ class FileAccessCoordinator: ObservableObject { func findDocxFiles() async -> [URL] { // Ensure we have permissions before searching guard await ensurePermissionsForFileAccess() else { - DebugLogger.shared.log("❌ Cannot find DOCX files - permissions not available", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "❌ Cannot find DOCX files - permissions not available", + component: "FileAccessCoordinator" + ) return [] } @@ -905,7 +1049,10 @@ class FileAccessCoordinator: ObservableObject { } } - DebugLogger.shared.log("📄 Found \(docxFiles.count) DOCX files in authorized directories", component: "FileAccessCoordinator") + DebugLogger.shared.log( + "📄 Found \(docxFiles.count) DOCX files in authorized directories", + component: "FileAccessCoordinator" + ) return docxFiles } } @@ -916,10 +1063,10 @@ enum FileAccessError: LocalizedError { var errorDescription: String? { switch self { - case .unauthorizedLocation(let path): - return "Access to location not authorized: \(path)" + case let .unauthorizedLocation(path): + "Access to location not authorized: \(path)" case .appSupportContainerUnavailable: - return "Application Support container is not available. Please check your app configuration." + "Application Support container is not available. Please check your app configuration." } } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/HelpHTMLView.swift b/src/swift/MarcutApp/Sources/MarcutApp/HelpHTMLView.swift index dd3ce71..c44fc7a 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/HelpHTMLView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/HelpHTMLView.swift @@ -19,7 +19,7 @@ struct HelpHTMLView: NSViewRepresentable { return webView } - func updateNSView(_ webView: WKWebView, context: Context) { + func updateNSView(_: WKWebView, context: Context) { if context.coordinator.lastHTML != htmlContent { context.coordinator.load(html: htmlContent, baseURL: Bundle.main.resourceURL) } @@ -55,13 +55,17 @@ struct HelpHTMLView: NSViewRepresentable { pendingAnchor = nil } - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + func webView(_: WKWebView, didFinish _: WKNavigation!) { if let anchor = pendingAnchor { scrollTo(anchor: anchor) } } - func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + func webView( + _: WKWebView, + decidePolicyFor navigationAction: WKNavigationAction, + decisionHandler: @escaping (WKNavigationActionPolicy) -> Void + ) { guard let url = navigationAction.request.url else { decisionHandler(.allow) return diff --git a/src/swift/MarcutApp/Sources/MarcutApp/LaunchDiagnostics.swift b/src/swift/MarcutApp/Sources/MarcutApp/LaunchDiagnostics.swift index 716a9ad..6691ed2 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/LaunchDiagnostics.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/LaunchDiagnostics.swift @@ -1,6 +1,6 @@ -import SwiftUI import AppKit import OSLog +import SwiftUI enum LaunchStage: String { case delegateLaunched = "delegate_launched" @@ -57,7 +57,7 @@ final class LaunchDiagnostics: ObservableObject { DispatchQueue.main.async { self.statusLines.append(message) LaunchDiagnosticsWindow.shared.update(statusLines: self.statusLines) - if self.forceDiagnosticWindow && self.guiModeEnabled { + if self.forceDiagnosticWindow, self.guiModeEnabled { LaunchDiagnosticsWindow.shared.present(reason: "Force flag") } } @@ -112,7 +112,7 @@ final class LaunchDiagnostics: ObservableObject { func activationDidChange(isActive: Bool) { guard diagnosticsEnabled else { return } mark(.activationStateChanged, extra: "active=\(isActive)") - if guiModeEnabled && isActive && !contentViewConfirmed { + if guiModeEnabled, isActive, !contentViewConfirmed { LaunchDiagnosticsWindow.shared.present(reason: "Activation changed") } } @@ -159,7 +159,7 @@ final class LaunchDiagnosticsWindow { } } - func update(statusLines: [String]) { + func update(statusLines _: [String]) { DispatchQueue.main.async { if let hosting = self.window?.contentView as? NSHostingView { hosting.rootView = LaunchDiagnosticsPanel(statusProvider: LaunchDiagnostics.shared) diff --git a/src/swift/MarcutApp/Sources/MarcutApp/LogViewerSheet.swift b/src/swift/MarcutApp/Sources/MarcutApp/LogViewerSheet.swift index 19b7329..236dff4 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/LogViewerSheet.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/LogViewerSheet.swift @@ -1,5 +1,5 @@ -import SwiftUI import AppKit +import SwiftUI /// Sheet that lets users view app log files in-app instead of navigating Finder to /// `~/Library/Application Support/MarcutApp/logs`. Shows the most recently modified log by @@ -52,7 +52,6 @@ struct LogViewerSheet: View { } } - @ViewBuilder private var emptyState: some View { VStack(spacing: 12) { Spacer() diff --git a/src/swift/MarcutApp/Sources/MarcutApp/Main.swift b/src/swift/MarcutApp/Sources/MarcutApp/Main.swift index 0180abd..5846095 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/Main.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/Main.swift @@ -1,5 +1,5 @@ -import SwiftUI import AppKit +import SwiftUI @main struct MarcutMain { @@ -17,13 +17,13 @@ struct MarcutMain { LaunchDiagnostics.shared.configure(forceDiagnosticWindow: forceDiagnosticsWindow) LaunchDiagnostics.shared.mark(.delegateLaunched, extra: "args=\(redactedLaunchArguments(args))") - let cliFlags: Set = [ + let cliFlags: Set = [ "--cli", "--test", "--diagnose", "--help", "--redact", - "--download-model" + "--download-model", ] let isCLIMode = args.contains { cliFlags.contains($0) } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/MarcutApp.swift b/src/swift/MarcutApp/Sources/MarcutApp/MarcutApp.swift index 8d0750a..15a4180 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/MarcutApp.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/MarcutApp.swift @@ -1,14 +1,14 @@ -import SwiftUI import AppKit -import OSLog import Foundation +import OSLog import PythonKit +import SwiftUI func redactedLaunchArguments(_ args: [String]) -> [String] { - let pathValuedFlags: Set = [ + let pathValuedFlags: Set = [ "--in", "--out", "--outdir", "--report", "--metadata-report", "--metadata-settings-json", "--metadata-args", "--llama-gguf", - "--format-schema", "--log" + "--format-schema", "--log", ] var redacted: [String] = [] var redactNext = false @@ -40,7 +40,7 @@ func redactedLaunchArguments(_ args: [String]) -> [String] { return redacted } -// App Delegate for proper menu handling +/// App Delegate for proper menu handling class AppDelegate: NSObject, NSApplicationDelegate { // Global Python runtime - initialized once at app launch static var pythonRunner: PythonKitRunner? @@ -49,7 +49,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { private let pythonInitStateQueue = DispatchQueue(label: "com.marclaw.marcutapp.pythonInitState") @MainActor - func applicationDidFinishLaunching(_ notification: Notification) { + func applicationDidFinishLaunching(_: Notification) { if DebugPreferences.isEnabled() { // Enable SwiftUI debugging for AttributeGraph cycles enableSwiftUIDebugging() @@ -71,7 +71,9 @@ class AppDelegate: NSObject, NSApplicationDelegate { registerActivationObservers() FileAccessCoordinator.shared.clearMetadataReportCache() - if args.contains("--cli") || args.contains("--test") || args.contains("--diagnose") || args.contains("--help") || args.contains("--redact") || args.contains("--diag-launcher") { + if args.contains("--cli") || args.contains("--test") || args.contains("--diagnose") || args + .contains("--help") || args.contains("--redact") || args.contains("--diag-launcher") + { // Run in CLI mode logToFile("Running in CLI mode") NSApp.setActivationPolicy(.accessory) @@ -105,23 +107,24 @@ class AppDelegate: NSObject, NSApplicationDelegate { // Establish permissions proactively at startup to prevent repeated dialogs // DEFERRED: We now lazy-load permissions on first use to avoid startup prompts - /*Task { - await FileAccessCoordinator.shared.establishPermissionsAtStartup() - }*/ + /* Task { + await FileAccessCoordinator.shared.establishPermissionsAtStartup() + } */ } } - func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return !ProcessingState.isProcessing + func applicationShouldTerminateAfterLastWindowClosed(_: NSApplication) -> Bool { + !ProcessingState.isProcessing } - func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply { + func applicationShouldTerminate(_: NSApplication) -> NSApplication.TerminateReply { guard FileAccessCoordinator.shared.hasUnsavedReportFiles() else { return .terminateNow } let defaults = UserDefaults.standard - let behavior = UnsavedReportQuitBehavior(rawValue: defaults.integer(forKey: DefaultsKey.unsavedReportQuitBehavior.key)) ?? .warn + let behavior = UnsavedReportQuitBehavior(rawValue: defaults + .integer(forKey: DefaultsKey.unsavedReportQuitBehavior.key)) ?? .warn switch behavior { case .alwaysQuit: return .terminateNow @@ -137,7 +140,10 @@ class AppDelegate: NSObject, NSApplicationDelegate { alert.addButton(withTitle: "Always Quit") let response = alert.runModal() if response == .alertThirdButtonReturn { - defaults.set(UnsavedReportQuitBehavior.alwaysQuit.rawValue, forKey: DefaultsKey.unsavedReportQuitBehavior.key) + defaults.set( + UnsavedReportQuitBehavior.alwaysQuit.rawValue, + forKey: DefaultsKey.unsavedReportQuitBehavior.key + ) return .terminateNow } if response == .alertSecondButtonReturn { @@ -148,7 +154,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { } @MainActor - func applicationWillTerminate(_ notification: Notification) { + func applicationWillTerminate(_: Notification) { // Clean up any running Ollama processes // This will be handled by PythonBridgeService deinit activationObservers.forEach { NotificationCenter.default.removeObserver($0) } @@ -180,7 +186,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { DebugLogger.shared.log(msg, component: "PythonRuntime") print("PythonRuntime: \(msg)") }) - + // Update shared state on main thread DispatchQueue.main.async { AppDelegate.pythonRunner = runner @@ -239,13 +245,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { let timestamp = formatter.string(from: Date()) let pid = getpid() let banner = """ -========================================================== -🪪 MarcutApp launch -🕒 \(timestamp) -🔧 PID: \(pid) -🚩 Args: \(args.joined(separator: " ")) -========================================================== -""" + ========================================================== + 🪪 MarcutApp launch + 🕒 \(timestamp) + 🔧 PID: \(pid) + 🚩 Args: \(args.joined(separator: " ")) + ========================================================== + """ print(banner) DebugLogger.shared.log(banner, component: "AppDelegate") } @@ -300,8 +306,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { let initStart = Date() while AppDelegate.pythonRunner == nil { if Date().timeIntervalSince(initStart) > 30 { - print("❌ Python integration timed out") - return false + print("❌ Python integration timed out") + return false } try? await Task.sleep(nanoseconds: 100_000_000) // 100ms } @@ -363,13 +369,20 @@ class AppDelegate: NSObject, NSApplicationDelegate { let outData = stdoutPipe.fileHandleForReading.readDataToEndOfFile() let errData = stderrPipe.fileHandleForReading.readDataToEndOfFile() - if let outStr = String(data: outData, encoding: .utf8), !outStr.isEmpty { print(outStr) } - if let errStr = String(data: errData, encoding: .utf8), !errStr.isEmpty { fputs(errStr, stderr) } + if let outStr = String(data: outData, encoding: .utf8), !outStr.isEmpty { + print(outStr) + } + if let errStr = String(data: errData, encoding: .utf8), !errStr.isEmpty { + fputs(errStr, stderr) + } let ok = (process.terminationStatus == 0) - print(ok ? "✅ CLI launcher verified" : "❌ CLI launcher returned non-zero exit code \(process.terminationStatus)") + print(ok ? "✅ CLI launcher verified" : + "❌ CLI launcher returned non-zero exit code \(process.terminationStatus)") return ok } else if args.contains("--redact") { - // Headless redact: --redact --in [--out ] [--report ] [--outdir ] [--mode rules|enhanced|rules_override|constrained_overrides|llm_overrides] [--model name] [--llm-skip-confidence ] + // Headless redact: --redact --in [--out ] [--report ] [--outdir ] [--mode + // rules|enhanced|rules_override|constrained_overrides|llm_overrides] [--model name] [--llm-skip-confidence + // ] guard let inIdx = args.firstIndex(of: "--in"), inIdx + 1 < args.count else { print("❌ Missing --in argument") printCLIHelp() @@ -378,24 +391,34 @@ class AppDelegate: NSObject, NSApplicationDelegate { let inPath = args[inIdx + 1] // Optional exact output/report paths let outPathOpt: String? = { - if let idx = args.firstIndex(of: "--out"), idx + 1 < args.count { return args[idx + 1] } + if let idx = args.firstIndex(of: "--out"), idx + 1 < args.count { + return args[idx + 1] + } return nil }() let reportPathOpt: String? = { - if let idx = args.firstIndex(of: "--report"), idx + 1 < args.count { return args[idx + 1] } + if let idx = args.firstIndex(of: "--report"), idx + 1 < args.count { + return args[idx + 1] + } return nil }() // Optional outdir (fallback if exact paths not provided) let outDirPath: String? = { - if let idx = args.firstIndex(of: "--outdir"), idx + 1 < args.count { return args[idx + 1] } + if let idx = args.firstIndex(of: "--outdir"), idx + 1 < args.count { + return args[idx + 1] + } return nil }() let mode: String = { - if let mIdx = args.firstIndex(of: "--mode"), mIdx + 1 < args.count { return args[mIdx + 1] } + if let mIdx = args.firstIndex(of: "--mode"), mIdx + 1 < args.count { + return args[mIdx + 1] + } return "enhanced" }() let modelName: String = { - if let mIdx = args.firstIndex(of: "--model"), mIdx + 1 < args.count { return args[mIdx + 1] } + if let mIdx = args.firstIndex(of: "--model"), mIdx + 1 < args.count { + return args[mIdx + 1] + } return ModelCatalog.shared.defaultModelId }() let llmSkipConfidence: Double = { @@ -416,7 +439,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { if let outExact = outPathOpt, let repExact = reportPathOpt { outputPath = outExact reportPath = repExact - } else if let outDirPath = outDirPath { + } else if let outDirPath { let outDir = URL(fileURLWithPath: outDirPath, isDirectory: true) let outputFileName = inputURL.deletingPathExtension().lastPathComponent + "_redacted.docx" let reportFileName = inputURL.deletingPathExtension().lastPathComponent + "_report.json" @@ -488,7 +511,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { return ok } else if args.contains("--download-model") { if let modelIndex = args.firstIndex(of: "--download-model"), - modelIndex + 1 < args.count { + modelIndex + 1 < args.count + { let model = args[modelIndex + 1] print("\n📥 Downloading model: \(model)") await downloadModelWithPythonKit(model: model) @@ -561,7 +585,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { } @MainActor - func runTests(bridge: PythonBridgeService) async { + func runTests(bridge _: PythonBridgeService) async { // Add comprehensive tests here print("Running test suite...") } @@ -615,11 +639,11 @@ struct MarcutAppScene: App { var body: some Scene { #if arch(arm64) - marcutAppScene + marcutAppScene #else - WindowGroup("Unsupported Architecture") { - UnsupportedArchitectureView() - } + WindowGroup("Unsupported Architecture") { + UnsupportedArchitectureView() + } #endif } @@ -663,7 +687,6 @@ struct MarcutAppScene: App { // Tools menu removed - // Help menu CommandGroup(replacing: .help) { Button("MarcutApp Help") { @@ -696,7 +719,6 @@ struct MarcutAppScene: App { private func applyAppTheme() { NSApp.appearance = appTheme.appearance } - } enum LifecycleUtils { @@ -822,10 +844,10 @@ struct HelpView: View { self.initialAnchor = initialAnchor self.resourceName = resourceName } - + var body: some View { VStack(alignment: .leading, spacing: 0) { - if htmlContent.isEmpty && markdownContent.isEmpty { + if htmlContent.isEmpty, markdownContent.isEmpty { ProgressView("Loading help...") .frame(maxWidth: .infinity, maxHeight: .infinity) } else if !htmlContent.isEmpty { @@ -833,7 +855,7 @@ struct HelpView: View { } else { MarkdownTextView(markdownContent: markdownContent, scrollToAnchor: $pendingAnchor) } - + HStack { Spacer() Button("Close") { @@ -857,7 +879,7 @@ struct HelpView: View { } } } - + private func loadHelpContent() { if let html = loadBundledResource(extension: "html") { htmlContent = html @@ -886,7 +908,8 @@ struct HelpView: View { var bundles: [Bundle] = [Bundle.main] if let resourceBundleURL = Bundle.main.resourceURL? .appendingPathComponent("MarcutApp_MarcutApp.bundle"), - let resourceBundle = Bundle(url: resourceBundleURL) { + let resourceBundle = Bundle(url: resourceBundleURL) + { bundles.append(resourceBundle) } @@ -894,11 +917,13 @@ struct HelpView: View { for bundle in bundles { for name in names { if let url = bundle.url(forResource: name, withExtension: ext), - let content = try? String(contentsOf: url, encoding: .utf8) { + let content = try? String(contentsOf: url, encoding: .utf8) + { return content } if let url = bundle.url(forResource: name, withExtension: ext, subdirectory: "Resources"), - let content = try? String(contentsOf: url, encoding: .utf8) { + let content = try? String(contentsOf: url, encoding: .utf8) + { return content } } @@ -908,7 +933,8 @@ struct HelpView: View { for possibleURL in fallbackPaths { guard let url = possibleURL else { continue } if FileManager.default.fileExists(atPath: url.path), - let content = try? String(contentsOf: url, encoding: .utf8) { + let content = try? String(contentsOf: url, encoding: .utf8) + { return content } } @@ -918,7 +944,7 @@ struct HelpView: View { private func resourceNameCandidates(for ext: String) -> [String] { var names = [resourceName] - if resourceName == "help" && ext.lowercased() == "md" { + if resourceName == "help", ext.lowercased() == "md" { names.append("Help") } return names @@ -943,11 +969,8 @@ struct HelpView: View { } return paths } - } - - extension Notification.Name { static let pythonRunnerReady = Notification.Name("com.marclaw.marcutapp.pythonRunnerReady") static let pythonRunnerFailed = Notification.Name("com.marclaw.marcutapp.pythonRunnerFailed") diff --git a/src/swift/MarcutApp/Sources/MarcutApp/MarkdownTextView.swift b/src/swift/MarcutApp/Sources/MarcutApp/MarkdownTextView.swift index 1c9ef66..7ad3fba 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/MarkdownTextView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/MarkdownTextView.swift @@ -1,5 +1,5 @@ -import SwiftUI import AppKit +import SwiftUI /// Custom attribute key for anchor IDs private extension NSAttributedString.Key { @@ -10,7 +10,7 @@ private extension NSAttributedString.Key { struct MarkdownTextView: NSViewRepresentable { let markdownContent: String @Binding var scrollToAnchor: String? - + func makeNSView(context: Context) -> NSScrollView { let scrollView = NSScrollView() scrollView.hasVerticalScroller = true @@ -18,29 +18,32 @@ struct MarkdownTextView: NSViewRepresentable { scrollView.autohidesScrollers = true scrollView.borderType = .noBorder scrollView.drawsBackground = false - + let textView = NSTextView() textView.isEditable = false textView.isSelectable = true textView.drawsBackground = false textView.textContainerInset = NSSize(width: 16, height: 16) - textView.isAutomaticLinkDetectionEnabled = false // We handle links manually + textView.isAutomaticLinkDetectionEnabled = false // We handle links manually textView.delegate = context.coordinator - + // Enable Find panel (Cmd+F) textView.isIncrementalSearchingEnabled = true textView.usesFindPanel = true textView.usesFindBar = true // Potentially fixes in-window search - + // Set up text container for proper wrapping textView.textContainer?.widthTracksTextView = true - textView.textContainer?.containerSize = NSSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude) + textView.textContainer?.containerSize = NSSize( + width: CGFloat.greatestFiniteMagnitude, + height: CGFloat.greatestFiniteMagnitude + ) textView.isHorizontallyResizable = false textView.isVerticallyResizable = true textView.autoresizingMask = [.width] - + scrollView.documentView = textView - + // Set the attributed string content let anchorPositions = updateContent(textView: textView) context.coordinator.anchorPositions = anchorPositions @@ -52,10 +55,10 @@ struct MarkdownTextView: NSViewRepresentable { scrollToAnchor = nil } } - + return scrollView } - + func updateNSView(_ scrollView: NSScrollView, context: Context) { guard let textView = scrollView.documentView as? NSTextView else { return } let anchorPositions = updateContent(textView: textView) @@ -69,10 +72,10 @@ struct MarkdownTextView: NSViewRepresentable { } } } - + /// Generate an anchor ID from header text (GitHub-style slugification) private func generateAnchorID(from text: String) -> String { - return text + text .lowercased() .replacingOccurrences(of: " ", with: "-") .replacingOccurrences(of: "(", with: "") @@ -82,34 +85,34 @@ struct MarkdownTextView: NSViewRepresentable { .replacingOccurrences(of: "'", with: "") .replacingOccurrences(of: "\"", with: "") } - + @discardableResult private func updateContent(textView: NSTextView) -> [String: Int] { // Build styled attributed string from markdown let result = NSMutableAttributedString() var anchorPositions: [String: Int] = [:] - + let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = 4 paragraphStyle.paragraphSpacing = 8 - + let baseFont = NSFont.systemFont(ofSize: 14) let boldFont = NSFont.boldSystemFont(ofSize: 14) let h1Font = NSFont.boldSystemFont(ofSize: 24) let h2Font = NSFont.boldSystemFont(ofSize: 20) let h3Font = NSFont.boldSystemFont(ofSize: 16) let codeFont = NSFont.monospacedSystemFont(ofSize: 13, weight: .regular) - + let baseAttributes: [NSAttributedString.Key: Any] = [ .font: baseFont, .foregroundColor: NSColor.textColor, - .paragraphStyle: paragraphStyle + .paragraphStyle: paragraphStyle, ] - + let lines = markdownContent.components(separatedBy: "\n") var inCodeBlock = false var codeBlockContent = "" - + for (index, line) in lines.enumerated() { // Handle code blocks if line.hasPrefix("```") { @@ -121,7 +124,7 @@ struct MarkdownTextView: NSViewRepresentable { .font: codeFont, .foregroundColor: NSColor.textColor, .backgroundColor: NSColor.textBackgroundColor.withAlphaComponent(0.3), - .paragraphStyle: codeStyle + .paragraphStyle: codeStyle, ] result.append(NSAttributedString(string: codeBlockContent + "\n\n", attributes: codeAttrs)) codeBlockContent = "" @@ -131,18 +134,18 @@ struct MarkdownTextView: NSViewRepresentable { } continue } - + if inCodeBlock { codeBlockContent += line + "\n" continue } - + // Handle headers - record anchor positions if line.hasPrefix("# ") { let text = String(line.dropFirst(2)) let anchorID = generateAnchorID(from: text) anchorPositions[anchorID] = result.length - + var attrs = baseAttributes attrs[.font] = h1Font attrs[.anchorID] = anchorID @@ -151,7 +154,7 @@ struct MarkdownTextView: NSViewRepresentable { let text = String(line.dropFirst(3)) let anchorID = generateAnchorID(from: text) anchorPositions[anchorID] = result.length - + var attrs = baseAttributes attrs[.font] = h2Font attrs[.anchorID] = anchorID @@ -160,7 +163,7 @@ struct MarkdownTextView: NSViewRepresentable { let text = String(line.dropFirst(4)) let anchorID = generateAnchorID(from: text) anchorPositions[anchorID] = result.length - + var attrs = baseAttributes attrs[.font] = h3Font attrs[.anchorID] = anchorID @@ -168,7 +171,12 @@ struct MarkdownTextView: NSViewRepresentable { } else if line.hasPrefix("- ") { // Bullet list - process inline markdown for the content let bulletContent = String(line.dropFirst(2)) - let processed = processInlineMarkdown(bulletContent, baseAttributes: baseAttributes, boldFont: boldFont, codeFont: codeFont) + let processed = processInlineMarkdown( + bulletContent, + baseAttributes: baseAttributes, + boldFont: boldFont, + codeFont: codeFont + ) let bulletResult = NSMutableAttributedString(string: "• ", attributes: baseAttributes) bulletResult.append(processed) bulletResult.append(NSAttributedString(string: "\n", attributes: baseAttributes)) @@ -177,7 +185,12 @@ struct MarkdownTextView: NSViewRepresentable { result.append(NSAttributedString(string: "\n", attributes: baseAttributes)) } else { // Regular paragraph - process inline markdown - let processed = processInlineMarkdown(line, baseAttributes: baseAttributes, boldFont: boldFont, codeFont: codeFont) + let processed = processInlineMarkdown( + line, + baseAttributes: baseAttributes, + boldFont: boldFont, + codeFont: codeFont + ) result.append(processed) // Add newline unless next line continues paragraph if index < lines.count - 1 { @@ -185,14 +198,19 @@ struct MarkdownTextView: NSViewRepresentable { } } } - + textView.textStorage?.setAttributedString(result) return anchorPositions } - - private func processInlineMarkdown(_ text: String, baseAttributes: [NSAttributedString.Key: Any], boldFont: NSFont, codeFont: NSFont) -> NSAttributedString { + + private func processInlineMarkdown( + _ text: String, + baseAttributes: [NSAttributedString.Key: Any], + boldFont: NSFont, + codeFont: NSFont + ) -> NSAttributedString { let result = NSMutableAttributedString(string: text, attributes: baseAttributes) - + // Process markdown links: [text](url) - including anchor links [text](#anchor) let linkPattern = #"\[([^\]]+)\]\(([^)]+)\)"# if let regex = try? NSRegularExpression(pattern: linkPattern) { @@ -203,14 +221,14 @@ struct MarkdownTextView: NSViewRepresentable { let textRange = Range(match.range(at: 1), in: text), let urlRange = Range(match.range(at: 2), in: text), let fullRange = Range(match.range, in: text) else { continue } - + let linkText = String(text[textRange]) let urlString = String(text[urlRange]) - + var linkAttrs = baseAttributes linkAttrs[.foregroundColor] = NSColor.linkColor linkAttrs[.underlineStyle] = NSUnderlineStyle.single.rawValue - + // Handle anchor links (#section-name) vs external URLs if urlString.hasPrefix("#") { // Internal anchor link @@ -218,12 +236,12 @@ struct MarkdownTextView: NSViewRepresentable { } else if let url = URL(string: urlString) { linkAttrs[.link] = url } - + let replacement = NSAttributedString(string: linkText, attributes: linkAttrs) result.replaceCharacters(in: NSRange(fullRange, in: text), with: replacement) } } - + // Process plain URLs (https:// or http://) - but only in current text, not modified result let urlPattern = #"https?://[^\s\)\]\>]+"# if let regex = try? NSRegularExpression(pattern: urlPattern) { @@ -233,7 +251,7 @@ struct MarkdownTextView: NSViewRepresentable { for match in matches.reversed() { guard let range = Range(match.range, in: currentText) else { continue } let urlString = String(currentText[range]) - + // Check if this URL is already a link (to avoid double-processing) var isAlreadyLink = false result.enumerateAttribute(.link, in: match.range, options: []) { value, _, stop in @@ -242,18 +260,18 @@ struct MarkdownTextView: NSViewRepresentable { stop.pointee = true } } - + if !isAlreadyLink, let url = URL(string: urlString) { var linkAttrs = baseAttributes linkAttrs[.link] = url linkAttrs[.foregroundColor] = NSColor.linkColor linkAttrs[.underlineStyle] = NSUnderlineStyle.single.rawValue - + result.setAttributes(linkAttrs, range: match.range) } } } - + // Process bold: **text** or __text__ let boldPattern = #"\*\*([^*]+)\*\*|__([^_]+)__"# if let regex = try? NSRegularExpression(pattern: boldPattern) { @@ -262,19 +280,22 @@ struct MarkdownTextView: NSViewRepresentable { for match in matches { let captureIdx = match.range(at: 1).location != NSNotFound ? 1 : 2 guard let contentRange = Range(match.range(at: captureIdx), in: text) else { continue } - + let boldText = String(text[contentRange]) var boldAttrs = baseAttributes boldAttrs[.font] = boldFont - + let nsFullRange = NSRange(location: match.range.location + offset, length: match.range.length) if nsFullRange.location + nsFullRange.length <= result.length { - result.replaceCharacters(in: nsFullRange, with: NSAttributedString(string: boldText, attributes: boldAttrs)) + result.replaceCharacters( + in: nsFullRange, + with: NSAttributedString(string: boldText, attributes: boldAttrs) + ) offset -= (match.range.length - boldText.count) } } } - + // Process inline code: `text` let codePattern = #"`([^`]+)`"# if let regex = try? NSRegularExpression(pattern: codePattern) { @@ -282,33 +303,36 @@ struct MarkdownTextView: NSViewRepresentable { let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in matches { guard let contentRange = Range(match.range(at: 1), in: text) else { continue } - + let codeText = String(text[contentRange]) var codeAttrs = baseAttributes codeAttrs[.font] = codeFont codeAttrs[.backgroundColor] = NSColor.textBackgroundColor.withAlphaComponent(0.3) - + let nsFullRange = NSRange(location: match.range.location + offset, length: match.range.length) if nsFullRange.location + nsFullRange.length <= result.length { - result.replaceCharacters(in: nsFullRange, with: NSAttributedString(string: codeText, attributes: codeAttrs)) + result.replaceCharacters( + in: nsFullRange, + with: NSAttributedString(string: codeText, attributes: codeAttrs) + ) offset -= (match.range.length - codeText.count) } } } - + return result } - + func makeCoordinator() -> Coordinator { Coordinator() } - + class Coordinator: NSObject, NSTextViewDelegate { var anchorPositions: [String: Int] = [:] weak var textView: NSTextView? weak var scrollView: NSScrollView? - - func textView(_ textView: NSTextView, clickedOnLink link: Any, at charIndex: Int) -> Bool { + + func textView(_: NSTextView, clickedOnLink link: Any, at _: Int) -> Bool { if let url = link as? URL { // Handle internal anchor links if url.scheme == "marcut-anchor" { @@ -332,19 +356,23 @@ struct MarkdownTextView: NSViewRepresentable { } return false } - + func scrollToAnchor(_ anchorID: String) { - guard let textView = textView, - let position = anchorPositions[anchorID] else { + guard let textView, + let position = anchorPositions[anchorID] + else { return } - + // Get the rect for this character position let layoutManager = textView.layoutManager! let textContainer = textView.textContainer! - let glyphRange = layoutManager.glyphRange(forCharacterRange: NSRange(location: position, length: 1), actualCharacterRange: nil) + let glyphRange = layoutManager.glyphRange( + forCharacterRange: NSRange(location: position, length: 1), + actualCharacterRange: nil + ) let rect = layoutManager.boundingRect(forGlyphRange: glyphRange, in: textContainer) - + // Scroll to the position with some padding at the top let scrollPoint = NSPoint(x: 0, y: rect.origin.y - 20) textView.scroll(scrollPoint) @@ -352,25 +380,25 @@ struct MarkdownTextView: NSViewRepresentable { } } -/// Preview provider for MarkdownTextView +// Preview provider for MarkdownTextView #if DEBUG -struct MarkdownTextView_Previews: PreviewProvider { - static var previews: some View { - MarkdownTextView(markdownContent: """ - # Sample Markdown - - This is **bold** and this is *italic*. - - - [Jump to section](#another-section) - - Item 2 - - [Link](https://example.com) - - ## Another Section - - This is the section we jumped to. - """, scrollToAnchor: .constant(nil)) - .frame(width: 400, height: 300) + struct MarkdownTextView_Previews: PreviewProvider { + static var previews: some View { + MarkdownTextView(markdownContent: """ + # Sample Markdown + + This is **bold** and this is *italic*. + + - [Jump to section](#another-section) + - Item 2 + + [Link](https://example.com) + + ## Another Section + + This is the section we jumped to. + """, scrollToAnchor: .constant(nil)) + .frame(width: 400, height: 300) + } } -} #endif diff --git a/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSettings.swift b/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSettings.swift index 5da005c..f19be9c 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSettings.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSettings.swift @@ -2,28 +2,30 @@ import SwiftUI /// Represents the preset cleaning profiles for metadata enum MetadataCleaningPreset: String, CaseIterable, Identifiable { - case maximum = "maximum" - case balanced = "balanced" - case none = "none" - case custom = "custom" - - var id: String { rawValue } - + case maximum + case balanced + case none + case custom + + var id: String { + rawValue + } + var displayName: String { switch self { - case .maximum: return "Maximum Privacy" - case .balanced: return "Balanced" - case .none: return "None" - case .custom: return "Custom" + case .maximum: "Maximum Privacy" + case .balanced: "Balanced" + case .none: "None" + case .custom: "Custom" } } - + var description: String { switch self { - case .maximum: return "Clears all metadata fields for maximum privacy" - case .balanced: return "Clears identifying info while preserving document formatting" - case .none: return "No metadata cleaning (keep all original metadata)" - case .custom: return "Use your custom selection below" + case .maximum: "Clears all metadata fields for maximum privacy" + case .balanced: "Clears identifying info while preserving document formatting" + case .none: "No metadata cleaning (keep all original metadata)" + case .custom: "Use your custom selection below" } } } @@ -31,6 +33,7 @@ enum MetadataCleaningPreset: String, CaseIterable, Identifiable { /// Settings for controlling which metadata fields are cleaned during redaction struct MetadataCleaningSettings: Codable, Equatable { // MARK: - App Properties (docProps/app.xml) + var cleanCompany: Bool = true var cleanManager: Bool = true var cleanTotalEditingTime: Bool = true @@ -44,8 +47,9 @@ struct MetadataCleaningSettings: Codable, Equatable { var cleanLinksUpToDate: Bool = true var cleanSharedDoc: Bool = true var cleanHyperlinksChanged: Bool = true - + // MARK: - Core Properties (docProps/core.xml) + var cleanAuthor: Bool = true var cleanLastModifiedBy: Bool = true var cleanTitle: Bool = true @@ -61,11 +65,13 @@ struct MetadataCleaningSettings: Codable, Equatable { var cleanIdentifier: Bool = true var cleanLanguage: Bool = true var cleanVersion: Bool = true - + // MARK: - Custom Properties + var cleanCustomProperties: Bool = true - + // MARK: - Document Structure + var cleanReviewCommentsVisible: Bool = true var cleanReviewCommentsHidden: Bool = true var cleanTrackChanges: Bool = true @@ -81,8 +87,9 @@ struct MetadataCleaningSettings: Codable, Equatable { var cleanInvisibleObjects: Bool = true var cleanHeadersFooters: Bool = true var cleanWatermarks: Bool = true - + // MARK: - Embedded Content + var cleanThumbnail: Bool = true var cleanHyperlinkURLs: Bool = true var cleanAltText: Bool = true @@ -93,38 +100,43 @@ struct MetadataCleaningSettings: Codable, Equatable { var cleanEmbeddedFonts: Bool = true var cleanGlossary: Bool = true var cleanFastSaveData: Bool = true - + // MARK: - Advanced Hardening (Path Leakage) + var cleanExternalLinks: Bool = true var cleanUNCPaths: Bool = true var cleanUserPaths: Bool = true var cleanInternalURLs: Bool = true var cleanOLESources: Bool = true - + // MARK: - Image EXIF + var cleanImageEXIF: Bool = true - + // MARK: - Style and Formatting (can affect document appearance) + var cleanStyleNames: Bool = true var cleanChartLabels: Bool = true var cleanFormDefaults: Bool = true var cleanLanguageSettings: Bool = true - + // MARK: - ActiveX and Controls + var cleanActiveX: Bool = true // MARK: - Nuclear Options (Non-Standard / Hidden Data) + var cleanCustomXMLParts: Bool = true var cleanNonstandardXML: Bool = true var cleanMicrosoftExtensionXML: Bool = true var cleanUnknownRelationships: Bool = true var cleanOrphanedParts: Bool = true var cleanAlternateContent: Bool = true - + // MARK: - Preset Application init() {} - + /// Returns settings for the Maximum Privacy preset (all ON) static var maximumPrivacy: MetadataCleaningSettings { var settings = MetadataCleaningSettings() @@ -133,31 +145,31 @@ struct MetadataCleaningSettings: Codable, Equatable { settings.cleanModifiedDate = true return settings } - + /// Returns settings for the Balanced preset /// Clears identifying metadata but preserves document formatting/hierarchy static var balanced: MetadataCleaningSettings { var settings = MetadataCleaningSettings() - + // === KEEP OFF (preserve document formatting) === settings.cleanStatistics = false settings.cleanCreatedDate = false settings.cleanModifiedDate = false settings.cleanLinksUpToDate = true settings.cleanHyperlinksChanged = false - + // Preserve visual formatting - settings.cleanAltText = true // Accessibility - settings.cleanEmbeddedFonts = false // Document appearance - settings.cleanStyleNames = false // Style hierarchy - settings.cleanChartLabels = false // Chart readability - settings.cleanFormDefaults = false // Form functionality - settings.cleanLanguageSettings = false // Locale/proofing - settings.cleanHyperlinkURLs = false // Link functionality - settings.cleanLanguage = false // Proofing language - + settings.cleanAltText = true // Accessibility + settings.cleanEmbeddedFonts = false // Document appearance + settings.cleanStyleNames = false // Style hierarchy + settings.cleanChartLabels = false // Chart readability + settings.cleanFormDefaults = false // Form functionality + settings.cleanLanguageSettings = false // Locale/proofing + settings.cleanHyperlinkURLs = false // Link functionality + settings.cleanLanguage = false // Proofing language + // Keep structure intact - settings.cleanGlossary = false // Building blocks + settings.cleanGlossary = false // Building blocks settings.cleanScaleCrop = false // Visual appearance settings.cleanSharedDoc = true // Document state settings.cleanSpellGrammarState = false // Proofing state @@ -179,7 +191,7 @@ struct MetadataCleaningSettings: Codable, Equatable { settings.cleanReviewCommentsVisible = false settings.cleanReviewCommentsHidden = true settings.cleanTrackChanges = false - + // === LEAVE ON (identify info - cleaned) === // Author, company, manager, last modified by - ON (cleaned) // Custom properties, GUID, RSIDs - ON (cleaned) @@ -187,10 +199,10 @@ struct MetadataCleaningSettings: Codable, Equatable { // Digital signatures, VBA macros - ON (cleaned) // EXIF data, external links, UNC paths - ON (cleaned) // User paths, internal URLs - ON (cleaned) - + return settings } - + /// Returns settings for the None preset (all OFF - no metadata cleaning) static var none: MetadataCleaningSettings { var settings = MetadataCleaningSettings() @@ -268,22 +280,22 @@ struct MetadataCleaningSettings: Codable, Equatable { settings.cleanAlternateContent = false return settings } - + /// Default settings - Balanced preset (identifying info ON, dates/stats OFF) static var `default`: MetadataCleaningSettings { - return .balanced + .balanced } - + /// Detects which preset matches the current settings func detectPreset() -> MetadataCleaningPreset { if self == .maximumPrivacy { - return .maximum + .maximum } else if self == .balanced { - return .balanced + .balanced } else if self == .none { - return .none + .none } else { - return .custom + .custom } } @@ -368,35 +380,48 @@ struct MetadataCleaningSettings: Codable, Equatable { cleanCompany = try container.decodeIfPresent(Bool.self, forKey: .cleanCompany) ?? defaults.cleanCompany cleanManager = try container.decodeIfPresent(Bool.self, forKey: .cleanManager) ?? defaults.cleanManager - cleanTotalEditingTime = try container.decodeIfPresent(Bool.self, forKey: .cleanTotalEditingTime) ?? defaults.cleanTotalEditingTime - cleanApplication = try container.decodeIfPresent(Bool.self, forKey: .cleanApplication) ?? defaults.cleanApplication + cleanTotalEditingTime = try container.decodeIfPresent(Bool.self, forKey: .cleanTotalEditingTime) ?? defaults + .cleanTotalEditingTime + cleanApplication = try container.decodeIfPresent(Bool.self, forKey: .cleanApplication) ?? defaults + .cleanApplication cleanAppVersion = try container.decodeIfPresent(Bool.self, forKey: .cleanAppVersion) ?? defaults.cleanAppVersion cleanTemplate = try container.decodeIfPresent(Bool.self, forKey: .cleanTemplate) ?? defaults.cleanTemplate - cleanHyperlinkBase = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinkBase) ?? defaults.cleanHyperlinkBase + cleanHyperlinkBase = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinkBase) ?? defaults + .cleanHyperlinkBase cleanStatistics = try container.decodeIfPresent(Bool.self, forKey: .cleanStatistics) ?? defaults.cleanStatistics - cleanDocSecurity = try container.decodeIfPresent(Bool.self, forKey: .cleanDocSecurity) ?? defaults.cleanDocSecurity + cleanDocSecurity = try container.decodeIfPresent(Bool.self, forKey: .cleanDocSecurity) ?? defaults + .cleanDocSecurity cleanScaleCrop = try container.decodeIfPresent(Bool.self, forKey: .cleanScaleCrop) ?? defaults.cleanScaleCrop - cleanLinksUpToDate = try container.decodeIfPresent(Bool.self, forKey: .cleanLinksUpToDate) ?? defaults.cleanLinksUpToDate + cleanLinksUpToDate = try container.decodeIfPresent(Bool.self, forKey: .cleanLinksUpToDate) ?? defaults + .cleanLinksUpToDate cleanSharedDoc = try container.decodeIfPresent(Bool.self, forKey: .cleanSharedDoc) ?? defaults.cleanSharedDoc - cleanHyperlinksChanged = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinksChanged) ?? defaults.cleanHyperlinksChanged + cleanHyperlinksChanged = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinksChanged) ?? defaults + .cleanHyperlinksChanged cleanAuthor = try container.decodeIfPresent(Bool.self, forKey: .cleanAuthor) ?? defaults.cleanAuthor - cleanLastModifiedBy = try container.decodeIfPresent(Bool.self, forKey: .cleanLastModifiedBy) ?? defaults.cleanLastModifiedBy + cleanLastModifiedBy = try container.decodeIfPresent(Bool.self, forKey: .cleanLastModifiedBy) ?? defaults + .cleanLastModifiedBy cleanTitle = try container.decodeIfPresent(Bool.self, forKey: .cleanTitle) ?? defaults.cleanTitle cleanSubject = try container.decodeIfPresent(Bool.self, forKey: .cleanSubject) ?? defaults.cleanSubject cleanKeywords = try container.decodeIfPresent(Bool.self, forKey: .cleanKeywords) ?? defaults.cleanKeywords cleanComments = try container.decodeIfPresent(Bool.self, forKey: .cleanComments) ?? defaults.cleanComments cleanCategory = try container.decodeIfPresent(Bool.self, forKey: .cleanCategory) ?? defaults.cleanCategory - cleanContentStatus = try container.decodeIfPresent(Bool.self, forKey: .cleanContentStatus) ?? defaults.cleanContentStatus - cleanCreatedDate = try container.decodeIfPresent(Bool.self, forKey: .cleanCreatedDate) ?? defaults.cleanCreatedDate - cleanModifiedDate = try container.decodeIfPresent(Bool.self, forKey: .cleanModifiedDate) ?? defaults.cleanModifiedDate - cleanLastPrinted = try container.decodeIfPresent(Bool.self, forKey: .cleanLastPrinted) ?? defaults.cleanLastPrinted - cleanRevisionNumber = try container.decodeIfPresent(Bool.self, forKey: .cleanRevisionNumber) ?? defaults.cleanRevisionNumber + cleanContentStatus = try container.decodeIfPresent(Bool.self, forKey: .cleanContentStatus) ?? defaults + .cleanContentStatus + cleanCreatedDate = try container.decodeIfPresent(Bool.self, forKey: .cleanCreatedDate) ?? defaults + .cleanCreatedDate + cleanModifiedDate = try container.decodeIfPresent(Bool.self, forKey: .cleanModifiedDate) ?? defaults + .cleanModifiedDate + cleanLastPrinted = try container.decodeIfPresent(Bool.self, forKey: .cleanLastPrinted) ?? defaults + .cleanLastPrinted + cleanRevisionNumber = try container.decodeIfPresent(Bool.self, forKey: .cleanRevisionNumber) ?? defaults + .cleanRevisionNumber cleanIdentifier = try container.decodeIfPresent(Bool.self, forKey: .cleanIdentifier) ?? defaults.cleanIdentifier cleanLanguage = try container.decodeIfPresent(Bool.self, forKey: .cleanLanguage) ?? defaults.cleanLanguage cleanVersion = try container.decodeIfPresent(Bool.self, forKey: .cleanVersion) ?? defaults.cleanVersion - cleanCustomProperties = try container.decodeIfPresent(Bool.self, forKey: .cleanCustomProperties) ?? defaults.cleanCustomProperties + cleanCustomProperties = try container.decodeIfPresent(Bool.self, forKey: .cleanCustomProperties) ?? defaults + .cleanCustomProperties let legacyReviewComments = try container.decodeIfPresent(Bool.self, forKey: .cleanReviewComments) cleanReviewCommentsVisible = try container.decodeIfPresent(Bool.self, forKey: .cleanReviewCommentsVisible) @@ -405,48 +430,73 @@ struct MetadataCleaningSettings: Codable, Equatable { cleanReviewCommentsHidden = try container.decodeIfPresent(Bool.self, forKey: .cleanReviewCommentsHidden) ?? legacyReviewComments ?? defaults.cleanReviewCommentsHidden - cleanTrackChanges = try container.decodeIfPresent(Bool.self, forKey: .cleanTrackChanges) ?? defaults.cleanTrackChanges + cleanTrackChanges = try container.decodeIfPresent(Bool.self, forKey: .cleanTrackChanges) ?? defaults + .cleanTrackChanges cleanRSIDs = try container.decodeIfPresent(Bool.self, forKey: .cleanRSIDs) ?? defaults.cleanRSIDs - cleanDocumentGUID = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentGUID) ?? defaults.cleanDocumentGUID - cleanSpellGrammarState = try container.decodeIfPresent(Bool.self, forKey: .cleanSpellGrammarState) ?? defaults.cleanSpellGrammarState - cleanDocumentVariables = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentVariables) ?? defaults.cleanDocumentVariables + cleanDocumentGUID = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentGUID) ?? defaults + .cleanDocumentGUID + cleanSpellGrammarState = try container.decodeIfPresent(Bool.self, forKey: .cleanSpellGrammarState) ?? defaults + .cleanSpellGrammarState + cleanDocumentVariables = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentVariables) ?? defaults + .cleanDocumentVariables cleanMailMerge = try container.decodeIfPresent(Bool.self, forKey: .cleanMailMerge) ?? defaults.cleanMailMerge - cleanDataBindings = try container.decodeIfPresent(Bool.self, forKey: .cleanDataBindings) ?? defaults.cleanDataBindings - cleanDocumentVersions = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentVersions) ?? defaults.cleanDocumentVersions - cleanInkAnnotations = try container.decodeIfPresent(Bool.self, forKey: .cleanInkAnnotations) ?? defaults.cleanInkAnnotations + cleanDataBindings = try container.decodeIfPresent(Bool.self, forKey: .cleanDataBindings) ?? defaults + .cleanDataBindings + cleanDocumentVersions = try container.decodeIfPresent(Bool.self, forKey: .cleanDocumentVersions) ?? defaults + .cleanDocumentVersions + cleanInkAnnotations = try container.decodeIfPresent(Bool.self, forKey: .cleanInkAnnotations) ?? defaults + .cleanInkAnnotations cleanHiddenText = try container.decodeIfPresent(Bool.self, forKey: .cleanHiddenText) ?? defaults.cleanHiddenText - cleanInvisibleObjects = try container.decodeIfPresent(Bool.self, forKey: .cleanInvisibleObjects) ?? defaults.cleanInvisibleObjects - cleanHeadersFooters = try container.decodeIfPresent(Bool.self, forKey: .cleanHeadersFooters) ?? defaults.cleanHeadersFooters + cleanInvisibleObjects = try container.decodeIfPresent(Bool.self, forKey: .cleanInvisibleObjects) ?? defaults + .cleanInvisibleObjects + cleanHeadersFooters = try container.decodeIfPresent(Bool.self, forKey: .cleanHeadersFooters) ?? defaults + .cleanHeadersFooters cleanWatermarks = try container.decodeIfPresent(Bool.self, forKey: .cleanWatermarks) ?? defaults.cleanWatermarks cleanThumbnail = try container.decodeIfPresent(Bool.self, forKey: .cleanThumbnail) ?? defaults.cleanThumbnail - cleanHyperlinkURLs = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinkURLs) ?? defaults.cleanHyperlinkURLs + cleanHyperlinkURLs = try container.decodeIfPresent(Bool.self, forKey: .cleanHyperlinkURLs) ?? defaults + .cleanHyperlinkURLs cleanAltText = try container.decodeIfPresent(Bool.self, forKey: .cleanAltText) ?? defaults.cleanAltText cleanOLEObjects = try container.decodeIfPresent(Bool.self, forKey: .cleanOLEObjects) ?? defaults.cleanOLEObjects cleanVBAMacros = try container.decodeIfPresent(Bool.self, forKey: .cleanVBAMacros) ?? defaults.cleanVBAMacros - cleanDigitalSignatures = try container.decodeIfPresent(Bool.self, forKey: .cleanDigitalSignatures) ?? defaults.cleanDigitalSignatures - cleanPrinterSettings = try container.decodeIfPresent(Bool.self, forKey: .cleanPrinterSettings) ?? defaults.cleanPrinterSettings - cleanEmbeddedFonts = try container.decodeIfPresent(Bool.self, forKey: .cleanEmbeddedFonts) ?? defaults.cleanEmbeddedFonts + cleanDigitalSignatures = try container.decodeIfPresent(Bool.self, forKey: .cleanDigitalSignatures) ?? defaults + .cleanDigitalSignatures + cleanPrinterSettings = try container.decodeIfPresent(Bool.self, forKey: .cleanPrinterSettings) ?? defaults + .cleanPrinterSettings + cleanEmbeddedFonts = try container.decodeIfPresent(Bool.self, forKey: .cleanEmbeddedFonts) ?? defaults + .cleanEmbeddedFonts cleanGlossary = try container.decodeIfPresent(Bool.self, forKey: .cleanGlossary) ?? defaults.cleanGlossary - cleanFastSaveData = try container.decodeIfPresent(Bool.self, forKey: .cleanFastSaveData) ?? defaults.cleanFastSaveData + cleanFastSaveData = try container.decodeIfPresent(Bool.self, forKey: .cleanFastSaveData) ?? defaults + .cleanFastSaveData - cleanExternalLinks = try container.decodeIfPresent(Bool.self, forKey: .cleanExternalLinks) ?? defaults.cleanExternalLinks + cleanExternalLinks = try container.decodeIfPresent(Bool.self, forKey: .cleanExternalLinks) ?? defaults + .cleanExternalLinks cleanUNCPaths = try container.decodeIfPresent(Bool.self, forKey: .cleanUNCPaths) ?? defaults.cleanUNCPaths cleanUserPaths = try container.decodeIfPresent(Bool.self, forKey: .cleanUserPaths) ?? defaults.cleanUserPaths - cleanInternalURLs = try container.decodeIfPresent(Bool.self, forKey: .cleanInternalURLs) ?? defaults.cleanInternalURLs + cleanInternalURLs = try container.decodeIfPresent(Bool.self, forKey: .cleanInternalURLs) ?? defaults + .cleanInternalURLs cleanOLESources = try container.decodeIfPresent(Bool.self, forKey: .cleanOLESources) ?? defaults.cleanOLESources cleanImageEXIF = try container.decodeIfPresent(Bool.self, forKey: .cleanImageEXIF) ?? defaults.cleanImageEXIF cleanStyleNames = try container.decodeIfPresent(Bool.self, forKey: .cleanStyleNames) ?? defaults.cleanStyleNames - cleanChartLabels = try container.decodeIfPresent(Bool.self, forKey: .cleanChartLabels) ?? defaults.cleanChartLabels - cleanFormDefaults = try container.decodeIfPresent(Bool.self, forKey: .cleanFormDefaults) ?? defaults.cleanFormDefaults - cleanLanguageSettings = try container.decodeIfPresent(Bool.self, forKey: .cleanLanguageSettings) ?? defaults.cleanLanguageSettings + cleanChartLabels = try container.decodeIfPresent(Bool.self, forKey: .cleanChartLabels) ?? defaults + .cleanChartLabels + cleanFormDefaults = try container.decodeIfPresent(Bool.self, forKey: .cleanFormDefaults) ?? defaults + .cleanFormDefaults + cleanLanguageSettings = try container.decodeIfPresent(Bool.self, forKey: .cleanLanguageSettings) ?? defaults + .cleanLanguageSettings cleanActiveX = try container.decodeIfPresent(Bool.self, forKey: .cleanActiveX) ?? defaults.cleanActiveX - cleanCustomXMLParts = try container.decodeIfPresent(Bool.self, forKey: .cleanCustomXMLParts) ?? defaults.cleanCustomXMLParts - cleanNonstandardXML = try container.decodeIfPresent(Bool.self, forKey: .cleanNonstandardXML) ?? defaults.cleanNonstandardXML - cleanMicrosoftExtensionXML = try container.decodeIfPresent(Bool.self, forKey: .cleanMicrosoftExtensionXML) ?? defaults.cleanMicrosoftExtensionXML - cleanUnknownRelationships = try container.decodeIfPresent(Bool.self, forKey: .cleanUnknownRelationships) ?? defaults.cleanUnknownRelationships - cleanOrphanedParts = try container.decodeIfPresent(Bool.self, forKey: .cleanOrphanedParts) ?? defaults.cleanOrphanedParts - cleanAlternateContent = try container.decodeIfPresent(Bool.self, forKey: .cleanAlternateContent) ?? defaults.cleanAlternateContent + cleanCustomXMLParts = try container.decodeIfPresent(Bool.self, forKey: .cleanCustomXMLParts) ?? defaults + .cleanCustomXMLParts + cleanNonstandardXML = try container.decodeIfPresent(Bool.self, forKey: .cleanNonstandardXML) ?? defaults + .cleanNonstandardXML + cleanMicrosoftExtensionXML = try container + .decodeIfPresent(Bool.self, forKey: .cleanMicrosoftExtensionXML) ?? defaults.cleanMicrosoftExtensionXML + cleanUnknownRelationships = try container + .decodeIfPresent(Bool.self, forKey: .cleanUnknownRelationships) ?? defaults.cleanUnknownRelationships + cleanOrphanedParts = try container.decodeIfPresent(Bool.self, forKey: .cleanOrphanedParts) ?? defaults + .cleanOrphanedParts + cleanAlternateContent = try container.decodeIfPresent(Bool.self, forKey: .cleanAlternateContent) ?? defaults + .cleanAlternateContent } func encode(to encoder: Encoder) throws { @@ -528,12 +578,13 @@ struct MetadataCleaningSettings: Codable, Equatable { try container.encode(cleanOrphanedParts, forKey: .cleanOrphanedParts) try container.encode(cleanAlternateContent, forKey: .cleanAlternateContent) } - + // MARK: - Persistence - + static func load() -> MetadataCleaningSettings { guard let data = UserDefaults.standard.data(forKey: DefaultsKey.metadataCleaningSettings.key), - let settings = try? JSONDecoder().decode(MetadataCleaningSettings.self, from: data) else { + let settings = try? JSONDecoder().decode(MetadataCleaningSettings.self, from: data) + else { return .default } return settings @@ -544,95 +595,237 @@ struct MetadataCleaningSettings: Codable, Equatable { UserDefaults.standard.set(data, forKey: DefaultsKey.metadataCleaningSettings.key) } } - + // MARK: - CLI Arguments - + /// Generates CLI arguments for passing to Python func toCLIArguments() -> [String] { var args: [String] = [] - + // Explicitly signal 'None' preset for robust handling if self == MetadataCleaningSettings.none { args.append("--preset-none") } - + // Only pass fields that are OFF (to minimize arg list) - if !cleanCompany { args.append("--no-clean-company") } - if !cleanManager { args.append("--no-clean-manager") } - if !cleanTotalEditingTime { args.append("--no-clean-editing-time") } - if !cleanApplication { args.append("--no-clean-application") } - if !cleanAppVersion { args.append("--no-clean-app-version") } - if !cleanTemplate { args.append("--no-clean-template") } - if !cleanHyperlinkBase { args.append("--no-clean-hyperlink-base") } - if !cleanStatistics { args.append("--no-clean-statistics") } - if !cleanDocSecurity { args.append("--no-clean-doc-security") } - if !cleanAuthor { args.append("--no-clean-author") } - if !cleanLastModifiedBy { args.append("--no-clean-last-modified-by") } - if !cleanTitle { args.append("--no-clean-title") } - if !cleanSubject { args.append("--no-clean-subject") } - if !cleanKeywords { args.append("--no-clean-keywords") } - if !cleanComments { args.append("--no-clean-comments") } - if !cleanCategory { args.append("--no-clean-category") } - if !cleanContentStatus { args.append("--no-clean-content-status") } - if !cleanCreatedDate { args.append("--no-clean-created-date") } - if !cleanModifiedDate { args.append("--no-clean-modified-date") } - if !cleanLastPrinted { args.append("--no-clean-last-printed") } - if !cleanRevisionNumber { args.append("--no-clean-revision") } - if !cleanIdentifier { args.append("--no-clean-identifier") } - if !cleanLanguage { args.append("--no-clean-language") } - if !cleanVersion { args.append("--no-clean-version") } - if !cleanCustomProperties { args.append("--no-clean-custom-props") } - if !cleanReviewCommentsVisible { args.append("--no-clean-review-comments-visible") } - if !cleanReviewCommentsHidden { args.append("--no-clean-review-comments-hidden") } - if !cleanTrackChanges { args.append("--no-clean-track-changes") } - if !cleanRSIDs { args.append("--no-clean-rsids") } - if !cleanDocumentGUID { args.append("--no-clean-guid") } - if !cleanMailMerge { args.append("--no-clean-mail-merge") } - if !cleanDataBindings { args.append("--no-clean-data-bindings") } - if !cleanDocumentVersions { args.append("--no-clean-doc-versions") } - if !cleanInkAnnotations { args.append("--no-clean-ink-annotations") } - if !cleanHiddenText { args.append("--no-clean-hidden-text") } - if !cleanInvisibleObjects { args.append("--no-clean-invisible-objects") } - if !cleanHeadersFooters { args.append("--no-clean-headers-footers") } - if !cleanWatermarks { args.append("--no-clean-watermarks") } - if !cleanThumbnail { args.append("--no-clean-thumbnail") } - if !cleanHyperlinkURLs { args.append("--no-clean-hyperlinks") } - if !cleanAltText { args.append("--no-clean-alt-text") } - if !cleanOLEObjects { args.append("--no-clean-ole") } - if !cleanVBAMacros { args.append("--no-clean-macros") } - if !cleanDigitalSignatures { args.append("--no-clean-signatures") } - if !cleanPrinterSettings { args.append("--no-clean-printer") } - if !cleanEmbeddedFonts { args.append("--no-clean-fonts") } - if !cleanGlossary { args.append("--no-clean-glossary") } - if !cleanFastSaveData { args.append("--no-clean-fast-save") } - + if !cleanCompany { + args.append("--no-clean-company") + } + if !cleanManager { + args.append("--no-clean-manager") + } + if !cleanTotalEditingTime { + args.append("--no-clean-editing-time") + } + if !cleanApplication { + args.append("--no-clean-application") + } + if !cleanAppVersion { + args.append("--no-clean-app-version") + } + if !cleanTemplate { + args.append("--no-clean-template") + } + if !cleanHyperlinkBase { + args.append("--no-clean-hyperlink-base") + } + if !cleanStatistics { + args.append("--no-clean-statistics") + } + if !cleanDocSecurity { + args.append("--no-clean-doc-security") + } + if !cleanAuthor { + args.append("--no-clean-author") + } + if !cleanLastModifiedBy { + args.append("--no-clean-last-modified-by") + } + if !cleanTitle { + args.append("--no-clean-title") + } + if !cleanSubject { + args.append("--no-clean-subject") + } + if !cleanKeywords { + args.append("--no-clean-keywords") + } + if !cleanComments { + args.append("--no-clean-comments") + } + if !cleanCategory { + args.append("--no-clean-category") + } + if !cleanContentStatus { + args.append("--no-clean-content-status") + } + if !cleanCreatedDate { + args.append("--no-clean-created-date") + } + if !cleanModifiedDate { + args.append("--no-clean-modified-date") + } + if !cleanLastPrinted { + args.append("--no-clean-last-printed") + } + if !cleanRevisionNumber { + args.append("--no-clean-revision") + } + if !cleanIdentifier { + args.append("--no-clean-identifier") + } + if !cleanLanguage { + args.append("--no-clean-language") + } + if !cleanVersion { + args.append("--no-clean-version") + } + if !cleanCustomProperties { + args.append("--no-clean-custom-props") + } + if !cleanReviewCommentsVisible { + args.append("--no-clean-review-comments-visible") + } + if !cleanReviewCommentsHidden { + args.append("--no-clean-review-comments-hidden") + } + if !cleanTrackChanges { + args.append("--no-clean-track-changes") + } + if !cleanRSIDs { + args.append("--no-clean-rsids") + } + if !cleanDocumentGUID { + args.append("--no-clean-guid") + } + if !cleanMailMerge { + args.append("--no-clean-mail-merge") + } + if !cleanDataBindings { + args.append("--no-clean-data-bindings") + } + if !cleanDocumentVersions { + args.append("--no-clean-doc-versions") + } + if !cleanInkAnnotations { + args.append("--no-clean-ink-annotations") + } + if !cleanHiddenText { + args.append("--no-clean-hidden-text") + } + if !cleanInvisibleObjects { + args.append("--no-clean-invisible-objects") + } + if !cleanHeadersFooters { + args.append("--no-clean-headers-footers") + } + if !cleanWatermarks { + args.append("--no-clean-watermarks") + } + if !cleanThumbnail { + args.append("--no-clean-thumbnail") + } + if !cleanHyperlinkURLs { + args.append("--no-clean-hyperlinks") + } + if !cleanAltText { + args.append("--no-clean-alt-text") + } + if !cleanOLEObjects { + args.append("--no-clean-ole") + } + if !cleanVBAMacros { + args.append("--no-clean-macros") + } + if !cleanDigitalSignatures { + args.append("--no-clean-signatures") + } + if !cleanPrinterSettings { + args.append("--no-clean-printer") + } + if !cleanEmbeddedFonts { + args.append("--no-clean-fonts") + } + if !cleanGlossary { + args.append("--no-clean-glossary") + } + if !cleanFastSaveData { + args.append("--no-clean-fast-save") + } + // Advanced hardening - if !cleanExternalLinks { args.append("--no-clean-ext-links") } - if !cleanUNCPaths { args.append("--no-clean-unc-paths") } - if !cleanUserPaths { args.append("--no-clean-user-paths") } - if !cleanInternalURLs { args.append("--no-clean-internal-urls") } - if !cleanOLESources { args.append("--no-clean-ole-sources") } - if !cleanImageEXIF { args.append("--no-clean-exif") } - if !cleanStyleNames { args.append("--no-clean-style-names") } - if !cleanChartLabels { args.append("--no-clean-chart-labels") } - if !cleanFormDefaults { args.append("--no-clean-form-defaults") } - if !cleanLanguageSettings { args.append("--no-clean-language-settings") } - if !cleanActiveX { args.append("--no-clean-activex") } - if !cleanCustomXMLParts { args.append("--no-clean-custom-xml-parts") } - if !cleanNonstandardXML { args.append("--no-clean-nonstandard-xml") } - if !cleanMicrosoftExtensionXML { args.append("--no-clean-microsoft-extensions") } - if !cleanUnknownRelationships { args.append("--no-clean-unknown-rels") } - if !cleanOrphanedParts { args.append("--no-clean-orphaned-parts") } - if !cleanAlternateContent { args.append("--no-clean-alternate-content") } - + if !cleanExternalLinks { + args.append("--no-clean-ext-links") + } + if !cleanUNCPaths { + args.append("--no-clean-unc-paths") + } + if !cleanUserPaths { + args.append("--no-clean-user-paths") + } + if !cleanInternalURLs { + args.append("--no-clean-internal-urls") + } + if !cleanOLESources { + args.append("--no-clean-ole-sources") + } + if !cleanImageEXIF { + args.append("--no-clean-exif") + } + if !cleanStyleNames { + args.append("--no-clean-style-names") + } + if !cleanChartLabels { + args.append("--no-clean-chart-labels") + } + if !cleanFormDefaults { + args.append("--no-clean-form-defaults") + } + if !cleanLanguageSettings { + args.append("--no-clean-language-settings") + } + if !cleanActiveX { + args.append("--no-clean-activex") + } + if !cleanCustomXMLParts { + args.append("--no-clean-custom-xml-parts") + } + if !cleanNonstandardXML { + args.append("--no-clean-nonstandard-xml") + } + if !cleanMicrosoftExtensionXML { + args.append("--no-clean-microsoft-extensions") + } + if !cleanUnknownRelationships { + args.append("--no-clean-unknown-rels") + } + if !cleanOrphanedParts { + args.append("--no-clean-orphaned-parts") + } + if !cleanAlternateContent { + args.append("--no-clean-alternate-content") + } + // Hidden settings (App Props / structure) - if !cleanScaleCrop { args.append("--no-clean-scale-crop") } - if !cleanLinksUpToDate { args.append("--no-clean-links-up-to-date") } - if !cleanSharedDoc { args.append("--no-clean-shared-doc") } - if !cleanHyperlinksChanged { args.append("--no-clean-hyperlinks-changed") } - if !cleanSpellGrammarState { args.append("--no-clean-spell-grammar") } - if !cleanDocumentVariables { args.append("--no-clean-doc-vars") } - + if !cleanScaleCrop { + args.append("--no-clean-scale-crop") + } + if !cleanLinksUpToDate { + args.append("--no-clean-links-up-to-date") + } + if !cleanSharedDoc { + args.append("--no-clean-shared-doc") + } + if !cleanHyperlinksChanged { + args.append("--no-clean-hyperlinks-changed") + } + if !cleanSpellGrammarState { + args.append("--no-clean-spell-grammar") + } + if !cleanDocumentVariables { + args.append("--no-clean-doc-vars") + } + return args } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSheet.swift b/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSheet.swift index d4ce15c..0ec0696 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSheet.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/MetadataCleaningSheet.swift @@ -8,18 +8,32 @@ struct MetadataCleaningSheet: View { @State private var collapsedStates: [String: [MetadataCleaningPreset: Bool]] = [:] // Per-preset collapse states @Environment(\.dismiss) private var dismiss @Environment(\.colorScheme) private var colorScheme - - private let groupNames = ["appProperties", "coreProperties", "customProperties", "documentStructure", "embeddedContent", "advancedHardening"] - + + private let groupNames = [ + "appProperties", + "coreProperties", + "customProperties", + "documentStructure", + "embeddedContent", + "advancedHardening", + ] + init(settings: Binding) { self._settings = settings let currentPreset = settings.wrappedValue.detectPreset() self._selectedPreset = State(initialValue: currentPreset) self._customSettings = State(initialValue: settings.wrappedValue) - + // Initialize default collapsed states (all expanded) var defaultStates: [String: [MetadataCleaningPreset: Bool]] = [:] - for name in ["appProperties", "coreProperties", "customProperties", "documentStructure", "embeddedContent", "advancedHardening"] { + for name in [ + "appProperties", + "coreProperties", + "customProperties", + "documentStructure", + "embeddedContent", + "advancedHardening", + ] { defaultStates[name] = [:] for preset in MetadataCleaningPreset.allCases { defaultStates[name]?[preset] = false // false = expanded @@ -27,7 +41,7 @@ struct MetadataCleaningSheet: View { } self._collapsedStates = State(initialValue: defaultStates) } - + var body: some View { VStack(spacing: 0) { // Header @@ -35,20 +49,20 @@ struct MetadataCleaningSheet: View { Text("Metadata Cleaning Options") .font(.title2) .fontWeight(.semibold) - + Text("Select which metadata fields to remove during redaction") .font(.body) .foregroundColor(.secondary) } .padding(.top, 24) .padding(.bottom, 16) - + // Preset Picker with label HStack { Text("Preset:") .font(.system(size: 13, weight: .medium)) .foregroundColor(.secondary) - + Picker("", selection: $selectedPreset) { ForEach(MetadataCleaningPreset.allCases) { preset in Text(preset.displayName).tag(preset) @@ -60,12 +74,12 @@ struct MetadataCleaningSheet: View { .onChange(of: selectedPreset) { _, newPreset in applyPreset(newPreset) } - + Spacer() } .padding(.horizontal, 24) .padding(.bottom, 16) - + // Scrollable checkbox groups ScrollView { VStack(alignment: .leading, spacing: 20) { @@ -77,27 +91,79 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "Company", description: "Organization name (often auto-filled from system)", binding: makeCustomBinding($settings.cleanCompany)), - MetadataItem(label: "Manager", description: "Manager's name field", binding: makeCustomBinding($settings.cleanManager)), - MetadataItem(label: "Total Editing Time", description: "Cumulative minutes spent editing", binding: makeCustomBinding($settings.cleanTotalEditingTime)), - MetadataItem(label: "Application", description: "Application name (e.g., \"Microsoft Office Word\")", binding: makeCustomBinding($settings.cleanApplication)), - MetadataItem(label: "App Version", description: "Specific Office version number", binding: makeCustomBinding($settings.cleanAppVersion)), - MetadataItem(label: "Template", description: "Template name used (e.g., \"Normal.dotm\")", binding: makeCustomBinding($settings.cleanTemplate)), - MetadataItem(label: "Hyperlink Base", description: "Base URL for resolving relative links", binding: makeCustomBinding($settings.cleanHyperlinkBase)), - MetadataItem(label: "Document Statistics", description: "Character, word, line, paragraph, and page counts", binding: makeCustomBinding($settings.cleanStatistics)), - MetadataItem(label: "Document Security", description: "Security settings value", binding: makeCustomBinding($settings.cleanDocSecurity)), - MetadataItem(label: "Thumbnail Settings", description: "Scale/crop display settings", binding: makeCustomBinding($settings.cleanScaleCrop)), - MetadataItem(label: "Shared Document Flag", description: "Whether document was shared", binding: makeCustomBinding($settings.cleanSharedDoc)), - MetadataItem(label: "Links Up-to-Date Flag", description: "Status of external link updates", binding: makeCustomBinding($settings.cleanLinksUpToDate)), - MetadataItem(label: "Hyperlinks Changed Flag", description: "Status of hyperlink modifications", binding: makeCustomBinding($settings.cleanHyperlinksChanged)), + MetadataItem( + label: "Company", + description: "Organization name (often auto-filled from system)", + binding: makeCustomBinding($settings.cleanCompany) + ), + MetadataItem( + label: "Manager", + description: "Manager's name field", + binding: makeCustomBinding($settings.cleanManager) + ), + MetadataItem( + label: "Total Editing Time", + description: "Cumulative minutes spent editing", + binding: makeCustomBinding($settings.cleanTotalEditingTime) + ), + MetadataItem( + label: "Application", + description: "Application name (e.g., \"Microsoft Office Word\")", + binding: makeCustomBinding($settings.cleanApplication) + ), + MetadataItem( + label: "App Version", + description: "Specific Office version number", + binding: makeCustomBinding($settings.cleanAppVersion) + ), + MetadataItem( + label: "Template", + description: "Template name used (e.g., \"Normal.dotm\")", + binding: makeCustomBinding($settings.cleanTemplate) + ), + MetadataItem( + label: "Hyperlink Base", + description: "Base URL for resolving relative links", + binding: makeCustomBinding($settings.cleanHyperlinkBase) + ), + MetadataItem( + label: "Document Statistics", + description: "Character, word, line, paragraph, and page counts", + binding: makeCustomBinding($settings.cleanStatistics) + ), + MetadataItem( + label: "Document Security", + description: "Security settings value", + binding: makeCustomBinding($settings.cleanDocSecurity) + ), + MetadataItem( + label: "Thumbnail Settings", + description: "Scale/crop display settings", + binding: makeCustomBinding($settings.cleanScaleCrop) + ), + MetadataItem( + label: "Shared Document Flag", + description: "Whether document was shared", + binding: makeCustomBinding($settings.cleanSharedDoc) + ), + MetadataItem( + label: "Links Up-to-Date Flag", + description: "Status of external link updates", + binding: makeCustomBinding($settings.cleanLinksUpToDate) + ), + MetadataItem( + label: "Hyperlinks Changed Flag", + description: "Status of hyperlink modifications", + binding: makeCustomBinding($settings.cleanHyperlinksChanged) + ), ], onSelectAll: { switchToCustomAndApply { selectAllInGroup(appProperties: true) } }, onClearAll: { switchToCustomAndApply { clearAllInGroup(appProperties: true) } }, onInvert: { switchToCustomAndApply { invertGroup(appProperties: true) } } ) - + Divider() - + // Group 2: Core Properties MetadataGroupView( title: "Core Properties", @@ -106,29 +172,89 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "Author", description: "Document creator's name", binding: makeCustomBinding($settings.cleanAuthor)), - MetadataItem(label: "Last Modified By", description: "Last person who edited", binding: makeCustomBinding($settings.cleanLastModifiedBy)), - MetadataItem(label: "Title", description: "Document title", binding: makeCustomBinding($settings.cleanTitle)), - MetadataItem(label: "Subject", description: "Document subject", binding: makeCustomBinding($settings.cleanSubject)), - MetadataItem(label: "Keywords", description: "Search keywords/tags", binding: makeCustomBinding($settings.cleanKeywords)), - MetadataItem(label: "Comments", description: "Document description field", binding: makeCustomBinding($settings.cleanComments)), - MetadataItem(label: "Category", description: "Document category", binding: makeCustomBinding($settings.cleanCategory)), - MetadataItem(label: "Content Status", description: "Status (Draft, Final, etc.)", binding: makeCustomBinding($settings.cleanContentStatus)), - MetadataItem(label: "Created Date", description: "Creation timestamp", binding: makeCustomBinding($settings.cleanCreatedDate)), - MetadataItem(label: "Modified Date", description: "Last modification timestamp", binding: makeCustomBinding($settings.cleanModifiedDate)), - MetadataItem(label: "Last Printed", description: "Last print timestamp", binding: makeCustomBinding($settings.cleanLastPrinted)), - MetadataItem(label: "Revision Number", description: "Document revision count", binding: makeCustomBinding($settings.cleanRevisionNumber)), - MetadataItem(label: "Identifier", description: "Unique document identifier", binding: makeCustomBinding($settings.cleanIdentifier)), - MetadataItem(label: "Language", description: "Document language code", binding: makeCustomBinding($settings.cleanLanguage)), - MetadataItem(label: "Version", description: "Document version string", binding: makeCustomBinding($settings.cleanVersion)), + MetadataItem( + label: "Author", + description: "Document creator's name", + binding: makeCustomBinding($settings.cleanAuthor) + ), + MetadataItem( + label: "Last Modified By", + description: "Last person who edited", + binding: makeCustomBinding($settings.cleanLastModifiedBy) + ), + MetadataItem( + label: "Title", + description: "Document title", + binding: makeCustomBinding($settings.cleanTitle) + ), + MetadataItem( + label: "Subject", + description: "Document subject", + binding: makeCustomBinding($settings.cleanSubject) + ), + MetadataItem( + label: "Keywords", + description: "Search keywords/tags", + binding: makeCustomBinding($settings.cleanKeywords) + ), + MetadataItem( + label: "Comments", + description: "Document description field", + binding: makeCustomBinding($settings.cleanComments) + ), + MetadataItem( + label: "Category", + description: "Document category", + binding: makeCustomBinding($settings.cleanCategory) + ), + MetadataItem( + label: "Content Status", + description: "Status (Draft, Final, etc.)", + binding: makeCustomBinding($settings.cleanContentStatus) + ), + MetadataItem( + label: "Created Date", + description: "Creation timestamp", + binding: makeCustomBinding($settings.cleanCreatedDate) + ), + MetadataItem( + label: "Modified Date", + description: "Last modification timestamp", + binding: makeCustomBinding($settings.cleanModifiedDate) + ), + MetadataItem( + label: "Last Printed", + description: "Last print timestamp", + binding: makeCustomBinding($settings.cleanLastPrinted) + ), + MetadataItem( + label: "Revision Number", + description: "Document revision count", + binding: makeCustomBinding($settings.cleanRevisionNumber) + ), + MetadataItem( + label: "Identifier", + description: "Unique document identifier", + binding: makeCustomBinding($settings.cleanIdentifier) + ), + MetadataItem( + label: "Language", + description: "Document language code", + binding: makeCustomBinding($settings.cleanLanguage) + ), + MetadataItem( + label: "Version", + description: "Document version string", + binding: makeCustomBinding($settings.cleanVersion) + ), ], onSelectAll: { switchToCustomAndApply { selectAllInGroup(coreProperties: true) } }, onClearAll: { switchToCustomAndApply { clearAllInGroup(coreProperties: true) } }, onInvert: { switchToCustomAndApply { invertGroup(coreProperties: true) } } ) - + Divider() - + // Group 3: Custom Properties MetadataGroupView( title: "Custom Properties", @@ -137,15 +263,19 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "Custom Properties & Custom XML", description: "User-defined properties and custom XML parts", binding: makeCustomBinding($settings.cleanCustomProperties)), + MetadataItem( + label: "Custom Properties & Custom XML", + description: "User-defined properties and custom XML parts", + binding: makeCustomBinding($settings.cleanCustomProperties) + ), ], onSelectAll: { switchToCustomAndApply { settings.cleanCustomProperties = true } }, onClearAll: { switchToCustomAndApply { settings.cleanCustomProperties = false } }, onInvert: { switchToCustomAndApply { settings.cleanCustomProperties.toggle() } } ) - + Divider() - + // Group 4: Document Structure MetadataGroupView( title: "Document Structure", @@ -154,29 +284,89 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "Visible Review Comments", description: "Active comment annotations", binding: makeCustomBinding($settings.cleanReviewCommentsVisible)), - MetadataItem(label: "Hidden/Resolved Review Comments", description: "Resolved or hidden comment annotations", binding: makeCustomBinding($settings.cleanReviewCommentsHidden)), - MetadataItem(label: "Track Changes", description: "Insertions, deletions, formatting changes", binding: makeCustomBinding($settings.cleanTrackChanges)), - MetadataItem(label: "RSIDs", description: "Revision Save IDs (fingerprinting data)", binding: makeCustomBinding($settings.cleanRSIDs)), - MetadataItem(label: "Document GUID", description: "Unique document identifier in settings", binding: makeCustomBinding($settings.cleanDocumentGUID)), - MetadataItem(label: "Spell/Grammar State", description: "Proofing state markers", binding: makeCustomBinding($settings.cleanSpellGrammarState)), - MetadataItem(label: "Document Variables", description: "Programmatic variables", binding: makeCustomBinding($settings.cleanDocumentVariables)), - MetadataItem(label: "Mail Merge Data", description: "Data source bindings and merge fields", binding: makeCustomBinding($settings.cleanMailMerge)), - MetadataItem(label: "Data Bindings", description: "Content control XML bindings", binding: makeCustomBinding($settings.cleanDataBindings)), - MetadataItem(label: "Document Versions", description: "Legacy version history parts", binding: makeCustomBinding($settings.cleanDocumentVersions)), - MetadataItem(label: "Ink Annotations", description: "Pen/ink markup data", binding: makeCustomBinding($settings.cleanInkAnnotations)), - MetadataItem(label: "Hidden Text", description: "Runs marked as hidden text", binding: makeCustomBinding($settings.cleanHiddenText)), - MetadataItem(label: "Invisible Objects", description: "Shapes marked as hidden", binding: makeCustomBinding($settings.cleanInvisibleObjects)), - MetadataItem(label: "Headers & Footers", description: "Remove all header/footer parts", binding: makeCustomBinding($settings.cleanHeadersFooters)), - MetadataItem(label: "Watermarks", description: "Remove watermark shapes in headers", binding: makeCustomBinding($settings.cleanWatermarks)), + MetadataItem( + label: "Visible Review Comments", + description: "Active comment annotations", + binding: makeCustomBinding($settings.cleanReviewCommentsVisible) + ), + MetadataItem( + label: "Hidden/Resolved Review Comments", + description: "Resolved or hidden comment annotations", + binding: makeCustomBinding($settings.cleanReviewCommentsHidden) + ), + MetadataItem( + label: "Track Changes", + description: "Insertions, deletions, formatting changes", + binding: makeCustomBinding($settings.cleanTrackChanges) + ), + MetadataItem( + label: "RSIDs", + description: "Revision Save IDs (fingerprinting data)", + binding: makeCustomBinding($settings.cleanRSIDs) + ), + MetadataItem( + label: "Document GUID", + description: "Unique document identifier in settings", + binding: makeCustomBinding($settings.cleanDocumentGUID) + ), + MetadataItem( + label: "Spell/Grammar State", + description: "Proofing state markers", + binding: makeCustomBinding($settings.cleanSpellGrammarState) + ), + MetadataItem( + label: "Document Variables", + description: "Programmatic variables", + binding: makeCustomBinding($settings.cleanDocumentVariables) + ), + MetadataItem( + label: "Mail Merge Data", + description: "Data source bindings and merge fields", + binding: makeCustomBinding($settings.cleanMailMerge) + ), + MetadataItem( + label: "Data Bindings", + description: "Content control XML bindings", + binding: makeCustomBinding($settings.cleanDataBindings) + ), + MetadataItem( + label: "Document Versions", + description: "Legacy version history parts", + binding: makeCustomBinding($settings.cleanDocumentVersions) + ), + MetadataItem( + label: "Ink Annotations", + description: "Pen/ink markup data", + binding: makeCustomBinding($settings.cleanInkAnnotations) + ), + MetadataItem( + label: "Hidden Text", + description: "Runs marked as hidden text", + binding: makeCustomBinding($settings.cleanHiddenText) + ), + MetadataItem( + label: "Invisible Objects", + description: "Shapes marked as hidden", + binding: makeCustomBinding($settings.cleanInvisibleObjects) + ), + MetadataItem( + label: "Headers & Footers", + description: "Remove all header/footer parts", + binding: makeCustomBinding($settings.cleanHeadersFooters) + ), + MetadataItem( + label: "Watermarks", + description: "Remove watermark shapes in headers", + binding: makeCustomBinding($settings.cleanWatermarks) + ), ], onSelectAll: { switchToCustomAndApply { selectAllInGroup(documentStructure: true) } }, onClearAll: { switchToCustomAndApply { clearAllInGroup(documentStructure: true) } }, onInvert: { switchToCustomAndApply { invertGroup(documentStructure: true) } } ) - + Divider() - + // Group 5: Embedded Content MetadataGroupView( title: "Embedded Content", @@ -185,24 +375,64 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "Thumbnail Image", description: "Document preview image", binding: makeCustomBinding($settings.cleanThumbnail)), - MetadataItem(label: "Hyperlink URLs", description: "External links (converted to plain text)", binding: makeCustomBinding($settings.cleanHyperlinkURLs)), - MetadataItem(label: "Alt Text on Images", description: "Descriptive text on embedded images", binding: makeCustomBinding($settings.cleanAltText)), - MetadataItem(label: "OLE Objects", description: "Embedded Excel, PDFs, etc.", binding: makeCustomBinding($settings.cleanOLEObjects)), - MetadataItem(label: "VBA Macros", description: "Embedded code (security risk)", binding: makeCustomBinding($settings.cleanVBAMacros)), - MetadataItem(label: "Digital Signatures", description: "Document signing data", binding: makeCustomBinding($settings.cleanDigitalSignatures)), - MetadataItem(label: "Printer Settings", description: "Print configuration data", binding: makeCustomBinding($settings.cleanPrinterSettings)), - MetadataItem(label: "Embedded Fonts", description: "Embedded font information", binding: makeCustomBinding($settings.cleanEmbeddedFonts)), - MetadataItem(label: "Glossary/AutoText", description: "Auto-complete entries", binding: makeCustomBinding($settings.cleanGlossary)), - MetadataItem(label: "Fast Save Data", description: "Incremental save fragments", binding: makeCustomBinding($settings.cleanFastSaveData)), + MetadataItem( + label: "Thumbnail Image", + description: "Document preview image", + binding: makeCustomBinding($settings.cleanThumbnail) + ), + MetadataItem( + label: "Hyperlink URLs", + description: "External links (converted to plain text)", + binding: makeCustomBinding($settings.cleanHyperlinkURLs) + ), + MetadataItem( + label: "Alt Text on Images", + description: "Descriptive text on embedded images", + binding: makeCustomBinding($settings.cleanAltText) + ), + MetadataItem( + label: "OLE Objects", + description: "Embedded Excel, PDFs, etc.", + binding: makeCustomBinding($settings.cleanOLEObjects) + ), + MetadataItem( + label: "VBA Macros", + description: "Embedded code (security risk)", + binding: makeCustomBinding($settings.cleanVBAMacros) + ), + MetadataItem( + label: "Digital Signatures", + description: "Document signing data", + binding: makeCustomBinding($settings.cleanDigitalSignatures) + ), + MetadataItem( + label: "Printer Settings", + description: "Print configuration data", + binding: makeCustomBinding($settings.cleanPrinterSettings) + ), + MetadataItem( + label: "Embedded Fonts", + description: "Embedded font information", + binding: makeCustomBinding($settings.cleanEmbeddedFonts) + ), + MetadataItem( + label: "Glossary/AutoText", + description: "Auto-complete entries", + binding: makeCustomBinding($settings.cleanGlossary) + ), + MetadataItem( + label: "Fast Save Data", + description: "Incremental save fragments", + binding: makeCustomBinding($settings.cleanFastSaveData) + ), ], onSelectAll: { switchToCustomAndApply { selectAllInGroup(embeddedContent: true) } }, onClearAll: { switchToCustomAndApply { clearAllInGroup(embeddedContent: true) } }, onInvert: { switchToCustomAndApply { invertGroup(embeddedContent: true) } } ) - + Divider() - + // Group 6: Advanced Hardening MetadataGroupView( title: "Advanced Hardening", @@ -211,17 +441,61 @@ struct MetadataCleaningSheet: View { collapsedStates: $collapsedStates, currentPreset: selectedPreset, items: [ - MetadataItem(label: "External Link Paths", description: "File paths in external links", binding: makeCustomBinding($settings.cleanExternalLinks)), - MetadataItem(label: "Network (UNC) Paths", description: "\\\\server\\share style paths", binding: makeCustomBinding($settings.cleanUNCPaths)), - MetadataItem(label: "User Profile Paths", description: "Home directory paths (~/name or %USERPROFILE%)", binding: makeCustomBinding($settings.cleanUserPaths)), - MetadataItem(label: "Internal URLs", description: "Internal site URLs (intranet, etc.)", binding: makeCustomBinding($settings.cleanInternalURLs)), - MetadataItem(label: "OLE Source Paths", description: "Source paths embedded in OLE objects", binding: makeCustomBinding($settings.cleanOLESources)), - MetadataItem(label: "Image EXIF Data", description: "GPS, camera info, author in JPEG/PNG", binding: makeCustomBinding($settings.cleanImageEXIF)), - MetadataItem(label: "Custom Style Names", description: "Rename identifying style names", binding: makeCustomBinding($settings.cleanStyleNames)), - MetadataItem(label: "Chart Labels", description: "Clean identifying chart text", binding: makeCustomBinding($settings.cleanChartLabels)), - MetadataItem(label: "Form Field Defaults", description: "Clear pre-filled form values", binding: makeCustomBinding($settings.cleanFormDefaults)), - MetadataItem(label: "Language Settings", description: "Locale and language fingerprints", binding: makeCustomBinding($settings.cleanLanguageSettings)), - MetadataItem(label: "ActiveX Controls", description: "Remove embedded ActiveX", binding: makeCustomBinding($settings.cleanActiveX)), + MetadataItem( + label: "External Link Paths", + description: "File paths in external links", + binding: makeCustomBinding($settings.cleanExternalLinks) + ), + MetadataItem( + label: "Network (UNC) Paths", + description: "\\\\server\\share style paths", + binding: makeCustomBinding($settings.cleanUNCPaths) + ), + MetadataItem( + label: "User Profile Paths", + description: "Home directory paths (~/name or %USERPROFILE%)", + binding: makeCustomBinding($settings.cleanUserPaths) + ), + MetadataItem( + label: "Internal URLs", + description: "Internal site URLs (intranet, etc.)", + binding: makeCustomBinding($settings.cleanInternalURLs) + ), + MetadataItem( + label: "OLE Source Paths", + description: "Source paths embedded in OLE objects", + binding: makeCustomBinding($settings.cleanOLESources) + ), + MetadataItem( + label: "Image EXIF Data", + description: "GPS, camera info, author in JPEG/PNG", + binding: makeCustomBinding($settings.cleanImageEXIF) + ), + MetadataItem( + label: "Custom Style Names", + description: "Rename identifying style names", + binding: makeCustomBinding($settings.cleanStyleNames) + ), + MetadataItem( + label: "Chart Labels", + description: "Clean identifying chart text", + binding: makeCustomBinding($settings.cleanChartLabels) + ), + MetadataItem( + label: "Form Field Defaults", + description: "Clear pre-filled form values", + binding: makeCustomBinding($settings.cleanFormDefaults) + ), + MetadataItem( + label: "Language Settings", + description: "Locale and language fingerprints", + binding: makeCustomBinding($settings.cleanLanguageSettings) + ), + MetadataItem( + label: "ActiveX Controls", + description: "Remove embedded ActiveX", + binding: makeCustomBinding($settings.cleanActiveX) + ), MetadataItem( label: "Nuclear Option: Custom XML Parts", description: "Remove all /customXml package parts", @@ -267,9 +541,9 @@ struct MetadataCleaningSheet: View { .padding(.horizontal, 24) .padding(.bottom, 24) } - + Divider() - + // Footer buttons HStack(spacing: 12) { Button("Cancel") { @@ -278,9 +552,9 @@ struct MetadataCleaningSheet: View { .buttonStyle(.bordered) .controlSize(.large) .accessibilityIdentifier("metadata.cancel") - + Spacer() - + Button("Save Preferences") { settings.save() dismiss() @@ -303,7 +577,7 @@ struct MetadataCleaningSheet: View { selectedPreset = newSettings.detectPreset() } } - + private func applyPreset(_ preset: MetadataCleaningPreset) { switch preset { case .maximum: @@ -317,7 +591,7 @@ struct MetadataCleaningSheet: View { settings = customSettings } } - + /// Apply action and switch to Custom preset private func switchToCustomAndApply(_ action: () -> Void) { if selectedPreset != .custom { @@ -326,7 +600,7 @@ struct MetadataCleaningSheet: View { } action() } - + /// Creates a binding that switches to Custom when modified private func makeCustomBinding(_ binding: Binding) -> Binding { Binding( @@ -340,8 +614,14 @@ struct MetadataCleaningSheet: View { } ) } - - private func selectAllInGroup(appProperties: Bool = false, coreProperties: Bool = false, documentStructure: Bool = false, embeddedContent: Bool = false, advancedHardening: Bool = false) { + + private func selectAllInGroup( + appProperties: Bool = false, + coreProperties: Bool = false, + documentStructure: Bool = false, + embeddedContent: Bool = false, + advancedHardening: Bool = false + ) { if appProperties { settings.cleanCompany = true settings.cleanManager = true @@ -414,8 +694,14 @@ struct MetadataCleaningSheet: View { settings.cleanAlternateContent = true } } - - private func clearAllInGroup(appProperties: Bool = false, coreProperties: Bool = false, documentStructure: Bool = false, embeddedContent: Bool = false, advancedHardening: Bool = false) { + + private func clearAllInGroup( + appProperties: Bool = false, + coreProperties: Bool = false, + documentStructure: Bool = false, + embeddedContent: Bool = false, + advancedHardening: Bool = false + ) { if appProperties { settings.cleanCompany = false settings.cleanManager = false @@ -488,8 +774,14 @@ struct MetadataCleaningSheet: View { settings.cleanAlternateContent = false } } - - private func invertGroup(appProperties: Bool = false, coreProperties: Bool = false, documentStructure: Bool = false, embeddedContent: Bool = false, advancedHardening: Bool = false) { + + private func invertGroup( + appProperties: Bool = false, + coreProperties: Bool = false, + documentStructure: Bool = false, + embeddedContent: Bool = false, + advancedHardening: Bool = false + ) { if appProperties { settings.cleanCompany.toggle() settings.cleanManager.toggle() @@ -569,7 +861,7 @@ struct MetadataCleaningSheet: View { struct MetadataItem { let label: String let description: String - var warning: String? = nil + var warning: String? var binding: Binding } @@ -583,18 +875,18 @@ struct MetadataGroupView: View { let onSelectAll: () -> Void let onClearAll: () -> Void let onInvert: () -> Void - + private var isExpanded: Bool { !(collapsedStates[groupKey]?[currentPreset] ?? false) } - + private func setExpanded(_ expanded: Bool) { if collapsedStates[groupKey] == nil { collapsedStates[groupKey] = [:] } collapsedStates[groupKey]?[currentPreset] = !expanded } - + var body: some View { VStack(alignment: .leading, spacing: 8) { // Header with expand/collapse @@ -609,10 +901,10 @@ struct MetadataGroupView: View { .font(.system(size: 12, weight: .semibold)) .foregroundColor(.secondary) .frame(width: 16) - + Text(title) .font(.system(size: 14, weight: .semibold)) - + Text("(\(subtitle))") .font(.system(size: 12)) .foregroundColor(.secondary) @@ -620,25 +912,25 @@ struct MetadataGroupView: View { } .buttonStyle(.plain) .accessibilityIdentifier("metadata.\(groupKey).toggleGroup") - + Spacer() - + // Only show All/None/Invert buttons in Custom mode - if isExpanded && currentPreset == .custom { + if isExpanded, currentPreset == .custom { Button("All") { onSelectAll() } .buttonStyle(.bordered) .controlSize(.mini) .accessibilityIdentifier("metadata.\(groupKey).selectAll") - + Button("None") { onClearAll() } .buttonStyle(.bordered) .controlSize(.mini) .accessibilityIdentifier("metadata.\(groupKey).selectNone") - + Button("Invert") { onInvert() } @@ -647,7 +939,7 @@ struct MetadataGroupView: View { .accessibilityIdentifier("metadata.\(groupKey).invert") } } - + if isExpanded { VStack(alignment: .leading, spacing: 6) { ForEach(items.indices, id: \.self) { index in diff --git a/src/swift/MarcutApp/Sources/MarcutApp/ModelCatalog.swift b/src/swift/MarcutApp/Sources/MarcutApp/ModelCatalog.swift index 9968295..ff3f797 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/ModelCatalog.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/ModelCatalog.swift @@ -21,15 +21,15 @@ struct ModelCatalogEntry: Codable, Equatable, Identifiable { func resolvedAccentColor(for colorScheme: ColorScheme) -> Color { switch accentColor { case "accent": - return CustomColors.accentColor(for: colorScheme) + CustomColors.accentColor(for: colorScheme) case "orange": - return Color.orange + Color.orange case "green": - return Color.green + Color.green case "purple": - return Color.purple + Color.purple default: - return CustomColors.accentColor(for: colorScheme) + CustomColors.accentColor(for: colorScheme) } } } @@ -58,7 +58,7 @@ final class ModelCatalog { /// All supported model identifiers, in catalog order. var modelIds: Set { - Set(models.map { $0.id }) + Set(models.map(\.id)) } private init() { diff --git a/src/swift/MarcutApp/Sources/MarcutApp/OutputSaveLocation.swift b/src/swift/MarcutApp/Sources/MarcutApp/OutputSaveLocation.swift index eedc21b..fddb8c2 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/OutputSaveLocation.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/OutputSaveLocation.swift @@ -5,16 +5,18 @@ enum OutputSaveLocation: Int, CaseIterable, Identifiable { case sameAsOriginal = 1 case alwaysAsk = 2 - var id: Int { rawValue } + var id: Int { + rawValue + } var label: String { switch self { case .downloads: - return "Downloads" + "Downloads" case .sameAsOriginal: - return "Same as Original" + "Same as Original" case .alwaysAsk: - return "Always Ask" + "Always Ask" } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/PermissionAuthorizationView.swift b/src/swift/MarcutApp/Sources/MarcutApp/PermissionAuthorizationView.swift index 2e002c0..4f5049f 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/PermissionAuthorizationView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/PermissionAuthorizationView.swift @@ -98,7 +98,7 @@ struct PermissionAuthorizationView: View { } // Action Buttons - if !isAuthorizing && authorizationError == nil { + if !isAuthorizing, authorizationError == nil { VStack(spacing: 16) { Button(action: { authorizePermissions() @@ -261,7 +261,7 @@ struct PermissionExplanationView: View { "Read Microsoft Word documents that you select", "Create new redacted documents with track changes", "Generate audit reports in JSON format", - "Access files in your Downloads, Documents, and Desktop folders" + "Access files in your Downloads, Documents, and Desktop folders", ] ) @@ -274,7 +274,7 @@ struct PermissionExplanationView: View { "Run AI models like Llama 3.1 8B locally", "No internet connection required for processing", "All AI computation happens on your Mac", - "Complete privacy - no data sent to external servers" + "Complete privacy - no data sent to external servers", ] ) @@ -287,7 +287,7 @@ struct PermissionExplanationView: View { "One-time access to your Documents folder", "Access only to files you explicitly select", "Maintains security through sandboxing", - "You can revoke this permission at any time in System Preferences" + "You can revoke this permission at any time in System Preferences", ] ) } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/PermissionManager.swift b/src/swift/MarcutApp/Sources/MarcutApp/PermissionManager.swift index a3b9de2..d00610f 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/PermissionManager.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/PermissionManager.swift @@ -6,29 +6,28 @@ import UserNotifications static let shared = PermissionManager() @Published var notificationStatus: UNAuthorizationStatus = .notDetermined - - // Local preference: Should we send notifications? - // This allows the user to "Disable" them in-app without revoking OS permission. + + /// Local preference: Should we send notifications? + /// This allows the user to "Disable" them in-app without revoking OS permission. @Published var userEnabledNotifications: Bool { didSet { UserDefaults.standard.set(userEnabledNotifications, forKey: DefaultsKey.userEnabledNotifications.key) } } - private override init() { + override private init() { // Init local preference (Default to TRUE if not set) let savedPref = UserDefaults.standard.object(forKey: DefaultsKey.userEnabledNotifications.key) as? Bool self.userEnabledNotifications = savedPref ?? true - + super.init() - + // CRITICAL FIX: Ensure notification delegate is set immediately. // This allows banners to appear even if the app is in the foreground. UNUserNotificationCenter.current().delegate = self // DEFERRED: We no longer check automatically on init to avoid startup prompts. } - } enum PermissionError: LocalizedError { @@ -37,23 +36,20 @@ enum PermissionError: LocalizedError { var errorDescription: String? { switch self { case .notificationPermissionDenied: - return "Notification permission was denied" + "Notification permission was denied" } } } - - extension PermissionManager: UNUserNotificationCenterDelegate { - - // Step 1.5: Request Notification Permissions + /// Step 1.5: Request Notification Permissions func requestNotificationPermission() async throws { let center = UNUserNotificationCenter.current() // Delegate needed to show notifications while app is in foreground center.delegate = self - + let settings = await center.notificationSettings() - + // If already authorized, just return success (no nag) // Also update the published status await MainActor.run { self.notificationStatus = settings.authorizationStatus } @@ -62,16 +58,16 @@ extension PermissionManager: UNUserNotificationCenterDelegate { DebugLogger.shared.log("✅ Notifications already authorized", component: "PermissionManager") return } - + // If explicitly denied, do not pester the user if settings.authorizationStatus == .denied { DebugLogger.shared.log("⚠️ Notification permission was previously denied", component: "PermissionManager") throw PermissionError.notificationPermissionDenied } - + // Only request if status is .notDetermined let granted = try await center.requestAuthorization(options: [.alert, .sound, .badge]) - + // Update status again after request let newSettings = await center.notificationSettings() await MainActor.run { self.notificationStatus = newSettings.authorizationStatus } @@ -83,9 +79,9 @@ extension PermissionManager: UNUserNotificationCenterDelegate { throw PermissionError.notificationPermissionDenied } } - - // Helper to send notifications - // Helper to send notifications + + /// Helper to send notifications + /// Helper to send notifications func sendSystemNotification(title: String, body: String, force: Bool = false) { // 1. Check Local Preference first (unless forced) guard userEnabledNotifications || force else { @@ -97,29 +93,35 @@ extension PermissionManager: UNUserNotificationCenterDelegate { content.title = title content.body = body content.sound = UNNotificationSound.default - + // Create a unique ID or reuse? Unique for history. let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil) - + UNUserNotificationCenter.current().add(request) { error in - if let error = error { - DebugLogger.shared.log("❌ Failed to schedule notification: \(error.localizedDescription)", component: "PermissionManager") + if let error { + DebugLogger.shared.log( + "❌ Failed to schedule notification: \(error.localizedDescription)", + component: "PermissionManager" + ) } else { - DebugLogger.shared.log("✅ Notification successfully scheduled into UNUserNotificationCenter", component: "PermissionManager") + DebugLogger.shared.log( + "✅ Notification successfully scheduled into UNUserNotificationCenter", + component: "PermissionManager" + ) } } } - - // Force request without checks (User triggered) + + /// Force request without checks (User triggered) func forceRequestNotificationPermission() async throws { let center = UNUserNotificationCenter.current() center.delegate = self - + DebugLogger.shared.log("🚨 Force-requesting notification permission...", component: "PermissionManager") - + // Always request, ignoring previous status let granted = try await center.requestAuthorization(options: [.alert, .sound, .badge]) - + // Update status immediately let newSettings = await center.notificationSettings() await MainActor.run { self.notificationStatus = newSettings.authorizationStatus } @@ -132,17 +134,21 @@ extension PermissionManager: UNUserNotificationCenterDelegate { throw PermissionError.notificationPermissionDenied } } - - // Explicit refresh of status (called on view appear) + + /// Explicit refresh of status (called on view appear) func refreshNotificationStatus() async { let settings = await UNUserNotificationCenter.current().notificationSettings() await MainActor.run { - self.notificationStatus = settings.authorizationStatus + self.notificationStatus = settings.authorizationStatus } } - - // Delegate method: Present notification even if app is in foreground - nonisolated func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + + /// Delegate method: Present notification even if app is in foreground + nonisolated func userNotificationCenter( + _: UNUserNotificationCenter, + willPresent _: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { completionHandler([.banner, .sound, .list]) } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/PowerAssertionGuard.swift b/src/swift/MarcutApp/Sources/MarcutApp/PowerAssertionGuard.swift index 5d24d40..adb8a62 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/PowerAssertionGuard.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/PowerAssertionGuard.swift @@ -114,5 +114,7 @@ final class PowerAssertionGuard { /// Whether an OS-level assertion is currently held. `false` if the count is zero, or if the /// count is positive but the OS refused every `acquire()` attempt so far. - var isHoldingAssertion: Bool { assertionID != nil } + var isHoldingAssertion: Bool { + assertionID != nil + } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/PythonBridge.swift b/src/swift/MarcutApp/Sources/MarcutApp/PythonBridge.swift index 24ce5b4..f1e4e4b 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/PythonBridge.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/PythonBridge.swift @@ -1,8 +1,8 @@ -import Foundation import Combine import Darwin +import Foundation -// Helper functions outside of actor context +/// Helper functions outside of actor context private let pythonBridgeLogQueue = DispatchQueue(label: "com.marclaw.marcutapp.pythonbridge.log", qos: .utility) private func logToFile(_ path: String, _ message: String) { @@ -35,14 +35,14 @@ private func logToFile(_ path: String, _ message: String) { private func removeANSIEscapeCodes(_ input: String) -> String { // Remove ANSI escape sequences using regex let patterns = [ - "\\x1B\\[[0-9;]*[mGKH]", // Common color and cursor codes - "\\x1B\\[\\?[0-9]+[hl]", // Mode settings - "\\x1B\\[[0-9]*[ABCD]", // Cursor movement - "\\x1B\\[[0-9;]*[Jm]", // Clear and color - "\\[\\?2026[hl]", // Bracketed paste mode - "\\[\\?25[hl]", // Cursor visibility - "\\[[0-9]+G", // Cursor column - "\\[K" // Clear line + "\\x1B\\[[0-9;]*[mGKH]", // Common color and cursor codes + "\\x1B\\[\\?[0-9]+[hl]", // Mode settings + "\\x1B\\[[0-9]*[ABCD]", // Cursor movement + "\\x1B\\[[0-9;]*[Jm]", // Clear and color + "\\[\\?2026[hl]", // Bracketed paste mode + "\\[\\?25[hl]", // Cursor visibility + "\\[[0-9]+G", // Cursor column + "\\[K", // Clear line ] var result = input @@ -85,8 +85,7 @@ private func parseOllamaPullProgressLine(_ line: String) -> Double? { if let match = cleaned.range(of: #"[0-9]+(\.[0-9]+)?%"#, options: .regularExpression) { let raw = cleaned[match].replacingOccurrences(of: "%", with: "") if let percent = Double(raw) { - let scaled = min(95.0, 5.0 + percent * 0.9) - return scaled + return min(95.0, 5.0 + percent * 0.9) } } @@ -110,7 +109,7 @@ private enum ModelPromotion { private static let fileManager = FileManager.default static func safeFileName(for modelName: String) -> String { - return modelName + modelName .replacingOccurrences(of: ":", with: "-") .replacingOccurrences(of: "/", with: "-") } @@ -129,7 +128,8 @@ private enum ModelPromotion { return true } guard let attributes = try? fileManager.attributesOfItem(atPath: url.path), - let size = (attributes[.size] as? NSNumber)?.int64Value else { + let size = (attributes[.size] as? NSNumber)?.int64Value + else { return false } return size == expectedSize @@ -154,52 +154,81 @@ private enum ModelPromotion { return models } - if let registries = try? fileManager.contentsOfDirectory(at: manifestsDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) { + if let registries = try? fileManager.contentsOfDirectory( + at: manifestsDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) { for registry in registries { - bridgeLog("MODEL_DISCOVERY: Searching registry \(registry.lastPathComponent)", component: "MODEL_PROMOTION") - guard let libraries = try? fileManager.contentsOfDirectory(at: registry, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) else { continue } + bridgeLog( + "MODEL_DISCOVERY: Searching registry \(registry.lastPathComponent)", + component: "MODEL_PROMOTION" + ) + guard let libraries = try? fileManager.contentsOfDirectory( + at: registry, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) else { continue } for library in libraries { bridgeLog("MODEL_DISCOVERY: -> Library \(library.lastPathComponent)", component: "MODEL_PROMOTION") - guard let modelDirs = try? fileManager.contentsOfDirectory(at: library, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) else { continue } + guard let modelDirs = try? fileManager.contentsOfDirectory( + at: library, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) else { continue } for modelDir in modelDirs { - bridgeLog("MODEL_DISCOVERY: -> ModelDir \(modelDir.lastPathComponent)", component: "MODEL_PROMOTION") + bridgeLog( + "MODEL_DISCOVERY: -> ModelDir \(modelDir.lastPathComponent)", + component: "MODEL_PROMOTION" + ) if modelDir.lastPathComponent.contains("sha256") { continue } - + // Check for manifest.json (legacy) OR tag files (modern) // We iterate all files in the model directory - if let files = try? fileManager.contentsOfDirectory(at: modelDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) { + if let files = try? fileManager.contentsOfDirectory( + at: modelDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) { for file in files { // Skip system files - if file.lastPathComponent.hasPrefix(".") { continue } - + if file.lastPathComponent.hasPrefix(".") { + continue + } + // If it's a JSON file or just a tag name (no extension) // We assume it's a valid model tag if it parses as a manifest let libraryName = library.lastPathComponent let modelName = modelDir.lastPathComponent - let tagName = file.lastPathComponent == "manifest.json" ? "latest" : file.lastPathComponent - + let tagName = file.lastPathComponent == "manifest.json" ? "latest" : file + .lastPathComponent + // Construct the full model ID: library/model:tag - // But Marcut uses library:model format mostly? - // Actually, discoverModels returns a Set. - // The existing code returned "library:model". + // But Marcut uses library:model format mostly? + // Actually, discoverModels returns a Set. + // The existing code returned "library:model". // Let's stick to "library:model" if tag is latest, or "library:model:tag" if not? - // The user selects "llama3.2:3b". - // If we find "library/llama3.2/3b", we should probably return "llama3.2:3b" (omitting library if it's 'library'?) - + // The user selects "llama3.2:3b". + // If we find "library/llama3.2/3b", we should probably return "llama3.2:3b" (omitting + // library if it's 'library'?) + // Let's try to match what the user expects: "llama3.2:3b" var identifier = "\(modelName)" - if tagName != "latest" && tagName != "manifest.json" { + if tagName != "latest", tagName != "manifest.json" { identifier += ":\(tagName)" } - + // If library is NOT 'library', prepend it? if libraryName != "library" { identifier = "\(libraryName)/\(identifier)" } - - bridgeLog("MODEL_DISCOVERY: Found model candidate: \(identifier) at \(file.path)", component: "MODEL_PROMOTION") + + bridgeLog( + "MODEL_DISCOVERY: Found model candidate: \(identifier) at \(file.path)", + component: "MODEL_PROMOTION" + ) models.insert(identifier) } } @@ -236,7 +265,10 @@ private enum ModelPromotion { } do { - try fileManager.createDirectory(at: canonicalURL.deletingLastPathComponent(), withIntermediateDirectories: true) + try fileManager.createDirectory( + at: canonicalURL.deletingLastPathComponent(), + withIntermediateDirectories: true + ) if fileManager.fileExists(atPath: canonicalURL.path) { try fileManager.removeItem(at: canonicalURL) @@ -259,8 +291,11 @@ private enum ModelPromotion { if let expectedSize = manifest.size, let attributes = try? fileManager.attributesOfItem(atPath: canonicalURL.path), let actualSize = (attributes[.size] as? NSNumber)?.int64Value, - actualSize != expectedSize { - log("Canonical file size mismatch for \(modelName). Expected \(expectedSize), got \(actualSize). Removing corrupted file.") + actualSize != expectedSize + { + log( + "Canonical file size mismatch for \(modelName). Expected \(expectedSize), got \(actualSize). Removing corrupted file." + ) try? fileManager.removeItem(at: canonicalURL) return false } @@ -277,18 +312,18 @@ private enum ModelPromotion { // Parse model base name and tag // Input: "llama3.2:3b" -> library="library", model="llama3.2", tag="3b" // Input: "library/llama3.2:3b" -> library="library", model="llama3.2", tag="3b" - + var libraryName = "library" var modelBaseName = modelName var modelTag = "latest" - + // Check for library prefix (e.g. "user/model") if modelName.contains("/") { let parts = modelName.split(separator: "/", maxSplits: 1) libraryName = String(parts[0]) modelBaseName = String(parts[1]) } - + // Check for tag suffix (e.g. "model:tag") if modelBaseName.contains(":") { let parts = modelBaseName.split(separator: ":", maxSplits: 1) @@ -305,7 +340,11 @@ private enum ModelPromotion { log("MANIFEST_INFO: Searching registries in \(manifestsDir.path)...") log("MANIFEST_INFO: Model parsed as library='\(libraryName)', baseName='\(modelBaseName)', tag='\(modelTag)'") - if let registries = try? fileManager.contentsOfDirectory(at: manifestsDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) { + if let registries = try? fileManager.contentsOfDirectory( + at: manifestsDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) { for registry in registries { let modelDir = registry .appendingPathComponent(libraryName, isDirectory: true) @@ -332,7 +371,11 @@ private enum ModelPromotion { } // Final fallback: look for any JSON file in the model directory - if let contents = try? fileManager.contentsOfDirectory(at: modelDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) { + if let contents = try? fileManager.contentsOfDirectory( + at: modelDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) { for file in contents { if file.pathExtension == "json" || file.lastPathComponent == modelTag { log("MANIFEST_INFO: -> Attempting fallback file: \(file.path)") @@ -348,7 +391,11 @@ private enum ModelPromotion { log("MANIFEST_INFO: Direct path failed. Starting fallback enumeration...") // Final fallback: search entire manifests tree for any manifest - let enumerator = fileManager.enumerator(at: manifestsDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) + let enumerator = fileManager.enumerator( + at: manifestsDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ) while let next = enumerator?.nextObject() as? URL { let fileName = next.lastPathComponent let modelDir = next.deletingLastPathComponent() @@ -357,12 +404,14 @@ private enum ModelPromotion { // Check if this could be our manifest (either tag-named or manifest.json) let isManifestCandidate = (fileName == "manifest.json" || - fileName == modelTag || - (fileName as NSString).pathExtension == "json") + fileName == modelTag || + (fileName as NSString).pathExtension == "json") if isManifestCandidate { - log("MANIFEST_INFO: -> Found candidate manifest. Checking if '\(libraryComponent)/\(modelNameComponent)' matches '\(libraryName)/\(modelBaseName)' with file '\(fileName)'") - if libraryComponent == libraryName && modelNameComponent == modelBaseName { + log( + "MANIFEST_INFO: -> Found candidate manifest. Checking if '\(libraryComponent)/\(modelNameComponent)' matches '\(libraryName)/\(modelBaseName)' with file '\(fileName)'" + ) + if libraryComponent == libraryName, modelNameComponent == modelBaseName { if let parsed = parseManifest(at: next) { log("MANIFEST_INFO: ✅ Found manifest via enumeration") return parsed @@ -387,7 +436,8 @@ private enum ModelPromotion { .data(using: .utf8) ?? data guard let object = try? JSONSerialization.jsonObject(with: cleanedData, options: [.fragmentsAllowed]), - let json = object as? [String: Any] else { + let json = object as? [String: Any] + else { return nil } @@ -397,7 +447,8 @@ private enum ModelPromotion { for layer in sorted { if let mediaType = layer["mediaType"] as? String, mediaType.lowercased().contains("gguf"), - let digest = layer["digest"] as? String { + let digest = layer["digest"] as? String + { return ManifestData(digest: digest, size: value(from: layer["size"])) } } @@ -408,7 +459,8 @@ private enum ModelPromotion { } if let config = json["config"] as? [String: Any], - let digest = config["digest"] as? String { + let digest = config["digest"] as? String + { return ManifestData(digest: digest, size: value(from: config["size"])) } @@ -417,7 +469,9 @@ private enum ModelPromotion { private static func blobFileName(for digest: String) -> String? { var trimmed = digest.trimmingCharacters(in: .whitespacesAndNewlines) - if trimmed.isEmpty { return nil } + if trimmed.isEmpty { + return nil + } if trimmed.hasPrefix("sha256:") { trimmed.removeFirst("sha256:".count) @@ -468,7 +522,7 @@ final class PythonBridgeService: ObservableObject { private var launchedOllamaPort: Int32? private var ollamaStartTask: Task? // XPC removed - CLI subprocess only approach - fail-fast direct execution - + // Store active processes by document ID to allow cancellation private var activeProcesses: [UUID: Process] = [:] private var activeModelDownloadSession: URLSession? @@ -491,7 +545,6 @@ final class PythonBridgeService: ObservableObject { ) } - /// Public getter for the current Ollama host (including dynamic port) /// Reads from MARCUT_OLLAMA_HOST environment variable which is set when port changes var currentOllamaHost: String { @@ -521,10 +574,12 @@ final class PythonBridgeService: ObservableObject { } let parts = hostPort.split(separator: ":") if let last = parts.last, parts.count >= 2, - let parsed = Int(last), (1...65535).contains(parsed) { + let parsed = Int(last), (1 ... 65535).contains(parsed) + { port = parsed } else if parts.count == 1, - let parsed = Int(parts[0]), (1...65535).contains(parsed) { + let parsed = Int(parts[0]), (1 ... 65535).contains(parsed) + { port = parsed } } @@ -534,26 +589,28 @@ final class PythonBridgeService: ObservableObject { private var promotionsInFlight: Set = [] - // Shared Application Support container (sandbox-safe) + /// Shared Application Support container (sandbox-safe) private lazy var appSupportURL: URL = { // Force fallback to standard Application Support (Sandbox Safe) let fallback = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] .appendingPathComponent("MarcutApp", isDirectory: true) - + do { try FileManager.default.createDirectory(at: fallback, withIntermediateDirectories: true) bridgeLog("Using Application Support container: \(fallback.path)", component: "STORAGE") } catch { - bridgeLog("Failed to prepare Application Support directory: \(fallback.path) - \(error)", component: "STORAGE") + bridgeLog( + "Failed to prepare Application Support directory: \(fallback.path) - \(error)", + component: "STORAGE" + ) } return fallback }() - // Local, writable Application Support root for Ollama runtime artifacts - private lazy var localAppSupportURL: URL = { - // Align local storage with the shared appSupportURL so XPC helper can access the same paths - return appSupportURL - }() + /// Local, writable Application Support root for Ollama runtime artifacts + private lazy var localAppSupportURL: URL = // Align local storage with the shared appSupportURL so XPC helper can + // access the same paths + appSupportURL private func prepareOllamaTmpDir() -> URL? { guard let tmpDir = prepareAppContainerTempDir() else { @@ -567,17 +624,21 @@ final class PythonBridgeService: ObservableObject { private func prepareAppContainerTempDir() -> URL? { let fm = FileManager.default - + // Candidates for temp directory (checked in order) let candidates: [URL] = [ localAppSupportURL.appendingPathComponent("ollama_tmp", isDirectory: true), - localAppSupportURL.appendingPathComponent("tmp", isDirectory: true) + localAppSupportURL.appendingPathComponent("tmp", isDirectory: true), ] for tmpDir in candidates { bridgeLog("Checking Temp Dir Candidate: \(tmpDir.path)", component: "Ollama") do { - try fm.createDirectory(at: tmpDir, withIntermediateDirectories: true, attributes: [.posixPermissions: NSNumber(value: Int16(0o700))]) + try fm.createDirectory( + at: tmpDir, + withIntermediateDirectories: true, + attributes: [.posixPermissions: NSNumber(value: Int16(0o700))] + ) try? fm.setAttributes([.posixPermissions: NSNumber(value: Int16(0o700))], ofItemAtPath: tmpDir.path) bridgeLog("✅ Using temp dir: \(tmpDir.path)", component: "Ollama") return tmpDir @@ -598,14 +659,20 @@ final class PythonBridgeService: ObservableObject { return (fs.f_flags & UInt32(MNT_NOEXEC)) == 0 } - nonisolated private static func secureEraseDirectory(_ dir: URL) { + private nonisolated static func secureEraseDirectory(_ dir: URL) { let fm = FileManager.default guard fm.fileExists(atPath: dir.path) else { return } - if let enumerator = fm.enumerator(at: dir, includingPropertiesForKeys: [.isRegularFileKey], options: [], errorHandler: nil) { + if let enumerator = fm.enumerator( + at: dir, + includingPropertiesForKeys: [.isRegularFileKey], + options: [], + errorHandler: nil + ) { for case let fileURL as URL in enumerator { if let values = try? fileURL.resourceValues(forKeys: [.isRegularFileKey]), - values.isRegularFile == true { + values.isRegularFile == true + { secureEraseFile(fileURL) } } @@ -618,7 +685,7 @@ final class PythonBridgeService: ObservableObject { } } - nonisolated private static func secureEraseFile(_ url: URL) { + private nonisolated static func secureEraseFile(_ url: URL) { let fm = FileManager.default // Secure erase zero-out removed: // APFS copy-on-write makes zeroing files ineffective and increases SSD wear. @@ -631,7 +698,7 @@ final class PythonBridgeService: ObservableObject { bridgeLog("ℹ️ No ollama log file found at \(ollamaLogFileURL.path)", component: "Ollama") return } - + do { let data = try Data(contentsOf: ollamaLogFileURL) if let content = String(data: data, encoding: .utf8) { @@ -648,9 +715,9 @@ final class PythonBridgeService: ObservableObject { localAppSupportURL.appendingPathComponent("ollama", isDirectory: true) } - // Models directory + /// Models directory private var modelsDirectory: URL { - return localAppSupportURL.appendingPathComponent("models", isDirectory: true) + localAppSupportURL.appendingPathComponent("models", isDirectory: true) } private var workDirectory: URL { @@ -687,7 +754,6 @@ final class PythonBridgeService: ObservableObject { FileManager.default.createFile(atPath: logURL.path, contents: nil) } - private let autoStartOllama: Bool private let allowOllamaService: Bool private var ruleFilterValue: String = RedactionRule.serializedList(from: RedactionRule.defaultSelection) @@ -698,7 +764,6 @@ final class PythonBridgeService: ObservableObject { /// verify acquire/release counts without touching real IOKit state. private let powerAssertion: PowerAssertionGuard - init(autoStartOllama: Bool = true, allowOllamaService: Bool = true, powerAssertion: PowerAssertionGuard? = nil) { self.isDebugLoggingEnabled = DebugPreferences.isEnabled() self.autoStartOllama = autoStartOllama @@ -710,27 +775,26 @@ final class PythonBridgeService: ObservableObject { // Dynamic port selection self.ollamaPort = PythonBridgeService.findFreePort(start: 11434, maxAttempts: 20) bridgeLog("Selected Ollama port: \(self.ollamaPort)", component: "Ollama") - + setupEnvironment() applyRuleFilter(RedactionRule.defaultSelection) checkEnvironment(autoStart: autoStartOllama) } - + /// Updates the MARCUT_OLLAMA_HOST/OLLAMA_HOST process environment variables with the current port private func updateOllamaPortEnvironment() { let host = "127.0.0.1:\(ollamaPort)" - setenv("MARCUT_OLLAMA_HOST", host, 1) // used by Python clients (expects host:port) - setenv("OLLAMA_HOST", host, 1) // Ollama server/CLI expects host:port (no scheme) + setenv("MARCUT_OLLAMA_HOST", host, 1) // used by Python clients (expects host:port) + setenv("OLLAMA_HOST", host, 1) // Ollama server/CLI expects host:port (no scheme) bridgeLog("Set MARCUT_OLLAMA_HOST/OLLAMA_HOST=\(host)", component: "Ollama") } - - + /// Finds a free port starting from `start`, trying up to `maxAttempts` times. /// Returns the first available port, or the `start` port if all fail (fallback). private static func findFreePort(start: Int32, maxAttempts: Int) -> Int32 { - for _ in 0.. Int32 in return pointer.withMemoryRebound(to: sockaddr.self, capacity: 1) { sockaddrPointer in - return bind(socketFileDescriptor, sockaddrPointer, socklen_t(MemoryLayout.size)) + bind(socketFileDescriptor, sockaddrPointer, socklen_t(MemoryLayout.size)) } } bindResult = result @@ -827,7 +891,7 @@ final class PythonBridgeService: ObservableObject { if parts.count >= 3 { relevant = Array(parts.suffix(2)) } - if relevant.count == 2 && relevant.first == "library" { + if relevant.count == 2, relevant.first == "library" { return String(relevant[1]) } return relevant.map { String($0) }.joined(separator: "/") @@ -883,7 +947,10 @@ final class PythonBridgeService: ObservableObject { bridgeLog("MODEL_PROMOTION: Found \(appModels.count) models in app container", component: "MODEL_PROMOTION") guard !allModels.isEmpty else { - bridgeLog("MODEL_PROMOTION: No models found in either app or system directories", component: "MODEL_PROMOTION") + bridgeLog( + "MODEL_PROMOTION: No models found in either app or system directories", + component: "MODEL_PROMOTION" + ) return } @@ -904,7 +971,10 @@ final class PythonBridgeService: ObservableObject { // Priority 1: Try bundled Ollama binary in Contents/MacOS (sibling to main executable) // This is the correct location for executables in a Mac App Store bundle if let executableURL = Bundle.main.executableURL { - let macosOllamaURL = executableURL.deletingLastPathComponent().appendingPathComponent("ollama", isDirectory: false) + let macosOllamaURL = executableURL.deletingLastPathComponent().appendingPathComponent( + "ollama", + isDirectory: false + ) bridgeLog("Checking for Ollama at: \(macosOllamaURL.path)", component: "Ollama") if fileManager.fileExists(atPath: macosOllamaURL.path) { bridgeLog("✅ Found Ollama at Contents/MacOS", component: "Ollama") @@ -913,7 +983,7 @@ final class PythonBridgeService: ObservableObject { bridgeLog("ℹ️ Ollama not in Contents/MacOS (checking Resources)", component: "Ollama") } } - + // Priority 2: Fallback to Resources (legacy location) if let resourceURL = Bundle.main.resourceURL { let resourceOllamaURL = resourceURL.appendingPathComponent("ollama", isDirectory: false) @@ -928,16 +998,16 @@ final class PythonBridgeService: ObservableObject { // System Ollama fallback removed to ensure App Store compliance and robustness. // We must rely only on the bundled binary. - + bridgeLog("❌ CRITICAL: No Ollama executable found in bundled resources.", component: "Ollama") return nil } - + /// Async helper to prepare binary for execution (fix permissions) private func prepareOllamaBinary() async -> String? { guard let path = resolveOllamaPath() else { return nil } await fixBinaryPermissions(at: URL(fileURLWithPath: path)) - + // After fixing permissions, verify it's executable if FileManager.default.isExecutableFile(atPath: path) { bridgeLog("Found bundled Ollama binary and confirmed executable: \(path)", component: "Ollama") @@ -957,7 +1027,7 @@ final class PythonBridgeService: ObservableObject { bridgeLog("Skipping permission fix for bundled binary: \(path)", component: "Ollama") return } - + await Task.detached(priority: .userInitiated) { // 1. Remove quarantine attribute let xattrProcess = Process() @@ -965,7 +1035,7 @@ final class PythonBridgeService: ObservableObject { xattrProcess.arguments = ["-d", "com.apple.quarantine", path] try? xattrProcess.run() xattrProcess.waitUntilExit() - + // 2. Ensure executable permission (chmod +x) let chmodProcess = Process() chmodProcess.executableURL = URL(fileURLWithPath: "/bin/chmod") @@ -973,7 +1043,7 @@ final class PythonBridgeService: ObservableObject { try? chmodProcess.run() chmodProcess.waitUntilExit() }.value - + bridgeLog("Attempted permission fix for: \(path)", component: "Ollama") } @@ -982,7 +1052,7 @@ final class PythonBridgeService: ObservableObject { stripUnsafeRemoteOllamaOverrides(from: &env) let proxyKeys = [ "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "NO_PROXY", - "http_proxy", "https_proxy", "all_proxy", "no_proxy" + "http_proxy", "https_proxy", "all_proxy", "no_proxy", ] for key in proxyKeys { env[key] = nil @@ -991,7 +1061,7 @@ final class PythonBridgeService: ObservableObject { // Aggressively strip any OLLAMA_ variables to prevent leaks from host environment (e.g. LM Studio config) for key in Array(env.keys) { if key.uppercased().hasPrefix("OLLAMA_") { - env[key] = nil + env[key] = nil } } @@ -1012,7 +1082,7 @@ final class PythonBridgeService: ObservableObject { "MARCUT_METADATA_ARGS", "MARCUT_METADATA_PRESET", "MARCUT_METADATA_SETTINGS_JSON", - "MARCUT_SCRUB_REPORT_PATH" + "MARCUT_SCRUB_REPORT_PATH", ] for key in embeddedRuntimeKeys { if let rawValue = getenv(key) { @@ -1043,8 +1113,8 @@ final class PythonBridgeService: ObservableObject { env["HOME"] = localAppSupportURL.path // Ensure Ollama uses local storage only - env["OLLAMA_HOST"] = ollamaHost // server/CLI expects host:port (no scheme) - env["MARCUT_OLLAMA_HOST"] = ollamaHost // Python clients expect host:port + env["OLLAMA_HOST"] = ollamaHost // server/CLI expects host:port (no scheme) + env["MARCUT_OLLAMA_HOST"] = ollamaHost // Python clients expect host:port // Use app container temp directory for App Store safety guard let tmpDir = prepareAppContainerTempDir() else { let message = "Ollama could not start: cannot create temp directory in app container" @@ -1056,7 +1126,7 @@ final class PythonBridgeService: ObservableObject { env["TMPDIR"] = tmpDir.path env["OLLAMA_TMPDIR"] = tmpDir.path lastOllamaTmpDir = tmpDir - + if let runnersDir = Bundle.main.resourceURL?.appendingPathComponent("ollama_runners") { env["OLLAMA_RUNNERS_DIR"] = runnersDir.path bridgeLog("Set OLLAMA_RUNNERS_DIR=\(runnersDir.path)", component: "Ollama") @@ -1100,7 +1170,7 @@ final class PythonBridgeService: ObservableObject { if isDebugLoggingEnabled { try? FileManager.default.createDirectory(at: ollamaLogsDirectory, withIntermediateDirectories: true) } - + // Explicitly create models/blobs directory to prevent permission errors let modelsDir = modelsDirectory let blobsDir = modelsDir.appendingPathComponent("blobs") @@ -1109,7 +1179,7 @@ final class PythonBridgeService: ObservableObject { return env } - // Remove stale Ollama pid directories that cause subsequent starts to exit immediately + /// Remove stale Ollama pid directories that cause subsequent starts to exit immediately private func pruneStaleOllamaPidFiles() { let tmpDir = ollamaHomeURL.appendingPathComponent("tmp", isDirectory: true) guard let contents = try? FileManager.default.contentsOfDirectory( @@ -1120,7 +1190,8 @@ final class PythonBridgeService: ObservableObject { for entry in contents where entry.lastPathComponent.hasPrefix("ollama") { let pidFile = entry.appendingPathComponent("ollama.pid") guard let pidString = try? String(contentsOf: pidFile).trimmingCharacters(in: .whitespacesAndNewlines), - let pid = Int32(pidString) else { + let pid = Int32(pidString) + else { continue } @@ -1128,7 +1199,9 @@ final class PythonBridgeService: ObservableObject { errno = 0 let alive = (kill(pid, 0) == 0) let permissionDenied = errno == EPERM - if alive || permissionDenied { continue } + if alive || permissionDenied { + continue + } // Safe to remove the stale dir to unblock future launches try? FileManager.default.removeItem(at: entry) @@ -1186,7 +1259,9 @@ final class PythonBridgeService: ObservableObject { bridgeLog("ENV OLLAMA_MODELS=\(env["OLLAMA_MODELS"] ?? "")", component: "ENVIRONMENT_CHECK") bridgeLog("ENV OLLAMA_DATA=\(env["OLLAMA_DATA"] ?? "")", component: "ENVIRONMENT_CHECK") bridgeLog("ENV OLLAMA_HOST=\(env["OLLAMA_HOST"] ?? "")", component: "ENVIRONMENT_CHECK") - if let path = resolveOllamaPath() { bridgeLog("BIN ollama=\(path)", component: "ENVIRONMENT_CHECK") } + if let path = resolveOllamaPath() { + bridgeLog("BIN ollama=\(path)", component: "ENVIRONMENT_CHECK") + } } func refreshEnvironment() async { @@ -1203,7 +1278,7 @@ final class PythonBridgeService: ObservableObject { } self.prefetchedFromDisk = true } - if autoStartOllama && allowOllamaService { + if autoStartOllama, allowOllamaService { _ = await ensureOllamaRunning() } await promoteAllExistingModels() @@ -1285,7 +1360,7 @@ final class PythonBridgeService: ObservableObject { } } - private func probeExistingOllamaInstance() async -> Bool { + private func probeExistingOllamaInstance() async -> Bool { // Check if any processes are using the Ollama port let existingPids = await pidsUsingOllamaPort() let hasExistingProcesses = !existingPids.isEmpty @@ -1306,16 +1381,15 @@ final class PythonBridgeService: ObservableObject { // MARK: - Ollama Process Management private var ollamaBackgroundProcess: Process? - // Thread-safe logger (lazy initialized) - private lazy var logManager: OllamaLogger = { - OllamaLogger(logURL: self.ollamaLogFileURL) - }() + /// Thread-safe logger (lazy initialized) + private lazy var logManager: OllamaLogger = .init(logURL: self.ollamaLogFileURL) + private var lastOllamaCheckTime: TimeInterval = 0 - private let ollamaCheckInterval: TimeInterval = 5.0 // Cache for 5 seconds + private let ollamaCheckInterval: TimeInterval = 5.0 // Cache for 5 seconds private var prefetchedFromDisk = false private var lastOllamaTmpDir: URL? private var lastImmediateLaunchFailure = false - private var ollamaOutputPipe: Pipe? // Must be stored to prevent premature deallocation + private var ollamaOutputPipe: Pipe? // Must be stored to prevent premature deallocation private func startBundledOllama() async -> Bool { guard let ollamaPath = await prepareOllamaBinary() else { @@ -1324,7 +1398,10 @@ final class PythonBridgeService: ObservableObject { } if let existingProcess = ollamaBackgroundProcess, existingProcess.isRunning { - bridgeLog("Reusing existing Ollama background process (PID \(existingProcess.processIdentifier)).", component: "Ollama") + bridgeLog( + "Reusing existing Ollama background process (PID \(existingProcess.processIdentifier)).", + component: "Ollama" + ) writeOllamaLogEntry("Reusing existing process (PID \(existingProcess.processIdentifier))") ollamaLaunchError = nil return true @@ -1344,16 +1421,19 @@ final class PythonBridgeService: ObservableObject { } process.environment = env lastOllamaTmpDir = URL(fileURLWithPath: env["OLLAMA_TMPDIR"] ?? "") - bridgeLog("Launching Ollama: TMPDIR=\(env["TMPDIR"] ?? "nil") OLLAMA_TMPDIR=\(env["OLLAMA_TMPDIR"] ?? "nil") OLLAMA_HOST=\(env["OLLAMA_HOST"] ?? "nil")", component: "Ollama") + bridgeLog( + "Launching Ollama: TMPDIR=\(env["TMPDIR"] ?? "nil") OLLAMA_TMPDIR=\(env["OLLAMA_TMPDIR"] ?? "nil") OLLAMA_HOST=\(env["OLLAMA_HOST"] ?? "nil")", + component: "Ollama" + ) let logURL = ollamaLogURL - + // Ensure log file exists and is writable let fm = FileManager.default if !fm.fileExists(atPath: logURL.path) { fm.createFile(atPath: logURL.path, contents: nil) } - + // Ensure file has write permissions try? fm.setAttributes([.posixPermissions: NSNumber(value: Int16(0o600))], ofItemAtPath: logURL.path) @@ -1371,10 +1451,10 @@ final class PythonBridgeService: ObservableObject { // If stored as local variable, it can be released when this function returns, // which kills the readabilityHandler before any data is received. let pipe = Pipe() - self.ollamaOutputPipe = pipe // Retain for lifetime of process + self.ollamaOutputPipe = pipe // Retain for lifetime of process process.standardOutput = pipe process.standardError = pipe - + // Read data in background to prevent buffer filling let outputHandle = pipe.fileHandleForReading final class OutputAccumulator: @unchecked Sendable { @@ -1383,39 +1463,38 @@ final class PythonBridgeService: ObservableObject { let outputAccumulator = OutputAccumulator() // Use a dedicated serial queue for processing logic and file I/O let processingQueue = DispatchQueue(label: "com.marclaw.marcut.ollamaOutputProcessing") - + // Capture logger reference for safe background use let logger = self.logManager - + outputHandle.readabilityHandler = { handle in // Read data immediately, limiting the scope of work on this IO callback let data = handle.availableData guard !data.isEmpty else { return } - + // Dispatch completely asynchronously to avoid blocking this IO callback processingQueue.async { [logger, outputAccumulator] in // Write to log file safely on background thread via thread-safe logger logger.write(data) - + // Keep buffer size reasonable for internal accumulation if outputAccumulator.data.count > 1_000_000 { outputAccumulator.data = Data() } outputAccumulator.data.append(data) - + // Parse for server ready signal if let outputStr = String(data: data, encoding: .utf8) { // Check for listening address (standard Ollama startup msg) if outputStr.contains("Listening on") || outputStr.contains("127.0.0.1:11434") { - // We can't easily signal the outer async function from here without a continuation or checking a shared state externally, + // We can't easily signal the outer async function from here without a continuation or checking + // a shared state externally, // but we can log it. The outer loop checks the port via HTTP anyway. } } } } - - let launchStart = Date() do { try process.run() @@ -1425,11 +1504,18 @@ final class PythonBridgeService: ObservableObject { outputHandle.readabilityHandler = nil let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8) ?? "" - bridgeLog("❌ Ollama process exited immediately after launch. status=\(process.terminationStatus) stdout/stderr=\(output)", component: "Ollama") - bridgeLog("❌ Ollama env TMPDIR=\(env["TMPDIR"] ?? "nil") OLLAMA_TMPDIR=\(env["OLLAMA_TMPDIR"] ?? "nil") OLLAMA_HOME=\(env["OLLAMA_HOME"] ?? "nil")", component: "Ollama") + bridgeLog( + "❌ Ollama process exited immediately after launch. status=\(process.terminationStatus) stdout/stderr=\(output)", + component: "Ollama" + ) + bridgeLog( + "❌ Ollama env TMPDIR=\(env["TMPDIR"] ?? "nil") OLLAMA_TMPDIR=\(env["OLLAMA_TMPDIR"] ?? "nil") OLLAMA_HOME=\(env["OLLAMA_HOME"] ?? "nil")", + component: "Ollama" + ) // Detect port-in-use vs exec/noexec failures let lower = output.lowercased() - let portInUse = lower.contains("address already in use") || lower.contains("bind: address already in use") + let portInUse = lower.contains("address already in use") || lower + .contains("bind: address already in use") if !portInUse { let logPath = ollamaLogURL.path ollamaLaunchError = "Ollama failed to start. See \(logPath) for runner details." @@ -1442,7 +1528,11 @@ final class PythonBridgeService: ObservableObject { ollamaBackgroundProcess = process let elapsed = Date().timeIntervalSince(launchStart) bridgeLog( - String(format: "✅ Ollama process started directly (PID: %d) in %.2fs", process.processIdentifier, elapsed), + String( + format: "✅ Ollama process started directly (PID: %d) in %.2fs", + process.processIdentifier, + elapsed + ), component: "Ollama" ) @@ -1451,7 +1541,7 @@ final class PythonBridgeService: ObservableObject { // Stop reading outputHandle.readabilityHandler = nil - guard let self = self else { return } + guard let self else { return } Task { @MainActor in bridgeLog( @@ -1462,8 +1552,9 @@ final class PythonBridgeService: ObservableObject { self.launchedOllamaPID = nil self.launchedOllamaPort = nil self.ollamaBackgroundProcess = nil - self.ollamaOutputPipe = nil // Release pipe now that process is done - // self?.closeOllamaLogHandle() // Cleanup old handle if any - DISABLED to avoid race with readabilityHandler + self.ollamaOutputPipe = nil // Release pipe now that process is done + // self?.closeOllamaLogHandle() // Cleanup old handle if any - DISABLED to avoid race with + // readabilityHandler // Log captured output // Log captured output @@ -1480,7 +1571,10 @@ final class PythonBridgeService: ObservableObject { bridgeLog("🔍 Last 20 lines of Ollama output:\n\(lastLines)", component: "Ollama") // Do not overwrite the log file here; readabilityHandler streams it. - bridgeLog("📝 Ollama process finished. Log saved to \(self.ollamaLogURL.path)", component: "Ollama") + bridgeLog( + "📝 Ollama process finished. Log saved to \(self.ollamaLogURL.path)", + component: "Ollama" + ) } else { bridgeLog("⚠️ No output captured from Ollama process", component: "Ollama") } @@ -1497,10 +1591,10 @@ final class PythonBridgeService: ObservableObject { } private func waitForOllamaHTTP() async -> Bool { - let maxAttempts = 15 // Increased from 8 for robust startup - let baseInterval: TimeInterval = 0.5 // More reasonable base interval + let maxAttempts = 15 // Increased from 8 for robust startup + let baseInterval: TimeInterval = 0.5 // More reasonable base interval - for attempt in 1...maxAttempts { + for attempt in 1 ... maxAttempts { bridgeLog("Ollama HTTP probe attempt \(attempt)/\(maxAttempts)", component: "Ollama") // Bail out early if the process died during startup instead of sleeping the full backoff window @@ -1527,7 +1621,7 @@ final class PythonBridgeService: ObservableObject { @discardableResult private func ensureOllamaRunning(forceProbe: Bool = false) async -> Bool { // XPC removed - use direct CLI subprocess only - return await ensureOllamaRunningDirect(forceProbe: forceProbe) + await ensureOllamaRunningDirect(forceProbe: forceProbe) } // XPC functionality removed - now using direct CLI subprocess approach only @@ -1535,15 +1629,17 @@ final class PythonBridgeService: ObservableObject { private func probeHTTPWithBackoff() async -> Bool { let attempts = 10 let base: TimeInterval = 0.2 - for i in 0.. Bool { guard allowOllamaService else { bridgeLog("Ollama service disabled; skipping ensureOllamaRunning()", component: "Ollama") @@ -1557,35 +1653,42 @@ final class PythonBridgeService: ObservableObject { let currentTime = Date().timeIntervalSince1970 // Performance optimization: Skip redundant checks if we recently verified Ollama is running - if !forceProbe && isOllamaRunning && (currentTime - lastOllamaCheckTime) < ollamaCheckInterval { + if !forceProbe, isOllamaRunning, (currentTime - lastOllamaCheckTime) < ollamaCheckInterval { bridgeLog("Ollama status cached - skipping check", component: "Ollama") return true } // If we already have a running bundled process, reuse it and avoid changing ports - if let process = ollamaBackgroundProcess, - process.isRunning, - let launchedPort = launchedOllamaPort { - // If the temp dir used by the running process differs from the desired exec-capable tmp, restart. - let currentTmp = prepareOllamaTmpDir() - if let currentTmp, lastOllamaTmpDir == nil || lastOllamaTmpDir?.path != currentTmp.path { - bridgeLog("Ollama temp dir missing/mismatched; restarting to apply exec-capable TMPDIR", component: "Ollama") - process.terminate() - ollamaBackgroundProcess = nil - launchedOllamaPID = nil - launchedOllamaPort = nil + if let process = ollamaBackgroundProcess, + process.isRunning, + let launchedPort = launchedOllamaPort + { + // If the temp dir used by the running process differs from the desired exec-capable tmp, restart. + let currentTmp = prepareOllamaTmpDir() + if let currentTmp, lastOllamaTmpDir == nil || lastOllamaTmpDir?.path != currentTmp.path { + bridgeLog( + "Ollama temp dir missing/mismatched; restarting to apply exec-capable TMPDIR", + component: "Ollama" + ) + process.terminate() + ollamaBackgroundProcess = nil + launchedOllamaPID = nil + launchedOllamaPort = nil + } else { + ollamaPort = launchedPort + updateOllamaPortEnvironment() + if await probeOllamaHTTP() { + bridgeLog( + "Reusing existing bundled Ollama (PID \(process.processIdentifier)) on port \(launchedPort)", + component: "Ollama" + ) + await MainActor.run { + self.isOllamaRunning = true + } + lastOllamaCheckTime = currentTime + ollamaLaunchError = nil + return true } else { - ollamaPort = launchedPort - updateOllamaPortEnvironment() - if await probeOllamaHTTP() { - bridgeLog("Reusing existing bundled Ollama (PID \(process.processIdentifier)) on port \(launchedPort)", component: "Ollama") - await MainActor.run { - self.isOllamaRunning = true - } - lastOllamaCheckTime = currentTime - ollamaLaunchError = nil - return true - } else { bridgeLog("Cached Ollama process unresponsive; clearing reference", component: "Ollama") ollamaBackgroundProcess = nil launchedOllamaPID = nil @@ -1617,7 +1720,7 @@ final class PythonBridgeService: ObservableObject { bridgeLog("Starting Ollama with host=\(ollamaHost) tmp=\(tmpPath)", component: "Ollama") // Try up to 20 ports starting at 11434; reuse our own instance if healthy - for offset in 0..<20 { + for offset in 0 ..< 20 { let candidatePort = 11434 + Int32(offset) let pidsOnPort = await pids(using: candidatePort) @@ -1627,24 +1730,34 @@ final class PythonBridgeService: ObservableObject { let launchedPID = launchedOllamaPID, launchedPort == candidatePort, pidsOnPort.contains(launchedPID), - await probeOllamaHTTP() { + await probeOllamaHTTP() + { ollamaPort = launchedPort updateOllamaPortEnvironment() - bridgeLog("Reusing bundled Ollama instance (PID \(launchedPID)) on port \(launchedPort)", component: "Ollama") + bridgeLog( + "Reusing bundled Ollama instance (PID \(launchedPID)) on port \(launchedPort)", + component: "Ollama" + ) isOllamaRunning = true lastOllamaCheckTime = currentTime return true } // Foreign process present; do not attempt to bind this port - bridgeLog("Skipping port \(candidatePort) - already in use by external process(es): \(pidsOnPort)", component: "Ollama") + bridgeLog( + "Skipping port \(candidatePort) - already in use by external process(es): \(pidsOnPort)", + component: "Ollama" + ) // Occupied by non-app process; move to next port continue } - + // SANDBOX FIX: lsof often fails to see other processes in sandbox. // Explicitly check if we can connect to this port. If we can, it's occupied. if await isPortOccupied(port: candidatePort) { - bridgeLog("Skipping port \(candidatePort) - TCP connection accepted (ghost/zombie process)", component: "Ollama") + bridgeLog( + "Skipping port \(candidatePort) - TCP connection accepted (ghost/zombie process)", + component: "Ollama" + ) continue } @@ -1654,7 +1767,10 @@ final class PythonBridgeService: ObservableObject { bridgeLog("🚀 Starting new Ollama instance on port \(candidatePort)", component: "Ollama") let started = await startBundledOllama() if !started { - bridgeLog("❌ OLLAMA_PROCESS_START_FAILED: Unable to start Ollama process on port \(candidatePort)", component: "Ollama") + bridgeLog( + "❌ OLLAMA_PROCESS_START_FAILED: Unable to start Ollama process on port \(candidatePort)", + component: "Ollama" + ) dumpOllamaLogs() // If launch failed immediately (likely exec/noexec), abort further port attempts // BUT: If it failed because of "address already in use", we MUST retry! @@ -1662,11 +1778,17 @@ final class PythonBridgeService: ObservableObject { // Check if it was a bind error let logContent = (try? String(contentsOf: ollamaLogFileURL)) ?? "" if logContent.contains("address already in use") { - bridgeLog("⚠️ Port \(candidatePort) was actually in use (bind failed). Retrying next port...", component: "Ollama") + bridgeLog( + "⚠️ Port \(candidatePort) was actually in use (bind failed). Retrying next port...", + component: "Ollama" + ) continue } - - bridgeLog("❌ OLLAMA_LAUNCH_ABORT: Immediate failure (exec/noexec). Not retrying other ports.", component: "Ollama") + + bridgeLog( + "❌ OLLAMA_LAUNCH_ABORT: Immediate failure (exec/noexec). Not retrying other ports.", + component: "Ollama" + ) break } continue @@ -1689,8 +1811,14 @@ final class PythonBridgeService: ObservableObject { listeningPIDs: listeningPIDs, ownPID: launchedOllamaPID ) { - let message = PythonBridgeService.ollamaPortConflictMessage(port: candidatePort, foreignPID: foreignPID) - bridgeLog("❌ OLLAMA_PORT_IDENTITY_MISMATCH on port \(candidatePort): \(message)", component: "Ollama") + let message = PythonBridgeService.ollamaPortConflictMessage( + port: candidatePort, + foreignPID: foreignPID + ) + bridgeLog( + "❌ OLLAMA_PORT_IDENTITY_MISMATCH on port \(candidatePort): \(message)", + component: "Ollama" + ) ollamaLaunchError = message dumpOllamaLogs() if let process = ollamaBackgroundProcess { @@ -1709,7 +1837,10 @@ final class PythonBridgeService: ObservableObject { return true } - bridgeLog("❌ OLLAMA_HTTP_TIMEOUT on port \(candidatePort): Process started but HTTP endpoint not responding", component: "Ollama") + bridgeLog( + "❌ OLLAMA_HTTP_TIMEOUT on port \(candidatePort): Process started but HTTP endpoint not responding", + component: "Ollama" + ) dumpOllamaLogs() // Clean up the failed process immediately @@ -1737,9 +1868,8 @@ final class PythonBridgeService: ObservableObject { return false } - let baseInterval: TimeInterval = 0.3 - for attempt in 1...maxAttempts { + for attempt in 1 ... maxAttempts { bridgeLog("Probing model readiness \(modelName) attempt \(attempt)/\(maxAttempts)", component: "Ollama") if await probeModelReady(modelName: modelName) { bridgeLog("Model \(modelName) is ready for generation", component: "Ollama") @@ -1758,7 +1888,12 @@ final class PythonBridgeService: ObservableObject { // This allows Ollama sufficient time to respond during startup if let (code, data) = try await ollamaHTTP(path: "/api/version", timeout: 3.0) { if code == 200 { - if let data = data { bridgeLog("✅ HTTP /api/version status=200 body=\(stringSnippet(data))", component: "HTTP") } + if let data { + bridgeLog( + "✅ HTTP /api/version status=200 body=\(stringSnippet(data))", + component: "HTTP" + ) + } return true } else if code == -1004 { // Connection refused - Ollama not running @@ -1769,7 +1904,12 @@ final class PythonBridgeService: ObservableObject { bridgeLog("⏰ HTTP request timeout - Ollama unresponsive", component: "HTTP") return false } else { - if let data = data { bridgeLog("⚠️ HTTP /api/version status=\(code) body=\(stringSnippet(data))", component: "HTTP") } + if let data { + bridgeLog( + "⚠️ HTTP /api/version status=\(code) body=\(stringSnippet(data))", + component: "HTTP" + ) + } return false } } @@ -1790,37 +1930,41 @@ final class PythonBridgeService: ObservableObject { // We use the existing ollamaHTTP probe logic but strictly for connection checking // If we get ANY response (even 404, 500, or just a connection), the port is taken. // We only consider it free if the connection is REFUSED. - + guard let url = URL(string: "http://127.0.0.1:\(port)/") else { return false } var req = URLRequest(url: url) req.httpMethod = "GET" // Use GET as HEAD might be rejected req.timeoutInterval = 1.0 // Increase timeout slightly - + let config = URLSessionConfiguration.ephemeral config.timeoutIntervalForRequest = 1.0 config.timeoutIntervalForResource = 1.0 config.requestCachePolicy = .reloadIgnoringLocalCacheData - + let session = URLSession(configuration: config) defer { session.invalidateAndCancel() } - + do { - let (_, _) = try await session.data(for: req) + let _ = try await session.data(for: req) // If we get here, we connected. Port is busy. bridgeLog("isPortOccupied: Port \(port) is BUSY (connection accepted)", component: "Ollama") return true } catch { let nsError = error as NSError // If connection refused (code -1004), port is likely free. - if nsError.domain == NSURLErrorDomain && nsError.code == -1004 { + if nsError.domain == NSURLErrorDomain, nsError.code == -1004 { // bridgeLog("isPortOccupied: Port \(port) is FREE (connection refused)", component: "Ollama") return false } // Any other error (timeout, etc) implies something might be there or network is weird. - bridgeLog("isPortOccupied: Port \(port) check failed with error: \(error). Assuming BUSY.", component: "Ollama") - return true + bridgeLog( + "isPortOccupied: Port \(port) check failed with error: \(error). Assuming BUSY.", + component: "Ollama" + ) + return true } } + private func ollamaHTTP(path: String, timeout: TimeInterval) async throws -> (Int, Data?)? { // Build URL from OLLAMA_HOST (host:port) guard let url = URL(string: "http://\(ollamaHost)\(path)") else { return nil } @@ -1836,7 +1980,9 @@ final class PythonBridgeService: ObservableObject { defer { session.invalidateAndCancel() } do { let (data, resp) = try await session.data(for: req) - if let http = resp as? HTTPURLResponse { return (http.statusCode, data) } + if let http = resp as? HTTPURLResponse { + return (http.statusCode, data) + } } catch { bridgeLog("HTTP request failed path=\(path) error=\(error)", component: "HTTP") throw error @@ -1844,7 +1990,9 @@ final class PythonBridgeService: ObservableObject { return nil } - private func ollamaHTTPPostJSON(path: String, payload: [String: Any], timeout: TimeInterval) async throws -> (Int, Data?)? { + private func ollamaHTTPPostJSON(path: String, payload: [String: Any], + timeout: TimeInterval) async throws -> (Int, Data?)? + { guard let url = URL(string: "http://\(ollamaHost)\(path)") else { return nil } var req = URLRequest(url: url) req.httpMethod = "POST" @@ -1862,7 +2010,9 @@ final class PythonBridgeService: ObservableObject { defer { session.invalidateAndCancel() } do { let (data, resp) = try await session.data(for: req) - if let http = resp as? HTTPURLResponse { return (http.statusCode, data) } + if let http = resp as? HTTPURLResponse { + return (http.statusCode, data) + } } catch { bridgeLog("HTTP POST failed path=\(path) error=\(error)", component: "HTTP") throw error @@ -1872,12 +2022,26 @@ final class PythonBridgeService: ObservableObject { private func probeModelReady(modelName: String) async -> Bool { do { - if let (code, data) = try await ollamaHTTPPostJSON(path: "/api/show", payload: ["name": modelName], timeout: 5.0) { + if let (code, data) = try await ollamaHTTPPostJSON( + path: "/api/show", + payload: ["name": modelName], + timeout: 5.0 + ) { if code == 200 { - if let data = data { bridgeLog("✅ /api/show \(modelName) status=200 body=\(stringSnippet(data))", component: "HTTP") } + if let data { + bridgeLog( + "✅ /api/show \(modelName) status=200 body=\(stringSnippet(data))", + component: "HTTP" + ) + } return true } else { - if let data = data { bridgeLog("⚠️ /api/show \(modelName) status=\(code) body=\(stringSnippet(data))", component: "HTTP") } + if let data { + bridgeLog( + "⚠️ /api/show \(modelName) status=\(code) body=\(stringSnippet(data))", + component: "HTTP" + ) + } return false } } @@ -1888,7 +2052,8 @@ final class PythonBridgeService: ObservableObject { return false } - private struct OllamaTags: Decodable { let models: [OllamaTags.Model]; struct Model: Decodable { let name: String } } + private struct OllamaTags: Decodable { let models: [OllamaTags.Model]; struct Model: Decodable { let name: String } + } private func stringSnippet(_ data: Data, limit: Int = 512) -> String { if let s = String(data: data.prefix(limit), encoding: .utf8) { @@ -1952,7 +2117,7 @@ final class PythonBridgeService: ObservableObject { } private func isPortInUse(_ port: Int32) async -> Bool { - !(await pids(using: port)).isEmpty + await !pids(using: port).isEmpty } /// Decides whether the PIDs holding a *listening* socket on our chosen port @@ -1973,12 +2138,12 @@ final class PythonBridgeService: ObservableObject { /// state rather than the generic "Ollama did not respond" timeout message (B3). static func ollamaPortConflictMessage(port: Int32, foreignPID: Int32) -> String { "Another Ollama (or other) instance is running on port \(port) (PID \(foreignPID))." + - " Marcut could not verify its own embedded service on this port and will try another." + " Marcut could not verify its own embedded service on this port and will try another." } private func selectBundledOllamaPort(base: Int32 = 11434, attempts: Int = 20) async -> Int32? { var candidate = base - for _ in 0.. Int32? { var port = start - for _ in 0.. Void)? = nil, + heartbeat _: ((Int, Int, String?) -> Void)? = nil, cliMode: Bool = false ) async -> Bool { applyRuleFilter(settings.enabledRules) @@ -2427,8 +2604,12 @@ final class PythonBridgeService: ObservableObject { let displayRoot = displayPath(allowedRoot) let displayInput = displayPath(inputPath) let errorMessage = """ -CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Support container. Place CLI inputs under \(displayRoot) (e.g. \(displayRoot)/Input or \(displayRoot)/Work) before running. -""" + CLI Error: Input file '\( + displayInput + )' is outside the sandboxed Application Support container. Place CLI inputs under \(displayRoot) (e.g. \( + displayRoot + )/Input or \(displayRoot)/Work) before running. + """ logToFile(logPath, "❌ \(errorMessage)") item.status = .failed item.errorMessage = errorMessage @@ -2556,7 +2737,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup if cliSuccess { // Continue with file moving logic - if !usingMockBackend && settings.mode.usesLLM { + if !usingMockBackend, settings.mode.usesLLM { item.concludeCurrentStage() item.beginStage(.merging) } @@ -2641,7 +2822,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup ) if success { - if !usingMockBackend && settings.mode.usesLLM { + if !usingMockBackend, settings.mode.usesLLM { item.concludeCurrentStage() item.beginStage(.merging) } @@ -2683,7 +2864,6 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup } else { logToFile(logPath, "[SUB] Subprocess execution failed") - // Original failure handling for non-fallback cases if item.status != .cancelled { item.status = .failed @@ -2692,23 +2872,21 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup logToFile(logPath, "=== MARCUT PROCESSING END (FAILED) ===") return false } - } - // MARK: - Command Execution private func runCommand( _ command: String, arguments: [String], environment: [String: String]? = nil, - background: Bool = false + background _: Bool = false ) async -> (success: Bool, output: String) { let env = environment ?? getOllamaEnvironment() return await legacyRunCommand(command, arguments: arguments, environment: env) } - // Fallback to direct process execution for non-Ollama commands + /// Fallback to direct process execution for non-Ollama commands private func legacyRunCommand( _ command: String, arguments: [String], @@ -2717,7 +2895,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup ) async -> (success: Bool, output: String) { bridgeLog("CLI: Executing command: \(command)", component: "CLI_SUBPROCESS") bridgeLog("CLI: Arguments: \(arguments)", component: "CLI_SUBPROCESS") - + return await Task.detached(priority: .userInitiated) { () async -> (success: Bool, output: String) in let process = Process() process.executableURL = URL(fileURLWithPath: command) @@ -2732,15 +2910,18 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup try process.run() var didTimeout = false let deadline = Date().addingTimeInterval(timeoutSeconds) - while process.isRunning && Date() < deadline { + while process.isRunning, Date() < deadline { try? await Task.sleep(nanoseconds: 100_000_000) } if process.isRunning { didTimeout = true - bridgeLog("CLI: Process timed out after \(timeoutSeconds)s, terminating...", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI: Process timed out after \(timeoutSeconds)s, terminating...", + component: "CLI_SUBPROCESS" + ) process.terminate() let terminateDeadline = Date().addingTimeInterval(5) - while process.isRunning && Date() < terminateDeadline { + while process.isRunning, Date() < terminateDeadline { try? await Task.sleep(nanoseconds: 100_000_000) } if process.isRunning { @@ -2749,7 +2930,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup _ = kill(pid, SIGKILL) } let killDeadline = Date().addingTimeInterval(2) - while process.isRunning && Date() < killDeadline { + while process.isRunning, Date() < killDeadline { try? await Task.sleep(nanoseconds: 100_000_000) } } @@ -2758,18 +2939,21 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup bridgeLog("CLI: Process still running after kill attempts", component: "CLI_SUBPROCESS") return (false, "Process timed out.") } - bridgeLog("CLI: Process finished with exit code: \(process.terminationStatus)", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI: Process finished with exit code: \(process.terminationStatus)", + component: "CLI_SUBPROCESS" + ) let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8) ?? "" let success = !didTimeout && process.terminationStatus == 0 - + if didTimeout { bridgeLog("CLI: Process timed out. Output:\n\(output)", component: "CLI_SUBPROCESS") } else if !success { bridgeLog("CLI: Process failed. Output:\n\(output)", component: "CLI_SUBPROCESS") } - + return (success, output) } catch { bridgeLog("CLI: Failed to run command: \(error)", component: "CLI_SUBPROCESS") @@ -2789,10 +2973,10 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup return result } - // Pure error-classification helpers for the model-download retry/fallback state - // machine -- static (same pattern as modelDownloadCLIIdleTimeout/modelDownloadSpaceShortfall - // above) so `swift test` can exercise the decision logic directly without a live - // Ollama download in flight (issue #50 / B8). + /// Pure error-classification helpers for the model-download retry/fallback state + /// machine -- static (same pattern as modelDownloadCLIIdleTimeout/modelDownloadSpaceShortfall + /// above) so `swift test` can exercise the decision logic directly without a live + /// Ollama download in flight (issue #50 / B8). static func normalizeModelDownloadErrorMessage(_ message: String) -> String { let cleaned = removeANSIEscapeCodes(message) let lines = cleaned @@ -2841,7 +3025,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup "disk full", "permission denied", "forbidden", - "unauthorized" + "unauthorized", ] if nonRetryable.contains(where: { lowered.contains($0) }) { return false @@ -2857,7 +3041,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup "network", "unreachable", "temporarily", - "stream ended" + "stream ended", ] return retryable.contains(where: { lowered.contains($0) }) } @@ -2870,7 +3054,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup "disk full", "permission denied", "forbidden", - "unauthorized" + "unauthorized", ] if disallow.contains(where: { lowered.contains($0) }) { return false @@ -2885,15 +3069,18 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup "timeout", "temporarily", "network", - "unreachable" + "unreachable", ] return fallbackTriggers.contains(where: { lowered.contains($0) }) } - static func modelDownloadCLIIdleTimeout(from environment: [String: String] = ProcessInfo.processInfo.environment) -> TimeInterval { + static func modelDownloadCLIIdleTimeout(from environment: [String: String] = ProcessInfo.processInfo + .environment) -> TimeInterval + { guard let raw = environment["MARCUT_MODEL_DOWNLOAD_CLI_IDLE_TIMEOUT"], let value = Double(raw), - value > 0 else { + value > 0 + else { return 120.0 } return max(0.1, value) @@ -2978,25 +3165,31 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup let maxAttempts = 3 var lastErrorMessage: String? - for attempt in 1...maxAttempts { + for attempt in 1 ... maxAttempts { do { updateProgress(5.0) // Confirmed server responsiveness - bridgeLog("Starting download for \(modelName) via HTTP (attempt \(attempt)/\(maxAttempts))", component: "MODEL_DOWNLOAD") + bridgeLog( + "Starting download for \(modelName) via HTTP (attempt \(attempt)/\(maxAttempts))", + component: "MODEL_DOWNLOAD" + ) if modelDownloadCancelled { lastErrorMessage = "Model download cancelled." break } let ok = try await pullModelViaHTTP(modelName: modelName, progress: updateProgress) - + if ok { updateProgress(99.0) bridgeLog("Download reported success, refreshing model list...", component: "MODEL_DOWNLOAD") await loadInstalledModels() - + // VERIFICATION: Check if the model is actually in the list // We check for partial match because "llama3.2" might become "llama3.2:latest" if isModelAvailable(modelName) { - bridgeLog("✅ Model \(modelName) verified on disk; waiting for readiness.", component: "MODEL_DOWNLOAD") + bridgeLog( + "✅ Model \(modelName) verified on disk; waiting for readiness.", + component: "MODEL_DOWNLOAD" + ) if await waitForModelReadiness(modelName: modelName, maxAttempts: 12) { updateProgress(100.0) modelDownloadCompletionNotifier(modelName) @@ -3026,7 +3219,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup break } bridgeLog("MODEL_DOWNLOAD attempt \(attempt) failed: \(message)", component: "MODEL_DOWNLOAD") - if attempt < maxAttempts && Self.shouldRetryModelDownload(message: message) { + if attempt < maxAttempts, Self.shouldRetryModelDownload(message: message) { bridgeLog("MODEL_DOWNLOAD: Retrying after error...", component: "MODEL_DOWNLOAD") // Do not force probe (which restarts Ollama) during retry; just ensure it's still running _ = await ensureOllamaRunning(forceProbe: false) @@ -3043,7 +3236,10 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup lastModelDownloadError = "Model download cancelled." return false } - bridgeLog("MODEL_DOWNLOAD: Falling back to CLI pull after HTTP error: \(message)", component: "MODEL_DOWNLOAD") + bridgeLog( + "MODEL_DOWNLOAD: Falling back to CLI pull after HTTP error: \(message)", + component: "MODEL_DOWNLOAD" + ) do { updateProgress(max(lastProgress, 8.0)) let ok = try await pullModelViaCLI(modelName: modelName, progress: updateProgress) @@ -3119,14 +3315,26 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup var completedByDigest: [String: Int64] = [:] if modelDownloadCancelled { - throw NSError(domain: "Ollama", code: NSURLErrorCancelled, userInfo: [NSLocalizedDescriptionKey: "Model download cancelled."]) + throw NSError( + domain: "Ollama", + code: NSURLErrorCancelled, + userInfo: [NSLocalizedDescriptionKey: "Model download cancelled."] + ) } let (stream, response) = try await session.bytes(for: request) guard let httpResponse = response as? HTTPURLResponse else { - throw NSError(domain: "Ollama", code: -1, userInfo: [NSLocalizedDescriptionKey: "Unexpected response from Ollama pull"]) + throw NSError( + domain: "Ollama", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "Unexpected response from Ollama pull"] + ) } guard httpResponse.statusCode == 200 else { - throw NSError(domain: "Ollama", code: httpResponse.statusCode, userInfo: [NSLocalizedDescriptionKey: "Ollama pull failed (HTTP \(httpResponse.statusCode))"]) + throw NSError( + domain: "Ollama", + code: httpResponse.statusCode, + userInfo: [NSLocalizedDescriptionKey: "Ollama pull failed (HTTP \(httpResponse.statusCode))"] + ) } // Show that the HTTP stream is open even before size-based progress is available @@ -3134,7 +3342,11 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup for try await line in stream.lines { if modelDownloadCancelled { - throw NSError(domain: "Ollama", code: NSURLErrorCancelled, userInfo: [NSLocalizedDescriptionKey: "Model download cancelled."]) + throw NSError( + domain: "Ollama", + code: NSURLErrorCancelled, + userInfo: [NSLocalizedDescriptionKey: "Model download cancelled."] + ) } let trimmed = line.trimmingCharacters(in: .whitespacesAndNewlines) guard !trimmed.isEmpty else { continue } @@ -3149,15 +3361,19 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup throw NSError(domain: "Ollama", code: -2, userInfo: [NSLocalizedDescriptionKey: errorMessage]) } if event.status?.lowercased() == "error" { - throw NSError(domain: "Ollama", code: -2, userInfo: [NSLocalizedDescriptionKey: "Ollama reported an error while downloading the model."]) + throw NSError( + domain: "Ollama", + code: -2, + userInfo: [NSLocalizedDescriptionKey: "Ollama reported an error while downloading the model."] + ) } if let status = event.status { // Log status changes for debugging if !status.hasPrefix("pulling") && !status.hasPrefix("downloading") { - bridgeLog("MODEL_DOWNLOAD: Status update: \(status)", component: "MODEL_DOWNLOAD") + bridgeLog("MODEL_DOWNLOAD: Status update: \(status)", component: "MODEL_DOWNLOAD") } - + let lowered = status.lowercased() if lowered.contains("pulling manifest") || lowered.contains("resolving") { @@ -3195,16 +3411,27 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup bridgeLog("❌ MODEL_DOWNLOAD: Stream ended without 'success' status", component: "MODEL_DOWNLOAD") await loadInstalledModels() if isModelAvailable(modelName) { - bridgeLog("MODEL_DOWNLOAD: Model available after stream ended; treating as success", component: "MODEL_DOWNLOAD") + bridgeLog( + "MODEL_DOWNLOAD: Model available after stream ended; treating as success", + component: "MODEL_DOWNLOAD" + ) progress(100.0) return true } - throw NSError(domain: "Ollama", code: -3, userInfo: [NSLocalizedDescriptionKey: "Download stream ended unexpectedly. Please retry."]) + throw NSError( + domain: "Ollama", + code: -3, + userInfo: [NSLocalizedDescriptionKey: "Download stream ended unexpectedly. Please retry."] + ) } private func pullModelViaCLI(modelName: String, progress: @escaping (Double) -> Void) async throws -> Bool { guard let ollamaPath = await prepareOllamaBinary() else { - throw NSError(domain: "Ollama", code: -1, userInfo: [NSLocalizedDescriptionKey: "Ollama binary not found for CLI download."]) + throw NSError( + domain: "Ollama", + code: -1, + userInfo: [NSLocalizedDescriptionKey: "Ollama binary not found for CLI download."] + ) } let environment = getOllamaEnvironment() @@ -3276,11 +3503,15 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup outputState.buffer.append(chunk) let endsWithNewline = outputState.buffer.last?.isNewline == true - let parts = outputState.buffer.split(omittingEmptySubsequences: false, whereSeparator: { $0.isNewline }) + let parts = outputState.buffer.split( + omittingEmptySubsequences: false, + whereSeparator: { $0.isNewline } + ) let completeLines = endsWithNewline ? parts : parts.dropLast() for line in completeLines { - let cleaned = removeANSIEscapeCodes(String(line)).trimmingCharacters(in: .whitespacesAndNewlines) + let cleaned = removeANSIEscapeCodes(String(line)) + .trimmingCharacters(in: .whitespacesAndNewlines) guard !cleaned.isEmpty else { continue } bridgeLog("MODEL_DOWNLOAD CLI: \(cleaned)", component: "MODEL_DOWNLOAD") if let value = parseOllamaPullProgressLine(cleaned) { @@ -3301,7 +3532,10 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup guard idleFor >= idleTimeout else { return } let message = "Ollama pull stalled with no output for \(Int(idleFor)) seconds. Please try again." outputState.setStallMessage(message) - bridgeLog("MODEL_DOWNLOAD CLI stalled; terminating process PID \(process.processIdentifier): \(message)", component: "MODEL_DOWNLOAD") + bridgeLog( + "MODEL_DOWNLOAD CLI stalled; terminating process PID \(process.processIdentifier): \(message)", + component: "MODEL_DOWNLOAD" + ) process.terminate() } idleTimer.resume() @@ -3315,10 +3549,11 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup } } - outputQueue.sync { } + outputQueue.sync {} if !outputState.buffer.isEmpty { - let finalLine = removeANSIEscapeCodes(outputState.buffer).trimmingCharacters(in: .whitespacesAndNewlines) + let finalLine = removeANSIEscapeCodes(outputState.buffer) + .trimmingCharacters(in: .whitespacesAndNewlines) if !finalLine.isEmpty { bridgeLog("MODEL_DOWNLOAD CLI: \(finalLine)", component: "MODEL_DOWNLOAD") if let value = parseOllamaPullProgressLine(finalLine) { @@ -3334,14 +3569,22 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup return } if let stallMessage = outputState.takeStallMessage() { - continuation.resume(throwing: NSError(domain: "Ollama", code: -4, userInfo: [NSLocalizedDescriptionKey: stallMessage])) + continuation.resume(throwing: NSError( + domain: "Ollama", + code: -4, + userInfo: [NSLocalizedDescriptionKey: stallMessage] + )) } else if process.terminationStatus == 0 { continuation.resume(returning: true) } else { let message = sanitizedOutput.isEmpty ? "Ollama pull failed with exit code \(process.terminationStatus)." : sanitizedOutput - continuation.resume(throwing: NSError(domain: "Ollama", code: Int(process.terminationStatus), userInfo: [NSLocalizedDescriptionKey: message])) + continuation.resume(throwing: NSError( + domain: "Ollama", + code: Int(process.terminationStatus), + userInfo: [NSLocalizedDescriptionKey: message] + )) } } @@ -3364,8 +3607,9 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup private func loadInstalledModels() async { if let (code, data) = try? await ollamaHTTP(path: "/api/tags", timeout: 2.0), code == 200, - let data = data, - let names = parseModelList(from: data) { + let data, + let names = parseModelList(from: data) + { await MainActor.run { self.installedModels = names } @@ -3408,7 +3652,8 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup private func parseModelList(from data: Data) -> [String]? { guard let object = try? JSONSerialization.jsonObject(with: data) as? [String: Any], - let models = object["models"] as? [[String: Any]] else { + let models = object["models"] as? [[String: Any]] + else { return nil } return models.compactMap { $0["name"] as? String } @@ -3418,8 +3663,12 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup var models: [String] = [] for line in output.split(whereSeparator: { $0.isNewline }) { let trimmed = line.trimmingCharacters(in: .whitespaces) - if trimmed.isEmpty { continue } - if trimmed.lowercased().hasPrefix("name") { continue } + if trimmed.isEmpty { + continue + } + if trimmed.lowercased().hasPrefix("name") { + continue + } let components = trimmed.split(separator: " ", omittingEmptySubsequences: true) if let first = components.first { models.append(String(first)) @@ -3439,10 +3688,12 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup activeModelDownloadProcess = nil } - func cancelProcess(for documentId: UUID) { if let process = activeProcesses[documentId] { - bridgeLog("Cancelling active process for document ID: \(documentId) (PID: \(process.processIdentifier))", component: "Cancellation") + bridgeLog( + "Cancelling active process for document ID: \(documentId) (PID: \(process.processIdentifier))", + component: "Cancellation" + ) process.terminate() activeProcesses.removeValue(forKey: documentId) } else { @@ -3498,7 +3749,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup let discovered = await Task.detached { ModelPromotion.discoverModels(in: modelsDir) }.value - + if !discovered.isEmpty { installedModels = Array(discovered).sorted() prefetchedFromDisk = true @@ -3514,7 +3765,8 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup if let attributes = try? fm.attributesOfItem(atPath: url.path), let fileSize = attributes[.size] as? Int64, fileSize > 0, - let handle = try? FileHandle(forWritingTo: url) { + let handle = try? FileHandle(forWritingTo: url) + { do { try handle.seek(toOffset: 0) let chunkSize = 1_048_576 @@ -3542,7 +3794,12 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup let fm = FileManager.default let dir = workDirectory if fm.fileExists(atPath: dir.path) { - if let enumerator = fm.enumerator(at: dir, includingPropertiesForKeys: [.isDirectoryKey], options: [], errorHandler: nil) { + if let enumerator = fm.enumerator( + at: dir, + includingPropertiesForKeys: [.isDirectoryKey], + options: [], + errorHandler: nil + ) { for case let fileURL as URL in enumerator { var isDirectory: ObjCBool = false if fm.fileExists(atPath: fileURL.path, isDirectory: &isDirectory) { @@ -3568,7 +3825,7 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup let candidates = [ workDirectory.appendingPathComponent("\(baseName)_input.docx"), workDirectory.appendingPathComponent("\(baseName)_redacted.docx"), - workDirectory.appendingPathComponent("\(baseName)_report.json") + workDirectory.appendingPathComponent("\(baseName)_report.json"), ] for url in candidates { secureRemoveFile(at: url) @@ -3579,7 +3836,6 @@ CLI Error: Input file '\(displayInput)' is outside the sandboxed Application Sup // MARK: - CLI Subprocess Implementation (Hybrid Approach) extension PythonBridgeService { - /// Run redaction using CLI subprocess with MARCUT_PROGRESS protocol for non-blocking execution /// This provides true non-blocking behavior while using the same pipeline as CLI func runRedactionWithCLI( @@ -3607,7 +3863,7 @@ extension PythonBridgeService { let possiblePaths = [ "\(bundlePath)/Contents/Resources/marcut_cli_launcher.sh", "\(bundlePath)/../MarcutApp/Contents/Resources/marcut_cli_launcher.sh", - "\(bundlePath)/../../MarcutApp/Contents/Resources/marcut_cli_launcher.sh" + "\(bundlePath)/../../MarcutApp/Contents/Resources/marcut_cli_launcher.sh", ] scriptPath = possiblePaths.first { FileManager.default.fileExists(atPath: $0) } ?? possiblePaths[0] @@ -3657,12 +3913,18 @@ extension PythonBridgeService { } else { environment["TMPDIR"] = robustTmpDir.path environment["OLLAMA_TMPDIR"] = robustTmpDir.path - bridgeLog("CLI: ⚠️ CLI temp dir not exec-capable, using base: \(robustTmpDir.path)", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI: ⚠️ CLI temp dir not exec-capable, using base: \(robustTmpDir.path)", + component: "CLI_SUBPROCESS" + ) } } catch { environment["TMPDIR"] = robustTmpDir.path environment["OLLAMA_TMPDIR"] = robustTmpDir.path - bridgeLog("CLI: ⚠️ Failed to prepare CLI temp dir (\(runTmpDir.path)): \(error)", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI: ⚠️ Failed to prepare CLI temp dir (\(runTmpDir.path)): \(error)", + component: "CLI_SUBPROCESS" + ) } } else { bridgeLog("CLI: ⚠️ Failed to prepare robust TMPDIR, fallback to inherited", component: "CLI_SUBPROCESS") @@ -3684,7 +3946,7 @@ extension PythonBridgeService { "--backend", resolvedBackend, "--model", resolvedModel, "--llm-skip-confidence", String(llmSkipConfidence), - "--llm-concurrency", String(llmConcurrency) + "--llm-concurrency", String(llmConcurrency), ] if debug { @@ -3701,7 +3963,10 @@ extension PythonBridgeService { process.standardError = stderrPipe // Log subprocess details for debugging - bridgeLog("CLI subprocess command: \(process.executableURL!.path) \(process.arguments!.joined(separator: " "))", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI subprocess command: \(process.executableURL!.path) \(process.arguments!.joined(separator: " "))", + component: "CLI_SUBPROCESS" + ) bridgeLog("Working directory: \(process.currentDirectoryURL!.path)", component: "CLI_SUBPROCESS") let cleanupTempDir = cliTempDir @@ -3736,7 +4001,10 @@ extension PythonBridgeService { stdoutState.buffer.append(chunk) let endsWithNewline = stdoutState.buffer.last?.isNewline == true - let parts = stdoutState.buffer.split(omittingEmptySubsequences: false, whereSeparator: { $0.isNewline }) + let parts = stdoutState.buffer.split( + omittingEmptySubsequences: false, + whereSeparator: { $0.isNewline } + ) let completeLines = endsWithNewline ? parts : parts.dropLast() for line in completeLines { @@ -3771,8 +4039,8 @@ extension PythonBridgeService { stdoutPipe.fileHandleForReading.readabilityHandler = nil stderrPipe.fileHandleForReading.readabilityHandler = nil - outputQueue.sync { } - stderrQueue.sync { } + outputQueue.sync {} + stderrQueue.sync {} let remainingData = stdoutPipe.fileHandleForReading.readDataToEndOfFile() if !remainingData.isEmpty, let remainingString = String(data: remainingData, encoding: .utf8) { @@ -3800,7 +4068,10 @@ extension PythonBridgeService { } let success = process.terminationStatus == 0 - bridgeLog("CLI subprocess completed with status: \(process.terminationStatus)", component: "CLI_SUBPROCESS") + bridgeLog( + "CLI subprocess completed with status: \(process.terminationStatus)", + component: "CLI_SUBPROCESS" + ) if let cleanupTempDir { Self.secureEraseDirectory(cleanupTempDir) @@ -3834,7 +4105,8 @@ extension PythonBridgeService { } if cleanLine.hasPrefix("MARCUT_STATUS:") { - let message = cleanLine.replacingOccurrences(of: "MARCUT_STATUS:", with: "").trimmingCharacters(in: .whitespacesAndNewlines) + let message = cleanLine.replacingOccurrences(of: "MARCUT_STATUS:", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) guard !message.isEmpty else { return } var chunkValue: Int? @@ -3842,7 +4114,8 @@ extension PythonBridgeService { if let match = message.range(of: #"Processing chunk\s+(\d+)/(\d+)"#, options: .regularExpression) { let matched = String(message[match]) - let numbers = matched.replacingOccurrences(of: "Processing chunk", with: "").trimmingCharacters(in: .whitespaces) + let numbers = matched.replacingOccurrences(of: "Processing chunk", with: "") + .trimmingCharacters(in: .whitespaces) let parts = numbers.split(separator: "/").map { String($0).trimmingCharacters(in: .whitespaces) } if parts.count == 2, let c = Int(parts[0]), let t = Int(parts[1]), t > 0 { chunkValue = c @@ -3858,7 +4131,8 @@ extension PythonBridgeService { ) ) } else if cleanLine.hasPrefix("MARCUT_PROGRESS:") { - let progressLine = cleanLine.replacingOccurrences(of: "MARCUT_PROGRESS:", with: "").trimmingCharacters(in: .whitespacesAndNewlines) + let progressLine = cleanLine.replacingOccurrences(of: "MARCUT_PROGRESS:", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) let components = progressLine.components(separatedBy: "|") let phaseName = components.first?.trimmingCharacters(in: .whitespacesAndNewlines) @@ -3903,6 +4177,7 @@ extension PythonBridgeService { } // MARK: - Placeholder implementations for demo + // These would be replaced with actual processing logic extension PythonBridgeService { @@ -3915,7 +4190,6 @@ extension PythonBridgeService { } } } - } // MARK: - Helper Classes @@ -3926,37 +4200,37 @@ private class OllamaLogger: @unchecked Sendable { private let logURL: URL private var fileHandle: FileHandle? private let lock = NSLock() - + init(logURL: URL) { self.logURL = logURL } - + func write(_ data: Data) { lock.lock() defer { lock.unlock() } - + ensureHandleOpen() - + if let handle = fileHandle { try? handle.write(contentsOf: data) } } - + func write(_ string: String) { guard let data = string.data(using: .utf8) else { return } write(data) } - + func flush() { lock.lock() defer { lock.unlock() } try? fileHandle?.synchronize() } - + func close() { lock.lock() defer { lock.unlock() } - + if let handle = fileHandle { try? handle.synchronize() if #available(macOS 10.15.4, *) { @@ -3967,22 +4241,24 @@ private class OllamaLogger: @unchecked Sendable { fileHandle = nil } } - + deinit { // Ensure file handle is closed when logger is deallocated close() } - - // Note: Caller usually ensures directory exists, but we double check file existence + + /// Note: Caller usually ensures directory exists, but we double check file existence private func ensureHandleOpen() { - if fileHandle != nil { return } - + if fileHandle != nil { + return + } + let fm = FileManager.default if !fm.fileExists(atPath: logURL.path) { fm.createFile(atPath: logURL.path, contents: nil) } try? fm.setAttributes([.posixPermissions: NSNumber(value: Int16(0o600))], ofItemAtPath: logURL.path) - + do { let handle = try FileHandle(forWritingTo: logURL) handle.seekToEndOfFile() @@ -3991,8 +4267,8 @@ private class OllamaLogger: @unchecked Sendable { print("[OllamaLogger] Failed to open log handle: \(error)") } } - - // Explicitly open/reopen (useful for startup sequence) + + /// Explicitly open/reopen (useful for startup sequence) func forceOpen() -> Bool { lock.lock() defer { lock.unlock() } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/PythonKitBridge.swift b/src/swift/MarcutApp/Sources/MarcutApp/PythonKitBridge.swift index cf4f153..3d3c4e0 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/PythonKitBridge.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/PythonKitBridge.swift @@ -1,7 +1,7 @@ -import Foundation -import PythonKit import Darwin +import Foundation import Network +import PythonKit struct PythonRunnerProgressUpdate { let phaseIdentifier: String? @@ -94,7 +94,7 @@ private enum PythonSymbolState { "PyGILState_Release", "PyErr_SetInterrupt", "PyErr_CheckSignals", - "PyErr_Clear" + "PyErr_Clear", ] static func registerMissing(_ name: String) { @@ -144,49 +144,66 @@ private func loadPythonSymbol( } private func Py_IsInitialized() -> Int32 { - guard let fn: @convention(c) () -> Int32 = loadPythonSymbol("Py_IsInitialized", as: (@convention(c) () -> Int32).self) else { + guard let fn: @convention(c) () -> Int32 = loadPythonSymbol( + "Py_IsInitialized", + as: (@convention(c) () -> Int32).self + ) else { return 0 } return fn() } private func Py_Initialize() { - guard let fn: @convention(c) () -> Void = loadPythonSymbol("Py_Initialize", as: (@convention(c) () -> Void).self) else { + guard let fn: @convention(c) () -> Void = loadPythonSymbol("Py_Initialize", as: (@convention(c) () -> Void).self) + else { return } fn() } private func PyGILState_Ensure() -> PyGILState_STATE? { - guard let fn: @convention(c) () -> PyGILState_STATE = loadPythonSymbol("PyGILState_Ensure", as: (@convention(c) () -> PyGILState_STATE).self) else { + guard let fn: @convention(c) () -> PyGILState_STATE = loadPythonSymbol( + "PyGILState_Ensure", + as: (@convention(c) () -> PyGILState_STATE).self + ) else { return nil } return fn() } private func PyGILState_Release(_ state: PyGILState_STATE) { - guard let fn: @convention(c) (PyGILState_STATE) -> Void = loadPythonSymbol("PyGILState_Release", as: (@convention(c) (PyGILState_STATE) -> Void).self) else { + guard let fn: @convention(c) (PyGILState_STATE) -> Void = loadPythonSymbol( + "PyGILState_Release", + as: (@convention(c) (PyGILState_STATE) -> Void).self + ) else { return } fn(state) } private func PyErr_SetInterrupt() { - guard let fn: @convention(c) () -> Void = loadPythonSymbol("PyErr_SetInterrupt", as: (@convention(c) () -> Void).self) else { + guard let fn: @convention(c) () -> Void = loadPythonSymbol( + "PyErr_SetInterrupt", + as: (@convention(c) () -> Void).self + ) else { return } fn() } private func PyErr_CheckSignals() -> Int32 { - guard let fn: @convention(c) () -> Int32 = loadPythonSymbol("PyErr_CheckSignals", as: (@convention(c) () -> Int32).self) else { + guard let fn: @convention(c) () -> Int32 = loadPythonSymbol( + "PyErr_CheckSignals", + as: (@convention(c) () -> Int32).self + ) else { return 0 } return fn() } private func PyErr_Clear() { - guard let fn: @convention(c) () -> Void = loadPythonSymbol("PyErr_Clear", as: (@convention(c) () -> Void).self) else { + guard let fn: @convention(c) () -> Void = loadPythonSymbol("PyErr_Clear", as: (@convention(c) () -> Void).self) + else { return } fn() @@ -233,12 +250,14 @@ enum PythonBridgeError: Error, CustomStringConvertible, LocalizedError { var description: String { switch self { - case .workerStalled(let operation): - return "Embedded Python worker did not respond within the watchdog timeout during '\(operation)'; the runner has been abandoned and will reject further calls until Marcut is restarted." + case let .workerStalled(operation): + "Embedded Python worker did not respond within the watchdog timeout during '\(operation)'; the runner has been abandoned and will reject further calls until Marcut is restarted." } } - var errorDescription: String? { description } + var errorDescription: String? { + description + } } public enum PythonRunOutcome { @@ -269,8 +288,12 @@ private enum PythonTimeoutOverrides { static func disable(for operation: String) -> Bool { let envVars = env() - if envVars["MARCUT_DISABLE_PY_TIMEOUTS"] == "1" { return true } - if envVars["MARCUT_DISABLE_\(operation.uppercased())_TIMEOUT"] == "1" { return true } + if envVars["MARCUT_DISABLE_PY_TIMEOUTS"] == "1" { + return true + } + if envVars["MARCUT_DISABLE_\(operation.uppercased())_TIMEOUT"] == "1" { + return true + } return false } @@ -291,8 +314,8 @@ private enum PythonTimeoutOverrides { } } -// Internal (not private) so the watchdog behavior below is directly unit-testable via -// `@testable import MarcutApp` without needing a live embedded CPython interpreter. +/// Internal (not private) so the watchdog behavior below is directly unit-testable via +/// `@testable import MarcutApp` without needing a live embedded CPython interpreter. final class PythonWorkerThread: Thread { private let condition = NSCondition() private var tasks: [() -> Void] = [] @@ -383,7 +406,7 @@ final class PythonWorkerThread: Thread { var result: Result! enqueue { do { - result = .success(try work()) + result = try .success(work()) } catch { result = .failure(error) } @@ -407,7 +430,9 @@ final class PythonWorkerThread: Thread { // Fire-and-forget calls (e.g. broadcasting cancellation) don't block a caller, so a // stalled worker can't hang anything here -- but skip enqueueing anyway so the task // queue on an already-abandoned thread doesn't grow forever. - if isCurrentlyStalled() { return } + if isCurrentlyStalled() { + return + } enqueue(work) } } @@ -416,7 +441,7 @@ private func pythonSetupTracingEnabled() -> Bool { ProcessInfo.processInfo.environment["MARCUT_TRACE_PY_SETUP"] == "1" } -public final class PythonRuntime { +public enum PythonRuntime { static func resolvedOllamaHost() -> String { loopbackHost( from: ProcessInfo.processInfo.environment["MARCUT_OLLAMA_HOST"], @@ -439,10 +464,12 @@ public final class PythonRuntime { } let parts = hostPort.split(separator: ":") if let last = parts.last, parts.count >= 2, - let parsed = Int(last), (1...65535).contains(parsed) { + let parsed = Int(last), (1 ... 65535).contains(parsed) + { port = parsed } else if parts.count == 1, - let parsed = Int(parts[0]), (1...65535).contains(parsed) { + let parsed = Int(parts[0]), (1 ... 65535).contains(parsed) + { port = parsed } } @@ -453,11 +480,10 @@ public final class PythonRuntime { static func checkOllamaPort(_ port: UInt16 = 11434) -> Bool { let hostString = resolvedOllamaHost() let components = hostString.split(separator: ":") - let resolvedPort: UInt16 - if components.count == 2, let parsed = UInt16(components[1]) { - resolvedPort = parsed + let resolvedPort: UInt16 = if components.count == 2, let parsed = UInt16(components[1]) { + parsed } else { - resolvedPort = port + port } let group = DispatchGroup() @@ -523,7 +549,9 @@ public final class PythonRuntime { let isOllamaRunning = checkOllamaPort() let checkTime = Date().timeIntervalSince(start) - logger("PK_FAST_CHECK: Ollama \(isOllamaRunning ? "running" : "not running") host=\(hostString) (\(String(format: "%.0f", checkTime * 1000))ms total)") + logger( + "PK_FAST_CHECK: Ollama \(isOllamaRunning ? "running" : "not running") host=\(hostString) (\(String(format: "%.0f", checkTime * 1000))ms total)" + ) return isOllamaRunning } @@ -546,7 +574,9 @@ public final class PythonRuntime { } } - appendCandidate(label: "private frameworks") { Bundle.main.privateFrameworksURL?.appendingPathComponent("Python.framework") } + appendCandidate(label: "private frameworks") { + Bundle.main.privateFrameworksURL?.appendingPathComponent("Python.framework") + } appendCandidate(label: "app/Contents/Frameworks") { bundleURL .appendingPathComponent("Contents", isDirectory: true) @@ -591,7 +621,11 @@ public final class PythonRuntime { var pythonVersionDir = currentLink if let resolved = try? FileManager.default.destinationOfSymbolicLink(atPath: currentLink.path) { pythonVersionDir = URL(fileURLWithPath: resolved, relativeTo: versionsDir) - } else if let firstVersion = try? FileManager.default.contentsOfDirectory(at: versionsDir, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]).first(where: { $0.lastPathComponent.contains(".") }) { + } else if let firstVersion = try? FileManager.default.contentsOfDirectory( + at: versionsDir, + includingPropertiesForKeys: nil, + options: [.skipsHiddenFiles] + ).first(where: { $0.lastPathComponent.contains(".") }) { pythonVersionDir = firstVersion } else { pythonVersionDir = versionsDir.appendingPathComponent("3.10") @@ -614,7 +648,10 @@ public final class PythonRuntime { var siteCandidates: [URL] = [] if let resourcePath = Bundle.main.resourcePath { - siteCandidates.append(URL(fileURLWithPath: resourcePath).appendingPathComponent("python_site", isDirectory: true)) + siteCandidates.append(URL(fileURLWithPath: resourcePath).appendingPathComponent( + "python_site", + isDirectory: true + )) } siteCandidates.append( @@ -647,7 +684,6 @@ public final class PythonRuntime { ) } - private static func sanitizeProcessEnvironment(logger: (String) -> Void) { let keysToUnset = [ "PYTHONHOME", @@ -662,7 +698,7 @@ public final class PythonRuntime { "PYENV_ROOT", "CONDA_PREFIX", "CONDA_DEFAULT_ENV", - "VIRTUAL_ENV" + "VIRTUAL_ENV", ] for key in keysToUnset { @@ -692,12 +728,13 @@ public final class PythonRuntime { @discardableResult public static func initialize(logger: (String) -> Void) throws -> PythonRuntimeConfig { let startTime = Date() - let totalTimeout: TimeInterval = 30.0 // 30s total + let totalTimeout: TimeInterval = 30.0 // 30s total func checkTimeout(step: String) throws { let elapsed = Date().timeIntervalSince(startTime) if elapsed > totalTimeout { - throw PythonInitError.timeout("Total timeout exceeded (\(elapsed)s > \(totalTimeout)s) at step: \(step)") + throw PythonInitError + .timeout("Total timeout exceeded (\(elapsed)s > \(totalTimeout)s) at step: \(step)") } } @@ -757,7 +794,7 @@ public final class PythonRuntime { do { if FileManager.default.fileExists(atPath: tempDir.path) { Self.secureEraseDirectory(tempDir, logger: logger) - // Re-create it immediately so it's ready for next use, or just leave it gone? + // Re-create it immediately so it's ready for next use, or just leave it gone? // Leaving it gone is fine, but if we run another job, does it need it? // The environment variable TMPDIR is still set to this path for the process. // It is safer to re-create the empty directory so subsequent calls don't fail if they assume existence. @@ -773,10 +810,16 @@ public final class PythonRuntime { let fm = FileManager.default guard fm.fileExists(atPath: dir.path) else { return } - if let enumerator = fm.enumerator(at: dir, includingPropertiesForKeys: [.isRegularFileKey], options: [], errorHandler: nil) { + if let enumerator = fm.enumerator( + at: dir, + includingPropertiesForKeys: [.isRegularFileKey], + options: [], + errorHandler: nil + ) { for case let fileURL as URL in enumerator { if let values = try? fileURL.resourceValues(forKeys: [.isRegularFileKey]), - values.isRegularFile == true { + values.isRegularFile == true + { secureEraseFile(fileURL) } } @@ -794,7 +837,8 @@ public final class PythonRuntime { guard let attributes = try? fm.attributesOfItem(atPath: url.path), let size = attributes[.size] as? Int64, size > 0, - let handle = try? FileHandle(forWritingTo: url) else { + let handle = try? FileHandle(forWritingTo: url) + else { try? fm.removeItem(at: url) return } @@ -834,7 +878,7 @@ public final class PythonKitRunner { "MARCUT_RULE_FILTER", "MARCUT_EXCLUDED_WORDS_PATH", "MARCUT_SYSTEM_PROMPT_PATH", - "MARCUT_LOG_PATH" + "MARCUT_LOG_PATH", ] /// Resolves the outer bridge-level watchdog bound for `operation`, or `nil` for an @@ -852,7 +896,10 @@ public final class PythonKitRunner { worker.waitUntilReady() let initTimeout = Self.watchdogTimeout(for: "PYTHON_INIT", default: 60.0) - let config: PythonRuntimeConfig = try worker.performWithWatchdog(timeout: initTimeout, operation: "python_init") { + let config: PythonRuntimeConfig = try worker.performWithWatchdog( + timeout: initTimeout, + operation: "python_init" + ) { try PythonRuntime.initialize(logger: logger) } self.cfg = config @@ -1016,7 +1063,7 @@ public final class PythonKitRunner { "os", "lxml", "docx", - "marcut.pipeline" + "marcut.pipeline", ] for name in modules { @@ -1069,7 +1116,8 @@ public final class PythonKitRunner { let timersEnabled = !disableTimeouts if timersEnabled && elapsed > totalTimeout { - throw PythonInitError.timeout("Total timeout exceeded (\(elapsed)s > \(totalTimeout)s) during: \(operation)") + throw PythonInitError + .timeout("Total timeout exceeded (\(elapsed)s > \(totalTimeout)s) during: \(operation)") } if pythonSetupTracingEnabled() || operationKey == "ENV_SETUP" { @@ -1113,7 +1161,7 @@ public final class PythonKitRunner { } let operationElapsed = Date().timeIntervalSince(operationStart) - if timersEnabled && operationElapsed > stepTimeout { + if timersEnabled, operationElapsed > stepTimeout { logger("PK_\(operationKey)_TIMEOUT: \(String(format: "%.2f", operationElapsed))s > \(stepTimeout)s") throw PythonInitError.timeout("Step timeout: \(operation) took \(operationElapsed)s > \(stepTimeout)s") } @@ -1128,7 +1176,7 @@ public final class PythonKitRunner { outputPath: String, reportPath: String, debug: Bool, - cancellationChecker: @escaping () -> Bool + cancellationChecker _: @escaping () -> Bool ) -> PythonRunOutcome { let startTime = Date() _ = startNewRunToken() @@ -1238,9 +1286,10 @@ public final class PythonKitRunner { } catch { let totalElapsed = Date().timeIntervalSince(startTime) logger("PK_RULES_MOCK_ERROR: \(error) total=\(String(format: "%.2f", totalElapsed))s") - if case PythonError.exception(let exc, _) = error, + if case let PythonError.exception(exc, _) = error, let description = String(exc), - description.contains("KeyboardInterrupt") { + description.contains("KeyboardInterrupt") + { return .cancelled } return .failure @@ -1261,7 +1310,7 @@ public final class PythonKitRunner { temperature: Double = 0.1, seed: Int = 42, processingStepTimeout: TimeInterval? = nil, - cancellationChecker: @escaping () -> Bool, + cancellationChecker _: @escaping () -> Bool, heartbeat: ((PythonRunnerProgressUpdate) -> Void)? = nil ) -> PythonRunOutcome { let startTime = Date() @@ -1271,7 +1320,7 @@ public final class PythonKitRunner { logger("PK_ENHANCED_OLLAMA_START: model=\(model) mode=\(normalizedMode) needs_ollama=\(needsOllama)") // Skip environment check for rules-only mode - if needsOllama && !PythonRuntime.fastEnvironmentCheck(logger: logger) { + if needsOllama, !PythonRuntime.fastEnvironmentCheck(logger: logger) { let host = PythonRuntime.resolvedOllamaHost() logger("PK_ENHANCED_OLLAMA_ERROR: Fast environment check failed host=\(host)") return .failure @@ -1300,17 +1349,17 @@ public final class PythonKitRunner { let host = PythonRuntime.resolvedOllamaHost() py_os.environ["OLLAMA_HOST"] = PythonObject(host) py_os.environ["MARCUT_OLLAMA_HOST"] = PythonObject(host) - logger("PK_ENV_SETUP_RESOLVED_HOST: \(host)") - py_os.environ["HTTP_PROXY"] = "" - py_os.environ["HTTPS_PROXY"] = "" - py_os.environ["ALL_PROXY"] = "" - py_os.environ["NO_PROXY"] = "127.0.0.1,localhost" - py_os.environ["http_proxy"] = "" + logger("PK_ENV_SETUP_RESOLVED_HOST: \(host)") + py_os.environ["HTTP_PROXY"] = "" + py_os.environ["HTTPS_PROXY"] = "" + py_os.environ["ALL_PROXY"] = "" + py_os.environ["NO_PROXY"] = "127.0.0.1,localhost" + py_os.environ["http_proxy"] = "" py_os.environ["https_proxy"] = "" py_os.environ["all_proxy"] = "" py_os.environ["no_proxy"] = "127.0.0.1,localhost" py_os.environ["NO_COLOR"] = "1" - logger("PK_ENV_SETUP_READY") + logger("PK_ENV_SETUP_READY") // Phase 2: Heavy imports let importsStepTimeout = PythonTimeoutOverrides.step(for: "IMPORTS", default: 180.0) @@ -1375,8 +1424,8 @@ public final class PythonKitRunner { ) { try checkCancellation() let progressCallback: PythonObject = { - guard let heartbeat = heartbeat else { return Python.None } - let function = PythonFunction { args, kwargs in + guard let heartbeat else { return Python.None } + let function = PythonFunction { args, _ in guard let firstArg = args.first else { return Python.None } @@ -1444,7 +1493,7 @@ public final class PythonKitRunner { return .cancelled } catch { let totalElapsed = Date().timeIntervalSince(startTime) - if case PythonError.exception(let exc, _) = error { + if case let PythonError.exception(exc, _) = error { let typeName = (exc.__class__.__name__).toOptionalString() ?? "UnknownPythonException" let message = exc.toOptionalString() ?? "n/a" var tracebackSummary = "" @@ -1457,16 +1506,19 @@ public final class PythonKitRunner { logger("PK_ENHANCED_OLLAMA_PYERROR: type=\(typeName) message=\(message) traceback=\(tracebackSummary)") } logger("PK_ENHANCED_OLLAMA_ERROR: \(error) total=\(String(format: "%.2f", totalElapsed))s") - if case PythonError.exception(let exc, _) = error, + if case let PythonError.exception(exc, _) = error, let description = String(exc), - description.contains("KeyboardInterrupt") { + description.contains("KeyboardInterrupt") + { return .cancelled } return .failure } } - private func scheduleTimeout(for operationKey: String, seconds: TimeInterval, runToken: UUID) -> Task? { + private func scheduleTimeout(for operationKey: String, seconds: TimeInterval, + runToken: UUID) -> Task? + { guard seconds > 0 else { return nil } // Capture handler to avoid Sendable warnings let handler = self.handleTimeoutTrigger @@ -1532,7 +1584,10 @@ public final class PythonKitRunner { guard let self else { return PythonRunOutcome.failure } let outcome: PythonRunOutcome do { - outcome = try self.worker.performWithWatchdog(timeout: enhancedWatchdogTimeout, operation: "enhanced_ollama") { + outcome = try self.worker.performWithWatchdog( + timeout: enhancedWatchdogTimeout, + operation: "enhanced_ollama" + ) { self.externalCancellationChecker = cancellationChecker defer { self.externalCancellationChecker = nil @@ -1593,7 +1648,7 @@ public final class PythonKitRunner { guard let self else { return PythonRunOutcome.failure } // Simulated progress for deterministic mode let totalSteps = 5 - for step in 1...totalSteps { + for step in 1 ... totalSteps { if cancellationChecker() { streamContinuation.continuation.finish() return .cancelled @@ -1663,7 +1718,10 @@ public final class PythonKitRunner { // `PythonBridgeError`) -- this is a fast, deterministic, non-LLM operation, so a // generous-but-finite bound is enough to catch a genuine hang without false positives. let scrubWatchdogTimeout = Self.watchdogTimeout(for: "METADATA_SCRUB", default: 120.0) - let result: (Bool, String?, [String: Any]?) = try worker.performWithWatchdog(timeout: scrubWatchdogTimeout, operation: "metadata_scrub") { [logger, self] in + let result: (Bool, String?, [String: Any]?) = try worker.performWithWatchdog( + timeout: scrubWatchdogTimeout, + operation: "metadata_scrub" + ) { [logger, self] in guard let state = PyGILState_Ensure() else { let missing = PythonSymbolState.missingList().joined(separator: ", ") let detail = missing.isEmpty ? "Missing CPython symbols" : "Missing CPython symbols: \(missing)" @@ -1678,7 +1736,7 @@ public final class PythonKitRunner { } else { PyErr_Clear() } - + do { let py_os = try Python.attemptImport("os") self.syncEmbeddedEnvToPython(py_os) @@ -1690,12 +1748,12 @@ public final class PythonKitRunner { "debug": false, ] ) - + // Parse tuple result (success: bool, error: str, report: dict) if Bool(Python.isinstance(rawResult, Python.tuple)) == true { let success = Bool(rawResult[0]) == true let errorMsg = String(rawResult[1]) ?? "" - + // Extract report dictionary (full payload with groups) via JSON serialization var reportDict: [String: Any]? = nil let pyReport = rawResult[2] @@ -1704,14 +1762,15 @@ public final class PythonKitRunner { let json = try Python.attemptImport("json") let jsonString = String(json.dumps(pyReport)) ?? "" if let data = jsonString.data(using: .utf8), - let obj = try JSONSerialization.jsonObject(with: data) as? [String: Any] { + let obj = try JSONSerialization.jsonObject(with: data) as? [String: Any] + { reportDict = obj } } catch { reportDict = nil } } - + return (success, errorMsg.isEmpty ? nil : errorMsg, reportDict) } return (false, "Unexpected result from Python", nil) @@ -1720,7 +1779,7 @@ public final class PythonKitRunner { return (false, "Python error: \(error)", nil) } } - + let totalElapsed = Date().timeIntervalSince(startTime) if result.0 { logger("PK_METADATA_SCRUB_OK total=\(String(format: "%.2f", totalElapsed))s") @@ -1733,7 +1792,7 @@ public final class PythonKitRunner { } else { logger("PK_METADATA_SCRUB_FAILED: \(result.1 ?? "Unknown") total=\(String(format: "%.2f", totalElapsed))s") } - + return result } @@ -1746,7 +1805,10 @@ public final class PythonKitRunner { // Same bridge-level watchdog rationale as `scrubMetadataOnlyAsync` above. let reportWatchdogTimeout = Self.watchdogTimeout(for: "METADATA_REPORT", default: 120.0) - let result: (Bool, String?, [String: Any]?, String?, String?) = try worker.performWithWatchdog(timeout: reportWatchdogTimeout, operation: "metadata_report") { [logger, self] in + let result: (Bool, String?, [String: Any]?, String?, String?) = try worker.performWithWatchdog( + timeout: reportWatchdogTimeout, + operation: "metadata_report" + ) { [logger, self] in guard let state = PyGILState_Ensure() else { let missing = PythonSymbolState.missingList().joined(separator: ", ") let detail = missing.isEmpty ? "Missing CPython symbols" : "Missing CPython symbols: \(missing)" @@ -1784,7 +1846,8 @@ public final class PythonKitRunner { let json = try Python.attemptImport("json") let jsonString = String(json.dumps(pyReport)) ?? "" if let data = jsonString.data(using: .utf8), - let obj = try JSONSerialization.jsonObject(with: data) as? [String: Any] { + let obj = try JSONSerialization.jsonObject(with: data) as? [String: Any] + { reportDict = obj } } catch { @@ -1792,7 +1855,13 @@ public final class PythonKitRunner { } } let htmlPath = String(rawResult[4]) ?? "" - return (success, errorMsg.isEmpty ? nil : errorMsg, reportDict, String(rawResult[3]) ?? "", htmlPath) + return ( + success, + errorMsg.isEmpty ? nil : errorMsg, + reportDict, + String(rawResult[3]) ?? "", + htmlPath + ) } return (false, "Unexpected result from Python", nil, "", "") } catch { @@ -1815,7 +1884,10 @@ public final class PythonKitRunner { do { // Same bridge-level watchdog rationale as the metadata paths above. let htmlWatchdogTimeout = Self.watchdogTimeout(for: "GENERATE_SCRUB_HTML", default: 60.0) - let htmlPath: String = try worker.performWithWatchdog(timeout: htmlWatchdogTimeout, operation: "generate_scrub_html") { [logger] in + let htmlPath: String = try worker.performWithWatchdog( + timeout: htmlWatchdogTimeout, + operation: "generate_scrub_html" + ) { [logger] in guard let state = PyGILState_Ensure() else { let missing = PythonSymbolState.missingList().joined(separator: ", ") let detail = missing.isEmpty ? "Missing CPython symbols" : "Missing CPython symbols: \(missing)" diff --git a/src/swift/MarcutApp/Sources/MarcutApp/ReportViewer.swift b/src/swift/MarcutApp/Sources/MarcutApp/ReportViewer.swift index c9d3b73..9987994 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/ReportViewer.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/ReportViewer.swift @@ -1,8 +1,8 @@ -import SwiftUI -import WebKit import AppKit -import Security import Foundation +import Security +import SwiftUI +import WebKit private enum ReportDisclosureAction { case print @@ -43,7 +43,7 @@ struct ReportViewer: View { .buttonStyle(.bordered) .controlSize(.regular) .frame(width: 100, height: 32) - + Button { confirmDisclosure(.share) } label: { @@ -51,8 +51,8 @@ struct ReportViewer: View { } .buttonStyle(.bordered) .controlSize(.regular) - .frame(width: 100, height: 32) - + .frame(width: 100, height: 32) + Button { showBurnConfirm = true } label: { @@ -110,11 +110,17 @@ struct ReportViewer: View { pendingDisclosureAction = nil } } message: { - Text("Audit and metadata reports may include original detected text, filenames, document metadata, and forensic artifacts. Share or print only to approved destinations.") + Text( + "Audit and metadata reports may include original detected text, filenames, document metadata, and forensic artifacts. Share or print only to approved destinations." + ) } .alert("Burn Failed", isPresented: Binding( get: { burnErrorMessage != nil }, - set: { if !$0 { burnErrorMessage = nil } } + set: { + if !$0 { + burnErrorMessage = nil + } + } )) { Button("OK", role: .cancel) {} } message: { @@ -122,7 +128,11 @@ struct ReportViewer: View { } .alert("File Not Found", isPresented: Binding( get: { openBinaryErrorMessage != nil }, - set: { if !$0 { openBinaryErrorMessage = nil } } + set: { + if !$0 { + openBinaryErrorMessage = nil + } + } )) { Button("OK", role: .cancel) {} } message: { @@ -245,7 +255,8 @@ struct ReportViewer: View { guard FileManager.default.fileExists(atPath: jsonURL.path) else { return [] } guard let data = try? Data(contentsOf: jsonURL), let json = try? JSONSerialization.jsonObject(with: data, options: []), - let payload = json as? [String: Any] else { + let payload = json as? [String: Any] + else { return [] } let reportDir = jsonURL.deletingLastPathComponent() @@ -274,11 +285,13 @@ struct ReportViewer: View { let fm = FileManager.default var isDirectory: ObjCBool = false guard fm.fileExists(atPath: binariesDir.path, isDirectory: &isDirectory), - isDirectory.boolValue else { + isDirectory.boolValue + else { return } if let contents = try? fm.contentsOfDirectory(at: binariesDir, includingPropertiesForKeys: nil), - contents.isEmpty { + contents.isEmpty + { try? fm.removeItem(at: binariesDir) } } @@ -310,7 +323,12 @@ struct ReportViewer: View { guard fm.fileExists(atPath: url.path, isDirectory: &isDirectory), isDirectory.boolValue else { return } - if let enumerator = fm.enumerator(at: url, includingPropertiesForKeys: [.isRegularFileKey], options: [], errorHandler: nil) { + if let enumerator = fm.enumerator( + at: url, + includingPropertiesForKeys: [.isRegularFileKey], + options: [], + errorHandler: nil + ) { for case let fileURL as URL in enumerator { let isRegular = (try? fileURL.resourceValues(forKeys: [.isRegularFileKey]))?.isRegularFile ?? false if isRegular { @@ -326,8 +344,8 @@ struct ReportViewer: View { let status = SecRandomCopyBytes(kSecRandomDefault, buffer.count, &buffer) if status != errSecSuccess { var generator = SystemRandomNumberGenerator() - for i in 0.. Void func makeCoordinator() -> Coordinator { - Coordinator(state: state, onPrintRequest: onPrintRequest, onShareRequest: onShareRequest, onBurnRequest: onBurnRequest, onOpenBinary: onOpenBinary) + Coordinator( + state: state, + onPrintRequest: onPrintRequest, + onShareRequest: onShareRequest, + onBurnRequest: onBurnRequest, + onOpenBinary: onOpenBinary + ) } func makeNSView(context: Context) -> WKWebView { @@ -476,7 +502,13 @@ struct ReportWebView: NSViewRepresentable { private let onOpenBinary: (String) -> Void var readAccessRootURL: URL? - init(state: ReportWebViewState, onPrintRequest: @escaping () -> Void, onShareRequest: @escaping () -> Void, onBurnRequest: @escaping () -> Void, onOpenBinary: @escaping (String) -> Void) { + init( + state: ReportWebViewState, + onPrintRequest: @escaping () -> Void, + onShareRequest: @escaping () -> Void, + onBurnRequest: @escaping () -> Void, + onOpenBinary: @escaping (String) -> Void + ) { self.state = state self.onPrintRequest = onPrintRequest self.onShareRequest = onShareRequest @@ -484,10 +516,11 @@ struct ReportWebView: NSViewRepresentable { self.onOpenBinary = onOpenBinary } - func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { + func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) { guard message.name == Coordinator.reportActionHandlerName else { return } if let body = message.body as? [String: Any], - let action = body["action"] as? String { + let action = body["action"] as? String + { switch action { case "print": onPrintRequest() @@ -514,9 +547,9 @@ struct ReportWebView: NSViewRepresentable { func webView( _ webView: WKWebView, - createWebViewWith configuration: WKWebViewConfiguration, + createWebViewWith _: WKWebViewConfiguration, for navigationAction: WKNavigationAction, - windowFeatures: WKWindowFeatures + windowFeatures _: WKWindowFeatures ) -> WKWebView? { if navigationAction.targetFrame == nil { if let targetURL = navigationAction.request.url, targetURL.isFileURL { @@ -529,19 +562,19 @@ struct ReportWebView: NSViewRepresentable { return nil } - func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { + func webView(_ webView: WKWebView, didStartProvisionalNavigation _: WKNavigation!) { state.canGoBack = webView.canGoBack } - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + func webView(_ webView: WKWebView, didFinish _: WKNavigation!) { state.canGoBack = webView.canGoBack } - func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { + func webView(_ webView: WKWebView, didFail _: WKNavigation!, withError _: Error) { state.canGoBack = webView.canGoBack } - func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { + func webView(_ webView: WKWebView, didFailProvisionalNavigation _: WKNavigation!, withError _: Error) { state.canGoBack = webView.canGoBack } } @@ -570,7 +603,7 @@ struct SharePickerButton: NSViewRepresentable { return button } - func updateNSView(_ nsView: NSButton, context: Context) { + func updateNSView(_: NSButton, context: Context) { context.coordinator.url = url } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/SettingsView.swift b/src/swift/MarcutApp/Sources/MarcutApp/SettingsView.swift index 7f6d51b..d7d364b 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/SettingsView.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/SettingsView.swift @@ -1,34 +1,34 @@ -import SwiftUI import AppKit +import SwiftUI import UniformTypeIdentifiers /// App appearance theme preference enum AppTheme: String, CaseIterable { - case system = "system" - case light = "light" - case dark = "dark" + case system + case light + case dark var displayName: String { switch self { - case .system: return "Follow System" - case .light: return "Light" - case .dark: return "Dark" + case .system: "Follow System" + case .light: "Light" + case .dark: "Dark" } } var appearance: NSAppearance? { switch self { - case .system: return nil - case .light: return NSAppearance(named: .aqua) - case .dark: return NSAppearance(named: .darkAqua) + case .system: nil + case .light: NSAppearance(named: .aqua) + case .dark: NSAppearance(named: .darkAqua) } } var colorScheme: ColorScheme? { switch self { - case .system: return nil - case .light: return .light - case .dark: return .dark + case .system: nil + case .light: .light + case .dark: .dark } } } @@ -58,9 +58,12 @@ struct SettingsView: View { @State private var profileImportSucceeded = false @AppStorage(DefaultsKey.advancedModeEnabled.key) private var isAdvancedModeEnabled = true @AppStorage(DefaultsKey.advancedAIMode.key) private var advancedAIModeRaw = RedactionMode.rulesOverride.rawValue - @AppStorage(DefaultsKey.advancedLLMConfidence.key) private var advancedLlmConfidence = RedactionSettings.standardNormalModeConfidence - @AppStorage(DefaultsKey.outputSaveLocationPreference.key) private var outputSaveLocationRaw = OutputSaveLocation.alwaysAsk.rawValue - @AppStorage(DefaultsKey.unsavedReportQuitBehavior.key) private var unsavedReportQuitBehaviorRaw = UnsavedReportQuitBehavior.warn.rawValue + @AppStorage(DefaultsKey.advancedLLMConfidence.key) private var advancedLlmConfidence = RedactionSettings + .standardNormalModeConfidence + @AppStorage(DefaultsKey.outputSaveLocationPreference.key) private var outputSaveLocationRaw = OutputSaveLocation + .alwaysAsk.rawValue + @AppStorage(DefaultsKey.unsavedReportQuitBehavior.key) private var unsavedReportQuitBehaviorRaw = + UnsavedReportQuitBehavior.warn.rawValue @AppStorage(DefaultsKey.appTheme.key) private var appThemeRaw = AppTheme.system.rawValue @ObservedObject private var permissionManager = PermissionManager.shared private let overridesManager = UserOverridesManager.shared @@ -95,7 +98,7 @@ struct SettingsView: View { private static let sectionLabels: [SettingsSection: [String]] = [ .processingMode: [ "Processing Mode", "Rules Only", "Fast rule-based detection for structured PII.", - "Rules + AI" + "Rules + AI", ], .sharedSettings: [ "Shared Settings", "System Notifications", "Enable Completion Banners", @@ -108,30 +111,32 @@ struct SettingsView: View { "Edit Custom List…", "Reset to Defaults", "Settings Profile", "Share this configuration with your team as a JSON file, or load one someone else exported.", "Export Profile…", "Import Profile…", "Advanced Mode", - "Show advanced AI controls and override modes." + "Show advanced AI controls and override modes.", ], .rulesEngine: [ - "Rules Engine", "Select which deterministic rules run.", "Invert Selection" + "Rules Engine", "Select which deterministic rules run.", "Invert Selection", ], .aiModel: [ "AI Model", "Select AI Model", "Qwen 3.5 35B A3B", "Qwen 2.5 14B", "Qwen 2.5 7B", "Phi-4 Mini 3.8B", - "AI System Prompt", "Customize Prompt…", "Manage Models…", "Reveal Models…" + "AI System Prompt", "Customize Prompt…", "Manage Models…", "Reveal Models…", ], .advancedAI: [ "Advanced AI Settings", "Rules + AI Behavior", "Rules Override", "Constrained LLM Overrides", "LLM Overrides", "LLM Confidence", "Temperature", - "Chunk Size", "Chunk Overlap", "Processing Timeout", "Random Seed" + "Chunk Size", "Chunk Overlap", "Processing Timeout", "Random Seed", ], .debug: [ - "Debug", "Enable Debug Logging", "View Logs", "Open App Log", "Open Ollama Log", "Clear Logs" - ] + "Debug", "Enable Debug Logging", "View Logs", "Open App Log", "Open Ollama Log", "Clear Logs", + ], ] /// Pure, testable predicate: does `label` match `query`? Empty query always matches. /// Matching is a case-insensitive substring match. static func matchesSearch(_ label: String, query: String) -> Bool { let trimmedQuery = query.trimmingCharacters(in: .whitespacesAndNewlines) - if trimmedQuery.isEmpty { return true } + if trimmedQuery.isEmpty { + return true + } return label.range(of: trimmedQuery, options: [.caseInsensitive, .diacriticInsensitive]) != nil } @@ -143,7 +148,9 @@ struct SettingsView: View { let ruleMatches = RedactionRule.allCases.contains { rule in Self.matchesSearch(rule.displayName, query: searchQuery) } - if ruleMatches { return true } + if ruleMatches { + return true + } } let labels = Self.sectionLabels[section] ?? [] return labels.contains { Self.matchesSearch($0, query: searchQuery) } @@ -154,7 +161,9 @@ struct SettingsView: View { guard !searchQuery.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return true } // If the section header itself matches (e.g. "Rules Engine"), show all rows. let sectionLabels = Self.sectionLabels[.rulesEngine] ?? [] - if sectionLabels.contains(where: { Self.matchesSearch($0, query: searchQuery) }) { return true } + if sectionLabels.contains(where: { Self.matchesSearch($0, query: searchQuery) }) { + return true + } return Self.matchesSearch(rule.displayName, query: searchQuery) } @@ -163,7 +172,9 @@ struct SettingsView: View { var initialSettings = viewModel.settings if viewModel.availableModels.count == 1, let onlyModel = viewModel.availableModels.first { initialSettings.model = onlyModel - } else if !viewModel.availableModels.contains(initialSettings.model), let first = viewModel.availableModels.first { + } else if !viewModel.availableModels.contains(initialSettings.model), + let first = viewModel.availableModels.first + { initialSettings.model = first } let defaults = UserDefaults.standard @@ -179,17 +190,26 @@ struct SettingsView: View { } if defaults.object(forKey: DefaultsKey.advancedLLMConfidenceMigratedTo99.key) == nil { if let storedConfidence = defaults.object(forKey: DefaultsKey.advancedLLMConfidence.key) as? NSNumber, - storedConfidence.intValue == 95 { - defaults.set(RedactionSettings.standardNormalModeConfidence, forKey: DefaultsKey.advancedLLMConfidence.key) + storedConfidence.intValue == 95 + { + defaults.set( + RedactionSettings.standardNormalModeConfidence, + forKey: DefaultsKey.advancedLLMConfidence.key + ) } defaults.set(true, forKey: DefaultsKey.advancedLLMConfidenceMigratedTo99.key) } if defaults.object(forKey: DefaultsKey.outputSaveLocationPreference.key) == nil { - if let legacy = defaults.object(forKey: DefaultsKey.legacyMetadataReportAlwaysSaveToDownloads.key) as? Bool { + if let legacy = defaults + .object(forKey: DefaultsKey.legacyMetadataReportAlwaysSaveToDownloads.key) as? Bool + { let mapped = legacy ? OutputSaveLocation.downloads.rawValue : OutputSaveLocation.alwaysAsk.rawValue defaults.set(mapped, forKey: DefaultsKey.outputSaveLocationPreference.key) } else { - defaults.set(OutputSaveLocation.alwaysAsk.rawValue, forKey: DefaultsKey.outputSaveLocationPreference.key) + defaults.set( + OutputSaveLocation.alwaysAsk.rawValue, + forKey: DefaultsKey.outputSaveLocationPreference.key + ) } } if defaults.object(forKey: DefaultsKey.unsavedReportQuitBehavior.key) == nil { @@ -197,7 +217,8 @@ struct SettingsView: View { } let advancedEnabled = defaults.bool(forKey: DefaultsKey.advancedModeEnabled.key) - let storedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride.rawValue + let storedModeRaw = defaults.string(forKey: DefaultsKey.advancedAIMode.key) ?? RedactionMode.rulesOverride + .rawValue let storedMode = RedactionMode(rawValue: storedModeRaw) ?? .rulesOverride let normalizedMode = storedMode == .rules ? .rulesOverride : storedMode let storedConfidence = defaults.integer(forKey: DefaultsKey.advancedLLMConfidence.key) @@ -230,10 +251,10 @@ struct SettingsView: View { if isSectionVisible(.rulesEngine) { rulesEngineSection } - if localSettings.mode.usesLLM && isSectionVisible(.aiModel) { + if localSettings.mode.usesLLM, isSectionVisible(.aiModel) { aiModelSection } - if isAdvancedModeEnabled && isSectionVisible(.advancedAI) { + if isAdvancedModeEnabled, isSectionVisible(.advancedAI) { advancedAISection } if isSectionVisible(.debug) { @@ -292,26 +313,25 @@ struct SettingsView: View { LogViewerSheet() } .alert("Override Error", isPresented: overrideErrorBinding, presenting: overrideErrorMessage) { _ in - Button("OK", role: .cancel) { } + Button("OK", role: .cancel) {} .accessibilityIdentifier("settings.overrideError.ok") } message: { message in Text(message) } .alert("Import Failed", isPresented: profileErrorBinding, presenting: profileErrorMessage) { _ in - Button("OK", role: .cancel) { } + Button("OK", role: .cancel) {} .accessibilityIdentifier("settings.profile.importError.ok") } message: { message in Text(message) } .alert("Profile Imported", isPresented: $profileImportSucceeded) { - Button("OK", role: .cancel) { } + Button("OK", role: .cancel) {} .accessibilityIdentifier("settings.profile.importSuccess.ok") } message: { Text("Settings were replaced with the imported profile. Click Save Settings to apply.") } } - @ViewBuilder private var headerView: some View { VStack(spacing: 8) { Text("Redaction Settings") @@ -425,14 +445,16 @@ struct SettingsView: View { if PermissionManager.shared.notificationStatus == .denied { Button("Open System Settings (Permission Denied)") { - if let url = URL(string: "x-apple.systempreferences:com.apple.preference.notifications") { - NSWorkspace.shared.open(url) - } + if let url = URL(string: "x-apple.systempreferences:com.apple.preference.notifications") { + NSWorkspace.shared.open(url) + } } .font(.caption) .buttonStyle(.link) .accessibilityIdentifier("settings.notifications.openSystemSettings") - } else if PermissionManager.shared.notificationStatus == .notDetermined && permissionManager.userEnabledNotifications { + } else if PermissionManager.shared.notificationStatus == .notDetermined, + permissionManager.userEnabledNotifications + { Button("Authorize Notifications") { Task { try? await PermissionManager.shared.forceRequestNotificationPermission() } } @@ -626,9 +648,11 @@ struct SettingsView: View { VStack(alignment: .leading, spacing: 2) { Text("Advanced Mode") .font(.system(size: 14, weight: .medium)) - Text("Show advanced AI controls and override modes. Normal mode is equivalent to Advanced Mode set to Rules Override at 99% confidence.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + Text( + "Show advanced AI controls and override modes. Normal mode is equivalent to Advanced Mode set to Rules Override at 99% confidence." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } } .toggleStyle(.switch) @@ -659,7 +683,9 @@ struct SettingsView: View { Spacer() } - ForEach(RedactionRule.allCases.sorted { $0.displayName < $1.displayName }.filter(isRuleVisible)) { rule in + ForEach(RedactionRule.allCases.sorted { $0.displayName < $1.displayName } + .filter(isRuleVisible)) + { rule in Toggle(isOn: binding(for: rule)) { VStack(alignment: .leading, spacing: 2) { Text(rule.displayName) @@ -672,7 +698,6 @@ struct SettingsView: View { .toggleStyle(.checkbox) .accessibilityIdentifier("settings.rules.toggle.\(rule.rawValue)") } - } } } @@ -759,9 +784,11 @@ struct SettingsView: View { VStack(alignment: .leading, spacing: 6) { Text("LLM Processing Concurrency") .font(.system(size: 14, weight: .medium)) - Text("Higher concurrency extracts entities faster but uses significantly more system Unified Memory.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + Text( + "Higher concurrency extracts entities faster but uses significantly more system Unified Memory." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) HStack { Slider( @@ -769,7 +796,7 @@ struct SettingsView: View { get: { Double(localSettings.llmConcurrency) }, set: { localSettings.llmConcurrency = Int($0) } ), - in: 1...5, + in: 1 ... 5, step: 1 ) .accessibilityIdentifier("settings.llmConcurrency.slider") @@ -824,8 +851,12 @@ struct SettingsView: View { private var timeoutSteps: [Int] { var steps: [Int] = [30, 60, 120] - for m in 3...45 { steps.append(m * 60) } - for i in 0..<30 { steps.append((50 + i * 5) * 60) } + for m in 3 ... 45 { + steps.append(m * 60) + } + for i in 0 ..< 30 { + steps.append((50 + i * 5) * 60) + } steps.append(Int.max) return steps } @@ -905,7 +936,7 @@ struct SettingsView: View { Stepper( "", value: advancedConfidenceBinding, - in: 0...100, + in: 0 ... 100, step: 1 ) .labelsHidden() @@ -917,9 +948,11 @@ struct SettingsView: View { } } - Text("Confidence is the minimum certainty required to override a rules match. Higher = more likely to remain redacted. Confidence has no impact on system prompt based redaction (a separate pipeline).") - .font(.system(size: 10)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + Text( + "Confidence is the minimum certainty required to override a rules match. Higher = more likely to remain redacted. Confidence has no impact on system prompt based redaction (a separate pipeline)." + ) + .font(.system(size: 10)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } Divider() @@ -928,7 +961,7 @@ struct SettingsView: View { Text("Temperature: \(localSettings.temperature, specifier: "%.1f")") .font(.system(size: 14, weight: .medium)) .foregroundColor(CustomColors.primaryText(for: colorScheme)) - Slider(value: $localSettings.temperature, in: 0.0...2.0, step: 0.1) + Slider(value: $localSettings.temperature, in: 0.0 ... 2.0, step: 0.1) .accessibilityIdentifier("settings.ai.temperature") Text("Lower = more focused and deterministic. Higher = more creative but may hallucinate entities.") .font(.system(size: 12)) @@ -942,11 +975,13 @@ struct SettingsView: View { Slider(value: Binding( get: { Double(localSettings.chunkTokens) }, set: { localSettings.chunkTokens = Int($0) } - ), in: 500...2000, step: 100) - .accessibilityIdentifier("settings.ai.chunkSize") - Text("Larger = fewer chunks, faster overall but may miss entities in long sections. Smaller = more thorough but slower.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + ), in: 500 ... 2000, step: 100) + .accessibilityIdentifier("settings.ai.chunkSize") + Text( + "Larger = fewer chunks, faster overall but may miss entities in long sections. Smaller = more thorough but slower." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } VStack(alignment: .leading, spacing: 8) { @@ -956,11 +991,13 @@ struct SettingsView: View { Slider(value: Binding( get: { Double(localSettings.overlap) }, set: { localSettings.overlap = Int($0) } - ), in: 50...400, step: 25) - .accessibilityIdentifier("settings.ai.chunkOverlap") - Text("Higher = catches entities at chunk boundaries but increases processing time. Lower = faster but may miss split names.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + ), in: 50 ... 400, step: 25) + .accessibilityIdentifier("settings.ai.chunkOverlap") + Text( + "Higher = catches entities at chunk boundaries but increases processing time. Lower = faster but may miss split names." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } VStack(alignment: .leading, spacing: 8) { @@ -968,7 +1005,7 @@ struct SettingsView: View { .font(.system(size: 14, weight: .medium)) .foregroundColor(CustomColors.primaryText(for: colorScheme)) - Slider(value: timeoutSliderIndex, in: 0...Double(timeoutSteps.count - 1), step: 1) + Slider(value: timeoutSliderIndex, in: 0 ... Double(timeoutSteps.count - 1), step: 1) .accessibilityIdentifier("settings.ai.timeout") Text("Maximum time per document. Increase for very large documents. Use ∞ to disable timeout entirely.") .font(.system(size: 12)) @@ -982,13 +1019,14 @@ struct SettingsView: View { Slider(value: Binding( get: { Double(localSettings.seed) }, set: { localSettings.seed = Int($0) } - ), in: 1...1000, step: 1) - .accessibilityIdentifier("settings.ai.seed") - Text("Fixed seed = reproducible results on same document. Change to get different AI outputs for testing.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + ), in: 1 ... 1000, step: 1) + .accessibilityIdentifier("settings.ai.seed") + Text( + "Fixed seed = reproducible results on same document. Change to get different AI outputs for testing." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } - } } @@ -998,10 +1036,12 @@ struct SettingsView: View { .toggleStyle(.checkbox) .accessibilityIdentifier("settings.debug.toggle") - Text("When enabled, both the app and helper write verbose diagnostics to logs for troubleshooting. This may impact performance and generate large files.") - .font(.system(size: 12)) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) - .padding(.top, 4) + Text( + "When enabled, both the app and helper write verbose diagnostics to logs for troubleshooting. This may impact performance and generate large files." + ) + .font(.system(size: 12)) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + .padding(.top, 4) HStack(spacing: 12) { Button("View Logs") { @@ -1065,14 +1105,22 @@ struct SettingsView: View { private var overrideErrorBinding: Binding { Binding( get: { overrideErrorMessage != nil }, - set: { if !$0 { overrideErrorMessage = nil } } + set: { + if !$0 { + overrideErrorMessage = nil + } + } ) } private var profileErrorBinding: Binding { Binding( get: { profileErrorMessage != nil }, - set: { if !$0 { profileErrorMessage = nil } } + set: { + if !$0 { + profileErrorMessage = nil + } + } ) } @@ -1172,7 +1220,7 @@ struct SettingsView: View { get: { advancedLlmConfidence }, set: { newValue in advancedLlmConfidence = newValue - if isAdvancedModeEnabled && localSettings.mode != .rules { + if isAdvancedModeEnabled, localSettings.mode != .rules { localSettings.llmConfidenceThreshold = newValue } } @@ -1224,7 +1272,7 @@ struct SettingsView: View { private func selectAdvancedAIMode(_ mode: RedactionMode) { let normalized = mode == .rules ? .rulesOverride : mode advancedAIModeRaw = normalized.rawValue - if isAdvancedModeEnabled && localSettings.mode != .rules { + if isAdvancedModeEnabled, localSettings.mode != .rules { localSettings.mode = normalized } } @@ -1232,13 +1280,13 @@ struct SettingsView: View { private func advancedModeTitle(_ mode: RedactionMode) -> String { switch mode { case .rulesOverride: - return "Rules Override" + "Rules Override" case .constrainedOverrides: - return "Constrained LLM Overrides" + "Constrained LLM Overrides" case .llmOverrides: - return "LLM Overrides" + "LLM Overrides" case .rules: - return "Rules Only" + "Rules Only" } } @@ -1484,13 +1532,16 @@ private struct ScrollableTextEditor: NSViewRepresentable { textView.isHorizontallyResizable = true textView.autoresizingMask = [.width] textView.textContainer?.widthTracksTextView = true - textView.textContainer?.containerSize = NSSize(width: scrollView.contentSize.width, height: .greatestFiniteMagnitude) + textView.textContainer?.containerSize = NSSize( + width: scrollView.contentSize.width, + height: .greatestFiniteMagnitude + ) scrollView.documentView = textView return scrollView } - func updateNSView(_ nsView: NSScrollView, context: Context) { + func updateNSView(_ nsView: NSScrollView, context _: Context) { guard let textView = nsView.documentView as? NSTextView else { return } if textView.string != text { textView.string = text @@ -1551,7 +1602,7 @@ struct FirstRunSetupView: View { switch viewModel.firstRunEntryPoint { case .manageModels: initialStep = .modelSelection - case .downloadSpecificModel(let targetModelId): + case let .downloadSpecificModel(targetModelId): initialStep = .modelSelection resolvedModel = targetModelId shouldAutoDownload = true @@ -1604,7 +1655,9 @@ struct FirstRunSetupView: View { // Navigation buttons HStack(spacing: 16) { - if setupStep != .welcome && setupStep != .downloading && !(isManageFlow && setupStep == .modelSelection) { + if setupStep != .welcome, setupStep != .downloading, + !(isManageFlow && setupStep == .modelSelection) + { Button("Back") { withAnimation(.easeInOut(duration: 0.3)) { setupStep = previousStep @@ -1614,7 +1667,7 @@ struct FirstRunSetupView: View { .accessibilityIdentifier("setup.back") } - if setupStep != .downloading && !isManageFlow { + if setupStep != .downloading, !isManageFlow { Button("Use Rules Only") { completeRulesOnly() } @@ -1650,7 +1703,7 @@ struct FirstRunSetupView: View { if autoStartDownload { autoStartDownload = false downloadModel() - } else if !isManageFlow && hasInstalledSupportedModel { + } else if !isManageFlow, hasInstalledSupportedModel { // If a supported model already exists and we're not in the manage-models flow, // skip the download prompt and finish onboarding immediately. viewModel.markFirstRunComplete() @@ -1679,7 +1732,6 @@ struct FirstRunSetupView: View { .accessibilityIdentifier("setup.close") } - @ViewBuilder private var welcomeContent: some View { VStack(spacing: 24) { VStack(spacing: 16) { @@ -1687,10 +1739,12 @@ struct FirstRunSetupView: View { .font(.title2) .fontWeight(.semibold) - Text("MarcutApp uses local AI models to identify and redact sensitive information in your documents. All processing happens on your device - no data ever leaves your computer.") - .font(.body) - .multilineTextAlignment(.center) - .foregroundColor(CustomColors.secondaryText(for: colorScheme)) + Text( + "MarcutApp uses local AI models to identify and redact sensitive information in your documents. All processing happens on your device - no data ever leaves your computer." + ) + .font(.body) + .multilineTextAlignment(.center) + .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } VStack(alignment: .leading, spacing: 12) { @@ -1715,7 +1769,6 @@ struct FirstRunSetupView: View { } } - @ViewBuilder private var modelSelectionContent: some View { VStack(spacing: 24) { // Model selection cards @@ -1741,7 +1794,6 @@ struct FirstRunSetupView: View { } } - @ViewBuilder private var downloadingContent: some View { VStack(spacing: 32) { VStack(spacing: 16) { @@ -1778,7 +1830,6 @@ struct FirstRunSetupView: View { } } - @ViewBuilder private var completeContent: some View { VStack(spacing: 24) { Image(systemName: "checkmark.circle.fill") @@ -1800,19 +1851,19 @@ struct FirstRunSetupView: View { private var buttonTitle: String { switch setupStep { - case .welcome: return "Get Started" - case .modelSelection: return "Download Model" - case .downloading: return "Downloading..." - case .complete: return "Finish" + case .welcome: "Get Started" + case .modelSelection: "Download Model" + case .downloading: "Downloading..." + case .complete: "Finish" } } private var previousStep: SetupStep { switch setupStep { - case .welcome: return .welcome - case .modelSelection: return .welcome - case .downloading: return .modelSelection - case .complete: return .downloading + case .welcome: .welcome + case .modelSelection: .welcome + case .downloading: .modelSelection + case .complete: .downloading } } @@ -1944,8 +1995,19 @@ struct ModelSelectionRow: View { let onDownload: (() -> Void)? @Environment(\.colorScheme) private var colorScheme - // Convenience initializers for different use cases - init(modelId: String, displayName: String, description: String, processingTime: String, accentColor: Color, isSelected: Bool, isInstalled: Bool, accessibilityId: String? = nil, onDownload: (() -> Void)? = nil, onSelect: @escaping () -> Void) { + /// Convenience initializers for different use cases + init( + modelId: String, + displayName: String, + description: String, + processingTime: String, + accentColor: Color, + isSelected: Bool, + isInstalled: Bool, + accessibilityId: String? = nil, + onDownload: (() -> Void)? = nil, + onSelect: @escaping () -> Void + ) { self.modelId = modelId self.displayName = displayName self.description = description @@ -1960,7 +2022,18 @@ struct ModelSelectionRow: View { self.onDownload = onDownload } - init(modelId: String, displayName: String, description: String, size: String, badge: String, isSelected: Bool, isInstalled: Bool, accessibilityId: String? = nil, onDownload: (() -> Void)? = nil, onSelect: @escaping () -> Void) { + init( + modelId: String, + displayName: String, + description: String, + size: String, + badge: String, + isSelected: Bool, + isInstalled: Bool, + accessibilityId: String? = nil, + onDownload: (() -> Void)? = nil, + onSelect: @escaping () -> Void + ) { self.modelId = modelId self.displayName = displayName self.description = description @@ -1980,7 +2053,8 @@ struct ModelSelectionRow: View { HStack(spacing: 16) { Image(systemName: isSelected ? "checkmark.circle.fill" : "circle") .font(.system(size: 20)) - .foregroundColor(isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)) : CustomColors.secondaryText(for: colorScheme)) + .foregroundColor(isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)) : + CustomColors.secondaryText(for: colorScheme)) VStack(alignment: .leading, spacing: 6) { HStack { @@ -1988,7 +2062,7 @@ struct ModelSelectionRow: View { .font(.system(size: 16, weight: .semibold)) .foregroundColor(CustomColors.primaryText(for: colorScheme)) - if let badge = badge { + if let badge { Text(badge) .font(.system(size: 11, weight: .medium)) .padding(.horizontal, 8) @@ -2009,13 +2083,13 @@ struct ModelSelectionRow: View { .multilineTextAlignment(.leading) HStack { - if let size = size { + if let size { Text(size) .font(.system(size: 12, weight: .medium)) .foregroundColor(CustomColors.secondaryText(for: colorScheme)) } - if let processingTime = processingTime { + if let processingTime { Text("• \(processingTime)") .font(.system(size: 12)) .foregroundColor(CustomColors.secondaryText(for: colorScheme)) @@ -2045,11 +2119,15 @@ struct ModelSelectionRow: View { .padding(16) .background( RoundedRectangle(cornerRadius: 12) - .fill(isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)).opacity(0.12) : CustomColors.contentBackground(for: colorScheme)) + .fill(isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)) + .opacity(0.12) : CustomColors.contentBackground(for: colorScheme)) ) .overlay( RoundedRectangle(cornerRadius: 12) - .stroke(isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)) : Color.clear, lineWidth: 2) + .stroke( + isSelected ? (accentColor ?? CustomColors.accentColor(for: colorScheme)) : Color.clear, + lineWidth: 2 + ) ) } .buttonStyle(.plain) diff --git a/src/swift/MarcutApp/Sources/MarcutApp/UnsavedReportQuitBehavior.swift b/src/swift/MarcutApp/Sources/MarcutApp/UnsavedReportQuitBehavior.swift index c0a5d1e..3bdb98a 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/UnsavedReportQuitBehavior.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/UnsavedReportQuitBehavior.swift @@ -5,16 +5,18 @@ enum UnsavedReportQuitBehavior: Int, CaseIterable, Identifiable { case alwaysQuit = 1 case alwaysCancel = 2 - var id: Int { rawValue } + var id: Int { + rawValue + } var label: String { switch self { case .warn: - return "Warn" + "Warn" case .alwaysQuit: - return "Always Quit" + "Always Quit" case .alwaysCancel: - return "Always Cancel" + "Always Cancel" } } } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/UserOverridesManager.swift b/src/swift/MarcutApp/Sources/MarcutApp/UserOverridesManager.swift index 52b58aa..c06d8b7 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/UserOverridesManager.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/UserOverridesManager.swift @@ -5,13 +5,13 @@ final class UserOverridesManager { private let fileManager = FileManager.default private let overridesDirectory: URL - + // MARK: - Custom State Detection - + var hasCustomExcludedWords: Bool { fileManager.fileExists(atPath: overridesExcludedWordsURL.path) } - + var hasCustomSystemPrompt: Bool { fileManager.fileExists(atPath: overridesSystemPromptURL.path) } @@ -27,21 +27,21 @@ final class UserOverridesManager { private var overridesExcludedWordsURL: URL { overridesDirectory.appendingPathComponent("excluded-words.txt") } - + private var overridesSystemPromptURL: URL { overridesDirectory.appendingPathComponent("system-prompt.txt") } - + // MARK: - Active Paths (either custom or default) - + var activeExcludedWordsURL: URL { if hasCustomExcludedWords { return overridesExcludedWordsURL } - return resolveDefaultResourceURL(named: "excluded-words", ext: "txt") + return resolveDefaultResourceURL(named: "excluded-words", ext: "txt") ?? overridesExcludedWordsURL } - + var activeSystemPromptURL: URL { if hasCustomSystemPrompt { return overridesSystemPromptURL @@ -53,7 +53,7 @@ final class UserOverridesManager { // MARK: - Excluded Words API func loadExcludedWords() throws -> String { - return try String(contentsOf: activeExcludedWordsURL, encoding: .utf8) + try String(contentsOf: activeExcludedWordsURL, encoding: .utf8) } func saveExcludedWords(_ text: String) throws { @@ -62,23 +62,27 @@ final class UserOverridesManager { .write(to: overridesExcludedWordsURL, atomically: true, encoding: .utf8) syncEnvironment() } - + func restoreDefaultExcludedWords() { try? fileManager.removeItem(at: overridesExcludedWordsURL) syncEnvironment() } - + func defaultExcludedWords() throws -> String { if let url = resolveDefaultResourceURL(named: "excluded-words", ext: "txt") { return try String(contentsOf: url, encoding: .utf8) } - throw NSError(domain: "UserOverrides", code: 404, userInfo: [NSLocalizedDescriptionKey: "Default excluded-words.txt not found in bundle"]) + throw NSError( + domain: "UserOverrides", + code: 404, + userInfo: [NSLocalizedDescriptionKey: "Default excluded-words.txt not found in bundle"] + ) } // MARK: - System Prompt API func loadSystemPrompt() throws -> String { - return try String(contentsOf: activeSystemPromptURL, encoding: .utf8) + try String(contentsOf: activeSystemPromptURL, encoding: .utf8) } func saveSystemPrompt(_ text: String) throws { @@ -87,19 +91,23 @@ final class UserOverridesManager { .write(to: overridesSystemPromptURL, atomically: true, encoding: .utf8) syncEnvironment() } - + func restoreDefaultSystemPrompt() { try? fileManager.removeItem(at: overridesSystemPromptURL) syncEnvironment() } - + func defaultSystemPrompt() throws -> String { if let url = resolveDefaultResourceURL(named: "system-prompt", ext: "txt") { return try String(contentsOf: url, encoding: .utf8) } - throw NSError(domain: "UserOverrides", code: 404, userInfo: [NSLocalizedDescriptionKey: "Default system-prompt.txt not found in bundle"]) + throw NSError( + domain: "UserOverrides", + code: 404, + userInfo: [NSLocalizedDescriptionKey: "Default system-prompt.txt not found in bundle"] + ) } - + /// Legacy compatibility - returns default prompt text as fallback func defaultSystemPromptText() -> String { do { @@ -107,21 +115,21 @@ final class UserOverridesManager { } catch { // Fallback hardcoded prompt if bundle is missing return """ -You are an extractor for legal-document redaction. + You are an extractor for legal-document redaction. -Goal: list only real entities with semantic identity — people (NAME), organizations (ORG), and geographical locations (LOC). Do not include generic roles, headings, placeholders, or boilerplate even if capitalized or defined in the document. + Goal: list only real entities with semantic identity — people (NAME), organizations (ORG), and geographical locations (LOC). Do not include generic roles, headings, placeholders, or boilerplate even if capitalized or defined in the document. -Entity types: -- NAME: Personal names. Prefer full names. Titles like Mr./Ms./Dr. may appear but should be attached to a real name. Single generic words (Company, Board, Stockholders) are NOT names. -- ORG: Registered organizations and companies. Prefer strings that include a company designator (Inc., LLC, Ltd., Corp., LLP, GmbH, AG, SA, BV, NV, PLC, Co., Holdings, Partners, Capital, Group, Management, Ventures, Bank, Trust, University). Do NOT output generic roles like "Company", "Board of Directors", "Stockholders", "Purchaser", "Seller", "Party/Parties". -- LOC: Geographic locations such as countries, states, cities, or specific street addresses. + Entity types: + - NAME: Personal names. Prefer full names. Titles like Mr./Ms./Dr. may appear but should be attached to a real name. Single generic words (Company, Board, Stockholders) are NOT names. + - ORG: Registered organizations and companies. Prefer strings that include a company designator (Inc., LLC, Ltd., Corp., LLP, GmbH, AG, SA, BV, NV, PLC, Co., Holdings, Partners, Capital, Group, Management, Ventures, Bank, Trust, University). Do NOT output generic roles like "Company", "Board of Directors", "Stockholders", "Purchaser", "Seller", "Party/Parties". + - LOC: Geographic locations such as countries, states, cities, or specific street addresses. -Rules: -- Return the exact surface text as it appears in the passage. -- Exclude boilerplate and document structural terms. -- Output strictly JSON of the form: {"entities": [{"text": "...", "type": "NAME|ORG|LOC"}, ...]}. No extra text. -Your entire response must be a single, valid JSON object inside a ```json code block. -""" + Rules: + - Return the exact surface text as it appears in the passage. + - Exclude boilerplate and document structural terms. + - Output strictly JSON of the form: {"entities": [{"text": "...", "type": "NAME|ORG|LOC"}, ...]}. No extra text. + Your entire response must be a single, valid JSON object inside a ```json code block. + """ } } @@ -131,7 +139,7 @@ Your entire response must be a single, valid JSON object inside a ```json code b // Excluded words - always point to active path setenv("MARCUT_EXCLUDED_WORDS_PATH", activeExcludedWordsURL.path, 1) - // System prompt - always point to active path + // System prompt - always point to active path setenv("MARCUT_SYSTEM_PROMPT_PATH", activeSystemPromptURL.path, 1) } @@ -144,7 +152,9 @@ Your entire response must be a single, valid JSON object inside a ```json code b private static func resolveOverridesDirectory(fileManager: FileManager) -> URL { var candidates: [URL] = [] - if let groupURL = fileManager.containerURL(forSecurityApplicationGroupIdentifier: "QG85EMCQ75.group.com.marclaw.marcutapp") { + if let groupURL = fileManager + .containerURL(forSecurityApplicationGroupIdentifier: "QG85EMCQ75.group.com.marclaw.marcutapp") + { candidates.append(groupURL.appendingPathComponent("MarcutOverrides", isDirectory: true)) } diff --git a/src/swift/MarcutApp/Tests/MarcutAppTests/MarcutAppTests.swift b/src/swift/MarcutApp/Tests/MarcutAppTests/MarcutAppTests.swift index 6a92ce6..01eb7cf 100644 --- a/src/swift/MarcutApp/Tests/MarcutAppTests/MarcutAppTests.swift +++ b/src/swift/MarcutApp/Tests/MarcutAppTests/MarcutAppTests.swift @@ -1,10 +1,9 @@ -import XCTest -import SwiftUI @testable import MarcutApp +import SwiftUI +import XCTest @MainActor final class MarcutAppTests: XCTestCase { - // MARK: - Test Infrastructure /// Test helper for creating DocumentItems @@ -17,7 +16,7 @@ final class MarcutAppTests: XCTestCase { /// Test helper for creating a test ViewModel private func createTestViewModel() -> DocumentRedactionViewModel { - return DocumentRedactionViewModel() + DocumentRedactionViewModel() } /// Test helper for resolving sample file URLs from the repo root @@ -53,7 +52,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Launch Diagnostics Tests - func testLaunchArgumentRedactionHidesPathValues() throws { + func testLaunchArgumentRedactionHidesPathValues() { let args = [ "MarcutApp", "--redact", @@ -63,7 +62,7 @@ final class MarcutAppTests: XCTestCase { "--report", "/Users/example/Client A/report.json", "--mode", - "rules" + "rules", ] let redacted = redactedLaunchArguments(args) @@ -78,9 +77,9 @@ final class MarcutAppTests: XCTestCase { // MARK: - Tooltip Tests (Task 1.2) - func testTooltipButtonConfiguration() throws { + func testTooltipButtonConfiguration() { // Test that TooltipButton is properly configured - let action = { } + let action = {} let button = TooltipButton( action: action, icon: "doc.text.fill", @@ -94,7 +93,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(button.description, "Opens the redacted .docx file with sensitive information removed") } - func testTooltipButtonsInDocumentRow() throws { + func testTooltipButtonsInDocumentRow() { // Test that completed document rows have all 3 tooltip buttons let testItem = createTestDocumentItem(status: .completed) @@ -105,7 +104,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Button Position Tests (Task 1.3) - func testButtonOrderInActionButtons() throws { + func testButtonOrderInActionButtons() { // Test that Clear All appears before Redact Documents in the button layout // Create ContentView and verify the view can be constructed. let contentView = ContentView() @@ -115,7 +114,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Dynamic Button State Tests (Task 1.4) - func testFinishedProcessingStateLogic() throws { + func testFinishedProcessingStateLogic() { // Test the logic behind finished processing state // Since we can't mock the final class, we test the logic directly @@ -129,7 +128,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(hasFinishedProcessing, "Should be finished when completed but no processing or valid docs") } - func testProcessingStateLogic() throws { + func testProcessingStateLogic() { // Test different processing state combinations // Active processing @@ -152,7 +151,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Model Selection Tests (Task 1.5) - func testModelSelectionOptions() throws { + func testModelSelectionOptions() { // Test that the correct 3 models are available let expectedModels = ["qwen2.5:14b", "qwen2.5:7b", "phi4-mini:3.8b"] @@ -161,13 +160,13 @@ final class MarcutAppTests: XCTestCase { // Verify default model is one of the expected models XCTAssertTrue(expectedModels.contains(settings.model), - "Default model should be one of the supported models") + "Default model should be one of the supported models") // Test model descriptions exist (in a real test, we'd verify the UI) let modelDescriptions = [ "qwen2.5:14b": "Gold standard. Best accuracy for legal & complex documents.", "qwen2.5:7b": "Balanced. Excellent extraction with lower memory usage.", - "phi4-mini:3.8b": "Fast & lightweight. Good for simple documents." + "phi4-mini:3.8b": "Fast & lightweight. Good for simple documents.", ] for model in expectedModels { @@ -175,7 +174,7 @@ final class MarcutAppTests: XCTestCase { } } - func testModelSelectionPersistence() throws { + func testModelSelectionPersistence() { // Test that model selection persists in settings var settings = RedactionSettings() let originalModel = settings.model @@ -192,7 +191,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Model Catalog Tests (ticket #22) - func testModelCatalogLoadsExpectedModelsAndParameters() throws { + func testModelCatalogLoadsExpectedModelsAndParameters() { // Exercises the same bundled `models.json` resource shipped with the // app (kept in sync with `src/python/marcut/models.json` and // `assets/models.json`), via the production loader `ModelCatalog`. @@ -206,7 +205,10 @@ final class MarcutAppTests: XCTestCase { } XCTAssertEqual(qwen25_14b.displayName, "Qwen 2.5 14B") XCTAssertEqual(qwen25_14b.description, "Gold standard. Best accuracy for legal & complex documents.") - XCTAssertEqual(qwen25_14b.setupDescription, "Gold standard. Best accuracy for legal & complex documents. Recommended.") + XCTAssertEqual( + qwen25_14b.setupDescription, + "Gold standard. Best accuracy for legal & complex documents. Recommended." + ) XCTAssertEqual(qwen25_14b.processingTime, "~50s") XCTAssertEqual(qwen25_14b.sizeLabel, "9.0 GB") XCTAssertEqual(qwen25_14b.badge, "Best") @@ -234,7 +236,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertNil(catalog.entry(for: "not-a-real-model:1b")) } - func testModelCatalogDefaultModelIsListedAndIsSettingsDefault() throws { + func testModelCatalogDefaultModelIsListedAndIsSettingsDefault() { let catalog = ModelCatalog.shared XCTAssertTrue(catalog.modelIds.contains(catalog.defaultModelId)) XCTAssertEqual(RedactionSettings().model, catalog.defaultModelId) @@ -260,13 +262,17 @@ final class MarcutAppTests: XCTestCase { let pythonContents = try String(contentsOf: pythonCopy, encoding: .utf8) let assetsContents = try String(contentsOf: assetsCopy, encoding: .utf8) - XCTAssertEqual(swiftContents, pythonContents, "Swift Resources/models.json has drifted from src/python/marcut/models.json") + XCTAssertEqual( + swiftContents, + pythonContents, + "Swift Resources/models.json has drifted from src/python/marcut/models.json" + ) XCTAssertEqual(swiftContents, assetsContents, "Swift Resources/models.json has drifted from assets/models.json") } // MARK: - Progress Indicator Tests (Task 1.6) - func testPreparingStateLogic() throws { + func testPreparingStateLogic() { // Test the preparing state logic that should prevent beach balls // Simulate the preparing state @@ -286,7 +292,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Accessibility Identifier Tests - func testTooltipButtonAccessibilityIdentifier() throws { + func testTooltipButtonAccessibilityIdentifier() { let button = TooltipButton( action: {}, icon: "doc.text.fill", @@ -299,7 +305,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(button.accessibilityId, "document.openRedacted.test") } - func testFinalRedactedCopyURLUsesSeparateDocxCopy() throws { + func testFinalRedactedCopyURLUsesSeparateDocxCopy() { let source = URL(fileURLWithPath: "/tmp/client-review.docx") let finalURL = DocumentRedactionViewModel.finalRedactedCopyURL(for: source) { _ in false } @@ -308,11 +314,11 @@ final class MarcutAppTests: XCTestCase { XCTAssertNotEqual(finalURL, source) } - func testFinalRedactedCopyURLAvoidsOverwrite() throws { + func testFinalRedactedCopyURLAvoidsOverwrite() { let source = URL(fileURLWithPath: "/tmp/client-review.docx") let occupied = Set([ "/tmp/client-review Final Redacted.docx", - "/tmp/client-review Final Redacted 2.docx" + "/tmp/client-review Final Redacted 2.docx", ]) let finalURL = DocumentRedactionViewModel.finalRedactedCopyURL(for: source) { occupied.contains($0) } @@ -347,6 +353,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Ollama Port Conflict Detection Tests (ticket #45 / B3) + // // `performOllamaStartup()` needs a real bundled `ollama` binary to exercise // end-to-end (not present under `swift test`, see `resolveOllamaPath()`), so these @@ -388,6 +395,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Model Name Normalization Parity Tests (ticket #21) + // // `PythonBridgeService.normalizedModelIdentifier` is the Swift half of the // model-name-parsing rules; `marcut.model_naming.parse_model_identifier` / @@ -429,6 +437,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Model Download Notification Tests + // // NOTE: These tests inject fake closures for `modelDownloadAuthorizationRequester` and // `modelDownloadCompletionNotifier` instead of exercising the real `PermissionManager.shared` @@ -439,7 +448,7 @@ final class MarcutAppTests: XCTestCase { // success, with the correct model name, and never called on failure) without touching that // code path. - func testModelDownloadNotifierFiresOnSuccessWithModelName() async { + func testModelDownloadNotifierFiresOnSuccessWithModelName() { let bridge = PythonBridgeService() var notifiedModelNames: [String] = [] var authorizationRequestCount = 0 @@ -521,6 +530,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Model Download Failure Classification Tests (issue #50 / B8) + // // `shouldRetryModelDownload` / `shouldFallbackToCLIDownload` / `formatModelDownloadError` / // `normalizeModelDownloadErrorMessage` drive the retry-then-fallback-to-CLI state machine @@ -575,7 +585,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(PythonBridgeService.formatModelDownloadError(error), "Download cancelled.") } - func testModelSelectionRowAccessibilityIdentifier() throws { + func testModelSelectionRowAccessibilityIdentifier() { let row = ModelSelectionRow( modelId: "qwen2.5:14b", displayName: "Qwen 2.5 14B", @@ -592,18 +602,18 @@ final class MarcutAppTests: XCTestCase { // MARK: - Settings Search Tests - func testSettingsSearchMatchesCaseInsensitiveSubstring() throws { + func testSettingsSearchMatchesCaseInsensitiveSubstring() { XCTAssertTrue(SettingsView.matchesSearch("Excluded Terms", query: "exclud")) XCTAssertTrue(SettingsView.matchesSearch("Excluded Terms", query: "TERMS")) XCTAssertTrue(SettingsView.matchesSearch("Chunk Overlap", query: "chunk overlap")) } - func testSettingsSearchEmptyQueryMatchesEverything() throws { + func testSettingsSearchEmptyQueryMatchesEverything() { XCTAssertTrue(SettingsView.matchesSearch("Excluded Terms", query: "")) XCTAssertTrue(SettingsView.matchesSearch("Excluded Terms", query: " ")) } - func testSettingsSearchRejectsNonMatchingQuery() throws { + func testSettingsSearchRejectsNonMatchingQuery() { XCTAssertFalse(SettingsView.matchesSearch("Excluded Terms", query: "zzz-not-present")) XCTAssertFalse(SettingsView.matchesSearch("Chunk Overlap", query: "temperature")) } @@ -690,7 +700,7 @@ final class MarcutAppTests: XCTestCase { let existingSettings = nonDefaultRedactionSettings() XCTAssertThrowsError(try RedactionProfile.decoded(from: data)) { error in - guard case RedactionProfile.ProfileError.unsupportedSchemaVersion(let found, let supported) = error else { + guard case let RedactionProfile.ProfileError.unsupportedSchemaVersion(found, supported) = error else { XCTFail("Expected unsupportedSchemaVersion, got \(error)") return } @@ -704,7 +714,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Mass Progress Tests - func testMassTotalDeferredUntilEnhancedStage() throws { + func testMassTotalDeferredUntilEnhancedStage() { let item = createTestDocumentItem(status: .processing) XCTAssertTrue(item.ingestProgressPayload("{\"type\":\"mass_total\",\"value\":120}")) @@ -715,7 +725,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(item.isMassTrackingActive, "Mass tracking should activate during enhanced stage") } - func testChunkEndClampsProcessedMassToTotal() throws { + func testChunkEndClampsProcessedMassToTotal() { let item = createTestDocumentItem(status: .processing) item.beginStage(.enhancedDetection) @@ -730,7 +740,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Batch ETA Tests - func testBatchETAReturnsNilWithFewerThanTwoSamples() throws { + func testBatchETAReturnsNilWithFewerThanTwoSamples() { XCTAssertNil( BatchETACalculator.estimate(samples: [], remainingSizes: [1000]), "No samples should yield no estimate" @@ -744,7 +754,7 @@ final class MarcutAppTests: XCTestCase { ) } - func testBatchETAComputesRemainingTimeFromObservedRate() throws { + func testBatchETAComputesRemainingTimeFromObservedRate() { // Two documents completed: 1000 bytes in 10s, then 2000 bytes in 20s -> 100 bytes/sec overall. let samples = [ BatchETASample(duration: 10, size: 1000), @@ -757,7 +767,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(eta ?? -1, 5.0, accuracy: 0.001) } - func testBatchETASumsMultipleRemainingDocuments() throws { + func testBatchETASumsMultipleRemainingDocuments() { let samples = [ BatchETASample(duration: 10, size: 1000), BatchETASample(duration: 10, size: 1000), @@ -769,7 +779,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(eta ?? -1, 5.0, accuracy: 0.001) } - func testBatchETAReturnsZeroWhenNoRemainingWork() throws { + func testBatchETAReturnsZeroWhenNoRemainingWork() { let samples = [ BatchETASample(duration: 10, size: 1000), BatchETASample(duration: 10, size: 1000), @@ -779,7 +789,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(eta, 0.0, "No remaining documents should mean zero time remaining, not nil") } - func testBatchETAReturnsNilWhenObservedRateIsDegenerate() throws { + func testBatchETAReturnsNilWhenObservedRateIsDegenerate() { // Zero total size across samples (e.g. size signal unavailable) -> no reliable rate. let samples = [ BatchETASample(duration: 10, size: 0), @@ -795,10 +805,10 @@ final class MarcutAppTests: XCTestCase { // complete first (fast, low size); eight large documents (50x the // size) are still queued/in-flight. let smallSamples = [ - BatchETASample(duration: 2, size: 1_000), - BatchETASample(duration: 2, size: 1_000), + BatchETASample(duration: 2, size: 1000), + BatchETASample(duration: 2, size: 1000), ] - let remainingLargeSizes: [Int64] = Array(repeating: 50_000, count: 8) + let remainingLargeSizes: [Int64] = Array(repeating: 50000, count: 8) let eta = try XCTUnwrap( BatchETACalculator.estimate(samples: smallSamples, remainingSizes: remainingLargeSizes) @@ -819,7 +829,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Integration Tests - func testDocumentItemStatusTransitions() throws { + func testDocumentItemStatusTransitions() { // Test document item status transitions let item = createTestDocumentItem(status: .validDocument) @@ -838,7 +848,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Error Handling Tests - func testInvalidDocumentHandling() throws { + func testInvalidDocumentHandling() { let item = createTestDocumentItem(status: .invalidDocument) item.errorMessage = "Only DOCX files are supported" @@ -923,7 +933,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(isValid, "Expected absolute customXML relationship target to pass validation") } - func testFailedDocumentHandling() throws { + func testFailedDocumentHandling() { let item = createTestDocumentItem(status: .failed) item.errorMessage = "Processing failed - check logs for details" @@ -933,7 +943,7 @@ final class MarcutAppTests: XCTestCase { // MARK: - Retry Failed Tests - func testRetryFailedDocumentsOnlyReQueuesFailedItems() throws { + func testRetryFailedDocumentsOnlyReQueuesFailedItems() { let viewModel = createTestViewModel() let completedItem = createTestDocumentItem(status: .completed) @@ -966,11 +976,11 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(validItem.status, .validDocument) } - func testRetryFailedDocumentsNoOpWhenNoFailedItems() throws { + func testRetryFailedDocumentsNoOpWhenNoFailedItems() { let viewModel = createTestViewModel() viewModel.items = [ createTestDocumentItem(status: .completed), - createTestDocumentItem(status: .validDocument) + createTestDocumentItem(status: .validDocument), ] var retried: [DocumentItem] = [] @@ -983,7 +993,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(retried.isEmpty, "Retry should be a no-op when there are no failed documents") } - func testHasFailedDocumentsReflectsItemStatuses() throws { + func testHasFailedDocumentsReflectsItemStatuses() { let viewModel = createTestViewModel() XCTAssertFalse(viewModel.hasFailedDocuments, "No documents means no failed documents") @@ -997,6 +1007,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Batch State Transition Tests (issue #50 / B8) + // // `processAllDocuments()` walks a batch sequentially and does not stop the batch when one // document fails (DocumentRedactionViewModel.swift): the `while` loop only cares whether an @@ -1006,7 +1017,7 @@ final class MarcutAppTests: XCTestCase { // inert trigger to re-run `updateState()` -- the same indirect-call pattern used by // `testHasFailedDocumentsReflectsItemStatuses` above (`updateState()` itself is private). - func testBatchStateFlagsReflectPerDocumentFailureAmidInFlightBatch() throws { + func testBatchStateFlagsReflectPerDocumentFailureAmidInFlightBatch() { let viewModel = createTestViewModel() let queuedItem = createTestDocumentItem(status: .validDocument) let processingItem = createTestDocumentItem(status: .processing) @@ -1019,8 +1030,14 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(viewModel.hasValidDocuments, "A still-queued document should be reflected") XCTAssertTrue(viewModel.hasProcessingDocuments, "An in-flight document should be reflected") XCTAssertTrue(viewModel.hasCompletedDocuments, "A completed document should be reflected") - XCTAssertTrue(viewModel.hasFailedDocuments, "One document failing mid-batch must not be masked by its siblings' states") - XCTAssertFalse(viewModel.hasFinishedProcessing, "Batch isn't finished while a document is still queued/processing") + XCTAssertTrue( + viewModel.hasFailedDocuments, + "One document failing mid-batch must not be masked by its siblings' states" + ) + XCTAssertFalse( + viewModel.hasFinishedProcessing, + "Batch isn't finished while a document is still queued/processing" + ) // The in-flight document finishes and the queued one starts. The earlier failure must // keep reporting failed regardless of later, unrelated transitions in the same batch -- @@ -1029,7 +1046,10 @@ final class MarcutAppTests: XCTestCase { queuedItem.status = .processing viewModel.add(urls: []) - XCTAssertTrue(viewModel.hasFailedDocuments, "Earlier per-document failure persists across later transitions in the batch") + XCTAssertTrue( + viewModel.hasFailedDocuments, + "Earlier per-document failure persists across later transitions in the batch" + ) XCTAssertTrue(viewModel.hasProcessingDocuments) XCTAssertFalse(viewModel.hasFinishedProcessing) @@ -1052,7 +1072,10 @@ final class MarcutAppTests: XCTestCase { viewModel.add(urls: []) XCTAssertFalse(viewModel.hasFailedDocuments) - XCTAssertTrue(viewModel.hasFinishedProcessing, "Once the failure is resolved, a fully-completed batch reports finished") + XCTAssertTrue( + viewModel.hasFinishedProcessing, + "Once the failure is resolved, a fully-completed batch reports finished" + ) } // MARK: - Watchdog Tests (issue #43 / B1: embedded Python worker hang/crash) @@ -1080,7 +1103,7 @@ final class MarcutAppTests: XCTestCase { return 1 } ) { error in - guard case PythonBridgeError.workerStalled(let operation) = error else { + guard case let PythonBridgeError.workerStalled(operation) = error else { XCTFail("Expected PythonBridgeError.workerStalled, got \(error)") return } @@ -1142,11 +1165,15 @@ final class MarcutAppTests: XCTestCase { viewModel.ensureHeartbeatMonitorRunning(for: item) let deadline = Date().addingTimeInterval(5.0) - while item.status == .processing && Date() < deadline { + while item.status == .processing, Date() < deadline { try await Task.sleep(nanoseconds: 50_000_000) } - XCTAssertEqual(item.status, .failed, "A document with no progress signal for longer than the stall threshold must be marked failed, not left hanging forever") + XCTAssertEqual( + item.status, + .failed, + "A document with no progress signal for longer than the stall threshold must be marked failed, not left hanging forever" + ) XCTAssertEqual(item.errorMessage, DocumentRedactionViewModel.processingStalledMessage) } @@ -1176,10 +1203,16 @@ final class MarcutAppTests: XCTestCase { try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true) defer { // Restore write permission before cleanup, otherwise removal itself can fail. - try? FileManager.default.setAttributes([.posixPermissions: NSNumber(value: Int16(0o755))], ofItemAtPath: tempDir.path) + try? FileManager.default.setAttributes( + [.posixPermissions: NSNumber(value: Int16(0o755))], + ofItemAtPath: tempDir.path + ) try? FileManager.default.removeItem(at: tempDir) } - try FileManager.default.setAttributes([.posixPermissions: NSNumber(value: Int16(0o555))], ofItemAtPath: tempDir.path) + try FileManager.default.setAttributes( + [.posixPermissions: NSNumber(value: Int16(0o555))], + ofItemAtPath: tempDir.path + ) let viewModel = createTestViewModel() let error = viewModel.validateDestination(tempDir) @@ -1193,7 +1226,10 @@ final class MarcutAppTests: XCTestCase { defer { try? FileManager.default.removeItem(at: tempDir) } let viewModel = createTestViewModel() - XCTAssertNil(viewModel.validateDestination(tempDir), "A writable destination with no space estimate requested must pass") + XCTAssertNil( + viewModel.validateDestination(tempDir), + "A writable destination with no space estimate requested must pass" + ) } /// Free-space logic is exercised through the injectable `freeSpaceProvider` parameter @@ -1211,7 +1247,10 @@ final class MarcutAppTests: XCTestCase { freeSpaceProvider: { _ in 1024 } // simulate an almost-full disk ) - XCTAssertNotNil(error, "Insufficient free space at the destination must fail preflight, not wait for a mid-run write failure") + XCTAssertNotNil( + error, + "Insufficient free space at the destination must fail preflight, not wait for a mid-run write failure" + ) XCTAssertTrue(error?.contains("free disk space") ?? false) XCTAssertTrue(error?.contains("1.00 GB") ?? false, "Error should state the estimated need") } @@ -1250,7 +1289,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertNil(error, "An undeterminable free-space figure must not block the run") } - func testDiskSpaceCheckParseByteSizeHandlesModelCatalogLabels() throws { + func testDiskSpaceCheckParseByteSizeHandlesModelCatalogLabels() { XCTAssertEqual(DiskSpaceCheck.parseByteSize("9.0 GB"), 9_663_676_416) XCTAssertEqual(DiskSpaceCheck.parseByteSize("22 GB"), 23_622_320_128) XCTAssertEqual(DiskSpaceCheck.parseByteSize("512 MB"), 536_870_912) @@ -1261,7 +1300,7 @@ final class MarcutAppTests: XCTestCase { /// Model downloads must be checked against the catalog-declared size (`models.json` /// `sizeLabel`) before `ollama pull` even starts, rather than relying on pattern-matching /// "no space" out of Ollama's own output after the fact. - func testModelDownloadSpaceShortfallFailsWhenCatalogSizeExceedsAvailable() throws { + func testModelDownloadSpaceShortfallFailsWhenCatalogSizeExceedsAvailable() { let directory = FileManager.default.temporaryDirectory let shortfall = PythonBridgeService.modelDownloadSpaceShortfall( modelName: "qwen2.5:14b", @@ -1275,7 +1314,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(shortfall?.contains("free disk space") ?? false) } - func testModelDownloadSpaceShortfallPassesWhenCatalogSizeFitsAvailable() throws { + func testModelDownloadSpaceShortfallPassesWhenCatalogSizeFitsAvailable() { let directory = FileManager.default.temporaryDirectory let shortfall = PythonBridgeService.modelDownloadSpaceShortfall( modelName: "phi4-mini:3.8b", @@ -1287,7 +1326,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertNil(shortfall) } - func testModelDownloadSpaceShortfallSkipsCheckWhenSizeLabelMissingOrUnparseable() throws { + func testModelDownloadSpaceShortfallSkipsCheckWhenSizeLabelMissingOrUnparseable() { let directory = FileManager.default.temporaryDirectory XCTAssertNil(PythonBridgeService.modelDownloadSpaceShortfall( modelName: "custom:model", @@ -1328,7 +1367,11 @@ final class MarcutAppTests: XCTestCase { // is an irrelevant implementation detail for this test. let discoveredNames = DebugLogger.discoverLogFiles(in: tempDir).map(\.lastPathComponent) - XCTAssertEqual(discoveredNames, ["marcut-2.log", "marcut.log"], "Log files should be sorted most-recently-modified first, and non-.log files excluded") + XCTAssertEqual( + discoveredNames, + ["marcut-2.log", "marcut.log"], + "Log files should be sorted most-recently-modified first, and non-.log files excluded" + ) } func testDiscoverLogFilesReturnsEmptyArrayWhenNoLogsExist() throws { @@ -1339,19 +1382,23 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(DebugLogger.discoverLogFiles(in: tempDir).isEmpty, "Empty directory should yield no log files") } - func testDiscoverLogFilesReturnsEmptyArrayWhenDirectoryMissing() throws { - let missingDir = FileManager.default.temporaryDirectory.appendingPathComponent("does-not-exist-\(UUID().uuidString)") + func testDiscoverLogFilesReturnsEmptyArrayWhenDirectoryMissing() { + let missingDir = FileManager.default.temporaryDirectory + .appendingPathComponent("does-not-exist-\(UUID().uuidString)") - XCTAssertTrue(DebugLogger.discoverLogFiles(in: missingDir).isEmpty, "Nonexistent directory should yield no log files, not throw") + XCTAssertTrue( + DebugLogger.discoverLogFiles(in: missingDir).isEmpty, + "Nonexistent directory should yield no log files, not throw" + ) } // MARK: - Performance Tests - func testRedactionStatusPerformance() throws { + func testRedactionStatusPerformance() { // Test that RedactionStatus operations are performant measure { // Simulate rapid status checks - for i in 0..<10000 { + for i in 0 ..< 10000 { let status: RedactionStatus = (i % 2 == 0) ? .processing : .completed _ = status.isProcessing _ = status.isComplete @@ -1360,6 +1407,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Excluded-Word Match Preview Tests + // // Ground truth for these expectations was captured by running the production // matcher directly (`marcut.rules._is_excluded`) against the same phrases, e.g.: @@ -1372,20 +1420,20 @@ final class MarcutAppTests: XCTestCase { ExcludedWordMatcher.baseEntries + ExcludedWordMatcher.compileEntries(fromLines: lines) } - func testExcludedWordMatcherMatchesExactLiteral() throws { + func testExcludedWordMatcherMatchesExactLiteral() { let entries = excludedWordEntries(fromLines: ["Non-Disclosure Agreement", "Acme Widgets"]) let result = ExcludedWordMatcher.match("Non-Disclosure Agreement", entries: entries) XCTAssertTrue(result.matched) XCTAssertEqual(result.matchedEntry, "Non-Disclosure Agreement") } - func testExcludedWordMatcherIsCaseInsensitive() throws { + func testExcludedWordMatcherIsCaseInsensitive() { let entries = excludedWordEntries(fromLines: ["Confidential Information"]) XCTAssertTrue(ExcludedWordMatcher.match("confidential information", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("CONFIDENTIAL INFORMATION", entries: entries).matched) } - func testExcludedWordMatcherStripsLeadingDeterminer() throws { + func testExcludedWordMatcherStripsLeadingDeterminer() { let entries = excludedWordEntries(fromLines: ["Board of Directors"]) XCTAssertTrue(ExcludedWordMatcher.match("the Board of Directors", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("Board of Directors", entries: entries).matched) @@ -1398,7 +1446,7 @@ final class MarcutAppTests: XCTestCase { /// already determiner-stripped text and matches a second time. Ground-truth /// verified against `marcut.rules._is_excluded` for each phrase below — all /// return `True` in production, so the Swift preview must match them too. - func testExcludedWordMatcherStripsTwoStackedLeadingDeterminers() throws { + func testExcludedWordMatcherStripsTwoStackedLeadingDeterminers() { let entries = excludedWordEntries(fromLines: []) XCTAssertTrue(ExcludedWordMatcher.match("all such Notices", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("both the Parties", entries: entries).matched) @@ -1408,14 +1456,14 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(ExcludedWordMatcher.match("either such Party", entries: entries).matched) } - func testExcludedWordMatcherIgnoresTrailingPunctuationAndWhitespace() throws { + func testExcludedWordMatcherIgnoresTrailingPunctuationAndWhitespace() { let entries = excludedWordEntries(fromLines: ["Non-Disclosure Agreement"]) XCTAssertTrue(ExcludedWordMatcher.match("Non-Disclosure Agreement.", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("Non-Disclosure Agreement,", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match(" Non-Disclosure Agreement ", entries: entries).matched) } - func testExcludedWordMatcherTreatsSimplePluralsAsEquivalent() throws { + func testExcludedWordMatcherTreatsSimplePluralsAsEquivalent() { let entries = excludedWordEntries(fromLines: ["Agreement"]) XCTAssertTrue(ExcludedWordMatcher.match("Agreement", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("Agreements", entries: entries).matched) @@ -1425,26 +1473,26 @@ final class MarcutAppTests: XCTestCase { XCTAssertTrue(ExcludedWordMatcher.match("Companies", entries: iesEntries).matched) } - func testExcludedWordMatcherSupportsRegexEntries() throws { + func testExcludedWordMatcherSupportsRegexEntries() { let entries = excludedWordEntries(fromLines: ["Article [A-Z0-9]+"]) XCTAssertTrue(ExcludedWordMatcher.match("Article IV", entries: entries).matched) XCTAssertTrue(ExcludedWordMatcher.match("Article 5", entries: entries).matched) XCTAssertFalse(ExcludedWordMatcher.match("Preamble", entries: entries).matched) } - func testExcludedWordMatcherNoMatchForUnrelatedPhrase() throws { + func testExcludedWordMatcherNoMatchForUnrelatedPhrase() { let entries = excludedWordEntries(fromLines: ["Confidential Information", "Board of Directors"]) XCTAssertFalse(ExcludedWordMatcher.match("John Smith", entries: entries).matched) XCTAssertFalse(ExcludedWordMatcher.match("Acme Corp", entries: entries).matched) } - func testExcludedWordMatcherEmptyPhraseDoesNotMatch() throws { + func testExcludedWordMatcherEmptyPhraseDoesNotMatch() { let entries = excludedWordEntries(fromLines: ["Company"]) XCTAssertFalse(ExcludedWordMatcher.match("", entries: entries).matched) XCTAssertFalse(ExcludedWordMatcher.match(" ", entries: entries).matched) } - func testExcludedWordMatcherHonorsAlwaysOnBaseTerms() throws { + func testExcludedWordMatcherHonorsAlwaysOnBaseTerms() { // "Company", "Board of Directors", "Purchaser", etc. are excluded // unconditionally (marcut.model._get_base_excluded_literals) even though // they never appear in the user-editable excluded-words text. @@ -1487,7 +1535,7 @@ final class MarcutAppTests: XCTestCase { return defaults } - func testPendingBatchJobRecordRoundTripPreservesValues() throws { + func testPendingBatchJobRecordRoundTripPreservesValues() { let defaults = makePendingBatchJobTestDefaults() var settings = RedactionSettings() settings.model = "mistral:7b" @@ -1505,7 +1553,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertEqual(loaded?.schemaVersion, PendingBatchJobRecord.currentSchemaVersion) } - func testPendingBatchJobStoreSaveNilClearsRecord() throws { + func testPendingBatchJobStoreSaveNilClearsRecord() { let defaults = makePendingBatchJobTestDefaults() let record = PendingBatchJobRecord(documentPaths: ["/Users/test/a.docx"], settings: RedactionSettings()) PendingBatchJobStore.save(record, defaults: defaults) @@ -1515,7 +1563,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertNil(PendingBatchJobStore.load(defaults: defaults)) } - func testPendingBatchJobStoreDiscardsMalformedRecordWithoutCrashing() throws { + func testPendingBatchJobStoreDiscardsMalformedRecordWithoutCrashing() { let defaults = makePendingBatchJobTestDefaults() defaults.set(Data("{ this is not valid json".utf8), forKey: PendingBatchJobStore.defaultsKey) @@ -1535,7 +1583,7 @@ final class MarcutAppTests: XCTestCase { XCTAssertNil(defaults.data(forKey: PendingBatchJobStore.defaultsKey)) } - func testPendingBatchJobStoreDiscardsEmptyPathsRecord() throws { + func testPendingBatchJobStoreDiscardsEmptyPathsRecord() { let defaults = makePendingBatchJobTestDefaults() let record = PendingBatchJobRecord(documentPaths: [], settings: RedactionSettings()) PendingBatchJobStore.save(record, defaults: defaults) @@ -1544,6 +1592,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Resume/Discard Flow Tests (issue #19 regression) + // // `DocumentRedactionViewModel` persists pending-batch state via `PendingBatchJobStore`'s // `.standard`-defaulted parameter with no injection seam, so these tests exercise the real @@ -1617,6 +1666,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Kill-Mid-Document Resume Safety Tests (issue #48 / B6) + // // "Verify resume-after-quit never presents partial outputs as complete." Validated by // reading the two halves of the path together: @@ -1682,7 +1732,10 @@ final class MarcutAppTests: XCTestCase { viewModel.add(urls: []) let persisted = PendingBatchJobStore.load() - XCTAssertNotNil(persisted, "A batch with documents still pending/mid-processing must persist a resume record") + XCTAssertNotNil( + persisted, + "A batch with documents still pending/mid-processing must persist a resume record" + ) XCTAssertEqual( Set(persisted?.documentPaths ?? []), Set([midProcessingItem.url.path, queuedItem.url.path]), @@ -1743,7 +1796,10 @@ final class MarcutAppTests: XCTestCase { } } - let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true) + let tempDir = FileManager.default.temporaryDirectory.appendingPathComponent( + UUID().uuidString, + isDirectory: true + ) try FileManager.default.createDirectory(at: tempDir, withIntermediateDirectories: true) defer { try? FileManager.default.removeItem(at: tempDir) } @@ -1769,7 +1825,7 @@ final class MarcutAppTests: XCTestCase { viewModel.resumePendingJob() let deadline = Date().addingTimeInterval(10.0) - while viewModel.items.first?.status == .checking && Date() < deadline { + while viewModel.items.first?.status == .checking, Date() < deadline { try await Task.sleep(nanoseconds: 50_000_000) } @@ -1789,6 +1845,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Failure Message Mapping Tests (issue #46 / B4) + // // `FailureMessagePresenter.message(forCode:)` is the single place that turns a pipeline // `error_code` (or the absence of one, for bridge-level failures) into the user-facing @@ -1821,15 +1878,26 @@ final class MarcutAppTests: XCTestCase { FailureMessagePresenter.message(forCode: nil), "Known code '\(code)' must not fall back to the generic message" ) - XCTAssertTrue(message.contains(FailureMessagePresenter.logHint), "Message for '\(code)' should point to the App Log") + XCTAssertTrue( + message.contains(FailureMessagePresenter.logHint), + "Message for '\(code)' should point to the App Log" + ) seenMessages.insert(message) } - XCTAssertEqual(seenMessages.count, knownCodes.count, "Every known error code should map to a distinct friendly message") + XCTAssertEqual( + seenMessages.count, + knownCodes.count, + "Every known error code should map to a distinct friendly message" + ) } func testFailureMessageFallsBackToGenericForUnknownCode() { let message = FailureMessagePresenter.message(forCode: "SOME_CODE_THAT_DOES_NOT_EXIST") - XCTAssertEqual(message, FailureMessagePresenter.message(forCode: nil), "Unrecognized codes should get the generic message") + XCTAssertEqual( + message, + FailureMessagePresenter.message(forCode: nil), + "Unrecognized codes should get the generic message" + ) XCTAssertTrue(message.contains(FailureMessagePresenter.genericMessage)) } @@ -1862,6 +1930,7 @@ final class MarcutAppTests: XCTestCase { } // MARK: - Power Assertion / Sleep-Wake Tests (B5, issue #47) + // // `PowerAssertionGuard` itself is tested in isolation with injected acquire/release fakes // (no real IOKit calls, deterministic). The ViewModel-integration tests below inject a fresh @@ -1949,7 +2018,11 @@ final class MarcutAppTests: XCTestCase { shouldSucceed = true powerGuard.begin() - XCTAssertEqual(acquireCount, 2, "A later begin() must retry the acquire rather than remembering the earlier failure forever") + XCTAssertEqual( + acquireCount, + 2, + "A later begin() must retry the acquire rather than remembering the earlier failure forever" + ) XCTAssertTrue(powerGuard.isHoldingAssertion) powerGuard.end() } @@ -1981,7 +2054,7 @@ final class MarcutAppTests: XCTestCase { viewModel.ensureHeartbeatMonitorRunning(for: item) let deadline = Date().addingTimeInterval(5.0) - while item.status == .processing && Date() < deadline { + while item.status == .processing, Date() < deadline { try await Task.sleep(nanoseconds: 50_000_000) } @@ -2011,13 +2084,20 @@ final class MarcutAppTests: XCTestCase { XCTAssertFalse(ok, "Download should fail when the Ollama service is disallowed") XCTAssertEqual(acquireCount, 1, "downloadModel must hold the assertion for the duration of the attempt") - XCTAssertEqual(releaseCount, 1, "downloadModel's early failure path must still release the assertion, not leak it") + XCTAssertEqual( + releaseCount, + 1, + "downloadModel's early failure path must still release the assertion, not leak it" + ) } /// Wake with nothing processing must not probe Ollama at all -- the common case (waking up /// with no batch running) should be a pure no-op. - func testHandleSystemWakeNoOpsWhenNothingIsProcessing() async throws { - let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard(acquire: { _ in 1 }, release: { _ in })) + func testHandleSystemWakeNoOpsWhenNothingIsProcessing() async { + let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard( + acquire: { _ in 1 }, + release: { _ in } + )) var healthCheckCallCount = 0 viewModel.wakeOllamaHealthCheck = { healthCheckCallCount += 1; return true } @@ -2029,8 +2109,11 @@ final class MarcutAppTests: XCTestCase { /// If the wake-time health check finds Ollama responsive, in-flight documents must resume /// rather than fail, and `lastHeartbeat` must be refreshed so the heartbeat watchdog doesn't /// see the sleep duration itself as a stall. - func testHandleSystemWakeResumesProcessingWhenHealthCheckPasses() async throws { - let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard(acquire: { _ in 1 }, release: { _ in })) + func testHandleSystemWakeResumesProcessingWhenHealthCheckPasses() async { + let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard( + acquire: { _ in 1 }, + release: { _ in } + )) let item = createTestDocumentItem(status: .processing) let staleHeartbeat = Date().addingTimeInterval(-500) // would already read as stalled by wall-clock alone item.lastHeartbeat = staleHeartbeat @@ -2052,8 +2135,11 @@ final class MarcutAppTests: XCTestCase { /// If the wake-time health check finds Ollama unresponsive, in-flight documents must fail /// immediately with the wake-specific message rather than being left to the generic /// heartbeat-stall message (or hanging until it eventually fires). - func testHandleSystemWakeFailsInFlightDocumentsWhenHealthCheckFails() async throws { - let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard(acquire: { _ in 1 }, release: { _ in })) + func testHandleSystemWakeFailsInFlightDocumentsWhenHealthCheckFails() async { + let viewModel = DocumentRedactionViewModel(powerAssertion: PowerAssertionGuard( + acquire: { _ in 1 }, + release: { _ in } + )) let item = createTestDocumentItem(status: .processing) item.lastHeartbeat = Date() viewModel.items = [item] @@ -2073,18 +2159,18 @@ extension RedactionStatus { var isProcessing: Bool { switch self { case .processing, .analyzing, .redacting: - return true + true default: - return false + false } } var isComplete: Bool { switch self { case .completed: - return true + true default: - return false + false } } } From 0840b8a7048f6f8231cc4746a34361ffb471c7d9 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 21:39:42 -0400 Subject: [PATCH 3/8] ci: enforce ruff and SwiftFormat lint gates Ruff gate widened from a narrow error-tier subset (E9,F63,F7,F82) to the full configured rule set, now that the 288 pre-existing violations are fixed. Adds a SwiftFormat --lint step to the macOS smoke job. Also adds .git-blame-ignore-revs so `git blame` skips the one-time SwiftFormat reformat commit. Co-Authored-By: Claude Sonnet 5 --- .git-blame-ignore-revs | 6 ++++++ .github/workflows/ci.yml | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..e60acf4 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,6 @@ +# Commits listed here are ignored by `git blame` (configure once per clone with: +# git config blame.ignoreRevsFile .git-blame-ignore-revs) +# +# One-time SwiftFormat reformat of the entire Swift source tree -- purely +# mechanical, no logic changes. +4d57122a261e204a6b96c095eb9d9d64a37e9929 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd8a458..f0ab26c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,10 +33,10 @@ jobs: print(f"Version in sync: {py_version}") EOF - - name: Ruff (error-tier lint gate) + - name: Ruff (full lint gate) run: | pip install ruff - ruff check --select E9,F63,F7,F82 src/python tests + ruff check src/python tests smoke: runs-on: macos-14 @@ -67,3 +67,8 @@ jobs: mkdir -p src/swift/MarcutApp/Sources/MarcutApp/Frameworks mkdir -p src/swift/MarcutApp/Sources/MarcutApp/python_site swift build --package-path src/swift/MarcutApp + + - name: SwiftFormat (lint gate) + run: | + brew install swiftformat + swiftformat --lint src/swift/MarcutApp/Sources src/swift/MarcutApp/Tests From a1869edc2824193c41361f2145ae329df75656c2 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 21:40:00 -0400 Subject: [PATCH 4/8] style: fix all 288 ruff violations (E, F, B rule sets) Auto-fixed unused imports/f-strings/unused-variables where safe (verified each removal against real usage, not just ruff's say-so), then manually resolved the categories ruff won't autofix: - E712: assert x == True/False -> assert x / assert not x (all against plain-bool-returning predicates, no numpy ambiguity) - E701/E702: split multi-statement lines (if x: y, a=1; b=2) onto separate lines - E402: moved genuinely-misplaced imports to the top; kept sys.path-fixup imports where the ordering is load-bearing, marked with noqa + reason - B904: chained exceptions with `from e` where the original error is useful context, `from None` where the wrapper message is self-contained - B007: renamed/removed unused loop-control variables - E722: bare `except:` -> `except Exception:` - B017: kept broad `pytest.raises(Exception)` where multiple exception types are legitimately expected (malformed-input corpus tests), with noqa + reason rather than fabricating a narrower type - B023/E731: fixed a real loop-variable-closure risk in docx_io.py and a lambda-assignment in native_setup.py Full suite verified after every batch (555 passed, 6 skipped throughout). One incidental finding spun off separately rather than fixed here: a dead expression removed in test_docx_io.py exposed a real test-coverage gap (only one direction of a bidirectional field-mapping check was wired up). Co-Authored-By: Claude Sonnet 5 --- src/python/marcut/__init__.py | 2 +- src/python/marcut/bootstrapper.py | 1 - src/python/marcut/cli.py | 9 +- src/python/marcut/cluster.py | 22 +++-- src/python/marcut/docx_io.py | 18 ++-- src/python/marcut/docx_revisions.py | 2 +- src/python/marcut/gui.py | 28 +++--- src/python/marcut/llm_timing.py | 1 - src/python/marcut/model.py | 29 ++++-- src/python/marcut/model_enhanced.py | 15 ++- src/python/marcut/native_setup.py | 5 +- src/python/marcut/ollama_manager.py | 8 +- src/python/marcut/pipeline.py | 112 ++++++++++++---------- src/python/marcut/progress.py | 2 +- src/python/marcut/progress_widgets.py | 2 - src/python/marcut/report.py | 3 +- src/python/marcut/report_common.py | 1 - src/python/marcut/rules.py | 6 +- src/python/marcut/setup_wizard.py | 1 - src/python/marcut/unified_redactor.py | 6 +- tests/benchmark/model_benchmark.py | 8 +- tests/scripts/check_dependency_updates.py | 2 +- tests/scripts/create_review_checklist.py | 2 +- tests/scripts/gui_e2e_watchdog.py | 3 +- tests/scripts/run_full_test_suite.py | 1 - tests/scripts/run_llm_matrix.py | 2 +- tests/scripts/run_metadata_matrix.py | 5 +- tests/scripts/test_end_to_end.py | 28 +++--- tests/scripts/test_gui_functionality.py | 1 - tests/scripts/test_macos_app.py | 3 +- tests/scripts/validate_app_environment.py | 18 ++-- tests/scripts/validate_test_outputs.py | 22 ++--- tests/test_chunker.py | 1 - tests/test_docx_io.py | 4 +- tests/test_failure_scenarios.py | 5 +- tests/test_fixes.py | 8 +- tests/test_large_docx_performance.py | 4 +- tests/test_malformed_docx_corpus.py | 4 +- tests/test_metadata_scrubbing.py | 1 - tests/test_model.py | 50 +++++----- tests/test_model_naming.py | 1 - tests/test_pipeline.py | 1 - tests/test_pipeline_fixes.py | 2 - tests/test_progress.py | 9 +- tests/test_report_common.py | 3 +- tests/test_rule_filter.py | 1 - tests/test_rules.py | 57 ++++++----- tests/test_rules_fixes.py | 6 +- tests/test_security.py | 1 - tests/test_unified_redactor.py | 1 - tests/test_url_redaction.py | 5 +- 51 files changed, 261 insertions(+), 271 deletions(-) diff --git a/src/python/marcut/__init__.py b/src/python/marcut/__init__.py index 58f3ace..614d684 100644 --- a/src/python/marcut/__init__.py +++ b/src/python/marcut/__init__.py @@ -1 +1 @@ -from .version import __version__ +from .version import __version__ as __version__ diff --git a/src/python/marcut/bootstrapper.py b/src/python/marcut/bootstrapper.py index 0c66961..83fe239 100644 --- a/src/python/marcut/bootstrapper.py +++ b/src/python/marcut/bootstrapper.py @@ -4,7 +4,6 @@ import os import sys import json -import subprocess from pathlib import Path import tkinter as tk from tkinter import messagebox diff --git a/src/python/marcut/cli.py b/src/python/marcut/cli.py index 802555e..4a831cb 100644 --- a/src/python/marcut/cli.py +++ b/src/python/marcut/cli.py @@ -1,4 +1,5 @@ -import argparse, sys +import argparse +import sys import json import os import shlex @@ -185,14 +186,14 @@ def cli_progress_callback(update: ProgressUpdate): ) if result['success']: - print(f"✅ Redaction completed successfully") + print("✅ Redaction completed successfully") print(f" Entities detected: {result['entity_count']}") print(f" Processing time: {result['duration']:.2f}s") # Show timing breakdown if requested if (getattr(a, 'timing', False) or getattr(a, 'llm_detail', False)) and 'phase_timings' in result: total = result['duration'] - print(f"\n📊 Phase Timing Breakdown:") + print("\n📊 Phase Timing Breakdown:") print(f" {'Phase':<20} {'Time':>8} {'Pct':>6}") print(f" {'-'*20} {'-'*8} {'-'*6}") for phase, duration in result['phase_timings'].items(): @@ -207,7 +208,7 @@ def cli_progress_callback(update: ProgressUpdate): if getattr(a, 'llm_detail', False) and 'llm_timing' in result: llm = result['llm_timing'] llm_total = llm.get('http_request', 0) - print(f"\n🔬 LLM Sub-Phase Detail:") + print("\n🔬 LLM Sub-Phase Detail:") print(f" {'Sub-Phase':<22} {'Time':>8} {'Pct':>6}") print(f" {'-'*22} {'-'*8} {'-'*6}") sub_phases = [ diff --git a/src/python/marcut/cluster.py b/src/python/marcut/cluster.py index 8d4281b..8356a9b 100644 --- a/src/python/marcut/cluster.py +++ b/src/python/marcut/cluster.py @@ -10,20 +10,29 @@ def normalize(entity: str) -> str: if x.endswith(" " + suf): x = x[:-(len(suf)+1)] x = "".join(ch for ch in x if ch.isalnum() or ch.isspace()).strip() - while " " in x: x = x.replace(" "," ") + while " " in x: + x = x.replace(" ", " ") return x class ClusterTable: def __init__(self): - self.next_name = 1; self.next_org = 1; self.next_brand = 1 + self.next_name = 1 + self.next_org = 1 + self.next_brand = 1 self.clusters: Dict[str, List[Dict[str,Any]]] = {"NAME":[], "ORG":[], "BRAND":[]} def _new_id(self, label: str) -> str: if label == "NAME": - k = f"NAME_{self.next_name}"; self.next_name += 1; return k + k = f"NAME_{self.next_name}" + self.next_name += 1 + return k if label == "ORG": - k = f"ORG_{self.next_org}"; self.next_org += 1; return k - k = f"BRAND_{self.next_brand}"; self.next_brand += 1; return k + k = f"ORG_{self.next_org}" + self.next_org += 1 + return k + k = f"BRAND_{self.next_brand}" + self.next_brand += 1 + return k def link(self, label: str, surface: str) -> Tuple[str, float, bool]: n = normalize(surface) @@ -31,7 +40,8 @@ def link(self, label: str, surface: str) -> Tuple[str, float, bool]: for cl in self.clusters[label]: for alias in cl["aliases"]: s = fuzz.token_set_ratio(n, alias) / 100.0 - if s > best[1]: best = (cl, s) + if s > best[1]: + best = (cl, s) if best[0] and (best[1] >= 0.82 or n in best[0]["aliases"]): best[0]["aliases"].add(n) return best[0]["id"], best[1], False diff --git a/src/python/marcut/docx_io.py b/src/python/marcut/docx_io.py index ffc7c14..dc3c836 100644 --- a/src/python/marcut/docx_io.py +++ b/src/python/marcut/docx_io.py @@ -13,7 +13,7 @@ from docx.oxml.ns import qn from datetime import datetime, timezone from typing import List, Dict, Any, Optional, Iterable, Tuple -from dataclasses import dataclass, field, fields +from dataclasses import dataclass, fields def _safe_fromstring(xml_bytes: bytes): """Safe XML parsing that disables entity resolution.""" @@ -487,7 +487,6 @@ def _strip_jpeg_metadata(data: bytes) -> Tuple[bytes, bool]: if i + 1 >= len(data): break length = (data[i] << 8) + data[i + 1] - segment_start = i - 1 segment_end = min(i + length, len(data)) if marker in (0xE1, 0xED): # APP1/APP13 changed = True @@ -1383,7 +1382,6 @@ def _append_run(self, para, run): def _scan_paragraph(self, para): from docx.text.run import Run - from docx.text.paragraph import Paragraph from docx.oxml.ns import qn # Iterate over children to catch runs inside hyperlinks AND drawings (text boxes) @@ -1444,7 +1442,8 @@ def _scan_paragraph(self, para): self._append_run(para, run) self._scan_run_contents(subchild) - self.text += "\n"; self.index.append(("break", None, None)) + self.text += "\n" + self.index.append(("break", None, None)) def _scan_container(self, container): from docx.text.paragraph import Paragraph @@ -1667,7 +1666,8 @@ def _insert_after(self, run: Run, text: str, highlight: bool) -> Run: def _insert_deletion_after(self, anchor_el, text: str, rPr=None): del_el = OxmlElement('w:del') - del_el.set(qn('w:id'), str(self._rev_id)); self._rev_id += 1 + del_el.set(qn('w:id'), str(self._rev_id)) + self._rev_id += 1 del_el.set(qn('w:author'), self.author_name) del_el.set(qn('w:date'), datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')) @@ -1685,7 +1685,8 @@ def _insert_deletion_after(self, anchor_el, text: str, rPr=None): def _insert_insertion_after(self, anchor_el, text: str, rPr=None): ins_el = OxmlElement('w:ins') - ins_el.set(qn('w:id'), str(self._rev_id)); self._rev_id += 1 + ins_el.set(qn('w:id'), str(self._rev_id)) + self._rev_id += 1 ins_el.set(qn('w:author'), self.author_name) ins_el.set(qn('w:date'), datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')) r = self._make_text_run(text, rPr) @@ -2054,7 +2055,7 @@ def _remove(tag: str) -> None: # Define namespace ns = {'ep': 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'} - def _remove_elements(tag: str) -> None: + def _remove_elements(tag: str, app_xml=app_xml, ns=ns) -> None: for elem in app_xml.findall(f'.//ep:{tag}', namespaces=ns): parent = elem.getparent() if parent is not None: @@ -2363,7 +2364,8 @@ def apply_replacements(self, spans: List[Dict[str,Any]], track_changes: bool = T cis = sorted(ci for _, _, ci in chars if ci is not None) if not cis: continue - start_ci = cis[0]; end_ci = cis[-1] + start_ci = cis[0] + end_ci = cis[-1] pre = original[:start_ci] mid = original[start_ci:end_ci+1] post = original[end_ci+1:] diff --git a/src/python/marcut/docx_revisions.py b/src/python/marcut/docx_revisions.py index b016384..0dd4ed5 100644 --- a/src/python/marcut/docx_revisions.py +++ b/src/python/marcut/docx_revisions.py @@ -201,7 +201,7 @@ def accept_revisions_in_docx_bytes(input_path: str, debug: bool = False) -> Tupl try: # Check lxml availability early try: - import lxml.etree + import lxml.etree # noqa: F401 -- import itself is the availability probe except ImportError: return None, False diff --git a/src/python/marcut/gui.py b/src/python/marcut/gui.py index 3bced2c..f4818d6 100644 --- a/src/python/marcut/gui.py +++ b/src/python/marcut/gui.py @@ -11,8 +11,6 @@ import threading import subprocess from pathlib import Path -import json -import tempfile from datetime import datetime import time import requests @@ -442,7 +440,7 @@ def download(): )) except Exception as e: - self.model_status.config(text=f"❌ Error downloading model") + self.model_status.config(text="❌ Error downloading model") self.root.after(0, lambda msg=str(e): messagebox.showerror( "Download Error", f"An error occurred while downloading the model:\n{msg}" @@ -569,7 +567,7 @@ def update_progress_ui(update: ProgressUpdate): def setup_embedded_ollama(self): """Set up embedded Ollama when standard detection fails""" - print(f"[DEBUG] Setting up embedded Ollama...") + print("[DEBUG] Setting up embedded Ollama...") # Try to find and start embedded Ollama directly ollama_binary = self.get_ollama_binary_path() @@ -584,7 +582,7 @@ def setup_embedded_ollama(self): try: response = requests.get(f"{_ollama_base_url()}/api/tags", timeout=10) if response.status_code == 200: - print(f"[DEBUG] Ollama already running") + print("[DEBUG] Ollama already running") self.ollama_status.config(text="✅ Ollama running") self.check_embedded_model() return @@ -592,7 +590,7 @@ def setup_embedded_ollama(self): pass # Start embedded Ollama - print(f"[DEBUG] Starting embedded Ollama service...") + print("[DEBUG] Starting embedded Ollama service...") self.ollama_status.config(text="⚠️ Starting AI service...") # Set up environment @@ -613,27 +611,27 @@ def setup_embedded_ollama(self): ) # Wait for service to start - print(f"[DEBUG] Waiting for Ollama service to start...") - for i in range(15): + print("[DEBUG] Waiting for Ollama service to start...") + for _ in range(15): time.sleep(1) try: response = requests.get(f"{_ollama_base_url()}/api/tags", timeout=5) if response.status_code == 200: - print(f"[DEBUG] Ollama service started successfully") + print("[DEBUG] Ollama service started successfully") self.ollama_status.config(text="✅ Ollama running") self.check_embedded_model() return except requests.exceptions.RequestException: pass - print(f"[DEBUG] Ollama service failed to start") + print("[DEBUG] Ollama service failed to start") self.ollama_status.config(text="❌ Failed to start Ollama") except Exception as e: print(f"[DEBUG] Error setting up embedded Ollama: {e}") self.ollama_status.config(text="❌ Error starting Ollama") else: - print(f"[DEBUG] No embedded Ollama found") + print("[DEBUG] No embedded Ollama found") self.show_setup_wizard() def check_embedded_model(self): @@ -661,7 +659,7 @@ def check_embedded_model(self): def show_setup_wizard(self): """Show the first-run setup wizard for model download""" - print(f"[DEBUG] Showing setup wizard") + print("[DEBUG] Showing setup wizard") # Create a professional welcome dialog response = messagebox.askyesno( @@ -710,12 +708,12 @@ def download(): ) if result.returncode == 0: - print(f"[DEBUG] Model download successful") + print("[DEBUG] Model download successful") self.model_status.config(text=f"✅ Model {self.model_name} ready") self.root.after(0, lambda: self.show_setup_complete()) else: print(f"[DEBUG] Model download failed: {result.stderr}") - self.model_status.config(text=f"❌ Download failed") + self.model_status.config(text="❌ Download failed") self.root.after(0, lambda: messagebox.showerror( "Download Failed", f"Failed to download {self.model_name}.\n\n" @@ -725,7 +723,7 @@ def download(): except Exception as e: print(f"[DEBUG] Exception during model download: {e}") - self.model_status.config(text=f"❌ Download error") + self.model_status.config(text="❌ Download error") self.root.after(0, lambda msg=str(e): messagebox.showerror( "Download Error", f"An error occurred while downloading the model:\n\n{msg}" diff --git a/src/python/marcut/llm_timing.py b/src/python/marcut/llm_timing.py index c305621..d0f6a52 100644 --- a/src/python/marcut/llm_timing.py +++ b/src/python/marcut/llm_timing.py @@ -3,7 +3,6 @@ """ import time import json -import sys import os import threading import requests diff --git a/src/python/marcut/model.py b/src/python/marcut/model.py index 3abe9e7..2a65fbc 100644 --- a/src/python/marcut/model.py +++ b/src/python/marcut/model.py @@ -1,6 +1,7 @@ from typing import List, Dict, Any, Optional, Set, Callable -import json, requests +import json +import requests import os import sys import re @@ -251,7 +252,8 @@ def llama_cpp_extract( entities = data["entities"] all_spans = [] for ent in entities: - if not isinstance(ent, dict): continue + if not isinstance(ent, dict): + continue etext = ent.get("text", "") etype = ent.get("type", "") label = _map_label(etype) @@ -290,13 +292,20 @@ def llama_cpp_extract( def _map_label(lbl: str) -> Optional[str]: t = (lbl or '').strip().upper() - if t in ("NAME", "PERSON", "HUMAN", "INDIVIDUAL"): return "NAME" - if t in ("ORG", "ORGANIZATION", "COMPANY", "INSTITUTION", "BUSINESS"): return "ORG" - if t in ("BRAND", "PRODUCT", "SERVICE"): return "BRAND" - if t in ("LOC", "LOCATION", "GPE", "PLACE", "ADDRESS"): return "LOC" - if t in ("MONEY", "CURRENCY"): return "MONEY" - if t in ("NUMBER", "QUANTITY", "COUNT", "AMOUNT"): return "NUMBER" - if t in ("DATE",): return "DATE" + if t in ("NAME", "PERSON", "HUMAN", "INDIVIDUAL"): + return "NAME" + if t in ("ORG", "ORGANIZATION", "COMPANY", "INSTITUTION", "BUSINESS"): + return "ORG" + if t in ("BRAND", "PRODUCT", "SERVICE"): + return "BRAND" + if t in ("LOC", "LOCATION", "GPE", "PLACE", "ADDRESS"): + return "LOC" + if t in ("MONEY", "CURRENCY"): + return "MONEY" + if t in ("NUMBER", "QUANTITY", "COUNT", "AMOUNT"): + return "NUMBER" + if t in ("DATE",): + return "DATE" # IMPORTANT: no fallback. Unknown labels are dropped. return None @@ -889,7 +898,7 @@ def _schema_fallback_allowed(err: requests.exceptions.HTTPError) -> bool: try: parsed = parse_llm_response(response_text) - except json.JSONDecodeError as first_error: + except json.JSONDecodeError: _log_app_event( "JSON parsing failed. " f"Response length={len(response_text)} chars. Raw response omitted from logs." diff --git a/src/python/marcut/model_enhanced.py b/src/python/marcut/model_enhanced.py index e960703..c750391 100644 --- a/src/python/marcut/model_enhanced.py +++ b/src/python/marcut/model_enhanced.py @@ -31,8 +31,7 @@ import requests import threading import concurrent.futures -from dataclasses import dataclass, asdict -import hashlib +from dataclasses import dataclass from .cancellation import ProcessingDeadlineExceeded, check_processing_deadline, remaining_seconds from .model import ( parse_llm_response, @@ -808,7 +807,7 @@ def ollama_validate( last_error = e print(f"Validation attempt {attempt_idx} failed: HTTP {status}") else: - raise RuntimeError(f"Ollama validation request failed: {e}") + raise RuntimeError(f"Ollama validation request failed: {e}") from e if attempt_idx < len(retry_plan): time.sleep(attempt["wait"]) @@ -973,7 +972,7 @@ def emit_mass_event(payload, progress=None, status_message=None): print(message, flush=True) except UnicodeEncodeError: print(message.encode('ascii', errors='replace').decode('ascii'), flush=True) - except Exception as e: + except Exception: pass all_entities = [] @@ -1478,8 +1477,8 @@ def _get_model(self): try: from llama_cpp import Llama - except ImportError: - raise RuntimeError("llama-cpp-python not installed. Run: pip install llama-cpp-python") + except ImportError as e: + raise RuntimeError("llama-cpp-python not installed. Run: pip install llama-cpp-python") from e # Load model if not cached or if path changed if _llama_model is None or _llama_model_path != self.model_path: @@ -1498,7 +1497,7 @@ def _get_model(self): ) _llama_model_path = self.model_path except Exception as e: - raise RuntimeError(f"Error loading model: {e}") + raise RuntimeError(f"Error loading model: {e}") from e return _llama_model @@ -1516,7 +1515,7 @@ def _generate_response(self, prompt: str, max_tokens: int = 1024) -> str: ) return response['choices'][0]['text'].strip() except Exception as e: - raise RuntimeError(f"Error during inference: {e}") + raise RuntimeError(f"Error during inference: {e}") from e def extract_entities(self, text: str, doc_context: DocumentContext) -> List[Entity]: """Extract entities using local Llama.cpp model. diff --git a/src/python/marcut/native_setup.py b/src/python/marcut/native_setup.py index a8b2b0a..53621d8 100644 --- a/src/python/marcut/native_setup.py +++ b/src/python/marcut/native_setup.py @@ -7,11 +7,9 @@ import subprocess import threading from pathlib import Path -import tempfile import webbrowser import http.server import socketserver -from urllib.parse import urlparse, parse_qs import time class SetupServer: @@ -248,7 +246,8 @@ def log_message(self, format, *args): pass # Create handler with setup instance - handler = lambda *args, **kwargs: SetupHandler(self, *args, **kwargs) + def handler(*args, **kwargs): + return SetupHandler(self, *args, **kwargs) # Start server self.server = socketserver.TCPServer(("127.0.0.1", 0), handler) diff --git a/src/python/marcut/ollama_manager.py b/src/python/marcut/ollama_manager.py index e282c6a..7194f7e 100644 --- a/src/python/marcut/ollama_manager.py +++ b/src/python/marcut/ollama_manager.py @@ -10,9 +10,7 @@ import subprocess import time import requests -import threading import signal -import hashlib from pathlib import Path from typing import Optional, Dict, Any, Callable, TextIO import logging @@ -164,7 +162,7 @@ def start_service(self, timeout: int = 60) -> bool: ) # Wait for service to start - for i in range(timeout): + for _ in range(timeout): if self.is_service_running(): self.is_running = True logger.info(f"Ollama service started (PID: {self.process.pid})") @@ -340,7 +338,7 @@ def _parse_download_progress(self, line: str) -> tuple[Optional[float], Optional return percent, None except ValueError: pass - except: + except Exception: pass # Handle other status messages @@ -476,7 +474,7 @@ def health_check(self) -> Dict[str, Any]: # Try Ollama's own registry first (more reliable for our use case) response = requests.head("https://registry.ollama.ai", timeout=5) health["network_ok"] = response.status_code in [200, 301, 302, 403] - except: + except Exception: # Network might be down, but that's OK if we have cached models health["network_ok"] = False # Only report as error if we don't have the required model diff --git a/src/python/marcut/pipeline.py b/src/python/marcut/pipeline.py index e60865d..32e85eb 100644 --- a/src/python/marcut/pipeline.py +++ b/src/python/marcut/pipeline.py @@ -1,8 +1,29 @@ import sys import io import datetime -from dataclasses import fields +import hashlib +import traceback +import warnings +import time +import os +import tempfile import logging +from dataclasses import fields +from typing import List, Dict, Any, Tuple, Optional, Callable, TypedDict +from .docx_io import DocxMap, MetadataCleaningSettings +from .docx_revisions import accept_revisions_in_docx_bytes +from .chunker import make_chunks +from .rules import run_rules, _is_excluded_combo, _is_excluded, _is_specific_org_span, ADDRESS +from .model_enhanced import ( + LlamaCppRedactionPipeline, + run_enhanced_model, + apply_llm_overrides_to_rule_spans, + LLMChunkExtractionFailed, +) +from .cluster import ClusterTable +from .confidence import combine, low_conf +from .report import write_report, write_json_file, make_private_file +import regex as re # For consistency pass boundaries # Unicode to ASCII mapping for common document characters # These are frequently found in Word documents and cause encoding issues @@ -77,31 +98,6 @@ def safe_print(*args, **kwargs): except Exception: pass -import json -import hashlib -import traceback -import warnings -import time -import os -import tempfile -from typing import List, Dict, Any, Tuple, Optional, Callable, TypedDict -from .docx_io import DocxMap, MetadataCleaningSettings -from .docx_revisions import accept_revisions_in_docx_bytes -from .chunker import make_chunks -from .rules import run_rules, _is_excluded_combo, _is_excluded, _is_specific_org_span, ADDRESS -from .model_enhanced import ( - LlamaCppRedactionPipeline, - run_enhanced_model, - apply_llm_overrides_to_rule_spans, - DocumentContext, - build_prompt_context, - LLMChunkExtractionFailed, -) -from .cluster import ClusterTable -from .confidence import combine, low_conf -from .report import write_report, write_json_file, make_private_file -import regex as re # For consistency pass boundaries - logger = logging.getLogger(__name__) def _metadata_env_enabled(name: str) -> bool: @@ -141,7 +137,7 @@ def _merge_overlaps(spans: List[Dict[str,Any]], text: str) -> List[Dict[str,Any] # Validate span data structures valid_spans = [] - for i, span in enumerate(spans): + for span in spans: if not isinstance(span, dict): continue if not all(key in span for key in ["start", "end", "label"]): @@ -686,13 +682,15 @@ def _bounded_patterns(values) -> List[str]: for match in re.finditer(pattern_str, text): matched_text = match.group(0) label = case_sensitive_map.get(matched_text) - if not label: continue + if not label: + continue s, e = match.span() if _overlaps_existing(s, e, label, matched_text): continue key = (s, e, label) - if key in existing_keys or key in new_keys: continue + if key in existing_keys or key in new_keys: + continue new_spans.append({ "start": s, "end": e, "label": label, "text": matched_text, @@ -700,7 +698,8 @@ def _bounded_patterns(values) -> List[str]: }) new_keys.add(key) except Exception as e: - if debug: print(f"Consistency Pass Error (CS): {e}") + if debug: + print(f"Consistency Pass Error (CS): {e}") # Build regex for case-insensitive (ORGs) if case_insensitive_map: @@ -712,13 +711,15 @@ def _bounded_patterns(values) -> List[str]: matched_text = match.group(0) # Lookup by lowercase label = case_insensitive_map.get(matched_text.lower()) - if not label: continue + if not label: + continue s, e = match.span() if _overlaps_existing(s, e, label, matched_text): continue key = (s, e, label) - if key in existing_keys or key in new_keys: continue + if key in existing_keys or key in new_keys: + continue new_spans.append({ "start": s, "end": e, "label": label, "text": matched_text, @@ -726,7 +727,8 @@ def _bounded_patterns(values) -> List[str]: }) new_keys.add(key) except Exception as e: - if debug: print(f"Consistency Pass Error (CI): {e}") + if debug: + print(f"Consistency Pass Error (CI): {e}") # 3. Fuzzy Scan for ORGs (Per-candidate, expensive but necessary for complex forms) # Only iterate ORG candidates @@ -753,16 +755,22 @@ def _bounded_patterns(values) -> List[str]: try: for match in re.finditer(fuzzy_pattern, text, flags=re.IGNORECASE): s, e = match.span() - if exclude_if and exclude_if(cand_text, label): continue - if s > 0 and text[s - 1].isalnum(): continue - if e < len(text) and text[e:e+1].isalnum(): continue - if _overlaps_existing(s, e, label, text[s:e]): continue + if exclude_if and exclude_if(cand_text, label): + continue + if s > 0 and text[s - 1].isalnum(): + continue + if e < len(text) and text[e:e+1].isalnum(): + continue + if _overlaps_existing(s, e, label, text[s:e]): + continue key = (s, e, label) - if key in existing_keys or key in new_keys: continue + if key in existing_keys or key in new_keys: + continue # Length check - if (e - s) < max(4, len("".join(norm_tokens)) - 1): continue + if (e - s) < max(4, len("".join(norm_tokens)) - 1): + continue new_spans.append({ "start": s, "end": e, "label": label, "text": text[s:e], @@ -1417,7 +1425,6 @@ def _finalize_and_write( spans = _drop_invalid_spans(text, spans, warnings, suppressed, debug=debug) ct = ClusterTable() - url_counter = {} # Assign entity IDs for clustering and consistent numbering # Use generic counters for exact-match types @@ -1646,7 +1653,7 @@ def _sync_dm_warnings() -> None: error_code="REPORT_SAVE_FAILED", technical_details=f"Report path: {report_path}, Error: {str(e)}", original_error=e - ) + ) from e _replace_existing_temp(report_temp_path, report_path) _replace_existing_temp(report_html_temp_path, os.path.splitext(report_path)[0] + ".html") @@ -1663,7 +1670,7 @@ def _sync_dm_warnings() -> None: error_code="ARTIFACT_FINALIZE_FAILED", technical_details=str(e), original_error=e, - ) + ) from e _cleanup_temp_artifacts(temp_paths) return 0 @@ -1906,7 +1913,7 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: error_code="DOC_LOAD_FAILED", technical_details=f"Input path: {input_path}, Error: {str(e)}", original_error=e - ) + ) from e # Enhanced error handling for rules processing try: @@ -1920,7 +1927,7 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: error_code="RULES_ENGINE_FAILED", technical_details=f"Error in rules processing: {str(e)}", original_error=e - ) + ) from e if guardrailed_mode: rule_spans = _filter_excluded_combo_spans(text, rule_spans, suppressed) @@ -1973,7 +1980,7 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: error_code="OUTPUT_SAVE_FAILED", technical_details=f"Output path: {output_path}, Error: {str(e)}", original_error=e - ) + ) from e if normalized_mode in llm_modes: # Enhanced error handling for AI processing @@ -2027,7 +2034,7 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: f"after retries. Unanalyzed ranges: {ranges}" ), original_error=e - ) + ) from e except Exception as e: # Check for specific error patterns error_str = str(e).lower() @@ -2037,28 +2044,28 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: error_code="AI_SERVICE_UNAVAILABLE", technical_details=f"Ollama service error: {str(e)}. Ensure Ollama is running and accessible.", original_error=e - ) + ) from e elif "timeout" in error_str or "deadline" in error_str: raise RedactionError( message="AI processing timed out", error_code="AI_PROCESSING_TIMEOUT", technical_details=f"Model: {model_id}, Error: {str(e)}. Try with a smaller document or different model.", original_error=e - ) + ) from e elif "model" in error_str and ("not found" in error_str or "pull" in error_str): raise RedactionError( message="AI model is not available", error_code="AI_MODEL_UNAVAILABLE", technical_details=f"Model: {model_id}, Error: {str(e)}. Ensure the model is downloaded and available.", original_error=e - ) + ) from e else: raise RedactionError( message="AI processing failed with an unexpected error", error_code="AI_PROCESSING_FAILED", technical_details=f"Model: {model_id}, Error: {str(e)}", original_error=e - ) + ) from e if guardrailed_mode: model_spans = _filter_excluded_combo_spans(text, model_spans, suppressed) @@ -2132,7 +2139,7 @@ def _normalize_confidence(value: float, fallback: float = 0.95) -> float: error_code="OUTPUT_SAVE_FAILED", technical_details=f"Output path: {output_path}, Error: {str(e)}", original_error=e - ) + ) from e except RedactionError as err: if debug: @@ -2506,7 +2513,6 @@ def _extract_text_from_part(part_blob) -> str: from docx.oxml.ns import qn from lxml import etree import posixpath - import zipfile def _iter_part_elements(): if dm.doc.element is not None: @@ -4218,7 +4224,7 @@ def scrub_metadata_only( # COPY PATH: Safe handling for None preset import shutil if debug: - print(f"[MARCUT_PIPELINE] None preset: Copying file without processed save.") + print("[MARCUT_PIPELINE] None preset: Copying file without processed save.") shutil.copy2(input_path, output_path) return (True, "", None) diff --git a/src/python/marcut/progress.py b/src/python/marcut/progress.py index ebf1b9c..01eb50b 100644 --- a/src/python/marcut/progress.py +++ b/src/python/marcut/progress.py @@ -3,7 +3,7 @@ """ import time -from typing import Dict, Any, Callable, Optional +from typing import Callable, Optional from dataclasses import dataclass from enum import Enum diff --git a/src/python/marcut/progress_widgets.py b/src/python/marcut/progress_widgets.py index 8293e56..1261a43 100644 --- a/src/python/marcut/progress_widgets.py +++ b/src/python/marcut/progress_widgets.py @@ -4,9 +4,7 @@ import tkinter as tk from tkinter import ttk -import math import time -from typing import Optional class PieProgressWidget(tk.Canvas): diff --git a/src/python/marcut/report.py b/src/python/marcut/report.py index 78345b7..0fdd807 100644 --- a/src/python/marcut/report.py +++ b/src/python/marcut/report.py @@ -9,7 +9,7 @@ import os from typing import Any, Dict, List, Optional -from .report_common import escape_html, get_base_css +from .report_common import escape_html def write_json_file(path: str, data: Dict[str, Any]) -> None: @@ -174,7 +174,6 @@ def _generate_html_audit_report(data: Dict[str, Any], input_path: str, html_path spans = data.get('spans', []) created_at = data.get('created_at', '') model = data.get('model', 'Unknown') - input_hash = data.get('input_sha256', '')[:16] warnings = data.get('warnings') or [] suppressed = data.get('suppressed') or [] diff --git a/src/python/marcut/report_common.py b/src/python/marcut/report_common.py index c8a06e2..7d486c6 100644 --- a/src/python/marcut/report_common.py +++ b/src/python/marcut/report_common.py @@ -9,7 +9,6 @@ import mimetypes import os import plistlib -import stat import subprocess from typing import Any, Dict, List, Optional diff --git a/src/python/marcut/rules.py b/src/python/marcut/rules.py index 37697ba..02caffa 100644 --- a/src/python/marcut/rules.py +++ b/src/python/marcut/rules.py @@ -757,12 +757,14 @@ def _compile_address_patterns() -> re.Pattern: def luhn_ok(s: str) -> bool: digits = [int(c) for c in re.sub(r"\D", "", s)] - if len(digits) < 13 or len(digits) > 19: return False + if len(digits) < 13 or len(digits) > 19: + return False checksum, parity = 0, len(digits) % 2 for i, d in enumerate(digits): if i % 2 == parity: d *= 2 - if d > 9: d -= 9 + if d > 9: + d -= 9 checksum += d return checksum % 10 == 0 diff --git a/src/python/marcut/setup_wizard.py b/src/python/marcut/setup_wizard.py index 8119aad..800044b 100644 --- a/src/python/marcut/setup_wizard.py +++ b/src/python/marcut/setup_wizard.py @@ -5,7 +5,6 @@ import sys import os import threading -import requests from pathlib import Path import json diff --git a/src/python/marcut/unified_redactor.py b/src/python/marcut/unified_redactor.py index db9df5a..eb1065b 100644 --- a/src/python/marcut/unified_redactor.py +++ b/src/python/marcut/unified_redactor.py @@ -58,10 +58,10 @@ if os.environ.get("MARCUT_DEBUG_PATH") == "1": print("DEBUG sys.path:", sys.path, file=sys.stderr) -import re +import re # noqa: E402 -- must follow the sys.path fixup above # Import the pipeline with strict package import (no fallbacks) -import marcut.pipeline as pipeline +import marcut.pipeline as pipeline # noqa: E402 -- must resolve against the sys.path fixup above, not the system path def validate_model_name(model: str) -> bool: @@ -391,7 +391,7 @@ def main(): # Exit with appropriate code if result['success']: - print(f"✅ Redaction completed successfully") + print("✅ Redaction completed successfully") print(f" Input: {result['input_file']}") print(f" Output: {result['output_file']}") print(f" Report: {result['report_file']}") diff --git a/tests/benchmark/model_benchmark.py b/tests/benchmark/model_benchmark.py index d8fe45b..30d1644 100644 --- a/tests/benchmark/model_benchmark.py +++ b/tests/benchmark/model_benchmark.py @@ -86,7 +86,7 @@ def run_gguf_extraction( elif 'MARCUT_SYSTEM_PROMPT_PATH' in os.environ: del os.environ['MARCUT_SYSTEM_PROMPT_PATH'] - from marcut.model import llama_cpp_extract, get_system_prompt, _map_label, _find_entity_spans + from marcut.model import llama_cpp_extract timing = { "prompt_build": 0.0, "http_request": 0.0, "ollama_model_load": 0.0, @@ -156,7 +156,7 @@ def check_ollama() -> bool: try: resp = requests.get('http://127.0.0.1:11434/api/tags', timeout=5) return resp.status_code == 200 - except: + except Exception: return False @@ -167,7 +167,7 @@ def get_available_ollama_models() -> List[str]: resp = requests.get('http://127.0.0.1:11434/api/tags', timeout=5) data = resp.json() return [m['name'] for m in data.get('models', [])] - except: + except Exception: return [] @@ -279,7 +279,7 @@ def main(): timing_detail = None error = None - for run in range(args.runs): + for _ in range(args.runs): try: spans, timing = run_extraction(path_or_id, text, args.prompt, is_gguf=is_gguf) times.append(timing['http_request']) diff --git a/tests/scripts/check_dependency_updates.py b/tests/scripts/check_dependency_updates.py index 5386d21..ded5bca 100644 --- a/tests/scripts/check_dependency_updates.py +++ b/tests/scripts/check_dependency_updates.py @@ -138,7 +138,7 @@ def main(): if updates["error"]: print(f"{RED}❌ Failed to check:{NC}") - for pkg, curr, _ in updates["error"]: + for pkg, _, _ in updates["error"]: print(f" {pkg}") print() diff --git a/tests/scripts/create_review_checklist.py b/tests/scripts/create_review_checklist.py index acb2814..fa5914b 100755 --- a/tests/scripts/create_review_checklist.py +++ b/tests/scripts/create_review_checklist.py @@ -153,7 +153,7 @@ def generate_review_checklist(results: dict) -> str: |----------|------------------|-------------------|-------------------|------------| """ - for i, result in enumerate(results['results'], 1): + for result in results['results']: doc_name = Path(result['source_file']).name template_content += f"| {doc_name} | [Score/10] | [Score/10] | [Preferred] | [Issues] |\n" diff --git a/tests/scripts/gui_e2e_watchdog.py b/tests/scripts/gui_e2e_watchdog.py index c97f6dd..99b01e8 100644 --- a/tests/scripts/gui_e2e_watchdog.py +++ b/tests/scripts/gui_e2e_watchdog.py @@ -22,7 +22,6 @@ import argparse import json -import os import shutil import subprocess import sys @@ -184,7 +183,7 @@ def make_input_docx(default_path: Path) -> Path: d.save(tmp) return tmp except Exception: - raise SystemExit('No input docx available and python-docx not importable') + raise SystemExit('No input docx available and python-docx not importable') from None def run_one(app_bin: Path, input_path: Path, outdir: Path, mode: str, model: str, timeout_sec: int, backend: str = None) -> bool: diff --git a/tests/scripts/run_full_test_suite.py b/tests/scripts/run_full_test_suite.py index 68ae43b..3b86dff 100755 --- a/tests/scripts/run_full_test_suite.py +++ b/tests/scripts/run_full_test_suite.py @@ -12,7 +12,6 @@ import sys import os from pathlib import Path -from datetime import datetime REPO_ROOT = Path(__file__).resolve().parents[2] diff --git a/tests/scripts/run_llm_matrix.py b/tests/scripts/run_llm_matrix.py index aa21624..98a220b 100644 --- a/tests/scripts/run_llm_matrix.py +++ b/tests/scripts/run_llm_matrix.py @@ -19,7 +19,7 @@ from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Dict, Iterable, List, Optional, Set, Tuple +from typing import Dict, Iterable, List, Set, Tuple REPO_ROOT = Path(__file__).resolve().parents[2] diff --git a/tests/scripts/run_metadata_matrix.py b/tests/scripts/run_metadata_matrix.py index 1a8e313..f809512 100644 --- a/tests/scripts/run_metadata_matrix.py +++ b/tests/scripts/run_metadata_matrix.py @@ -3,7 +3,6 @@ import csv import json import os -import re import zipfile from dataclasses import fields from pathlib import Path @@ -16,8 +15,8 @@ if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) -from marcut.docx_io import MetadataCleaningSettings -from marcut import pipeline +from marcut.docx_io import MetadataCleaningSettings # noqa: E402 -- must follow the sys.path fixup above +from marcut import pipeline # noqa: E402 -- must follow the sys.path fixup above def read_baseline_args(log_path: Path) -> List[str]: diff --git a/tests/scripts/test_end_to_end.py b/tests/scripts/test_end_to_end.py index fb498d7..d499102 100755 --- a/tests/scripts/test_end_to_end.py +++ b/tests/scripts/test_end_to_end.py @@ -33,8 +33,8 @@ PSUTIL_AVAILABLE = False try: - from marcut.cli import main as marcut_main - from marcut.pipeline import RedactionError + from marcut.cli import main as marcut_main # noqa: F401 -- import itself is the availability probe + from marcut.pipeline import RedactionError # noqa: F401 -- import itself is the availability probe except ImportError as e: print(f"❌ Failed to import marcut: {e}") print("Please install marcut with: pip install -e .") @@ -440,9 +440,9 @@ def run_single_file_test(self, source_file: Path) -> Dict: # Print summary print(f" 📊 Comparison: {comparison}") if validation.get("expected_corrupt"): - print(f" ⚠️ Expected corrupt sample; validation failures ignored") + print(" ⚠️ Expected corrupt sample; validation failures ignored") elif validation["automated_checks"] == "pass": - print(f" ✅ Automated validation passed") + print(" ✅ Automated validation passed") else: print(f" ❌ Automated validation failed: {', '.join(validation['issues'])}") @@ -543,7 +543,7 @@ def test_app_bundle(self) -> Dict: if not self.args.test_app_bundle: return {"app_bundle_tested": False, "reason": "Not requested"} - print(f"\n🍎 Testing macOS App Bundle...") + print("\n🍎 Testing macOS App Bundle...") # Import the app bundle tester try: @@ -586,7 +586,7 @@ def test_app_bundle(self) -> Dict: def run(self): """Run the complete test suite""" - print(f"🚀 Starting Marcut End-to-End Test Suite") + print("🚀 Starting Marcut End-to-End Test Suite") print(f"📅 Test Run ID: {self.test_run_id}") print(f"📁 Output Directory: {self.output_dir}") print(f"🤖 AI Available: {self.ollama_available}") @@ -613,14 +613,14 @@ def run(self): if app_bundle_result.get("app_bundle_tested"): report["app_bundle_test"] = app_bundle_result - report_path = self.save_test_report(report) + self.save_test_report(report) # Print final summary self.print_final_summary(report) # Check app bundle test success if app_bundle_result.get("app_bundle_tested") and not app_bundle_result.get("overall_success", True): - print(f"\n❌ App bundle tests failed") + print("\n❌ App bundle tests failed") return 1 # Return appropriate exit code @@ -631,11 +631,11 @@ def run(self): print(f"\n⚠️ {failed_validations} files had validation failures") return 1 - print(f"\n✅ All tests completed successfully!") + print("\n✅ All tests completed successfully!") return 0 except KeyboardInterrupt: - print(f"\n⏹️ Test suite interrupted by user") + print("\n⏹️ Test suite interrupted by user") return 130 except Exception as e: print(f"\n💥 Test suite failed: {e}") @@ -648,9 +648,9 @@ def print_final_summary(self, report: Dict): """Print final test summary""" summary = report["summary"] - print(f"\n" + "=" * 60) - print(f"📊 FINAL TEST SUMMARY") - print(f"=" * 60) + print("\n" + "=" * 60) + print("📊 FINAL TEST SUMMARY") + print("=" * 60) print(f"📄 Total Files Tested: {summary['total_files_tested']}") if summary.get("expected_corrupt_files"): print(f"🧪 Expected Corrupt Samples: {summary['expected_corrupt_files']}") @@ -661,7 +661,7 @@ def print_final_summary(self, report: Dict): print(f"⏱️ Total Time: {summary['total_processing_time']:.1f}s") # Print pathway comparisons - print(f"\n📈 Pathway Comparisons:") + print("\n📈 Pathway Comparisons:") comparisons = {} for result in self.results: comparison = result.get("comparison", "unknown") diff --git a/tests/scripts/test_gui_functionality.py b/tests/scripts/test_gui_functionality.py index bec6803..5871934 100755 --- a/tests/scripts/test_gui_functionality.py +++ b/tests/scripts/test_gui_functionality.py @@ -1823,7 +1823,6 @@ def test_accessibility_identifiers(self) -> bool: """Test that key accessibility identifiers exist and respond to basic actions.""" print("\n🧭 Testing Accessibility Identifiers...") - app_name = self.app_path.stem all_ok = True # Main window controls diff --git a/tests/scripts/test_macos_app.py b/tests/scripts/test_macos_app.py index 46b54cd..4e291a9 100755 --- a/tests/scripts/test_macos_app.py +++ b/tests/scripts/test_macos_app.py @@ -18,10 +18,9 @@ import plistlib import subprocess import sys -import time from datetime import datetime from pathlib import Path -from typing import Dict, List, Optional, Tuple +from typing import Dict, Optional REPO_ROOT = Path(__file__).resolve().parents[2] diff --git a/tests/scripts/validate_app_environment.py b/tests/scripts/validate_app_environment.py index 820a8e5..0f10f28 100755 --- a/tests/scripts/validate_app_environment.py +++ b/tests/scripts/validate_app_environment.py @@ -21,7 +21,7 @@ import time from datetime import datetime from pathlib import Path -from typing import Dict, List, Optional, Tuple +from typing import Dict, Optional REPO_ROOT = Path(__file__).resolve().parents[2] @@ -422,7 +422,7 @@ def test_model_discovery(self) -> bool: # Check if we can access model info (doesn't download, just checks availability) test_model = "qwen2.5:14b" request = urllib.request.Request( - f"http://localhost:11434/api/show", + "http://localhost:11434/api/show", data=json.dumps({"name": test_model}).encode(), headers={ "Content-Type": "application/json", @@ -623,19 +623,19 @@ def run_all_tests(self) -> Dict: # Provide recommendations if not overall_success: - print(f"\n🔧 RECOMMENDATIONS:") + print("\n🔧 RECOMMENDATIONS:") if not results.get("PythonKit Environment", False): - print(f" • Fix Python framework bundling in build process") - print(f" • Ensure Python.framework is properly signed") + print(" • Fix Python framework bundling in build process") + print(" • Ensure Python.framework is properly signed") if not results.get("Ollama Service Detection", False): - print(f" • Bundle Ollama binary in app resources") - print(f" • Or ensure system Ollama is available") + print(" • Bundle Ollama binary in app resources") + print(" • Or ensure system Ollama is available") if not results.get("App Container Access", False): - print(f" • Check app bundle permissions") - print(f" • Verify app is properly signed") + print(" • Check app bundle permissions") + print(" • Verify app is properly signed") # Return comprehensive results return { diff --git a/tests/scripts/validate_test_outputs.py b/tests/scripts/validate_test_outputs.py index 87a61cd..17ffecd 100755 --- a/tests/scripts/validate_test_outputs.py +++ b/tests/scripts/validate_test_outputs.py @@ -18,7 +18,6 @@ from pathlib import Path from typing import Dict, List, Tuple, Optional import zipfile -import xml.etree.ElementTree as ET REPO_ROOT = Path(__file__).resolve().parents[2] @@ -243,7 +242,6 @@ def validate_app_bundle(self, app_path: Optional[Path] = None) -> Dict: return validation validation["app_found"] = True - app_path_str = str(app_path) # Check executable executable = app_path / "Contents/MacOS/MarcutApp" @@ -523,7 +521,7 @@ def validate_test_results(self, include_app_bundle: bool = True) -> Dict: app_startup_validation = None if include_app_bundle: - print(f"\n🍎 Validating macOS App Bundle...") + print("\n🍎 Validating macOS App Bundle...") app_bundle_validation = self.validate_app_bundle() if app_bundle_validation["app_found"]: @@ -542,7 +540,7 @@ def validate_test_results(self, include_app_bundle: bool = True) -> Dict: # Test app startup if bundle is valid if app_bundle_validation["valid"]: - print(f"\n🚀 Testing App Startup...") + print("\n🚀 Testing App Startup...") app_startup_validation = self.validate_app_startup() startup_status = "✅" if app_startup_validation["startup_success"] else "❌" @@ -553,7 +551,7 @@ def validate_test_results(self, include_app_bundle: bool = True) -> Dict: for error in app_startup_validation["errors_found"]: print(f" • {error}") else: - print(f" ⚠️ App bundle not found - skipping app validation") + print(" ⚠️ App bundle not found - skipping app validation") # Generate summary total_pairs = len(results) @@ -581,9 +579,9 @@ def validate_test_results(self, include_app_bundle: bool = True) -> Dict: summary["overall_success"] = file_success and app_success - print(f"\n" + "=" * 60) - print(f"📊 COMPREHENSIVE VALIDATION SUMMARY") - print(f"=" * 60) + print("\n" + "=" * 60) + print("📊 COMPREHENSIVE VALIDATION SUMMARY") + print("=" * 60) print(f"📁 Test file pairs: {valid_pairs}/{total_pairs} valid") if include_app_bundle: if app_bundle_validation: @@ -592,13 +590,13 @@ def validate_test_results(self, include_app_bundle: bool = True) -> Dict: print(f"🍎 App bundle: {bundle_status} valid") print(f"🚀 App startup: {startup_status} successful") else: - print(f"🍎 App bundle: ⚠️ not found") + print("🍎 App bundle: ⚠️ not found") overall_status = "✅ PASSED" if summary["overall_success"] else "❌ FAILED" print(f"🎯 Overall: {overall_status}") if self.issues: - print(f"\n⚠️ Additional issues:") + print("\n⚠️ Additional issues:") for issue in self.issues: print(f" • {issue}") @@ -688,12 +686,12 @@ def main(): if app_issues: error_messages.append("App bundle validation failed") - print(f"\n⚠️ Validation issues found:") + print("\n⚠️ Validation issues found:") for msg in error_messages: print(f" • {msg}") return 1 - print(f"\n✅ All validations passed!") + print("\n✅ All validations passed!") return 0 diff --git a/tests/test_chunker.py b/tests/test_chunker.py index 93392c8..95e8b6d 100644 --- a/tests/test_chunker.py +++ b/tests/test_chunker.py @@ -2,7 +2,6 @@ Tests for the chunker module, including Phase 1 small document optimization. """ -import pytest from marcut.chunker import make_chunks, SMALL_DOC_THRESHOLD diff --git a/tests/test_docx_io.py b/tests/test_docx_io.py index 8dc6bf9..8533d92 100644 --- a/tests/test_docx_io.py +++ b/tests/test_docx_io.py @@ -159,7 +159,7 @@ def test_xml_with_namespace(self): def test_malformed_xml_raises(self): """Test that malformed XML raises an error.""" xml = b"" - with pytest.raises(Exception): + with pytest.raises(Exception): # noqa: B017 -- exact parser error type is intentionally unspecified _safe_fromstring(xml) def test_xxe_prevention(self): @@ -191,9 +191,7 @@ def test_bidirectional_mapping(self): def test_all_fields_have_cli_args(self): """Test that all MetadataCleaningSettings bool fields have CLI args.""" - from dataclasses import fields settings = MetadataCleaningSettings() - setting_fields = {f.name for f in fields(settings) if f.type == bool} mapped_fields = set(CLI_ARG_MAP.values()) # All mapped fields should be in settings diff --git a/tests/test_failure_scenarios.py b/tests/test_failure_scenarios.py index 2a4bee7..2ac92c8 100644 --- a/tests/test_failure_scenarios.py +++ b/tests/test_failure_scenarios.py @@ -14,7 +14,6 @@ import pytest import os -import io import tempfile import shutil import zipfile @@ -28,7 +27,7 @@ # Check if we're in an environment where marcut is available try: from marcut.model import ollama_extract, get_ollama_base_url, parse_llm_response - from marcut.pipeline import run_redaction, RedactionError + from marcut.pipeline import run_redaction from marcut.docx_io import DocxMap MARCUT_AVAILABLE = True except ImportError: @@ -449,7 +448,7 @@ def test_docx_with_malformed_revisions(self, temp_dir): try: dm = DocxMap.load(str(corrupt_path)) assert "Test content" in dm.text - except Exception as e: + except Exception: # If it fails, that's also acceptable - we're testing error handling pass diff --git a/tests/test_fixes.py b/tests/test_fixes.py index b3c9c85..93b74e7 100644 --- a/tests/test_fixes.py +++ b/tests/test_fixes.py @@ -6,7 +6,7 @@ # Ensure we can import marcut sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from marcut.pipeline import _merge_overlaps, _snap_to_boundaries +from marcut.pipeline import _merge_overlaps from marcut.unified_redactor import validate_parameters # We need to test model_enhanced but it requires significant mocking. # We'll focus on the logic we can isolate or verify basic import safety. @@ -28,12 +28,14 @@ def test_merge_overlaps_updates_text(self): self.assertEqual(m["text"], "23456") def test_cli_validation_balanced_rejected(self): - with open("dummy_balanced.docx", "w") as f: f.write("dummy") + with open("dummy_balanced.docx", "w") as f: + f.write("dummy") try: with self.assertRaises(ValueError): validate_parameters("dummy_balanced.docx", "out.docx", "rep.json", mode="balanced") finally: - if os.path.exists("dummy_balanced.docx"): os.remove("dummy_balanced.docx") + if os.path.exists("dummy_balanced.docx"): + os.remove("dummy_balanced.docx") def test_pipeline_variable_safety(self): # We can't easily execute the full pipeline without mocking models, diff --git a/tests/test_large_docx_performance.py b/tests/test_large_docx_performance.py index 9cd2e34..75c6663 100644 --- a/tests/test_large_docx_performance.py +++ b/tests/test_large_docx_performance.py @@ -3,7 +3,6 @@ import io import json import os -import resource import struct import subprocess import sys @@ -28,7 +27,6 @@ IMPORTS_SUCCESS = False try: - from marcut.docx_io import DocxMap, MetadataCleaningSettings DOCX_IO_IMPORTS_SUCCESS = True except Exception: DOCX_IO_IMPORTS_SUCCESS = False @@ -122,7 +120,7 @@ def _build_synthetic_docx(path: Path) -> None: table = doc.add_table(rows=36, cols=4) for row_idx, row in enumerate(table.rows): row.cells[0].text = f"Row {row_idx}" - row.cells[1].text = f"Acme Confidential Holdings LLC" + row.cells[1].text = "Acme Confidential Holdings LLC" row.cells[2].text = f"Client {row_idx} SSN 123-45-{row_idx % 10000:04d}" row.cells[3].text = f"https://example.com/client/{row_idx}" diff --git a/tests/test_malformed_docx_corpus.py b/tests/test_malformed_docx_corpus.py index 0bbb900..2964329 100644 --- a/tests/test_malformed_docx_corpus.py +++ b/tests/test_malformed_docx_corpus.py @@ -56,13 +56,13 @@ class TestMalformedDocxCorpusLoad: def test_variant_fails_to_load(self, corrupt_variant): name, path = corrupt_variant - with pytest.raises(Exception): + with pytest.raises(Exception): # noqa: B017 -- corpus variants fail with different exception types by design DocxMap.load_accepting_revisions(str(path)) def test_variant_never_hangs_on_load(self, corrupt_variant): name, path = corrupt_variant start = time.perf_counter() - with pytest.raises(Exception): + with pytest.raises(Exception): # noqa: B017 -- corpus variants fail with different exception types by design DocxMap.load_accepting_revisions(str(path)) elapsed = time.perf_counter() - start assert elapsed < MAX_FAIL_SECONDS, f"{name}: DocxMap.load took {elapsed:.2f}s -- looks hung" diff --git a/tests/test_metadata_scrubbing.py b/tests/test_metadata_scrubbing.py index 81438d5..ecef6e5 100644 --- a/tests/test_metadata_scrubbing.py +++ b/tests/test_metadata_scrubbing.py @@ -14,7 +14,6 @@ import unittest import zipfile from dataclasses import fields -from pathlib import Path from xml.etree import ElementTree as ET try: diff --git a/tests/test_model.py b/tests/test_model.py index c775565..36ea155 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -204,29 +204,29 @@ class TestValidCandidate: def test_valid_name(self): """Test valid person name.""" - assert _valid_candidate("John Smith", "NAME") == True - assert _valid_candidate("Mary Jane Watson", "NAME") == True + assert _valid_candidate("John Smith", "NAME") + assert _valid_candidate("Mary Jane Watson", "NAME") def test_single_word_name_rejected(self): """Test that single-word names are rejected.""" - assert _valid_candidate("John", "NAME") == False - assert _valid_candidate("Smith", "NAME") == False + assert not _valid_candidate("John", "NAME") + assert not _valid_candidate("Smith", "NAME") def test_valid_org(self): """Test valid organization names.""" - assert _valid_candidate("Sample 123 Corporation Inc.", "ORG") == True - assert _valid_candidate("Sample 123 & Associates LLC", "ORG") == True + assert _valid_candidate("Sample 123 Corporation Inc.", "ORG") + assert _valid_candidate("Sample 123 & Associates LLC", "ORG") def test_boilerplate_rejected(self): """Test that boilerplate terms are rejected.""" - assert _valid_candidate("the Agreement", "ORG") == False - assert _valid_candidate("Section 1", "NAME") == False - assert _valid_candidate("Board of Directors", "ORG") == False + assert not _valid_candidate("the Agreement", "ORG") + assert not _valid_candidate("Section 1", "NAME") + assert not _valid_candidate("Board of Directors", "ORG") def test_empty_string_rejected(self): """Test that empty strings are rejected.""" - assert _valid_candidate("", "NAME") == False - assert _valid_candidate(" ", "ORG") == False + assert not _valid_candidate("", "NAME") + assert not _valid_candidate(" ", "ORG") class TestExclusionNormalization: @@ -246,14 +246,14 @@ def test_normalize_strips_possessive(self): def test_matches_exclusion_literal_singularizes(self): literals = {"agreement", "company"} - assert _matches_exclusion_literal("agreements", literals) == True - assert _matches_exclusion_literal("company(s)", literals) == True - assert _matches_exclusion_literal("cats", literals) == False - assert _matches_exclusion_literal("parties", {"party"}) == True + assert _matches_exclusion_literal("agreements", literals) + assert _matches_exclusion_literal("company(s)", literals) + assert not _matches_exclusion_literal("cats", literals) + assert _matches_exclusion_literal("parties", {"party"}) def test_generic_term_singularization(self): - assert _is_generic_term("The Agreements") == True - assert _is_generic_term("A Company(s)") == True + assert _is_generic_term("The Agreements") + assert _is_generic_term("A Company(s)") class TestFindEntitySpans: @@ -709,23 +709,23 @@ class TestIsGenericTerm: def test_agreement_generic(self): """Test that 'agreement' is detected as generic.""" - assert _is_generic_term("agreement") == True - assert _is_generic_term("Agreement") == True + assert _is_generic_term("agreement") + assert _is_generic_term("Agreement") def test_company_generic(self): """Test that 'company' is detected as generic.""" - assert _is_generic_term("company") == True + assert _is_generic_term("company") # Note: "the Company" with article is handled differently by _valid_candidate def test_board_generic(self): """Test that 'board' terms are generic.""" - assert _is_generic_term("board") == True - assert _is_generic_term("Board of Directors") == True + assert _is_generic_term("board") + assert _is_generic_term("Board of Directors") def test_real_name_not_generic(self): """Test that real names are not generic.""" - assert _is_generic_term("John Smith") == False - assert _is_generic_term("Sample 123 Inc.") == False + assert not _is_generic_term("John Smith") + assert not _is_generic_term("Sample 123 Inc.") class TestGetExclusionPatterns: @@ -745,7 +745,7 @@ def test_base_patterns_included(self): # Test that 'agreement' matches at least one pattern matched = any(p.match("agreement") for p in patterns) - assert matched == True + assert matched class TestGetSystemPrompt: diff --git a/tests/test_model_naming.py b/tests/test_model_naming.py index cc6aa5e..5a2d288 100644 --- a/tests/test_model_naming.py +++ b/tests/test_model_naming.py @@ -8,7 +8,6 @@ change a case here, update it there too (and vice versa). """ -import pytest from marcut.model_naming import ( ParsedModelName, diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 3bbaa67..0dd27e1 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -34,7 +34,6 @@ RedactionError, _write_failure_report, safe_print, - UNICODE_TO_ASCII, ) diff --git a/tests/test_pipeline_fixes.py b/tests/test_pipeline_fixes.py index b287c96..9e659b3 100644 --- a/tests/test_pipeline_fixes.py +++ b/tests/test_pipeline_fixes.py @@ -5,7 +5,6 @@ import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src', 'python')) -import pytest from marcut import pipeline class TestPipelineFixes: @@ -69,7 +68,6 @@ def test_trim_trailing_delimited_dots_slashes(self): # 26. Add . and / to delimiters # "Company Name/Division" # If "Division" is excluded, trim it. - text = "Company Name/Division" # Excluded combo needs to be mocked or we rely on real excluded list. # "Division" might not be in real excluded list. # Let's try known excluded term if any? diff --git a/tests/test_progress.py b/tests/test_progress.py index bb960b9..eb8e4d1 100644 --- a/tests/test_progress.py +++ b/tests/test_progress.py @@ -2,10 +2,9 @@ Tests for the progress.py module - progress tracking and time estimation. """ -import pytest import time from marcut.progress import ( - ProcessingPhase, PhaseInfo, PHASE_INFO, + ProcessingPhase, PHASE_INFO, TimeEstimator, ProgressUpdate, ProgressTracker, create_progress_callback ) @@ -42,7 +41,7 @@ def test_all_phases_have_info(self): def test_phase_info_structure(self): """Test that PhaseInfo has correct structure.""" - for phase, info in PHASE_INFO.items(): + for _phase, info in PHASE_INFO.items(): assert isinstance(info.name, str) assert isinstance(info.display_name, str) assert isinstance(info.base_duration, (int, float)) @@ -195,7 +194,7 @@ def simple_cb(chunk, total, message): pass tracker = ProgressTracker(simple_cb, "test", 10) - assert tracker.is_simple_callback == True + assert tracker.is_simple_callback def test_rich_callback_detection(self): """Test that rich callbacks are detected correctly.""" @@ -204,7 +203,7 @@ def rich_cb(update): pass tracker = ProgressTracker(rich_cb, "test", 10) - assert tracker.is_simple_callback == False + assert not tracker.is_simple_callback def test_update_phase(self): """Test phase updates.""" diff --git a/tests/test_report_common.py b/tests/test_report_common.py index 4c28808..a5c7915 100644 --- a/tests/test_report_common.py +++ b/tests/test_report_common.py @@ -14,6 +14,7 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src', 'python')) import pytest +from unittest.mock import patch from marcut.report_common import ( escape_html, get_mime_type, @@ -204,8 +205,6 @@ def test_uses_legacy_function_syntax(self): # assert '=>' not in js -from unittest.mock import patch, MagicMock - class TestReadMdlsMetadata: """Tests for _read_mdls_metadata function.""" diff --git a/tests/test_rule_filter.py b/tests/test_rule_filter.py index 49df722..1b17868 100644 --- a/tests/test_rule_filter.py +++ b/tests/test_rule_filter.py @@ -1,4 +1,3 @@ -import os import pytest diff --git a/tests/test_rules.py b/tests/test_rules.py index ddf8290..1ee941a 100644 --- a/tests/test_rules.py +++ b/tests/test_rules.py @@ -5,12 +5,9 @@ and signature block name extraction. """ -import pytest import os from marcut.rules import ( - run_rules, EMAIL, PHONE, SSN, CURRENCY, DATE, URL, IPV4, ADDRESS, - SIGNATURE_NAME, INDIVIDUAL_NAME, luhn_ok, COMPANY_SUFFIX, NUMBER_BRACKET, - _is_excluded, _is_generic_org_span, _is_excluded_combo, _is_specific_org_span, + run_rules, INDIVIDUAL_NAME, luhn_ok, _is_excluded, _is_generic_org_span, _is_excluded_combo, _is_specific_org_span, _trim_org_jurisdiction_suffix ) @@ -376,15 +373,15 @@ class TestLuhnValidation: def test_valid_card(self): """Test valid credit card number.""" # Known valid test card number - assert luhn_ok("4532015112830366") == True + assert luhn_ok("4532015112830366") def test_invalid_card(self): """Test invalid credit card number.""" - assert luhn_ok("1234567890123456") == False + assert not luhn_ok("1234567890123456") def test_too_short(self): """Test number that's too short.""" - assert luhn_ok("123456789012") == False # 12 digits + assert not luhn_ok("123456789012") # 12 digits class TestNumberBracketPattern: @@ -714,38 +711,38 @@ class TestExclusionHelpers: """Test exclusion helper behavior for determiners and plurals.""" def test_is_excluded_strips_determiners(self): - assert _is_excluded("The Agreement") == True - assert _is_excluded("An Agreement") == True + assert _is_excluded("The Agreement") + assert _is_excluded("An Agreement") def test_is_excluded_handles_plural_variants(self): - assert _is_excluded("Agreements") == True - assert _is_excluded("Agreement(s)") == True + assert _is_excluded("Agreements") + assert _is_excluded("Agreement(s)") def test_is_excluded_handles_possessive(self): """Issue #41: an excluded term's possessive form must also be excluded -- e.g. if "Company" is excluded, "Company's" must not slip through and get redacted just because the apostrophe-s wasn't stripped before lookup.""" - assert _is_excluded("Company's") == True - assert _is_excluded("Company’s") == True # curly apostrophe - assert _is_excluded("the Company's") == True - assert _is_excluded("Companies'") == True # plural possessive + assert _is_excluded("Company's") + assert _is_excluded("Company’s") # curly apostrophe + assert _is_excluded("the Company's") + assert _is_excluded("Companies'") # plural possessive def test_is_excluded_possessive_does_not_overmatch(self): """Negative test: possessive stripping must not cause non-excluded terms to be treated as excluded.""" - assert _is_excluded("Acme's") == False - assert _is_excluded("Foobar's") == False + assert not _is_excluded("Acme's") + assert not _is_excluded("Foobar's") def test_is_excluded_combo_all_tokens(self): - assert _is_excluded_combo("Company Parties") == True - assert _is_excluded_combo("Sample 123 Parties") == False + assert _is_excluded_combo("Company Parties") + assert not _is_excluded_combo("Sample 123 Parties") def test_is_generic_org_with_determiners(self): - assert _is_generic_org_span("The Company") == True - assert _is_generic_org_span("Certain Company") == True - assert _is_generic_org_span("Sample 123 Company") == False - assert _is_generic_org_span("TIME USA, LLC") == False - assert _is_generic_org_span("Limited Liability Company") == True + assert _is_generic_org_span("The Company") + assert _is_generic_org_span("Certain Company") + assert not _is_generic_org_span("Sample 123 Company") + assert not _is_generic_org_span("TIME USA, LLC") + assert _is_generic_org_span("Limited Liability Company") class TestDocIdPattern: @@ -776,11 +773,11 @@ def test_sentence_boundary_improvements(self): from marcut.rules import _contains_sentence_boundary # Should NOT be boundaries - assert _contains_sentence_boundary("U.S. Navy") == False - assert _contains_sentence_boundary("Mr. Smith") == False - assert _contains_sentence_boundary("St. John") == False - assert _contains_sentence_boundary("Inc. A") == False + assert not _contains_sentence_boundary("U.S. Navy") + assert not _contains_sentence_boundary("Mr. Smith") + assert not _contains_sentence_boundary("St. John") + assert not _contains_sentence_boundary("Inc. A") # Should BE boundaries - assert _contains_sentence_boundary("End. Start") == True - assert _contains_sentence_boundary("Company. Then") == True + assert _contains_sentence_boundary("End. Start") + assert _contains_sentence_boundary("Company. Then") diff --git a/tests/test_rules_fixes.py b/tests/test_rules_fixes.py index 5e2d820..8a5cec0 100644 --- a/tests/test_rules_fixes.py +++ b/tests/test_rules_fixes.py @@ -6,7 +6,6 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src', 'python')) import pytest -import regex as re from marcut import rules class TestRulesFixes: @@ -32,7 +31,8 @@ def test_account_context_boundary(self): # It looks BEFORE the start index. # Let's say "of account number: " is in the window. idx = text.find("12345") - if idx == -1: pytest.fail("setup error") + if idx == -1: + pytest.fail("setup error") assert rules._looks_like_account_context(text, idx, idx+5) def test_url_punctuation(self): @@ -47,7 +47,7 @@ def test_url_punctuation(self): text2 = "Contact sample123@example.com." spans2 = rules.run_rules(text2) - email_spans = [s for s in spans2 if s['label'] == 'EMAIL'] + [s for s in spans2 if s['label'] == 'EMAIL'] # Email has its own regex, but URL logic is similar. URL regex matches emails too sometimes? # Typically EMAIL label comes from EMAIL regex. URL regex handles "sample123@example.com" too if strict? # The fix is for URL regex specifically. diff --git a/tests/test_security.py b/tests/test_security.py index 477bf51..863de82 100644 --- a/tests/test_security.py +++ b/tests/test_security.py @@ -1,6 +1,5 @@ import pytest -import os from marcut.unified_redactor import validate_model_name, validate_parameters from marcut.docx_io import _safe_fromstring diff --git a/tests/test_unified_redactor.py b/tests/test_unified_redactor.py index d4334ac..d8ec2bf 100644 --- a/tests/test_unified_redactor.py +++ b/tests/test_unified_redactor.py @@ -73,7 +73,6 @@ def temp_docx(self): """Create a temporary DOCX file for testing.""" # Create a minimal valid DOCX (just the minimal zip structure) import zipfile - from io import BytesIO fd, path = tempfile.mkstemp(suffix=".docx") os.close(fd) diff --git a/tests/test_url_redaction.py b/tests/test_url_redaction.py index 817fd8c..bdb2aad 100644 --- a/tests/test_url_redaction.py +++ b/tests/test_url_redaction.py @@ -6,10 +6,8 @@ import unittest import sys -import os import tempfile from pathlib import Path -from typing import List, Dict, Any # Add project root to path for imports project_root = Path(__file__).parent.parent @@ -184,10 +182,9 @@ def test_url_sequential_ids(self): ] # Create a mock DocxMap - test_text = "Visit https://example.com and http://test.org, then https://example.com again" # Test the finalization process with URLs - ct = ClusterTable() + ClusterTable() url_counter = {} # Process spans like in _finalize_and_write From e92e7fef2e4ff08caaaa456cde5b238bef86c77c Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 22:00:59 -0400 Subject: [PATCH 5/8] test: close bidirectional gap in test_all_fields_have_cli_args The test only checked that every CLI_ARG_MAP entry maps to a real settings field, not the reverse -- a new bool field on MetadataCleaningSettings could ship without a CLI arg mapping and nothing would catch it. Surfaced by dead-code removal during the ruff cleanup (a computed-but-never-asserted set from an earlier, incomplete attempt at this same check). Verified the new assertion has teeth: temporarily injected an unmapped bool field, confirmed the test fails with a clear message naming the field, then reverted the injection. Co-Authored-By: Claude Sonnet 5 --- tests/test_docx_io.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/test_docx_io.py b/tests/test_docx_io.py index 8533d92..e1868bf 100644 --- a/tests/test_docx_io.py +++ b/tests/test_docx_io.py @@ -191,13 +191,20 @@ def test_bidirectional_mapping(self): def test_all_fields_have_cli_args(self): """Test that all MetadataCleaningSettings bool fields have CLI args.""" + from dataclasses import fields settings = MetadataCleaningSettings() mapped_fields = set(CLI_ARG_MAP.values()) - + # All mapped fields should be in settings for field in mapped_fields: assert hasattr(settings, field), f"CLI mapped field {field} not in settings" + # All bool fields on the dataclass should in turn be mapped to a CLI arg, + # so a newly-added field can't silently ship without one. + setting_fields = {f.name for f in fields(settings) if f.type is bool} + unmapped = setting_fields - mapped_fields + assert not unmapped, f"Settings bool fields missing a CLI_ARG_MAP entry: {sorted(unmapped)}" + def test_cli_arg_format(self): """Test that all CLI args follow --no-clean-* format.""" for cli_arg in CLI_ARG_MAP.keys(): From c593ad52667c9c90c39bd5b9f10087a9affd3fea Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 22:11:52 -0400 Subject: [PATCH 6/8] fix: resync assets/help.md, add CI gate against future drift assets/help.md (the documented canonical source, per CLAUDE.md) had gone stale relative to src/swift/MarcutApp/Sources/MarcutApp/Resources/help.md: PR #65's doc sweep (df99203f) edited the Swift-side copy directly instead of the canonical source, so assets/help.md never got the new pre-flight checks, streaming-progress, fail-closed-extraction, and sleep/wake sections. scripts/render_help_html.py (invoked by scripts/sh/build_swift_only.sh) treats assets/help.md as authoritative and regenerates the Swift copy from it on every build -- so building after PR #65 silently reverted the in-app help text, which is how this was discovered (while producing a build for E5 README screenshots). Fix: copied the current (good) content back to assets/help.md so `python3 scripts/render_help_html.py` is now a no-op against both copies -- verified via diff and by re-running the script. Added a CI check (regenerate from assets/*.md, fail if the tracked Swift Resources/*.md copies then show a git diff) so this exact regression class can't land silently again. Verified the check both ways: passes clean on the current state, and correctly fails when the old stale assets/help.md content is re-injected (tested, then reverted). Only the .md fallback copies are compared -- Resources/*.html is gitignored generated output, not tracked. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/ci.yml | 17 +++++++++++++++++ assets/help.md | 28 ++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f0ab26c..67f980b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,6 +38,23 @@ jobs: pip install ruff ruff check src/python tests + - name: Help docs in sync (assets/*.md is canonical; regenerate, don't hand-edit the Swift copies) + run: | + python3 scripts/render_help_html.py + # Only the .md fallback copies are tracked -- Resources/*.html is gitignored + # (pure regenerated build output). If the .md copies are fresh, the HTML + # rendering from them is deterministic and therefore fresh too. + tracked=( + "src/swift/MarcutApp/Sources/MarcutApp/Resources/help.md" + "src/swift/MarcutApp/Sources/MarcutApp/Resources/forensics-guide.md" + ) + if ! git diff --quiet -- "${tracked[@]}"; then + echo "::error::assets/help.md or assets/forensics-guide.md is out of sync with the generated Swift Resources copies. Edit the assets/*.md source and run 'python3 scripts/render_help_html.py' to regenerate, then commit both the assets/ source and the Swift Resources .md copy." + git diff -- "${tracked[@]}" + exit 1 + fi + echo "Help docs in sync." + smoke: runs-on: macos-14 steps: diff --git a/assets/help.md b/assets/help.md index 0b255ae..05dc2cd 100644 --- a/assets/help.md +++ b/assets/help.md @@ -357,10 +357,11 @@ Notifications 1. Click Redact Documents. 2. Choose an output folder. -3. The app checks the environment (Python runtime and model readiness). -4. Progress stages appear for each document: Loading, Detecting Data, AI Analysis, Validating, Merging, Creating Output. -5. For a batch of 3 or more documents, an estimated-time-remaining figure appears once at least 2 documents have completed, based on the observed processing rate so far in that run. With fewer completed documents there isn't enough data yet, so no estimate is shown. +3. The app runs pre-flight checks: Python runtime, model readiness, that the output folder is writable, and that there is enough free disk space. A failed check is reported upfront (for example a writability or "not enough free disk space" message) instead of failing partway through the run. +4. Progress stages appear for each document: Loading, Detecting Data, AI Analysis, Validating, Merging, Creating Output. During AI Analysis the bar advances continuously as the model streams through each chunk, not only when a whole chunk finishes. +5. For a batch of 3 or more documents, an estimated-time-remaining figure appears once at least 2 documents have completed. The estimate is weighted by each document's word count, so a queue that starts with small/fast documents doesn't produce a misleadingly short figure for larger documents still pending. With fewer completed documents there isn't enough data yet, so no estimate is shown. 6. You can cancel processing with Stop. Stopping is responsive: an active Ollama request or hanging extraction is interrupted promptly rather than waiting for the current document to finish, and no partial output is written for a cancelled document. +7. While any document is processing, Marcut keeps the Mac awake so sleep does not interrupt a long run. If the Mac does sleep and wake mid-run, the AI service is health-checked on wake: processing continues if it responds, or the in-flight document is failed cleanly (with a restart prompt) if it does not. Metadata-only option - Use Scrub Metadata to clean metadata without redacting text. @@ -892,6 +893,10 @@ Override behaviors: - Constrained LLM Overrides: AI can drop only ORG/NAME/LOC rule spans when confidence meets `llm_skip_confidence` (default 0.99 in the app; CLI default 0.95). - LLM Overrides: AI can drop rule spans across labels; use with caution. +Fail-closed on incomplete extraction: +- If the AI extraction for any chunk never succeeds (after its retries), the run fails closed with error code `AI_CHUNK_EXTRACTION_INCOMPLETE`: no output DOCX is written and the report is a failure report naming the character range(s) that were never analyzed. +- This is deliberate for a privacy tool: shipping a "redacted" document that skipped an unanalyzed range would be worse than failing the run. Retry with a smaller chunk size, a different model, or after confirming the AI service is reachable. + LLM tuning controls: - `temperature`: sampling variability (lower is more deterministic). - `seed`: helps reproducibility. @@ -1175,8 +1180,23 @@ If permission is denied, you can grant it later in macOS System Settings. - "AI processing timed out" - Use a smaller model, reduce `chunk-tokens`, or switch to Rules only. +- "The AI could not fully scan this document, so it was not redacted" (`AI_CHUNK_EXTRACTION_INCOMPLETE`) + - Part of the document could not be analyzed by the AI, so Marcut fails the run closed rather than shipping a document with an unscanned range. No output DOCX is written. Try again, reduce `chunk-tokens`, or use a different model. See AI Extraction and Validation for why this fails closed. + - "Cannot write to selected destination" - - Choose a different output folder with write permission. + - Choose a different output folder with write permission. This is checked before the run starts. + +- "Not enough free disk space..." + - Free up space or choose a location on a volume with more room. The message states roughly how much is needed versus available. Checked before a redaction run and before a model download. + +- "Another Ollama (or other) instance is running on port ..." + - A foreign process was already listening on the port Marcut expected for its embedded AI service. Marcut reports it and tries a different port. If it recurs, quit any separately launched Ollama instance and relaunch Marcut. + +- "Processing stalled - the embedded engine stopped responding" + - The embedded AI worker wedged and stopped sending progress. Marcut detects this via an internal heartbeat and fails the document instead of freezing. Restart Marcut and re-run. + +- "Processing didn't survive sleep..." + - The Mac slept and the AI service didn't respond after waking. Restart Marcut to resume processing. - "Python runtime unavailable" (macOS app) - Restart the app; reinstall if the embedded runtime failed to load. From bf53c21ba899e12bfc6cd15c2fb8fffa5923e543 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 23:06:24 -0400 Subject: [PATCH 7/8] docs: add real app screenshots to README (E5) Built a real, ad-hoc-signed app bundle (scripts/sh/build_swift_only.sh preset dev_fast + create_dmg), installed it, and captured 4 screenshots of actual running states against a purely synthetic demo NDA (fabricated names/companies/.example addresses -- never real sample-files content): idle drag-and-drop, live AI-analysis progress, finished-processing status, and the redaction settings panel. Along the way: found the raw SwiftPM debug binary crashes on launch (UNUserNotificationCenter asserts when called from an unbundled/unsigned binary -- fixed by building a real .app via the project's own dev_fast preset instead); found computer-use's screenshot save-to-disk isn't reachable from this shell's filesystem, so screenshots were captured directly via screencapture(1) once Screen Recording permission was granted, then cropped to the app window via a color-based bounding-box detection (Pillow) rather than guessed pixel coordinates. Co-Authored-By: Claude Sonnet 5 --- README.md | 16 ++++++++++++++++ assets/screenshots/marcut-finished.png | Bin 0 -> 251345 bytes assets/screenshots/marcut-idle.png | Bin 0 -> 200191 bytes assets/screenshots/marcut-processing.png | Bin 0 -> 256976 bytes assets/screenshots/marcut-settings.png | Bin 0 -> 465828 bytes 5 files changed, 16 insertions(+) create mode 100644 assets/screenshots/marcut-finished.png create mode 100644 assets/screenshots/marcut-idle.png create mode 100644 assets/screenshots/marcut-processing.png create mode 100644 assets/screenshots/marcut-settings.png diff --git a/README.md b/README.md index 947c2fc..6fa47d7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ Marcut is a native macOS application for legal and professional document redacti See [Technical Architecture](docs/TECHNICAL_ARCHITECTURE.md) for a system design overview. +

+ Marcut main window: drag-and-drop area, Browse and Settings buttons, and the redaction/scrub action bar +

+ ## 🚀 Key Features * **Local-First & Private:** All processing happens on your device. No cloud uploads. @@ -24,6 +28,18 @@ See [Technical Architecture](docs/TECHNICAL_ARCHITECTURE.md) for a system design * **Fail-Safe by Design:** Pre-flight checks (writable destination, free disk space), clear plain-English errors, live per-document progress, and fail-closed handling if the AI can't fully analyze a document (no silently incomplete redactions). * **App Store Ready:** Fully sandboxed and code-signed architecture. +## 📸 Screenshots + +| Live AI progress | Redaction settings | +|:---:|:---:| +| Marcut mid-redaction: AI Analysis progress bar, heartbeat status, and estimated time remaining, with a Stop Processing control | Marcut Redaction Settings: processing mode (Rules Only vs Rules + AI), system notifications, output location, and quit-warning behavior | + +Redaction streams progress per chunk as the AI model works, with a live heartbeat and time estimate — and finishes with a clear per-document status: + +

+ Marcut after a completed redaction: Finished Processing status with per-document actions (view report, reveal in Finder, share) +

+ ## 📖 Documentation * **[User Guide](docs/USER_GUIDE.md)**: Installation, usage instructions, and troubleshooting. diff --git a/assets/screenshots/marcut-finished.png b/assets/screenshots/marcut-finished.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ed4ae2feca66a1ef31165a75545b8e21212092 GIT binary patch literal 251345 zcmX6^by!pH+vjVdfOIz^ozkr^L}GM~k`_it#|Q(EknR?dW*{+opmZYwqle^x0i!$K z!E#&Q3h{{i%DA+L|gvkLe!c;o%Xfz6R;y;obMc!+T(Xe+PKS+Y61t!z0vm zR8rDbRZ?Qn_HeUzbhg98^UF>#dT6ZIPnBz`%X$wV^g?X|Op-wMLJgn){gD6<>mw4i zFOOb!$MUs&gi@1MZ16;UEazp3Ch~USi$V%g=_h-;n{N+fk-SI?T7xCI?OvT@=0irL ze0Otb@ixo@OGT+C@3Ckl3PwLVad`Hu_{Zx}Jkp!=pAX{C?=&ToQ&K*8L+g5LVPSbU zq6WGBb>hO|HiRFdm|%v7M|R)6SzDm*(-|k;p5X`mRAM}x$Nq;V=eo}<2&!WVrSaWk z$Q;Vvm6H{h?{&Y-YNQe9io;_mKRmC|z!SY-8Ra3dRb-U@LM5phYW=7ynB;PGZJ0!{ z72lfv?cLt*yvH+}mYcRWV38nD( |uQKBY1X3^f($)_!S9zOfi_Zj&gk{6UDz;2& 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

#cOzzfryMSh&w# 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 RvkVFGQCEG4s8TTx`#)W6h57&h literal 0 HcmV?d00001 diff --git a/assets/screenshots/marcut-idle.png b/assets/screenshots/marcut-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..1760784a8a3649055a758ff6706c80257d81330b GIT binary patch literal 200191 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

3K2 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 XF{zgXD=vJA1F>LcVrg7!=uZ9{=Q%3r literal 0 HcmV?d00001 diff --git a/assets/screenshots/marcut-processing.png b/assets/screenshots/marcut-processing.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc55fa2abf4a1a32b06aa29542544ac51aaad4c GIT binary patch literal 256976 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%0D?zZ6IWmUR+|dF%d!&h#dmLV| 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�QxbN>TCoRj6IEdi^MYxII-hhtDe7(z3KR9&Y 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 z z@@U+f8$2;FO|4pBl!BgaN)4A6pk@dPx~~{ck&%_G`}z|Z-BN2?pd;6+<1NM8_W7Z- z-#u z08E_^)lbVy6|kcIz<3k#0(f}~bV;1(M?mxKq1X%ZEgHk7Dt=gCuah%4$Ik{6zJ8l~co}mwXF+6RhX`1e zTt*a1w(aj%F9KaiR1*ApDdIkOMJhb%Z7Hv9ENRqBVgD}lffx?_a^8(r5uozs#^!XO z3x8arSl`xu(lPv)SCB*hHwY93)Vx(ydBA2dFKDi6tgkH}j%`o^r&F&#e7J6juQ`rD zxOrbc5zU$ZFBWl_`dHJ4Gjmym;C+C zA5ULTPX@rzps0`zJb==TdR?a8F|v~{RzU$+lwW+PCoD=+d>=<#546Ex4NrCq-o)@k z>0DG=5106PdrOEmJePY%A;9-jT}zFDfpmI8jNX%EZ6(8RH4G0YslMk!R1vnxAQ71C z>rl3CTjmL>;9*1tU8<`e>FTAfdKQ(Iax*1b2YXA{e1t!YeaS@T_G1c^Wbn7#ZWd5} zZ*7&2$esJq{oPVM%7tma z5+hgv%=Tr7JJ&wzVbssH(LDbMK*D(l-1|~$h4>ul)9fI>e<62 zdb%f|&v0QyAr=V;NWcspw;0e-y;?Yrb?D@!w1Np`7qyyRw- z?)bMiP#q{_<*ciBi$++`})SFWLmVRh_6dBlIf1R&R1rt#GZKdy`?j;nlbz z-4=4=6M^zTvX7ajq$yya>~1YBM?Ak?wXT)4dzHbio@MjpeSZQ`kcPFfw}3~h_f|JT z70gx^Hdr?VDN1w72KpSay-Z=x)PToFDqn}!?viHs&wIDWQ7dgQ(M3C9#WTKXOrJ46 zeDGwV#D+-fj+k;xY|;o>I4W5}tueDVrb0#!B-EUzpJAze9|ptDQUy6nq641?Jqp>q zU~a1b9Hk?YYsD9Ew5jJ(ekwz4BzuxVKQlsWYd?=^`B!O2J6cHJB}$D5AV&`Jd5 zix-QEZnJ!IHf~ojlYdzxqFH-EYB6?pbTY%wZ+ZeK3ENOvJRE9cK9inRkE4F9K7AA* zw)WI^q4uYw*|ZS9`d5)Eok40PmW6jrsWGW~gKD4O3F|`x{Hw>`XhNyPU#mMwy8%eT z+ce!WLGHL`tN9{LK~Df>^Rv|qKB@0f!YES#%@lS@Q8qw*%-K?fvtjW--DJy(T3#sm zDK1-DxQyz~?bLL=0I{%irJge?K$L1N7ag}d);KCv;6Ly2R_y_!SCl26{WIk}GeGqe z^|{(5Rwme5kX>zNHmMxpN(Xe?(xHL9)bwatqL6>jT13spj`osvi=QL$ghIXG&#Jrj z-_~PHs}V;SGqD2XR*qizpMJUzFV_-jovk1Iq)U2f4f1d(D3~#Y#8_$R9*?TOoEO?s z^(L$ru)|!0qEpNoSMffXhEJ+k*=No-SkEaQ+)VBU|y# zobX@esQ6k(QAO@Z5AS&%>CWhA+Waf2lOR#G!#o*&QnFv8ILt31(d){8J_U%%chiGN z@i(0TdB2$vaT;677aR3uQlT6X#;A%_%{zwp31birCy0f~{z%E;e&9D|tHP!@IIf&l zd1UNf`P%#rX>U{m<%P6o^}QIJBJ_9iJ7U7L+Q^@N@m9g@XY2DU4!H@*1myn~A{Wjg z>|D;5j&UYkRAQOO^|dz8L^ayi59#h0i#lbIlpwmG?}^uxasg$@019x3XY4-of$r9$ z_%}Z4PuuyTXAdXFvMIv0q_O;TU+~U*r1SEAPoCAuA1i#IH^DsmCW4r306a*c4pQu< zUlwN#9+(fBa=%#<^qOz>1rP`Bipnl1}=UY9scOBu4LMT zvdn0c2e)b|A>Ao4;Lu1*hqSbSG}4_SAkry_NVn9xy?@VpKiBpArJrH%wbx#I?G@)fkMFUW zWqk`)7x&uGXUSGpFdcvZ`C_;CdBOVt=L{_t1>R__3Y9T>gz#$g3Oo!BzPu32dafrD zet-kdzKDE88+u?>wZYeL8&DAx`1}09EALX5?eo~uy^F_Wux|ihZTm4B%zoP?;>?m~ z!_tl+n)M#5bi|F2PnIWfug~vhGi%DIN}+ZBh-P!AdWyZv?krKO>!zMxIgFR5uK!36?v{U@ z&&y$Ic_ZPEmf9Sv<2_x@_@xQ&o4~j5e~XnZ^D2<*`@@ z);nBVbxp&k7foMTt#`~R8qpp*bq_bvz#GG`?6PTM$}bai$YY)n#H9}Ml5M?`>y4R| zqL&#YB-My-E>4`Ln-GDOgfMC3;-LR&8oco#U(peS8TeR_)?uPxRLYP$G~P7!F+5>L zf>e&)kZI%kZS;whp1m*IB`CD)qcZ=ku4ZWGeT(7QViY-(7J~7Fdug+?Z+Ef- z>q;u3=?Sy?HWUD9aNwmB5bCTdAEHU}7Nw*t19kaTvH;n~fALibXdf+wtAvFl<;8qZ zDnX1Wu0-Wznm^2g3p#cvsnyHyVuKto9eTCzoa#6RJ)@52DDBfh+G9F@x7dpGMsMJ{ zKaB|YO=(Wk975bpCsUY&(TNQ27{8jIJH-tyID+X!7cz&seVmh>vqUhH55h{CQ3_L@ zJPEt;_a`e3{xdpV(<#El@rEHmW9z~9BT*8K?;HP*PZqb@B9*;~l2yf28Ya479KFZi zj_A_8MaZ*h6u~VfPh*SmY<2tDY=w3_x8`UOPI2tGC(Al*(u=nNSqDr;q zh<0C^prBhLa?Ro&L0O~`4zYqcauWs=MfE>v8hw|Qb#UodQ0x2Rg^#Um&1kWDlKF10 ztLu9qTOt*977Tel>7*~IK6yea6{2Jy_Y3_mMh@Xvuih_d5gLE^X z^CE~UE9Y!Ki*w8i;~b41glpjY1exTJE4&tHKkF$ZD5j)&FkSuFZ|zy22zH^PcSozo(^KL)O$KP)h8z? zC%Lk26{b+lNe-i=(&>Y2fp|_=$ak&3Sx3@5#)OIaMX}%Hua4}8rTmR~9qslVU)c|W zhxxtLX(&bU>37;Ms9^jH!W zO&@Os&A`Z?F1%gntGI5KVS5AQfu`^*2Pu&$<58(~M-bX$|Gg;f71V(~iE;SERg%HN z8pcj803RDh=S?DlllQ3u`P~UTsIJBhb4t0KDrK+;;%o@z%@9Y(8c#Ms*!**#4*|?a zft3%DrX$)hSgtyb)agkS8ia?$0!}!}uAY)gAW&fnKL!HKN&25#{Lcv?Yh4SeDRt`v zWoxWf>f+_JppwGL$H3<<1(7#e(7zuw|Hgm*^AC(?QwW~z0UqEOA2jWc0J{q0Y^W(b zu11w6V`%IbA=P;DkAoqMp0*P$PA@Ra8vK?7U&X;nr@shoe!`*iWEcGUpI-1krGjW; z1QI|XX}02&I7WmTj8`p9&L4>%0nvD)g)3QN3IP@ci;eR7{Qp}K2$*1@)+tM)pZDWx z52#c<6Ci^;BrV1r-w7bd%YraTT( z(97vcK*KH7UOeWdnHQ?%B#Z<-{>Lc++3QOJ>MFbPwinajKDG$ZiQU!{z9og5X=9K% zw8Sp+NV*g9kK@5zgY?d*s307EXQOZT?2k9=AZmmObNivwqZCM*@Ad#4ha9Jur=+w& z;lI@ao{8&k0&;g}sN3|Xfqo^mP8_sshUMaEJ0elug-9L~YzB)AUK|GMcz%WakNp39 z;&2e~d`W~iO6;h`DS8ETlE^l76b%kNpD3)8Z*!v7WRsiPIpM$m=ABR(bw?J zom{F&N1&u6Uwn~7{2`;%opp4W+z=6;R1fyxpdW9h{yrN?9A5Bx`p7$)i=vdHKA-zF zN>CRJGXQ-c9c~Q`Rx1sUj9c2#-m^3;=A5U@ z87Y!#8EdrDCvd>BrUMtC}w5n{LcxtT<_AB%zlg-Kl)C$h){>6ssVFvO4hm;>*USPEQ3A zuj$lIEY~4_+sNv12Jk=Zhy*`yhN~gmE8v3g;Rp>CG2qLq7W^nz6(kq50pp8x(FI=* zl|n$dN>D611SM$a$uU|X7qdG*nJ)b_)(EJOJ>>)~jPXRCk~^dDjiSORI^l>XC%10% zB%IFUww{HrI6a|;(e_m*9yHqgVG9*G_NFLTM3fJ2jE_HG z&3COU;~QUhigny5lR&N7)%q}HGX3LFtRw+-Yx9Gq3ThaeERVKv!6v)M?^Q)k{#qLv z(+tA@G&y#JAxx6*-<6J14)P@K!=j=D!L)v2W#WNQtrmn}iS7ci!A}TnuCj-=(C{`| zP}hk(#H3;Rz>{UZf$;$^0AFeL8_U=+H2CYdOf}afs~$K5p&CQR(f1*A*=>PDthh!s z*uHgK3RKdck4~JKk0pJJMXi*H1ouC!H3W)}}NnD}OaIYI1RD<#15s&sZTA$`~ z!rm)(+M}*uT>T=SF$;RBp`B!CD(-w$e4-kw)q(IYYERc7^Na}3YCTw#2JCSxr2 zgmkCPL+HAxSf!uUB&{=UzYigGQ~ekT>;5*No8f=nqv){B4?vp^(y=hHlEm${x+3H< zh%^mhijwNrAH>IJO6$u^uvm;S;`G1c}vYbz<&J{O7bsA-dCT5WMe;QH~Tzh+QIXehd+xy>z;P*h~w0bBb3kd%?oq^*}hv;!oyPokW{d1Lou82c0f%ESJ zA5(%DEi%yX#r}py{`;pjR)m#a7zp$<^WT?C4E4;zL|vcy=Z%B_2Qw;fn0zPu-}8Yf z6;Y_|Mehve|JNcav=Fr*J3lCp3GrP4B3@Yi7+5h+nXz}OL zCDtAjVa5MG6dw&AS;dT1eLEJg2)!V@4uTLzehw-$O3_#_wS+= zaphCAXv_ayH;`g(0Sc|Q`@c(=LS-XBXr<)*qj`Y#C6dl|pLlkJ{8v*lgrOmDvSew+ z|FwvRAQ-sCLJCNJAZWPaG1j5~>^9wlWL6%yh@*e^U7+-Wze&{pTR0^bBoqWI_E$CboD({JQFAG<^So;G`0y(Ex=*_r{xlRP^5oDhlstg|8YgI zWG*dPRL{R(lCCLbjHv8ptf$8RdSOvuvZ`q0IEo^qQ@H=E_1~9@XSnvr783sNqQhxp zAqXv`#{cVGAVtb#HuC>@nn)0-K1Rrz++u*ogywfe=!IV97JiBQ+qJ?OsZzZ`$%ExX z2A;9_TR*m9D4Z9KaxqSl^2C2gA)LYBxNy7rafI2mVu_$;0*h$(iy#-Edmnk1(8~^P=s_U zBXW&5P!Lj}Ozu8oebg)rgD+*^vUHM7v=rtBUR^paBKa^-5*TA~ONkPl2vx|CKvv7< z%7jpU3J(auNmFqktT0Gjs1XdV;_U|pRqKiON&!jD+Xv(PxT%+5R=CO=eV$2w6 z)d2jPB6GnSE5^&JN5j2{3ZV@`ktbjv={aeRoJ9+Y(arL}phFspvQvD%Lrp}NB&g=d z#-CtCKtweA<|FlSN;d;h5g&0bD6YOAkp!LibSqx)L#Rr#N*RQ?Q6fwHrLx5y-ayn3 z$MGS*;-pDALKYs!#Ea;-gz0fd*l`j~Ddq+la3biUnJB$?XhC00uD?h$Xv*^H}HvYXGwW8mHzD>WNZ>6myDk`~akV2kvEu zpF8jJ9)hUgCWZ;;<2B1Exw&T}4ts~eYi@e)SU!CZjgM)_)K!7)KpC($3#ahuN*h_= z3d7G66#X`1RmwT6*O{t675Hk(U0#sxUqSl5VoK_4 zXVWRG=e+JaEK&ba{Q{d{fxV+Nd3cdN&An`((au02#oM;?FGk(-o!(4c_p ze$rLTv#E7z`^dUe#6%o!;k?rBLbWKkVvQwhXqfQXQCXyR7?7OkTYGIzowt4BOv)tq zGktiFpHfzS0wCMYS8Z2ky{uzN`k<=HxVIY*9h@9G?(S>%nAA6ex-}TLFI9FURz1Pp zhGPLoAvF`M!wkrd(-pu$<9AJFNn9-hEz&V7;BaLU0JNX^o;9t^2Tb||?OpmwB42w8 zY$bhNN={8tgdYQvDS!usDGO`K@1CEgM@GkZq;YWxH9|Qc6nYM#=|LeNPrgJNPKBs7Sl2g;d=~>D5U4ajU zLtjg{+GuX~b%9JtK$qKtJt^i@#Nm$A+CX0+(~aeAQoZSwd+^(RcR6_bct@P*jN3?j zar2v48zy9+Q6131zeq^S|1eT;ZGG)W_Ey~~nx4jofAv^a&$>n!K^se91EcJPQrp>X z;aIX+Plz1E(sRDqI^oA87xGX6$s6h<7NCJX5byM%f>9kx` z(OB*(3B`hym906FMp6|Q9BwM+(&ci%94wAUTwB?e<2m9tm1kkLiei~!LJwkEA6b3+ zZBZ0*vhwU!uTqL`qyokRdQKltL~*+WZGVmV@Tj#B;Q6+d5o41)@Y`V(l_ctrPnuJNScrFhiJPmN=Vvah^mhj9XhrLr{9{519 zlzFT)*um_|sK^UX=M&l?rn`OFeQZ+9VVF{qfY1KvgRoYowvI%0{cfXhlBbk>x~}Yg zGZ+USJm6x=h!O) ztt4?`vTEpbahJ*^DfqH%#hV87NP^rkOfQ>o*H68tjA>8I1cwE6Z~Lb-w@k)>Sc*na zoalC@wp5?u9!0P7K4q+kE481(!P58UK)N(WN*w=)@PenN5`q024GumR7f<3OgCZc1 zo(b_lBYTxEJX}rHexIo)u4Z1at+Px(BV1w9@Y_4hVidxr9HO&f00HN_vh=luxEQd( z@Mt?nR-phYd~(3Ur{)u*<{Yt6lB~>X_sZ|cK{4p224Cx;3^<2m`_^1WnjwVc_6xVq zNkooHjZ(Y*z!hVjSk96i?}SJwU~4Nni9DS0Q`@oO$z8J<5Ljy#6FDjcGW6nHBuZIc zmHVHTO4R}~O5CfoPXC9F!1LB>W`R?A2WgmiXbGRWVy2G{9?k?4)^z~2au0NqxOC!S zP?y`lKp5U09E?q89$Q)*re9;I1n!4k2U061K{uhBGbx}#fwfbWq&`+nP4$scb(R!V z5CmDYh6%iNz?uJ`aQkj zA3F@r;A|1ho+v}yX0wxgxu1jEkD&NUidgat>vR$I@szdGnt%H5c*T-eP9smp@1=<) z|M;=o6N8(bIJ)0+G(>7c>{e|RF;TB$#OLc1k(ds`d@8tP6iKeTc~=*>*RtJL-@+N# z1i$;nC*9Q$$ZACW#`3FERUYdqPZf92+xx>ZP&26H%``45p`~T<%(8AY%=!{GJ>0yQ zRfHyuJ}7KckjRoET~>+tsmKu=LbV_7{oJ2#w0*ul5+5L_*k5NHABaw{fqsGv*paf< zrH>wyCi$uzw_5omh}FE&EUOw=zK~xII$4x7REW~f^H8u(>->3Jv!~o5r@olAa-U2^ zg@9stypeW&&#N)O98o}7EX}iE@%`Av#pQ7Rg^|l5I^Bmofa&C{;-27f-#=+K{cWn= z=|%A->p}K;M#(eq4}>bTqCAvWwCJ*}5RwU`MfOrRM$@Y%32akR09IU0oU-6`N+p6+ zYrEJ0FsLUIV!w#gipEc}R!(IaxPrbVqO;0ORR`}-(iN$DR)A$d?@#3+sA;ObP^xd7 zD0F>LmII?yCcSrr!kgmU$XB0St|N7YAA#tRxFqmNC?-e&KG5!0?B_?eEO7^anOm*` z0OZy_D8rwVmv#?+N@7$le21=*QTTGC4xNq%Cq{=}If+vhvz<>CwnH!g46i4qV#cq; zoo#H3C$fa$)2W}~#xXho%r;wVh%~P6xmRU;IKyh4qwI&|hn}c@B@>|yoJrn+B%~AY zsY_^0I_YBx8~hJq`eV3-&Im2ixyhRc4{(foM6dUb35&+r5VJUz_c5ps`WBZWKSc-d zW`J(u8+iN@uVJ(pW!4|V01ZWN_3ct#5k-1P-V%XF>WWzTV7|U!y0N-&8b37`HQyFA zP%V-P_|V_zxJX6?&qP90tV{OFtJ$LI<+`4XCK3CobwI#$$RPnPS+K039sqcU)<05+ zd?JPV2&6)wulGon$FDhL8Yh+)+`U_oI`geDZsnUhE<~0?^97R0(O5|8i)S|!?s!EQ zxjwNh__XQQRva$?iv}d3{(QxsIyxGv^NHbO&}o6<@{%YI#FzXf1}3}FZ=a>^=gk1R zlbH8x-xGd((=c9Uq+zN$nH-o+H#?K)kt${^rwSWfqc0kr&hx1PxGb8}LQSzDi(kV@ z)@igPMZ}|oas3#Mg8Iskq?QenlA*Hv!p6~Z<<*GE%~ukpKjt6 z2KJbM*231n$`IAffGdl`72ymg5aW}X>IkryH~&20iB*a;j+FsI+X23S+-3 zCDEmd6q>8eWw`QY%Lghzc@)YXp&*k`=`u&IrI29hp~!wfG)||C0*?Po2BPgjcqnjA zkRidASoBf+eB1AXANmpei|C-(B`go}WCB7Eg7HxgS_dx5R`y740tXYREM&K`(Gm?r zr-7yTGl69XLI?OBJGG7r!bb)1TJmY& zlPeRT&>_=xv-l`nf!bJN@eC*yo4@b#EG6OS5YUh*3gj*og5rjm_wgj#}L5VD%Za zYhC&il!G4X3QJ8Q7#mT;LT_KsH+*di0PUMf*sx|NrYr!#tDClly}golk>SjTY6t3{ zH12O(^^ouF2*7^8n8v!rfNX5^YVbJ&4U}fyVxy|q!3c7U^b;~EkzjAni`m%**e{X+ zRzao@taTQKfRIZgR2hsyH?!vz7AiR*^U$RwKrUriEe4LbYyl>07r_2Z_NP*|cpc|n zO7c!|DU;j8pkrfB?~36PK!UU>VgVEYuNYUpO-;{FaSVSSPM#FGyjhm4iSYRLZA#8j zUxy*{_$@^2oC18EDnHlq} zpthjr_t___XNkb>qNK67Ciu(#S3C!S>-K8tFN)yZJqkW`j$`9DGI^7mLR=M1E?*kU zsyP7u#e|H@syWbD-Zu6@FEK#x8>-q`il>!Dc{bSI#5S{We67p~L+KQDhN`PmnJ(WE zdP9+4v|y=3CzH8)KhJ-rsxON91LkQ|g#hr(<9)e`iaSL1%QQa^jA(dtd}vrX=Gj}* z*Y;E~3YPH0)7CmZfJWE^CsNhadYYKfx5w4q3SmDKEDHrI(jSs5v1ZpPU*`W*)^qY!Q<;pC!mFqma;lnn z0O9*^MyCC*aIviE`|MNmFFWV0QR)i|uc2_JXCiE6`G#Y!93A&|Db#??VzTwpN8MyJ zBO^P>nu=haB_L^kQS8G9zEIYw7|zjx6p>T9fmiTaLeBd_+Iy7~_FTw?TQPSGA6iL(=si&?;Yn*~drliMGeq4&wzCnCihoBB91t@8b z%zaiK6WRZUoCeqr+pLdP(+w_@Xqz~K)$JZDubsZBBNbxg`*AGwmGB6<7D zs#r*sGUq5AS!{6V$H?dg-jj?yZ!ZI(7S{BW{~9RARxW2ik?o5tW3jHd#~F}rw#Eap zR5T#AYNw@tPD#BF1MFh&`qK0cRGzNI%J49Aupl82IGElD+iK+CJ=LD@A7dC(Qb%VM zZ4Y>q($!KvgKAnkua9E7eb-3ga%g~-5NQvN&CQ5aJ+p~!sp-O*il9RM(! zp+1)tK|n|CEz_krEsTJeRFBAx(zk>HlmU4rsSxwC^mmo=GCV-G2=lKOJpd;x)Z)ob zj!%=7Z7~U{>9|OqL%{|L950=k4s!cC{u|MKC~1&dm)`qNi@F` zf*j%*GavHVJSUyV%s4!5wN~cauz4`Q3QPMYetG-)X_^WfCgMe^gpbCsURqv866M+T z5`lu;`u8sLtA;t@+shW8CFdLwJ4V*dA0;s)+}S@){g$3`Ij76X)qcMDb$@YmI%T*N z)lrfHP@5;0-K_h66T~Z~@$lia)dU}1lg_o@E{Mh^Z2oqF+E~bZ^P0k>1SU(0g~X;Ds|1<(^+L;z7IWaZn5v*V9E7w07#T>!qVW( z#=z}eRnw=l0!}dfVcY2PrK90flJUG<_dP&M#53l~sBgCV=gVr|{=vbVfFQx!<$(GA zQqH{TWr>g8cM~V`&-_|;Q93Wrn}h(;s^*}jg1!CMw{vD%#+f^(t$_RXV@3MJt8n$# zxxT;N$?2ba_>V3{Cy_B-zkN$Jfh8`>O2SXVm2UJroj5)VKJoT%8ued6r)^%t*rCVk z&&~ti*QASrX>S3eG{E{!VeULXf2f=|rn=)qZK7MXrV_xB0A3g1N1q`ZuQ(e$Y{$)L zf}CAhe|gRU9(meHKKp_@M8q}@QT-3+hr&!)x&sP}Mc{QnFg;iWNXl8yeN71l z!Yu$Umsx=IxGHyzdfzFHC|&}RTl`^Wwt|FzAozMsO2}zp^Ss$n7BG8kFv$7*s(b9! z*wuPGU~_D5=C=^KS0kaRx5aXQojJH;{Mj;bu^0_p05JB(Z>WP$e%yzAJS}+A%gHu= zH>OTnTFTsFlIfHT=&giTS7g~_Tpth~&Iu6rZokrijnHXS$@qh>k?Mdw_Tt6JV4iPF zo2|4S@gg&z)Nel4&C?>fo}HV6BlWWzyLLQ$JkM6VE;SXUu#rcEq?NGKvtr4-EP@f} z&DlArD+YPiV(0ntYO5#LIxHbK)ARfiKw)ZJ-bmD@^TMEh2mL-~LDo5(aL{|k{CwB5 znIET5TYSCrZKA6yvX5N_zO8(_8;rQuUHwvB9-%QXEP@>tz`|AGyZg=ysyeaHD+|CL z-z5>iKFwiameY&9wggbd1xJa~K@%NoIK0l#ZJ^J;USK;-mX*}gQyZm*f}4CU?tj!gIN9&c5RpkMu>nhVpB3+Z09F-m z8*B@(t}kEuTT=~0dQ_K>05${-j>>+VHn;2frQEHq&%ABQCwBnROfc=qZOkEH__bi6 z$Uc4X$0V<1H%WxJpE`c@hYmxcp@2PrO}e3Z2$&U6`-@z!ZBEQfbGvKUNh7julMq#a zk;DV&Wr_2{zY)2L(PFBxCAjfLXp424S&+YqPS?(<67)$}AsSku!OItyJ*o~o1Av)h zUh92(<=FGTInU3>p8mP_aX!5fU%gvhHP9DqHCbrZq6NIDvr8sKxSj69>Nr67%=+z} zCpq^EPee+CjL%sve+QNZZtBiNU!Rf^XS=ban2)x_dpX|wj4YkM?aP?*3#A26#I>v!I#es-B2cUMZ_E@ zZU##KIDC`kr1_M|EI-B;aW>)$~r*>nzukLNPp{@Gp!eAvZ^ENjp(~ao!n>`_y93{;X3XfAtrCN_=bM(n;=-VR z#j2*6tM!*WYgs9@d?Ux%Hn|`z~ z)vu(c<&WwUD&19-0zP)yIPJ9#g5-M%A;7d%GTzDKHPKQh28P(^2Yj^9y__&`*Jx8# zRiPR$$~EF2tem?8A^gMww}Ax4 zoxEcamy6hZz*BczEXk&NM)xsYpSsIKZOsXlMkM*rnE2`GN~L>cD+ts3(`wvBWA$tL zrFN>aY762V9f_0*-_O|y*FBBF1}DbXXqG8fobAo8=SFY1mLYtWrQGdMX#vSkNd6v_ zF%xf7on1C1FV)O6;0};Cz#Xg}G4}Bx5(txCFQ|uX^iNHMcLchGsc5T^;dF^lJ zEaqDG=`V$3PdlINaHl-S>x%5d`2ACQ=i9@De#aX<;ZlL;t>O;X=h?Lv=bD~}{zhK| zHP#gD`{#GDC1u8ZPZxuK)fn-g{>t0UH<>5iN@>=?R(*QQjM*O8EA{%K9VPL|0Rj$B z+=!(Ti@->{m2oX7RkiMwj!i63l9S`@<I|u-nYsvxOIaB+ ziim<)?(Dr3olZQl_$n=SxerCXP;3wbwlYnA~(R6oG8y2PPFhfL(^ zC1fRg1K$94#A7&>^V&Ac>nBYVz{<^ifRh?AsdZNB`Syz}qG!xV473#h*kRRghYjcL z#gf(66X9n7NZeTYy2`=O_!j^Z!2;M0CNjyg!Nmoc42_dUMINs2;-TTguq>m@n!N?! zV?b*w2?*gdoszPa#8iKJ@>K*A;4BgkuKN)b=kRV{wxw}ZTpiZCuuQPnrf!px{&2+| zyprM{;2BuGU3kmF_0&MGKdRi7zLLX+6cAnqA9ullGS=;NzAgRKcg9AHK@m#TuSxy&!j21o zdI*Rb{pE3QPiBSihJ)Wq;-&EX!c&y=7%et<=^Z||xe?1h07Bm_Q%*v9)aeGF)OQ}v z8)&krKE4KM@{Wrg2bmrLFM<8BMoxc9inO+jP-;=${q1392}D*m2@NnFoL3&*?%TjX zhdk+AA{za~mLG-CpFkNnid%dt^^mR0n$K{sEiTMbRRkO48+LGUOt2Pju!Qh1FtjwY zQpjw%?Zs7%@Jjz@ac4cKzNk!=PI;1+x^0x|)ypz@>Te1R={%eRhAMTPjtW6bJOID` zG){({OYm%#dzr_i&*}VlT$u%=d_aH z6djljM<%cLjV<@+gocNX5HhqQ^meT0cFb_bq~1HLfHm=z?) zjcSZXQZm|Q(4`OXNvAHBW$J(q2?k=CEw)_2_x*x#caK2QtN_hWckSmAo;hD<)jHIc zW&FPRS2}}tMA<|tb<@j)w8U%z$5*d>&N6(({mv7p5vUdh)PS$^m*ly=!h#iU@ z-iTkWc;1OF=9{mWS5&bHa@p=RqB%>d+9?MC_UEEGcZ>0zpNkmtc(+w10i3dd0daiX zvlok^RD)4l=rq2o%X4OJ{?&9Xi4f$++I)IStbog#__k*j*Vl>h0Ex=MfIFLC26@9V z62m@%t=_xfbJSeUx-&@5T3n(3>2{fAH8GhY6Rzquw^cI0-l=)l9iKNc{6s)le>ggQ z7z#M0O2^2DCMrqm{fI$Fzm2Hw8mv^LZ;B-$BBB;aOreT9b_A@tB@hjytZS>X$L@wXnJ!G zZ)-lFU?HZ+?!m!s(`AZMV$1dMk>s6PZesOb!Mg>2+8&IC*>V>t>Ct-xD+2n}mnVY- z`M*WUKhn}~-l#68xW|auxE;6p=$`RD?B?Y?Gd=xIHfxC1xqYQ{!4~f#`1x~D3=rk} zuf{Sl=oR`TH7%N2Rt7a)m@*$N+13JH&2ghMb&)-awbVW)7M2B{8Fpqs6%Bpws5p>g zLTEo?_M9IolV0FVxRN5IuL(F=?`ncb39#sY|17&@5;j=9a+{*@Jd}Z=kC0%DrrGzu zwUo9I`VotY1VuD71&IdlRv9w#d!j&S!J+R)i_NuHzqz5n_c%Nu+UrSyAZ;V^bm_7=hJkz#x2vPC}~+B`8K zeNgX!D)CDET1cxNto&*iIM5A*cL*kNSO@nX{9gYd;f5^&> z3b&9|pN2)4>ZA-CpfTpH4mCTMzDKV5@4GEcj#|6lM8s%Oke66PndzYP@{wO=4A(Cm z{PpAeH&U&4kZ)*w50|lx%lXORp5m?Nvv1}rYwb4c!vCCPD;*Kiyxv<4ykC@)+q6Br zqT9h?IJ*#DbsvAn;km5FJYCb_?dxl0Isdgp4;aG~XaZK3r+%K@zhQa)ENC>#nSCh6 zuraW_@Znt*=5sycCL8T%eipRvoeVp-!qP6R>J{LDKg!>6L3)m(z7uLXNqMz4wdDV~ zSganJ#O5|yYPPsba;l+5hqPZV`@DQTJL0H6`D;6dd!L#jzUpPI`EZiIHj(5>_szh7 zB~{K{_8Z~V;LX;Cn9|Z@aCc*}L{1Kx9x;<@+DwG({V0||bJk60X!djV`iHKlVZ(s= zr0|hw%Yn))7n8YV{Rm)bv_ixbpSEb_Ztw>*|eq8>yZp4h+Dn z2HQ4{&!)cN${xL54cz(D5W`Ql%u^YN8FzUe&-tp%sQp8Tx#x~kRvh(yz5VY2#(hfBr4>UnGVqm&yX2@h zJA1TCtFt=mnkplI1a1?JU33 zuK1hVi~9W_9(8a~Q5zAeHoN^!Sd4~N2nucL-2e8D!?>h08PWqE6npI-?ocsG!d;!l z0HZhoAa8^v^a33oc^e@>&UuAk(VCyd)R4Me*0HNYFa8047Y8)RZz^E zTEwqa7<%;iA<$=THkB!vY~s4MaUyqRy(GN6KgPay9Z{WiIx9fJReqBd-%f_=oN*D- z%W_EtdufvHGd|04CwZPqF&D3?cDIqgLk7q7!s#9PRYI>?Vof9RjTZ(JqSE9Y*x5ij z!}EOq%;t6^RtQynC}*Wd4f<)o{WeyEIhpKP>Nbt;&W@t-qNvZlNQvFAS%ar|7y)(k z%kHP)ra%&NiJqy^N%!Tdu1R*<_%GAt-kN=JPKY~jb=Bxo2Zs^KuFbn7jCMzgIVGLiA> z;N5DM+_+wKTE|haVf`Gna)^~pJz)3x z^UL~$#La>`eRoB*Nq$)!>*LEMzwxMKi84>`<;)RvinL#?B7*M%uBN!&yn$Ef3#@wf zimL0bxGoY;b~d-|``R)R`L4FDe02BIWroYcfw9E@6??8pllO7KBSFc$liK)>ABPXe zi^~$dJ24Bi$QAzwbw59gQSSxKOQ&UT>FE?N2ao83UX zrP8!sOZUgO#%kN##r*57{B>m`5^iY^Rj#V$+U-Go#M}10&aiuBhUcngzofW4{v?fxAWnJ{DW$f9QGgtUw2xe zlC{61YqcbcuZ=+WEgnLqH%vhI55LQ(C6`iDILxsLVWIW)lS4|mHLicM8xZt zU;zfhImMQeQM0q%)JWTF;RhCv-%F_u<<$?Y@_iaC8xl9kZw5cL|5BRPlfQUZ85mQ@ zg5h&dWD&wYSo?K`q)$5cUG%y0JzJsvdfj3ax&CSSryfxotMGV9TQ$5L02#PFNAPUi z?z@27nb9_|J{b_v4z+hCMo7m$$sCTFo3lhD=qip^efWGn?Oyc#+uPmh<>TBt9okOw z<0?zqPOIe?Ri2K&zih^ec8^%UGmwx@c@IyYA71gDqei%CoC@AYGtG=GkSSDg%BPd> zwm+KN;cmskw^UP)r3o5Q>klPXl@)YA?>GB&a!`vFpI#QTH^+lO7xDfXm7TiB6s)n* zL-EJ#T1Y#Tl1C#aw7&_Wt)_lv#oYQhb!B8;O@z)?;CX$k>-?-nYH@g5A|NSPk&0xOihHw zG`bY})9Z9FERC}M@resMdqy$ocjm+`iQ`EOXm{b5=i ztY2LpCEodAyJY|Ro zg$V^e0J6z=iJkPa8S_QTXCE-}s9_-a9cjeNtMNAx*uJCX>}hEvMf@0a!1u@s;i~5I z?Y9}R)pjTMXe^$~j&{{XO*V-Z>B+TMI~_+kx}`TTOm3(78@%9$l}B8HPtJ*nt;5iE z?CyC7h@W*FEC@Erc`aWJ2-5^voH{ELQNOm_TMfG12Zo^5X4a{+xw+c{hpv8`G=bZyG(P{qhzCyVDM+b!sANSMV&tty^gzs ze*|M3BVM-HU2_LFTze`83y{wV_+5V;FqfvH$m>C$)lb|05w1SH@cGi0eZK_5(QC*Aw!!CcvfCER+~%_ z;QmSFb^yMwx;ZLNrxeFfgv#Vu7%sk)Fw{3j;BO<)z+`aAJolo8`ljH@CZDUe)!@h*Vzx!=r=LMSunzq2j^xi!y z)wmQAdfq6YFVgr1;=i$L(0TfK@KFe?@viG;)%ViWpkK zIxnVsBNkB*V%{{@@in(^%h|5|63xHZF2P z8>EHN>g@#sx8sUBII}Q2`=NWk)c*!^z`k4+xCtyeV9_D@bzxmsPZpe|jt6ibMVBvq z@^19mt4hDlcXTAi2OPacu0@~7Y7>=~5CYwzLBL?o=+x8Tq4eSY#qn;D-GZ18&E2i- zs_skuW-GTqXAM_RPVZW{T3WgXunYG2y#8w`yQ^WYTGaEZsC*A0yT!6oRBY^qs~ryw-Lejxtlzrb>90T7iABZxY|VJ>@lMw zCv=#jX+p9?{6?DdA+Fa6FRPp-gHg^z;7q4dJ z1-EqnV-Vjyvn+w+^*;zRUA?&g1_dH4%!-PUxV)d#d6B#dfYm2$bkCQgzp1g=$%GrR zX0MDkLF=yjqB3tm6D4gI-V!(5`s^6AT6mK4XC*Z%ApzhoWDmh5KFd+@Z_C!ld`bHl zOLy5pGVO<7hC0lm?*qDiRz61SFW_t6BfVSf=*{RYt5U?YcfN);AdIzQ&p8D!l}(jm(#b=l8NnJhtv4;)g9}Y`^raD+0v*SrAWMy$`>Ivyl}irB zp=75l($6=ThB}Y9D&PRFU%xNkW_y>Of? z|9}rZ-m2XJ;w%9gr?V=~EkvwCvEE%|e9sV31P-eU=f4fI9VrRAd8gMi1x4OweXtYp zzdb7q&ZD-&gaUOc-`?&VH+8K_dQnU)XlVMn86I^Xz|@2aN}v`Q<_xsqbPGpMAa{J0 zex(9LRvhGm!&)(CO$Lm9b`oTh`3tm8R@ev+^+TS-Gc=zW-_4y zz``UmOG>+WgPJY9W=ntI^##66=F}TH_kstdIo*d!%_np+?%0t)YmRZoXxHDg)bwd| zhJWPoKRS-CkkV@ZBgvMq$NeIOT%>>JOn%~_-@OzI6TCT0$c=6P!FAWEK+3UnfW(yS2+SUZ6&Rqt09}Wj&&##elLTD4hIHsk!8TieV}YY(?bg@~r0{{xswSHQ!G-7MP19rr9Gy9|V^h504YHoAZpT z0}LEhGc0F+c~L4B)>_}c1+qjwUQ*2inYjgZUulYqid1NzlIbc|P_&AgZX-=$AkeYZ zzb8TL?(Nwbz0>~JDjNAWa81bNzWqnbc@(|yj+*_RoS94|E3QBO5A?@$ev^Q1JeVf_ za@-#%9;AHJMjtQA*emzR$-hiZraJ34q-%PW|Evu(d2asPs*9hD_FIGZ29EK4YXvzh z!9>$FhasvWHYYDD!9_9^Lsz%Pz`Vj{b7JQa4O2}aQ2{JIIXXQrI5wk!MSvZSmg&=c#8i>Ed*k!+Jm2a%?fpJoSrHPr`hKwyLQ zlk!N7L2E>;ZJiWf9C=n6MTZqiObpkNwTeD)*sEjvINBjB?ZT5G?(xlk{KbIhVtF}p zjyAiPJQ;G}>2h61nEcot;|7L{`vOWEeKO%eM|}Rero@&9NwHoF)#vU;HxD1jsYr(q zvbUwW%f+0}Em$z8G1u;BMy(vL5Q9Z z^7F!Rg=2x~)081!i^dr51wEZ6?^)IXIayD>P~&=WMzxw0E-Gluyjb2#Lf;#S%;-#6 zP=dojGX~r^!?cWcQk2#RgV|9T^})J?IXS>WGb0cymE9ut0Q#D()UA;iTWHbS?7ZDv zKc1!wQoY^xqiJXw{<1P2^+tLE~QM6BLmZ+r`zEB=Tl zDHW1FGrM!HA5P379TH-ZYnbzl;3Tb15`2DLB0h;9>1R+=1Yv=_h@fFgLOA%p|8H$8 z6P@_!hn1NM9uiAQ67L1sc&Angx(SG8d->MU&WeU4zNAQAJ%;*2*=Z&|kpTvUi&7*B z!p1+q)#G z2gdWpQ|*0C4G8-Xj0XSKH$@7-5Gj5MEwX}m2LTY&^oC<$Sn*)>jm6#SG6ec+X*fZg>pJ`@GK7z9;E1v*M0AJ#);aWv;i0f2>e#zc#{sj`%;wPXek_n zj828!++w-%hYqn>zWf~l0Vi*YeOQcVPADcET~d8%>{ECx8ZJ*rpazFRT+yG-TxU5n zX&X70*i#D@ToAEr&CTX-iR;y*6QBMgZD1kDY}xGe&V4hg>CAmNm}YHf=Ucu4KYw8e z&GA`H8u=b8ZD_L-KmQy56Kd*oRwKYDS{qoZ_4i{-OFbR;hO&JTd>{BuS=m!jGpFcv z8Qq;<)N&<{91N7qqe&cF@8#i%|HEkXIc;E%q4S4v@=74xbLWuER&2@h__)u9&T+o( z8?%IjAfj(K<%O*A!>Rn@vbmBi1EEPYcmIGAHe8x6K{6nqs~X@c(e~sWMpiIm6A@MS z_1Sum5zAN1%mWK9r(HC272U$e;Od>IGo>Y!f{BX2V3*Q0O zJ7E4qxMTF>eIcE4T&SwcZ((L4)Oevdnw%ekaCjr3%oTzb>I!t?(3jf$mfcJnpX@aV@_1JzcKp1QAE-;U6Jw;?hdz^WM>M;0>pAQYI!-)z#Dl z1$5r%5Tk&A;Xs%h#vWRp7mWpg_gR2ycpEr>Xv6#=g zxB4$Ig1?O!^tc*z;LR5`HLWfnzB!6!@>W1l$)WkTNz8=VFCVi$D7pr9aE#wclj$EI}+O@^b7SJ}-@bm;%> zy1BN%XgUJaBRpoU6 z9oTXHYSDf1pur)t6tZTN*tG*!qWM-)?{F6@QxVLumWldK(CbiqPDAg#PWs0SUDmdn z1HevR%o{K`-EFRRHa6tRmI6OIKitxV0)v-rDIU6CG|vFws2heJ+!+0=hRrd+ma|X? z@>%6=+vD8i2iR(Pg4W}bZ?o)Lx5%kf#<1&L|v?L219}o3))c=@>cU=nx zQU#^!N2aH|%r$S3QQ#t4x8h;BIs1A4GE{aKdZs6h2bE52D?yR8>5~7kflgupO3$K9 z+m%S%UP5BKJR3-rq>~2kPb6nhkk&zpiKU;@sKleq(DrGtV}5dR9$(j(HQ{!2Ks8%Q7=%^e^E z>6bLGIxkRGh-z6up<6s9AqE(GO7-qqnh3e=GH_ z#5W~T@Aa))b%~jj)@d1SH$pRjj6^Cz#k0k#ka5E$pwa7M<0OrS&@EHI)L;x2ezkYM(6nQ>-=21r}>_#_o8%}M!sJ*5RXKc?QTN@%UuQ3 zJF6(&8?ByoqRCJO;?nEZVzmK9qdmWv`D$)~&fY~P8)8w+6z=ti4gyt!2rjoz#C$+) z4cH!P=o^uSzQ-;onS4?-i()c{#$xemdkHSbkAjOUfQkJ#|GU_@Sb6`6i7qr>hem*m@Q`LFX%K@Z1cOdltG|Y~nR@^>f)W(lsWSeI zw*~8djGP)Al*13rGIbAyybP12#6$%V{Ns})4!zVC^Y`yedGU83jjyCk%TW6z-VJvc zfQ7}y^uRS+x(tCEuESw!Ch!=pEhEc7sNd!^y5!%J#%a%^dgk--sC{L-1H%)ku?FCk z$D{a*4POhp>m3yd9kYsfXTKR9p$L!wA@=SC+_dqX6@UZop_umFjeYfbnF(S;;LO9`0AmY;HdRs8beH&-DB zW74GbL!#LST32cu4TkR{uyS?hLVyq%3xi~aQJw>b?hV9{ril<9ud21c2`W#wuI?LR z?(AX0Xf!Fu%XbvgP^?>zMRbbZ8izujwA@#|Tb&#`PtstDp1gfFf$*E6^BdxZK)}RR zbpWXiTB#^g5U`g91L7hX@5-I61ELUq)l`c=i(78PmWo|ak@^A!Lbq%kaeCDb=DWqK zj3V0+@{fM8!!hn0iXqN#(%;a)u?Yc!Ly+dym3<8ZW1_7hA*Wa$bUlQ|VYcSz@ngkE z9}b6sj-Ez*t%ssN*LH5E8bHjVl7esy4Ij(Tyl1Xqi%LfuhK+j?4Q=@YMCO1OQW04F zRvx-3#IhcdI-jIc&fL=&K|yO;b7>}Z|lBJH93wea~?fhUQwwQ*XDi2=Ng8!L+|`whAvo+BruF3$Dc1kWJ9=HK*h8{ z_$^O4B2KdmtoinT%AKrgh3^+fER1qfa{Ujy)2PFPw5?mWLAmrOzsphQ&!T7`9?^WY zL%iV)5UqI=D-!geug~(7<-jAp&qFmdWFV+p=@SB0%-0J))ikQUp@2&hXj`kk&nh15 zJA4+!gt&Bwj?`S@8btVEAsLB*D99~tAyeY2Y^cOm!BGYk}U&< zSKL1JdIiMg)l?h=nVp62PkjGte{_+?K8kG@L80MpUjpoL9gDq4+GiImg^0+prpn7& z9}6DGgdL_L|6A}{Yh5{meWJQ6*(YGf)D0bGUv_%5zkOhq^5^On%f_RNri2$1*C&b=g1l&`D2}5nb(I z+v$I0fa#aY)#=Uz)v$vNkz4gK~ZRK z?xq&FiXTT8Y^og%r-yKAJm0IF=p>>?Tj7VpXix!TbXUB<0%{t(g>i>|oA%0^hcacZ zJ}47v-w2Mj5-rd|fD_h*fE|TpA%?bgU#{4>k@r-DSge(K3w^O z{oOBLO;f2@Qz*cn{QIZ#0QhCeC|)8#HkqgAwUuH|YiiymjVWe{47*_&3g0{z5$dHt zj6KC$W4(a+Aw8kw*l0LDh46>te|H5_zj24fMAv(5}03h%f&HFk_l(! zCm<{B5pg_QgO76UP3Z(kK63K-4gl8#D{&1lXU6bruy#_AOGiWi@Fl1agqnYyP%^lS ztr1$aJ%R?ABU@BcmkJF?yT-vBG;Ri&jdHV#%?&`;D@nOGDI^)vBNgqwK~U5f=P&;) z1J1DaWW$mB$ici+r!M*O^JD^Q9P=P_*}flDm~p5<1YJcL|FHL}H`bqn(g;4Cb);Ou zchl1Q9NboVb$Zn3#dj^%n^dQXE1F47{S1aeziC|-n|WoZ1c#Y;7E~{VoiWL z`%@9vzF$Fe+cn93)BJeQx+ct<5p_kCzB^-DoIfbwW>~@c*7ItQz>LnyGG>Q16ojdv z(dq6fT)}|(GYJG@V?k)q-T7m9LV^b2aVgo-=|LZyM3EGxrl;3iYy4LOe>AG>3Nt9C zPrsCIHtymhRp`K)Cz*nu%Sh)lRP0LFeciriK&{^hXf(ClM_n21*1|v_9;>}-@dz%s z!BqGq@@Q5mVQs56ZOXuN;gF2PFKI?``!v-+u-;73+>0)AW&TP))P)?319b}-!!ay`2e}Ky|*kr&f z1m#B^AGNtC&&$HI*iz)bS^i#_MYLj#kPw%E02R@zQCA902n*|%SCR07NDtv(X0o-W z`g!qB0GWi-f3pXeGpg>z*|)EnkRKtE-5;1YI9b^}D2jhsZ|mDzb8X*E(i>6%d`~^& zpCQ~!6Z#mm6qGS?=80|Is2Jrep*r#3am*&CTJ&vSyWg*RCMi^z?Lb-#U6hLK~;D zvLEcVY}O8DWe+-)tY{ys9#)MsQ|5NH=1rSTA9oYd-ut+ccF%B?ZxxjdB&%&7QlUaD zJqwyjo9mnF4&Z4;uft3^Y)T)F(XOKMs~qqC0NZ4xozJ~A$jvwlp6%Yx(&aBU>paae!K9ZPjW#uzJ@t+qydcrAx zLK``Z3=CS?l&kd-!`kq+(5DWV;By?*AR1tM-~8ugXO*;6pr>b~><4lFm#X`7{)5PAsCm$* z`+J3e0HF+(;&Fq}0A;3F_rtSNgsal*-td=B37M{w0R zGI4SmrBjgEg!V=5|2l$GWE#GW)f{9HhjnUy`> zlAA=C>yi9h2E5}@QkJ_=ZT@5!Ks+8$mI2m*|Ma}`ubo@ZQjemh(%r(eD=!Z`lW4Mn zD7x&!ZS|s>d)A>6IVgWTyN;is;Lp!Rh0$X26Q4Iv`u<&Ajg2u;nio2aa!Usv3_ zjSShX9nVHdH=bKC`lg#pMF?59s}=-->AEPHc&7-;-m`~C{cPFw842KEL1;#}te%R< z@Y|QUbNKm8_6q&ShoQob#Y(?wgKgQp`y2 zxfjWxG0-%)2t(J1!)3U|lik%LtqdR{(N$aZ7!l{?4p7sNJ8A%o9wYxz0^p|w+xlI~t zD*!xRH9RT|kei(U-=WH7MF^_gg^ffp-nx)Ri{v?SZWf)8!LI1x6^_zWD+Zx!%|W65 zoq*L|kUN89K03@BWE~9)1;3TTwLZV+VnTulv821wWr9|2M5sg&p8c#f?U8lt*0n4QNii=2N}MXfwxW54)c+r zX#Y`wS>Nz|LA`m5%kkUR%Nn8m6bfO~&PW*T8%w+g2qWV6f9?W~*O_V!WQafC9sPcs zG8AB`soUK2H-5Ms!ChoP*Hn54_*ud%nBA{*GbT^vV=lDsJ+jOtmEm#u&biHTJ*;pd z4-@}q;K7~*64JfiSMJo9)oa7Yp}e+o40mABe50lDPWQe^y$#vc`oM*xK)sFyy6Xo3 znhmB9cH4dO-z5hy!i^0NPu=SEe{l~NSwKomF8=daJ>AsSyX*$i7aQqC7q?C@^yHfU z(++$Im!r7AM+csq=9{n!fSbtQ4W^r!b5ns=+F}9>4~cLu>eYJhq(82s zo1({I?+YxN+YsXpU{hc-OGd@{x{s5i-+$iF`DXZvDm%LS`*$UvYKf`Fq~vLs96hdw znJSGHMu|hs#Z_mk&$ihGe^gemOzLnbYt2Vq(#xyaW{SoQd_n`K%a9d7P(w{jP2uAf zA$=iRnODE>)bs*T9vMAxLL|GHip;7l3~YnhB6F{24F9_vanW*nb^}Wf!}DiuodEr_ z^*b||zJO>{za>AvD!=9UEbuDF`TmM?u`9Tt^`05mNW}%<%8z$)0BvOHGSv_@V2DfQlpNzFO?r;f-y*`iuW$6z&kntp9v7*_ zxkW`sC-fgyF_#p;Zu`6_oZ~gZzrvjw17aLSs2^7R!<=$Yl0{na2p67HI{)UUQa@apS9;CL z$$GyXeh6qpETfki`&YRq>IAQbhhCqv( z8aYiG@5O3c6O+21KZumJhn$;D0YvRSK=nT=EkGVms)pOzN?FQ|BE`=RpYFFR7wm2t z+5j$ar6DVLW4n5s`f1)7ASikIvjb^Okw?CF2YOC#4`AciPj-Cl+}!4lv@4eC{M_7bSLNT=up6G)9(_O_098kq;p9)a@jXy`))6Dr`|99tWXzBw%jmg>;K?jXQXUjpgvQo+e?HT8isDy(dCwgq9&5xCl`GxYrLP$jQ z{(s1v4i3wJKuaz1^OMP7cjBA+lgf#Zmk~i3Q2upu$d~(uSRerhf%FwIt6MknI;-sr}`VM6!x?uv(e?V zoYi)h?)g{X4UY+~- zC(3fR?>!rH6OI#Dx8m#hAPIOl#c4J*Q?GDq8hVnDu}g|iB^uN;hP99JABBXoRkC#b zAK7nVfad^!{(JQg7S-464m-`Vdj1O4r6Z1PK(8%h9_b`pk6=26OEj=aOqX#@bM zx03IFd94bvN=%OOYZ%3AYilz`F=X)r6p;P1Qgicard;2jH7yF`$+&x@obTrTNpNMR z5%rJ6MdX`gPO;A8F-P%^lsjZ_?!2AY0Y*{t4xwp!K9&DczSvyBK1iM-|(qnDSg{fblji?PS>O}_ADyLy~dj`+}MJ)J<5i6 zfd?p z5_CH@-i7`=IWylni$VEJ77TVKA@+hlH~Qv1wpi~GJ}ATo#T^bRnCA?0|lGd(SlNrXj0 zvJpX7?Fh*9K0(bv*9)xevNc;2;g^>&`XoT|9|}8|JkBn%ln7{n0WYlr* ze%k(hL7sLv?|qN+bc&{%vhc?}z!I+p>HGF)#X^ zx3SV|&zZkwbnZnh_tJ^8YUXFZ?XR%SfhAnv!?tn^?u##^6VE<9jyyelG_P)Cj>`KQ z$DN~O`F^2BBzvmXU_G+9UN@EW)^8V(_@uEp?NdYhVnVU8>GBoW=08}@OG$Hi=R-h9Y=8hIs(-n@J;CX-L;AH z^NAW5Aq>-xD*D>9*PRZ>j*ro4)45Y~NpFh-eF9lh9`+^teid6Qq!!kGOqXE;ND04k z@01p^pA;A-_2yPM9fQC#2CQN;jMwgwW!Wd8FyzFlM=CS1^l%BcSO|uN<;4QV^o>%M zwhU8q?j1HVn%5Uks&k=Qpcv13@W;}0G3J5FGeT})jdAlBIHKk;kiZjYn^a)ESo;7Y zP2j~&mtlXWfy(ZDdv&gl83Y`X$Y>&i453RmyRR>#(IeyA&M#d$g}45VT{sV@o$HtO z?Hu|iIU2f=8ZlvDXB|DoO_-3=C02gJA|Np3nyohgilgGr@}vKcDmCo1je4U!&UfkA z`$?Uz+!~<-qe`lARDKf*swPs;5bj$py9k*zpFfQ5!wX*kAJ39RZH}8W6!bS{3y7B_ zelXrEcL3lkdS7*Zxv*vb$078ydl<$mUa#i6zm>6vfeiZ9e8r~Om5m=(McT5UqR*Id zbt{uYZor>rY(9F`$j77g{h4}neA0FwXZmK+WjwdSYAXrW!0h^nSMp&Jo`_-{ui#rZ z9f23hl9l(_aOwU6zD&!|3seC8cuL++kPPLY>5ix(;fgk?A|O;XZTcQwBD8!?e90Ut zv1}^GaBD$o5FSDG1>Ei{yU{PD$YjBVGtS81f<#V1onOyfB!~E{hcmbyK4ka7I`cEh zM8s;Y{*>*Bqe3fxZ;s0j9M$l;2F{|=VbY){F?m}sHCLAaRf`7X>+nw{T1u33$Q3u- zYCTVscPWEHJa20fG+Z;fI-x=C{nubIPkdfd?gyZ#x&JGO-MY{`|0KTT4Z%@rbP}VZ zn@mC|y3+^O@*aqFMk&F0Vd8b`@;@5_@o2OHHb0)dt>9mye_XR#8wdugc{db=&C$?V znJuV9D+l}Wx7F_~ReqCKk9_O&)eWomc{_9NcW7t?tcZYG6Nd#_yLWhPnfWl>uhE9iH#QM5h_Fif#=aJ@PxMt~jLCWB|DZ0t88%;xPlk${a|G zxA9(Jz}YJP@28m6c!`zis3579X88P1O_?#X})7%#j@xi#=4OKAV7;VH5c|>m_RzIlzr6vIXR6Vh;=Ucb7j+ zqu~iH08pl?y?j$|h>hcZ4-8;jn5ZTq4mLjbrPlS%A1rg3u``QWTRa1$q=x60-IRqk ztfT2eK`X!{cE{(r8uC(!jCO<0=o;V$v@8HPNTq{_#{0MWhK6#K*fbl_>T<=ck1?2c zw{k`X=t@mxER}~sbzVc#swuL;=jX8qp;`adZwm&Qs}Q*k6xjqIa`6*stc>wO%N@1& z9UxrG33Q#_84l1*0esf;78c@J$J?QuP_fJF`lyf(|JOMjs20np%6Cll(aa zhLWRO)c3!va!mq^0Rgn`bcUmE_&U4OO+~R+FFi~xyyvvMy^>}0zkF9y9`QhnQavLY%pXC9&+=+G*{hoKoPLZZhN>J zk+^F(vU4bh$kMJ%FU)9*<^W=(!=Bt3#sRwS?LzjC58|7^NC~VerjPW#VACI(kW*#& z0gPhK-z|C&F7v_SQs5u1x3sW$2XF&k&4~<$3!dl5HlN3^z3DKS$G=~8Q#mTE5m{mU zJS6_xtE8CWOmIyQsHN&d!$@)K`j3X|2fOyllr$0$*mLnERrd9$dJb%As+4){{%7yz zznwkm59g6TyxUgG0BZD=Er2r>S>}q)8Ukh42!RP=g7V^V$%*+F7&cJ9ZL`u;Q~Ou5 z-<(-v(vB254;f^HblBVp^zcOKwE+_apj}XYolkVF^-LheC&fS=b3DtnplcigSgs- zBCaS70T!i*NDTaiOTQx#7Kmt&BFPn#F!*I@4(Ssb0r!~8=Wh{XAr~N!T5xvXb1EN) z`(9oMz?K};NA57SX$1BlHxx47Xq3GG%$bGIZYO-6rjFoo&a_GqFvd`Y^Ur@lG>HOj z$5Q_~%;FoHv#et$7;>Qu6S0yEEOSOT!=dodek2qa0j-FR5Ci}-kN&%K%8#T{M-~M3-g`97@Fmh9s8_5v|p??T- z(9-!!lgF6uX$E7+htkA@6wuqrNQlJ*phq*h0gDeo!NEU9w0UtOdtp5xbQoCt5#M{a zp?wLz@n0us!5U_Yb#IkfQP3lo@I=T*>Ey zv_5V3=oSh$xj#Chv@Y%r$XYEU83EH=y~%40*P%N&J8_B4a~%QHXB1zGo~fTZ-f+^3 zN4**vX7m*Z{C!!k{-w35DAn$BAt=NmFs(oxSzrE*BnZBOkO?i#$QC-SYx^ekj}DB+ zAE?-ZZ1(RvO0KbKSx{=c&w%Ne=4bBG76Y3BOUPw%$6Y_gz%!Z!DYs-Jy^hb zR+&uCVstVk6yn-V?d#+2d~}@nDkdOzjp`&OR<@zl*Tlv~I#sqOuh~iL;eMFDM@?O& zySP}JV~CvgI_1Y*!RR%h0;7jX$z`nn+u7Lw^aXLb`w6c`EhTP8)pHN`sO@b_Pw)8T zY&}@2Zwkd!RVUepCi~!aHWrDH4(Lzt*&g2 zCEY|$fY;rOkHbY-s)^($h^A6Obyv=B$DX(9tWjMz(QX@nuMm&G%Xif+2C3-XHxnMa z8P>*tEvaFfSM`C=LGec{DN^AVpE2=r+M!zgQ~-NF z8-j!(%zryOiBc^w(B3kBZ^+(ODy~gXIHv1aN0=ancY$-g77!+ij)@o3w%V)j0jA{T zY+ppYC}VoY%UF23!{r$RZoeSWLjW_CSBjw!FHii(@wWSw?!D=)jZnB^6+3ceH3_J& zi~h*T8ahgt@0{mIy`zMXIKjAQZLxDYgr|oDg_al`aFg;t1YA;G9HS(%W*9;ClK0AW zB$1eSuJ5BkHEZVe4AK1Mz9TtRj>lgx_)oF$ZNSL@DK?H<^T+W2nhTC*hbbRG%1E~= zsdx321~UACC*kHcP|Ty|cSCcTej*$sX+6F2eIEb4_rdO1Vo1Vh$-0Ijp?clb{W)@k zE*hW8&fA|$uget>xWujt;W;`Vy+RjBW{El){qLgskuVZVHC33mSF%L6+TQ4U3 zQpEUSg0eIAK=iU}s=8X=T{}fx8zN0#Fbeb+6>OYFHI3rgQ$&4rH1SCXza{Sex`(a+ zBF0yW9{l_;B+zmZMT0V%*YWq6MLPSk|x_yM&_dTRH zp`dutsR<4X%J1({_Xu3gZEFJ@G(tka)_`;)B1GYJpd)hBN7ONWYQtjToghtU{W?&z zMoP#1Pb`G9`?B-pU&BQ7O7hp37U}`&$B^WLsZ{7-RSYOSb>+>@*%F%(J<6nTt)6p;Tu} zUcx`qWMN(~-#X^z8)1chXDb?$gHowX9MztX{P;;o6N@>KwnX6Z2LqD0pI!hqB)z^~ zZTx6gJ5pSqdq@xcH3kK2NR02Nsht3u4cQO0j59n3J3AJ@jWMN%4@M1!40EW8$n_LW zmA{9a+e2uTY}rz0Y8wu0?8EaFqPge2-ha4g@7)eHoh|ivM%x9G0bBCi){Y#BPR#)n z2udXk6sE)-XMbdZxnnl)u;+cHHn)LJO?bFnWAyn*2jd@B9>fr^Jq1>^(^DL`7y18;5dq#Fu<%O!vE(kuy?3DS$jWS@3XxA2?R1%$G#u>p)X{W2cFO zHe8ypHW3!Fo#c-;PyGq}EnJ;O69pm7CNv92@){4?wrH`Ie}c^V61ogixZlszmL{zG zdh~LSIaPto%&gbxF{zV&VUN)lll=rqBhDfVMrL>PtK49ko$>DezCNedR)89jx3zot zTlqO31EF_$Up?uCO#`=>K)^mM&{nz8i<0C;doZ^cU%>tccRQ#e%L+o|@_N*|YON@Ke41HXPUtl$kxCY3mW*uzT@h1qi<8Mq2=efI4|v3pi! zinJ_*pu03FC(5&h;kt zq4Bl*m7QJB>&gqnN#GL;(kbTovWShvR&jYtW>bmrU(Z$EMC)`l88BJ-P4smW5FB`v zulEH4`(ZWKavA-NLAPiXw`2YDjW-}rXgUA|O1&!P6Px3{7*K~8>&HJ>*^NcSZSgrU zBzC{{J}1VcP~PQdro8a#w-6oRubN>e?H;W4nv2S((+GCwOw%AiFo;9o1zkA z>@HY}on`<|4zlde6HF}4l74Wawhwh>BizO2;xHn)t?##M`&Qk=1U9x6(N7SWXh9HZ zzPhvGjFVx&q>1hhR!~nRX!dE8$gq5nn2>?LAyXkhErWaV2x>c;h6DW!uhXgyo(_nV zf2Z4C6s)iiG^C;@XLrd5$8bI^CY){^GiX7~V`t!@CHyTy@iAvM@`7`sGS2)C~64 zl~SFldP?c4kz&FStEBgNfI*7moj(hxz0N_*-X@b}U=1-41yL&GN#@o~pj1*FpVFD- zWAChj$N@?<-)~NG4W{}vY%Dd1N!)S3aePeYLx3)qG;*haB^AuVgoxk>U7wG@e^i8pEYo|2s>ctuNmKAPdD zLZ$xgbzveiI;!|p@(iUYg^O+q<-DtLwu+_0JOLQ%nLk9jlZ%(^6IumJ&G%4YYrJ=Y zv_XfY!>?7p@d{fT>Asrx^613A)*Y{_H9(`=9#4j4Vufl5*z4E-VBzWR^|E0surDj` zP0VUUp;fT<0A3yXCrF(p-5BA*ku*wXUdDn38Y6qBYdP;$(;Q5IjqVp}(#bVWmhFBx zt|JTMZTA2u4k=5Ru-lX&VsWV0fq%!1u0{qSEH3e1BO}Vx^&pgx< zOQS7kp{p9b$Or=9&`Dz-?kvY)`{DkC1uOMqz-=XxwBSrur zyZCi&0%NL@wd1@iCtWCWAwcSLr-=#~DMlm_uc&=kqV(DzxFf4CHlK)HIvk@TEX3GV4v##dBGd*Nlb}?88;w6er*KvzQOo zIdpP8h^rERR*rX~2~8}0Zmp7Gn8ZKJ$JSZJCD%I3Kl>Y&#P2ZQ4b=|6^=HYr3LF}_ z#0N03wq3FKPZP%{tv{X$dcq>U*?q<>+*`_QIDW zSdagu1r2hKAvDt>G&N*`+!| zR6+|bCil*Ca|T+H>JqoDnOSraOSYTgvCGg1ks@=es&A%r+;-Z$F%i+PEGxW%cc+4)ILZGBh8<9z07N%02^`+2WJ zC$~0fk=zP}ne+w--pj6+C->4USm9+sYC$mpNyHj5NG8HTOtW!6Hb2EVGy>R`etdtO zNkvVv5k&Z!vuz8lNmY-#XD4veu=9?pJ0F|YqJAg+HCq{kpr_YF3Ka|kDtW9WE>6_< z2gM(3LG3SmU0zX9&|?YFD1opDSDs6&IChRE@iv&QJ;Nv|)TYNZ`m70GC@0xXpHMJW zlu@XPVMx^hf6Z0}t%z$pix!qkgb8$@zPU%Hph-5E!>r+WAUR5U3>q3Y5Zz#jcI(cf zW!7WAnyRxE^>hz?;k>B3Yeq{h>HP!$^oEmh5tHw<;OoiZ{83y*BgHn8VG9DK`onc#*0Bj@^;iUqQPgy9kEg0bYz6f+cPOE;Ip_$}*|-Rw zA_a75tDT9d$PFMP#TQkP#bkk73s6I%404KXF#Rz^3euhsqtU@U0oWboCdlf;`1^smw-(+S5Mv)#gci@X*+s7xj44KrlAWTjp{|O@c%R1#B02B?s1jQ zYhQG3ECcL6o6F#u4B*jEZGNl2Bz#06$Jxd~{=<>^Sw!5+eD0U|=PJ|h_Vf30xw;qD zy}M^%_1)0_h@g1CU8-;I@en`x+xSRV5En=$d!scvbH57e1?OiVE+D}NBBeBo__5d~ z3tlA~NAUYt&AH|DahMpPbGk9PVb+q51NmFyGfjF%&GpOK^iCzc53GVzd~M$eLJq^T z$D^92h5|7{LFR)n@0)q+EsP+r@rwC^xJ4}miMzSUVa}J|w`20RXS_m2GDhWsR*tw7 zJuu|=1x4(|*SLRRd!3)dsB^OKta~NF-H>el)P=_kiPWtj%78xx0?u_tZ-$zW>(|CR1Ezf$tz?SuP=!hN+@J4<6INGuSPGX^81QPpcp5LdbjWn+SH!ezklX~D-k2B32BAd=@lUqQr8fA<3=PzJW>N_|73D`LXjMt}l}d)#6f({SoCnau zw!B7-%u!ZArtM@aAe!e$gIPyZP|%Povm{^bNqSG&ioj|JDRSPmKAhVm8BN^WY5MT& z@iMyU^>3OKdU$V20LW#_8CDR)JN#iF>xo{gfe|(naCx`ULg-VB2dtgu}i$;!NE zD-Llu#3%c8{1`B-4j6$Un!JMLo78{J?A*2p4nxF6_VasEcr!H|whEKoZ+#CjEgcSX zGO`)a5w6xborcbDQ?yjUsj zTATs}ibE(~oZ{{tWNv5H`qnq^{1-@abM>5k_I~#7ar}EU#=eUbx#!x4ydE@nAw7(QPV#rX|3x8YVZ*TBy2vKl>-fba+7Ne_eHsqt&s| zE&7~y(q9~^m=?Fjp0X}3vz(PHp=7V{?0frJpq=g~u!*)~%1x_h&OJd5eygY&>b%<4 zSFe7`s~k)UGuv2&is5k)?;brSIRhQdk4J8f9iqmDre$us*Qb1(B!8q%u2N|Qy<6F$ zb|3xD&ivw3AOAj|UE~EUsK5fct~m16ziMSgcr;#L-AUT}`yaT=tO4yIK)Y*T#eH5? zabTj#9f{vX;{DH2;&(wC)py4Ai+QIyPbSE0FJ_qBY=;9+A&O^yjYPl953W4T8h8x4 zjfTrpd;6DNuB=sje{e2%{gGG7;e$N)5urXNO=;a*tn>xtNkAy=tx5+Hg|M){@;8xC zK6VJdgr*YZP*5s)9Sc8CLuD_uY?X_NSxjdp>HGjzjQ6b(6CYgk6~e+_$J-fu{?VxUg%ZMa;ULL0|$+HK=4UFvY*e2aaR4WfwrX|=8>G?XW)Dw1xPCR z?+J4;`SG!&CA;|a@9q4ke+f6-Q@#b5)lu~Vubb-Y=-rugEeh89i|amO^{WHHIV`+|$FEU@s{?|ADeKqK#Gj*Yet<)#L(*FN# z>VIAYcN;V@AW~c{2mQw{_4J)0)kLw~USRy6&8>T}n2ToN8T^0y^*xWf2zS+5bZl@hXv>iQ zJn+bFQS#{qKEcBOb7Bw;>nGMNeD9urC-ZT2E@k0>^;u>sTMR571p>v@ zi|qIbdEX)6X>DY-{aW~-1KN#yion5v0|&*5JdV?fNS+L~xodo9Marq~o{2}61cUat z?^~LoZI)S9E?C`{WjRD)SGN{u6Na3p`;Ez^I(LjcY~U!I&l9N=Tsl#2TFbJ5efo_IO?X`NPwy3aHTFv32dD^tP{c`FXyph0dP;&t8c0!ESucQ4A;_| z#)@*qW<_wj5FANr5HILAbN~(nM$^>{!l6S^*WaCi1DlCGBVafylN{)RoPl-`aPa3v z?BRlx$$~Lgqy7;pV?n$quqH*<-9Pt3c=Ba`b zV5eDgVNw8nsN!H)HT0HE8Y2D^uCqwugtw}`tDvFbi~8auI~x}V1>~YMeLfh{;4sMM zG3WxEAkn&t5qzqFJ1GPFuZouF)1i=&-pG5w86H9|d zfAV!pZVfewP@5LHGW-f9ARCqTqj<|}CdG83?aBnumeY?!VrY&petZDqUuQ5w8rhl} z%JXr8g30`cGN~Ti(sEp*qDV>Vrqp)6$U9m*_Yxf)UEL*F0fKtPpT_FF*jBQt0W?aI zH$>BY4>M(7#3-wG)@714i2#D<`|F+G4NU{2}iSa7!~%ZxNRblVO|mgf5nOWiNEH2yeNfc zCnd)_yLvlPiGtqOi|<229Te(JOqcndzzQ%wEHUVn&S7W3ujzO?jjjNoDP6GpTFNN# zG^PrthoaYN{!&V%r1$7B3OO}O zLd(m827nju_Y?w#e7aho8jpxa{^<%H1U&3_I0+o)-yaIXJ^rCB0K_I-_W>;#IXYbM zLY2$-Y-QkCAssLcl~i18cXWX%`q)mpZzDCJ&Dtw>UhUIz3-(l?%6wnFDh40%{|V?HIdS zz06@koq^Xfi5_uEigI^~n(*T5f4CsO0TH{QlvG;`<>_jG{q5?U{oGG{pHG)6?=pH^ ztbKeY4ZRHBfUN=1IN9U2rBVuO(h))uxiw!XEo1=;6iEzOK%sC)7o8!O+~e^TQj;i{ zIK`(8`}{(2K+8*4!2IA!jvZYD2PFsA&n+0i;GYcxFY^g%&!XEkIS4E=@{OUWQ2^{g z5^z5zL4eSJjOMdDe{-vz?cT-cM~Q#QY~q*>eSN27gCuD1@htIGc{W9ixaYR=j;?P9Cat5<&GaH zyyfvfz;QBeXeAZ@qG&-^7!5t?>B)~a=NKobtY&$-qFXzUSmFU{2>z$@E0=9E2#ywr zVOBRG5cuha`5GhdQKiG$4oeH5k<7u+wr?DNJ@}H~nQw@%G_LImvTM)M=C|h40~U_G zjDEM0=uRSj`!~a9*Pwl{K+1#c>30Bz$D0OfOOAo9t;U+{24?P=w3p4@wY+SicHOs~ zHhKVvt-M^4ZOgc=fFS?-1uicNq^DSc5YR@{mv7Bz_Oex9KI!u)yyRdBylk#4{qbq$ z?FezZHMrwr5m_|YHQw;ZSg3@E-xjBG3@l@Ps@<&}|M(oc^L+Uu7VmDnGe^0@c?T4h zbGcBGJL?aID{dqgaXp@8a_aEe1S+RWqrOiis*xH{0;C)XN9(@k zJj>a11j7Y?OpiLxi5M4*;jex9E^MDH84_(13iQ@y|2xQ|gUSI0M zDkTI+V{!vA+7okM4l+Xqp+BxTR4R6H%zG95S0A;56^?6`BgYyoZWN%l>po5? zsuKh}rKMwAdzypLznxf8DqY-lPcUWfbD|G}*Y*ff?;w-{X6Cf~aM^iVBDX$AV{5%= zhJu5wy9;{-xq?fEyMdfJ^O1Om2bV`)ptazp{lCgvs2GUjNoSYMrX zt%0h(Vfr{Bpm2Ku6kb4^N6in@d%u?hjF8~BuTX%dabK6qud(S@W{Ti?hh3l|?BHV| zQtaMUgEDYeayYLx0v-U83mQQtSMYQMwdhi!@%MZ;ai4Nc z?csh6WhETci%CjC?Ul=yipMzW%S6L69bADe;y3Ymd?uF&`{KZ{^HB}XYAP3EmAZ&5 z4o^*q7|cgoi1~JlGk2^F$S7c2vc#5t`{|QUrc9#jKs^M;hSGmW$K?H2J>-nF5%a(@)!{EC|VP1zvr%HR@!(w0t__<9lU!pz`ajn2p zrB9q#YVpAzP-uxf4yS|xCf4F-O@=b$l6g;89b8H_HWgj>5gy&%ci|s@4)U>~R~G!R z2J99FB2e>GnwYHs(B)c4bMvNQ9Q$-5ca`zfjHZ@)vJ3-`)ZY;$CPpTOh{!>&BSF(I zH++IfZgzM;8nWx7*ztRvYG$T)zrYD`Qoy^e2kv<=xpa%Qz@-vE>~QCPQLJ;Lq(s9e z9S0Y-F63p1^9m(GhSqq&lRRbel~}V9(Cl?M$E^3;pt{UeFiCiB(PhsWR)R4KO!tFy zrU2&|U!@4#)9whsncsad&@s~fg7ZpQsT4VKAc0t5Ws)64ac(0YX!NI%*^sB}K34`n z?Aumc{K2W6nM>59|4NJ5{3O7mqDMXX&}p#%aGJMAvw)5=dHD;aX+mPc z(>;7%_pMZuF9q}7>jWL z7e~|Y15W|e;hzu+Q81fTBuk}2T3bG(=VlNsHoANW2xu#*m_9eR)1L>rrGZmZQN^4< zr`{dt9xFl6^QXanytGPpvC-Z}LRlFfB+SPL$Ufa}yR;8}yCn-4sE+sx|C8PBZbt}o zAS>sdI62nnwYO40e*5~#01%?PyXceN-esm*U2S8XzqbqkEMhRh<3z-Ls+pvP!cn+) ziUtEPJjh6U6BPLU6jd5c*+N&xX5UOWd22iP91O?cq0~eRo=4? z6#|^6bJO6F@?*B;jcAhmo09-a3(W&2pENR*uMDuc{bxUPZ400Z@y7>{P3c-(2ZgiU zgJBA9@8k*j3hQs?tK3tEo&mry!{?ODqtQ68@+4G18_u9*`!m0yIU7@mYJ<724yV=I#oU6IRMBhNWgcAd0n#qO0)2Ji!4oUmH6FOl(^#w9Z6SReJIB=l8 z%jbV9ol-3MOhC-TrGo}f@yk(Q_4>Q9ARXA8<@#r7IUq{&xjMf9mWWzP6!0!2>+X8S zztu0>y8XN?e3ESR3aB{-=!vmm{EQsB<*XQE422|DE~Qel6_v=LrRaO5K}2N+iyEhG=`g#xvZ zmbC^Kz?R^h(kx(pZP?l8Fep%1&kOpeo(llF2;OYTfDl7P?UzjA`c0!x{a?=UxKGn9 z&H=bQpl?zi+~31jHIHUzi3%+lVlgZBG3xAVdldS0%$zKf@A*ShNQ*FWxHe>Fl)mCnv9qgnkDQi6ht2K zVcIqJ`3Y3flxAZM#3O%dNmnk`S&g}rMjMU*{E+`$h#%7kniY{OfknCd&LH5sI5}vP zZmu>zJ~j1t+qqlA#KZCl^g5Kls`;2c=7*ivVNk$fhD2YA_`|gJ z0EDsf6T^1SW=vTn%Ry@xNIrk3a}k=ixp;J3FgY@h20RpM78@V&fNI)^(&&7xz9NY& z;T+%>_0MSLHt=qXDzS5n4-}kT;sLA9etwX+jV=I@L%{6sV9nV){}{_b4;f@}2~ux9 z6ztYBIz!(p`J8r~v|i7}<5P-}#{s}eM6ta+;>X&TK^_?lt5kb9g<;JufWCWr13*mcf&H>rCPxFFUKBnUEU9ATq=>~X zJxs6`yUo&CvvI%!2f}=sw=uH~4vS@~g++B2c|Tm8AI*sVoyx99B*p<@;uk;FK289r zdzU~pMwFc|K*vy1OMvt%JU9?}<|HJ_i)`QLT!aH>1%myP&kfyJPT}b|=#;5q8$^D~ z4dTE-FjNU*nDhcE2=DOP8d)44=V6<(O|}otr4%1J)o})^1%vTdpN7nr6lQq>nKf6& z2)=RugqOwe$PGNY%p4|_l+>}+M9lzqu~~^GUN0={f9!8K$QCIM3qLP}nbI}GtBp9c zmuwugsG-G?_)@BNap`{Gv&!|povg9yDjGyy;q-xiA!bhgBn1L-vRnR=nF(Etu_Fbi zrkBXjH5IA=PI8VrAX|9qP)QZL3A7iZ#)H+~?G{n=FBs&=p4zAW7ig0=4pFi>d<7!4 z=EwT-bE}C+VD@$UlJ$?)yAl!tL1XqQdJ%f6`ff{Bl3D=EN9kr4HcFTTQty*EKk2k| zRYb+rUV9w=fuw_g`MXLlDp&d1;eO|?ewRXgY^raz($?`AKltO(Z#O-)fYx^C9GulR z+#hD^vt&T7XKwj%So8zZcQ_9aw%FCyYK_%%zdV31$~23p(AGA(H3{-T>jjDaBo1a9 zQjEL#advvn!ZVDv^X^Ce;|LE25m>L)x!5Xnpi=r$2W~T3>acQBo{{yEC82py9 zox08=n&JTLFxkU(ti&grOFN0>3KY55^VJ_TwX_7e-)`nqRuG@rEO`;TBC+yq_5?qy zcKb@uZ>bbFOrL8~ACVD$U2cNuYV(jI&Kory0HaML$Ic&Roe5Q|-C%mToJ%0~2ja{^ zU^4rV3wf+h{NV%W$=wI=@$r|MpVo(DxrlGvpcyPSU%o1zhy@+oy+E?e!Z_a!0THDSZ?U4QBOD8*~%j& z9jyiRx>y68r6H74{Z7}OEB9n@QP4-AolIP-=%C`Y8g9df6|Q3$GQV(kX|T`Wl4IxQ zoYF#-;|J}-^P0)YvJ!@wd_X#zbJ>hzxQo}VDjy(xy;!NkG4Lb|w59u zlJfEkz^M;FyhTLNDtld-iA#p)Vpi8OiMZd*{P{yYVBYu8AM}*ZBZla(w7*YcBeFsl z10VLSj;*DtaoyU^iWbmb-7S<0rCW6GuO6;lln^OAJ4!%$3Bl$oypMHK zbB#H&w|rd3nUUS)Ha2v-r2AY%pn;RC@-i)Xhz5>zZEZcdnShPHWgCRXc>=K@0*E}l z=~13Rm-uvHqI{fKVZ64Y6HXWTxbKN}8q=6&@2??ut|vqX`ZKza1OU zANyr|5L4KMb^!5x&b0d*$w21vo|tf7d#=^#5#mUCI7j`S3Yy^_ZmLC;XlF6Ch>!Ql z?E=C~$QR`f1R8zAJ)U4BFcP2o0h6Qh)zNoO4G0BIZN+oKgk88tLV0#{wE2t6i7Itj z!CN3amy2%%@Uc-*dlREJ?E~z@GzJAb+5<3UqI34ij6M>X;p!MJ`>QvaG?DzAW}Tt0 zzm*hk;hKuYe_f8L2lFC;w^>_-b=$_2X=oD#Q{r!;pO=?+DzVemsd7^sSj80|f#V5( zH^coT6(7n{SitpS~YdJDx=YqT1vgC7H*v!rS$ABGM& zJ3Ixd_PdF=n^I~1XhKBvnCIn>vj@&As8rlQ#Rjt;3@5F7mC>k3>_-Zc9#`CMB4b|i z7Wr;ZMG)^r_8v!#x-2-v`C6S5TL~*~eN2tgB5CpcScq$@ZUXLyavLH3^xVCylSKsl z%C7AcpLg@@qu-=yC)aGPl6BEVnI#YAGSC0c$O^3g)LF)-*B>F)AFaiHYMUmBEHB6T zV3vTxtdCn`SQw_TAvAbZu2z8fWjyVN{EqJVR|JqVgXXgHF5Y7?##mzt!ZC0;eu6-u z-w*+S5pcV?ULl6jtJeQA{_#`3xbJ->dGPsHZ6*SonQvx<&r^Cb6D7!rZ3soy*8vtf zKc?B;!AYbd-EaiI;g^|EFAsgetyHv|6#wUv4r+fPBCVB~KB9Byv@H<=@QE z>*pc=fgbnlzVQUA-Mg2EsNbF;@(&p|k7Qq|S2%}k7Cqe-$7As&Pe`bW@b{;-T`$ovMy42%$Dc$1 zyZCHuC4C!kBG2V7KGZJX~bus)%{zoJRr&vw+q zi$-+s6Li0Fr(dtEVf>qe0DyLfU&*ZA%w-$!f1>*ucs*Qd^d9|te*Og&*^fkaPaww`kkIW>LQN^tI1DV6 z=at=Vi>&m5p?{0e}lRJCh2;>m?;A!wT;P zrssgMR1mN*(od%X{hsBy`$Q%(yToH)taA<^f$&l9-P}Tb+VZutBP6B-R(&g(W5Jtv zM$6ZgGR=GKAGEZ9#*aV^Ufe&eCi_rB8L|LVJNi8Vx|TflI&+g1cS;BRofH+Pp#AND z0?{nO%4gu_;KM{iY)ntjf!E)p#8PL*XY*6=F&;U3f3w) zbQMt)y>4805DF0cTPa&}WTWTW{TiXMde^KP=I)J7SqRW!$DsPrYV%TkkfQ0zd1Wz6 z|2dsr3}||QZ3O*VG=9^__WdeZ>lTR#k0VlA#hzsGT7!x69m>UMZD3HDuZQw<+Vo1t zAeIOM1*3s$c6Sk!9i2*e>Sd&*p+1n(Hk|2{!N4=yY;V{9q$+EjnSr(!jv?V5z1->?|w;t~dS2z{@@>#TJ=$TIXMre$fO1G`xVIYxnq)0XCHN$%x zGl)qT65zco{yPq9|J;N+ie&{s5+6EuFA)Wj)Ws#H5~|yV0iAJii+oBtX---73B>eu z9MfPNTMc6yPRfGJ9K}R0axwTEG2j9~Qud)M0s7q%@rufu0}V{8N|H*$3<_7I$4eJV zOeATc;Y}_6dgGO%p+`(MFRDi2?ZnafadHvUSFPXV}+c|hF9o6RJ+2vBMgxtV# z!qgHcCQ2X&u)jz=d1*>fVmrXs_!M4wGHlnC&S`03Dl`%Bp6E~}3P3;TG@Ll-YQ^ZR z5DA^fY<>ZmL_vPRH^o2Wb+NB>l2ND!&cfWXYPJ%TQh%>Q^Ww;S()lbW8+dSQ0&z@v zb?f60pkwxRrUa9emW;w4zJo(2c>gc8=_&wy(Y(Q-qj=9&=tKNrBWw65SWp7+J81xBI{ThZF z+;6Yq;h~~3zhB|TZLs7yhhfq`&LUL$vYq!({MQ^-F*jXHM-!gA7jV-p)9jRLL^E4o zviW0TX~8r3c`GJa@-o?HcV(zra!j6uBxc(`Q&d&IE7Xr0ZT(~WeZ8|BKysCj3@){#d@T|Jip#Eo^Hgcq-G^3Nm3ku z`=(hFw;coe#mDrPsWh+oAU3a?A1p3907)&7qWw7pIr!>2S2gbk^KF*g(K}Vk0&?is!G8npbgqjJ6^j# zIi9SF1iULX%Kw}`LFr1ZmSETGGB2eQL{Pxd zONpP=`rkjqvM#Gux5u3eocM0Yh;)gd_Z2cDp;*6G{7nIw$_&3a>%in8x-hO|X z&kF!V!IP`@OU;xq3vWNi^jAH!H>SFJQwJ@PBs%z>V?cdUUr#{*$1Sk^QdK1&T{|7$ zR#f_os%rsZ4FOL{4ImRYw z=O%51zETQNdGw zdbz9h)5{_fb{UsS*z|-tk>C>xO_}0Ix(l8{JMz4@(@4@S9Q_}Q6OswoUu)ASh zrC$SYJeIg+24jenKLlQD;c*N!EZ~|kYvG*kS-%Z+T5W)JtaaOcbe?G*tLf~FFnP@D zeoRhn=~p{E?o!kE`{P4o<4zrFyG;x<%`(}Mr^M&Oy@dE>`HJ7?F%q85?^fCpdJ7XeWGS5Y zQ+8?dWX!*(OR-NYH`h|oFh#B&`CP!#k`Q`h zbY$8kYDdC)Fo-_8FkvF@-_zlQpU6)1&~@t{`AGa>u&OGBor@Q^xK!nHY70z^G^WG6 z;Ng>Am!z$AG@Z7+U@pIgzY)6ZD{0bU>#IpPIt|)}UgYO4$6+`Gl=<{El{cqJQ`*rU zF4vPv4uq%Ke}F?@ex$If%6JvK)2#%j}$ba>yG!_SEy5=V0sOup&4uB5Aa&3Ua zBS$BfZ>rfsj!>@WsEc(;2?j;6pRKswrmWQxFZPUkuU+!Y*S2#_w?S)hQH(lxTD(${ zhO{5N-e?;WR_0BhGo?F>GnB)7olZPsw&g$CT3EB;`?hQ1!+&=Hy#WO>m@6+yD=?Jh;M&ME-+WD8mf#MXouvO# zT&8~hWG0YdVvoPL$nLRI!H5Dz2?+=4MsWXD~>b_m;zdR1EprCjj3!iO_ z3IJ{X+dd&SsMExGZ)#KZelNJ3EF3bu8NBTag53&`d7oukXAV!&e#dr!`oSVr|E#_b zGIEoVxg;p9^|9ZK-Tmq|_2~0XeT2u$>vUO_q?|T#| zN(?erv{AFmJ|G~lWNW)|?_b_w^>Mi1#$D-x$++ve-Hv5-W%j$p;a97?B?J2O@bw4^ zUHr?(k4~8HW^eYt!#AV7bK4pr$!_pj3iCCOl#MiXIuh8U} zn_MlE4bL}dvD`O)>CgB~VOFK*@|MLu5!H&>kpHw_rrP9r$wXCE$|oFmoDKc zyk%q*_;W|LVqYi{?1d-HQ~5?62lxxpsCFJ~E8ykT`v+hmxm(Mc5hSfr-O1n8J?NP~qHq0ep}?=q z9t`V$r*^QUMsm!J^Fe(o$|@%*pyT9@EI3Y6w#c;UvXx*rq73tt_4bq_#X~Y#U#?qF z`)J{{lYzB`{+MRx!7B&^gfC;&ILL(Y;r%$rRnaN^8vBL|EAXR{l7b{@?B}il?~j>E z=gFhqv#fi@Q1ccF^sfX{`f^=I`#nG)U|ScvN-OTq1Q>1gSo# zAR0Y?)*aL5zM}gTdWU{_{KZ!c}1Ezer#QPY7~o}fP6C;9b~b7 zhtL-_Cf~x9=l({;9G%K?j_X6FHq9GXw;#w`-ULW$f~|b?@n6o-$q^`-R?KM+lh_F~ z2R((%eoZ6(Y!%}WJiBWl;3-f~<<0z@RyNZS@6r?g%9F8dr`VW1g}|yP+nl_L8gw_y zzOR)ewK5#cSd=vkqoA8Z80gxqE>HJ46%Z7I9Y4Rbq|FF6&0vhacSA zXpeaME82hWu(ZU+`Bw!F@E8F4g&hyBep7A6G|>n(?cR`{Nf~ZOb$K{3J3BKo32EmO z{*Y7H@v+kR7bM9*2zuhqCcA)q^&lS^F)j-Jr z2pie*)Pgcu{gN}W`fopnG+*ifm%@_0AMf=|k_e3cSO>i5_W{d zgQu;B=b9YCl_i@=1D4`vkz|3-y_eivGgeR`zbBzvVULpqx+bn!Et1Qnwu^E_TI#@ z3SL)s`#pWa61m;fC%qC3dI@>X4!k(q6?T(qr(O8{xx99Q*?7(e=$2u?WolV#I}gbd zA}LlA+^xDczQ4F0SMtcoHzAZ~fPOi=S5wAdNVAE_$|}+vv8>Xq2vf(#PQnf4OE4~P zS4&4_(Bid!#g|r12$DMVDqdn}>AOGqEIs6UPhPK&&;mIl2 zuu8f|tK9D1DerG~gs4t2fHf5Y$5HVV5Rg+#P<^nnSV}#0 zW||DVsYOsiq<4OdAfNjkZQ#sgVxA;su)Hm&|ODQq(JPKJiG z5I*JGOjXRANUV9_A%FzqBF^TZ24q$Bf)$ZjKyZ}wnbt;efTfb^JK64$V_XI#(Qm04 zrzn)1X~2+@GQAQVtSK8aa7m+ljX!y(0{Q4UsRUnUV?2tFH4=Vs))oB^4TumzZOBC zZH;4lMUlUO@XJ(_a|-R{_qO2p7^2a&_6CXYqIEGCz$@~5=}9s!TCav=k<}kS!S(|c zG^jtURZ8&)Xx=CvUmt1Ywqo1yKRq;m7qOzTRdW^vAt8$9V{vjT2aDz>hbYLyF~GwU zydK^|3zc=jj-7>4A&EjX2V{{!MXBN}@N}m-(y#qpQe9HA&vl>tDOE$}TX$T|d5vU{ zK)Se-!QOr1=Jq$|lH|p4k`7fhI1t89etq&3sBU}Na7xpwcwtGh@ORFX;|(AZM<7s< z4M83xA{fpr`Rnt%Us|*H!$OB%OVIJu-|Z#uG1192p@zu7>$utwy;!~2z_UV& z4lE8b&*|TsyE;@5bd+hCNUOj>gv)M43NwQenBY^Aw)C-?Pm<76VizaB0y!H@cpyY* zI1S+^U=>0j1bHLrpb{f?#MEV|B6phNfQ=rin@LpO^39oD z?P=>-s73~`$gGiTZsx|1uy&}1jbw;?sODD@da@OCl#`2Ehlx3z);YYnIXO&IcY*e* zk}42qxite(LzjfaXgbvR_k!oP%!Gbp9R>j==8jRIhn0reaa|FDpspV#RL zH+l^&wi>gg1?T&4Qy-OivH44-X>T*wYVG6Xnz8%e^3p0}Bb^M#vWXc0VWV|BFYLi* zcE`Hb{w^tM<>k9ov%_ioUZ{pntx@W~J)Ie}SD3kAecE|123hun6_z^cUPl@~HI)o3 z{=`B?cB7&SPn!JUkX@!SJ-AG*Da~vFLt0R^npS^X~~)HO3aq=32%&+9(N{pOU81!pUYMZn9~XuATTWA z#d^1H8&?`R>_5#Pva1==82xUqwJT5l`ed1S8$bBn_1KlsmJ2e+eb~}TLaXJ~6>OD4B31TJ7|WvF zPZw_qLzI`>7Z_{IwBa1s-umTA>G(y_`Ax*x$ylc8PkcyHG6+{2ZIT1q^3QYv3;gFR zM#*1c(L>@bxEM-m_!@_-;LmQBe}EZVy+@#iO1YvW00VU=L#9H)FVlo{A~?nJxb&*i zd{o|q4!+djWC>bgYt)sizAuj)y-1@V@|+R96FzmjlH}OUd!!?sRDbm&C2lK+leI)h z&y@LUME(Kv69bJe?@>oGwX4uPD$a%JzBx~q0!PfJadVjn&*&M25nZDD2ovM3IO&_9 zt(CrpgWYE`uWw5CY1Z&yS2J5F1nf<2S58}Da(KCYt&pf!RP#;4Oqgtzk|wy=6R6Xe zjQ8pjbA7CDCttmFG73d6CTlNTVZ3U6LznzuDLUPFEAtHwW7C=kwY!K9+1K_{iA|)4 z*=~+j1vKOnLR|i4YlgAsP9YJG!&*ISt}-f+cfa`Yjn=`)c@=r!H(F>?Jv=rbnkmz* zXojQSsHchD>8!72N|Tpm5SlOsk|u6OEIPh0Ec(Lga1Ojezv%yuT#}%wX4|?^a-G_7wa8H0p)Sy`uIU;KY z6VKYkZ>1K&KdW=Cj>pMp6C&5CDd{rNjQspr1-%fVPKmWgsKa@yP;H^lQ@e$Z|6LCB zemsJLh4(b|~DvBJ%;*3N0IrP~WuW4O|9THGak8UOOsL6_H9rS8JFyWQYc z=k>d}+MvdLq1ejN_dGrT1_QBUx3IK3OE_>J!{Fdip=iYy&j^vcyP($dXuQ+*-C;>V zWUvXj1jD=0k8wz1knqo|O|^WXJYFQK$)@bz?VKjo9*?nTwGZj%ua!pG&`)3{W6kIi zig`!tKF>C#HOkcXAbdjT({%Up53}76`C>i#^q{+^Zfl1ckzRoUhyj?TxWITuLe2ae zywi)si|VwG`epe%JoQ`uy<4xlBiYH8WRQu z&#D|#o5>&{9u-QrpgO_oU_Act83{2SsgvF>#S+xCseF>5{v}K}14)eO`C$9|olo$LksCpB(m$++wj>qKKhG34bsv+G>wSs*PlyrvP~Y}caV zoI-p&p`XXjLquzkDwhNql7{^mW8+EP~=3Qo&@FVluF-@L$`CVTE{V7GUOF(^Lj&Ha?53_K4nwd5#Q zV(mO1Xl8-lv9GF7kz;pWT{Iii;Kyd73FxO4nU-HXqUjf_4>@a(SvWf@MpW$Sum}eA z5iQ*c-<`R^^Sw6k>E|PBzfzR+e!j295_))Sf3LvOdFMXLeS31)d7Lol3ybhP-Cu30 zgrTg#@?wU#;>f|Zt&d03%7$-{U113|`lsGi9i=b#yF5e@ce$*AIc{9&aER~ATOG1% z4l&~6x*iUc2QnS9ffMofVmmisQ+a1`@8pDxU>uD_oB8yyul9MdBx4mU(PX>bdpRM* zkkwa!%O<&o77=kNs#@OK{k)HLD&lMny9vm-lw5w^^2n&s@1O?v`ke+nT#q{`*S>my zVqorsvN5MIT79j*$*N>+hpo~TqFiSL?8Pw&`*ZI;0!e0(tD#FVa)Q3SpHktnL#D*cN&o3q|eh z;UQ%q_7_@cn-WB;G*RECE8_|?8&mutQ{@7x~@1lqxOW^>tvA712{c0HJ$EqBSYQZLZ%+d^U?_PHT~~}I7K(p{ zvu?JpnOIH&o-G~w(@wd+`dd_(y(32|{`-w9!ay?bw#7xHNb`&R2ihaV@U1xFR3oh~ zudbUD$T_6*$((dQ79WU(aLy5Fy7kI`PIiLf<1kREjXDUpe=X=JWJKUxW#*7-gr{BQXtdd$=*-0Ow9eZcCrkZwQI@QJFLpVsvwhR0`sWsv zJVsY(T23cxnE%Z~Fthy2eulKgI@QNPzHT*=Kbt$SFLhdb@2k5TJn!#CZLJUc?h$Io zporzTIF=O-@8NmPgp5prUGh(3-YfZalY`)Xg8oWEb;|pI(L)J6TZ`F}gqQd1cOfgV zI+QEYuGYP?3VI~cZ}Esv*wz^S^>{zdl)jGvqFi?f^A3ZGRi!Z-Q;mF9pvn;7dfj->VzoQ!4XCkxLpy>7>S zVA2e_xx&yZ@v$$)h<4#lXA*uovePkiF{;;;quo>yIe+-=oS*$=2!C6Si zqWdV*B$EyeQy3=_9DPeL4rGl-+BG>rgsVZ zb?f^P#;K+jnTV;|PxmD6Ue4mz*4hq59k>Jj-qX4D6s6*{QAe>ewVuZ&-rt+ zJ7;%hc4mHaW?URB1_!UXlB`NM!Z&}9*3enFt(j2kMgzX)>yJ*4kfwIO1n%RXJ@sLT zBhupl;GMH%dO;p@z4O<}j-});BOmE*eck`;mFvZ#vUh7oil6+m&VJ6jfIEso4Hl4D z-`PysT8qR$Z?}DdebEa}@y+@rAOMKh!{5SdAE}d?_4AdzCLsnFsTjLm~Oegd&U-`n?Gp%l8t85 z`f^4iXm#>D7wqcAzsOhPPJtcFlbaB}n!4`W3d9Og@TI+%E^88eINv2h{$ifA0#^uT zPsR8N&61I$hgr*HY}!X(D6{4{rXAg6?U102*lf4x%Q8VYq)9`ZHQTo|SdlGNeS^pq zxPYyvrwi`FQ&CxrkR%vBUMcJe=#;CCCN@j*d?OS`;8maV;o+L-PFvR-R`xo=;wHdYykH64c%)Gp+;gdjBR<3Q7Hsob<)cNjjuO`1y=2=9Chx9FL zPd`8VN1RZq;D>^-EETK(jNs39QsZI{$7tMb^x3;tc=xWIA?7661Wm&u(1+^8xTSK*b_T0O2h+LA3%}b3o)%n9+q2fSK-QXwDzEU7zioZ>&q;GAc{Uq5l1y zB3@4hC3WX1BUT6eGwL@o_+Br}R=xV+eVq6{XjKPRf1z%l;eX^usKaXwFIGo#Df_S1 z_{=q)XB0jxGyD4TFelaJdZthW0N{^K{@_hj7M^Fn$?Ua5l(|e-F7_k&$}F~JwmVA| z2ECE9(rpH3f#C5g^jz-j&YT13)!K&WyAdcOYITb#aG}M1Pyu1kfWc6C1^5&I7PBq4yRy9v zIEpOMrt}$2zxpI5X9^%aVx-(`L5AG;94A+o$T0O9TWv#-SC3Y&Xv4_?i~Laopn!z! zv}EnwVJPwf<1ht#Y4DbaD+lw-YMLz~9fg;-!k;8&RExO5_s(V>RW(dq zGRCjZdPN(Ljs^4>zbq)ZL=T2PHJ)-u5W)z`<_xEf6TVOrO76}e?P@VVCox70>ZsyH zTt=^MdIZRQ_Yg3Muc3b&_HOEViL(C0RhY>fs@rgf8O;j1GOGIKd93!Y3DCtJud<6n zY9q1t?8I|hv&O0^z-tWV;-9YL@TkG=LhWF$b(PrCPnQ+9Q>Z z&~TCET(shOKVOY;T_);+we>`Qy{S)N!+HByTh@kI*LgiJQZKvBI%@PMe$6kF`?r)1 z73->`9?FXXw&eKNB<@Iths0-^0(Fh*;jADI`fT&L>(wSROs!F8+U9SGk$wGy5bO34 zpp?z}LgM_L&7g31>z5{6+Et~NbEHouS+*uH5J_GCd8*C_vxrVcN!>7uz;b37Ilgb_ zN2X)1!wamva;@c4=WpyyYEiVt#oHy-%4e&K>5n_;Tl*Y0=${6<0htNXWA?lm zxJB)<=hwg9?EvUnrH-MXEh82vUo7<`vHnjk4!a1Q+((MajPPL0yaPnN9`8)d0%)B3 z4=H*HEJPi@cE^5jE}&N(_8Js1H7kEGIe*f!gIr5=DWQnru&@8*eDdb5;%*0%^3R_? z4ZP9pe{ z%<>Xlq)(sN>kZ#r>kj)2H>lMdq-Val2{L>sZsIWUE5xZfUl1+=;n0MWonLOY7BvORYN=32fWM`MV$RAy< zc2Y8LLUg#Fg+DtjyE>bHadNP1pINDt9HVi{0(|rNG|=~4w^~U-`k|z*wGH?6tLu|R z(F<%R5agNjMz)C^ZSB;Z@=<>DoH+9wlofa{N}SEj*|uO+1mvTacV_z4G?ZYZ%_Zbg zfKus}3a**nSTj%*JWf-qz;+XWY2OB&{IY*>(p5}%Ggs+Ap{e@S>QSAv(*EWKdasSo zgewPOBxnpE+4*M4i2Gr*_lz*LjcgB#$1UrBa`WdickTx$&v+QA=NT0TZp?3YEoDG2Dyr`e-NUAU(6`tZ&qW3Dv?7yBr0?j&=c8 zN<`t>rqf+<@SV6nVaP>Y(AjXMiA4Z*?Ngh9p!YZ9pWON6PgV$sTo2@U^2rs~&c)qw zoWOzywhMxgBFp={j>{(bJD-|)ARta4Ny6l;k&GD;l|*g#Y#~`b@ohBI1d=d(_~k?y zeXYgKAAed38`+Ga?-V|DZXeZ|%1bg~X7pW*S5J4{@5zl}3MOR-G9=Cg57P7+;lxTF zw~f%-d`%jpAL)@=M2%#MD%|--3z#7j@nUcYj2o#D-bjwdn1V?2)YeRFSB2*B?!}lt zb$3`eJZGFl`aB<;0KzN5XpZ-dqYZoJs#23*Ry?c3W1e&_?atyltyEd!EVi7$$I!O?sHTjWa+tuQs z#rwh!=ex;o%ekHo4MhGX(S-LjCpNO3(Y-EmB4f8)l^@x+UC@=L1lg>1H*?YTG~4Q& zESD=DUm4>%Ec8UDf^|rRjFrCmU*}%W_?_`>q-1jZ5C`M2cNv@+yLRO5416!)de+J? zy~hpumU;Q%(Iq~iQ8tclzhk=}@IOmU7;Nqf3ubZ<&}$V9eKhOJ3SG6iNnr0(mYgsQ zS(T?HZY_n(oq+|$-H+^J(s;2HpmpT-%KGk=FYafTuKDSJPg-ZQVYcWcxImYU9U-`z zx1-%et}>j5Ld+kPo?ll1ZuZ;BK@zov`Y)cdEt%IE`vQ|w-u)v2R8(DM-OK@L%mB+^`Us+mCiTxC084x`eEG+w)R&cL(ESHh2Jhj0xP}{{tcYKeM zg^`hQ;GP67e4&EuTuZA!fRRc3fmBaG<6{w%T)Eg$T)xn~2aKAdU{(IG50RAiQUm~~ z1fz|f{wE}2&XpSu?@)ccHaMPd6p;$Y0wz*&abjhGVQv-!NB3IoP#IW9=^Ge*3Ikn;Pmx@PCMzoU~6iGVbhM zCPN6qECcET%_X1TZ%<3J(G_HU?P0^s2FD~((-;!xP{~^hf7G)biB!u@5KYQ?3&cbD zVc%RNKI(D)-gOfpZ|nX*6ahqPHYP+Gu4=V~me+SRuLkPa*jT$YI+u%u2Cx6TuyAI4 zHXC~xbcUNp&s7#-KIjxnryn7kj7o2l(dEO>Q;d#K&!F&UYgORleM*kWRm4`$+g9bLV0}z;R)d`o2@gV%5~hPCc?Uv)?wZ};-~t{C z6?QGy92~Ii5hJ3vG+M&HLhzE+a{1fFfi9t{o+5 zyf&?(6yZ;O>l^Ko$lZ!x7TL5`IWg8iZX)^kDYfTWUU0BfZrs}W6}iG8PUnL;8t+xw zyZf@had-Uu<&XVqGI_1U^1?+qxi0>LEwBBNch|OlEi)HCC#&W!NZ{e4y!d_7CKa)Z zbC)`BPELvEp9&tFm0Ga!(%BxjTRZ(+y8m4)(fhtIjSNwf0+}E;Lc+oBW*6AkbIR z4W6}h5^XP)O3Pk)UBbp=etWt0>9lWWrobQ`N)D1&;K+A!S+hg(@#9v1|65Asfatih zw0uX#`fEW0_8cG;lezOpm30{>klre0HY|o))gw(pu&%Q~M6F{P#?$jY5dD(X;Ecjr zC$_c9;vT{%HTl?(lr^kWV$vD}IdlH`9+i)Z*;`?YjvlQ<*3X}R_8BnU7+K515d#oo z(7~QA3JidG3LAZuFdN1k=NCIeyN{kc;U&)pD=?P7i&=W}W`CGqUv{5X9A#ZYtwQzg z&bt|#Pj-zAl=>T4w7Mx->5V}7x?%cqPE;s4)?H+rvPawMev>N7(%FBA$&f&S=G^NE zNY3oNXC5@> zwn7p8c58cd)mgo#9s&l(tYQ{&nJfa9%IOojPY&>|q1$@2`m#q32j<(G=0^zHGFg;0 zp2mx*^38?MlRB;vX?8$}2M3tBr(2?r+hprbLJdXh4#+`q+1&W}en;UY`WF{;d9TK- zHMS)cN-H)V$!$HVUG;|Htv zjuo*hET^^_Q^#CKeBubf@kXpp$K_YU_35Y>nxR<*xh_pqBsToz6B_&^zj*`1{b%< z|7_pAFN>nIUYtwXDh&y0qu(Gz7ps>_8eFdC$~9ZVAuZ+6B2zXzWLW!!Jspe*ej%(4=SgV{BH*j~{BBq02KMH=(h0hfz0f#@AURvkgmcc{lV& zrJw2e=)VH$Gks6~9D9UH9`=|&;(ry{DCdxNbQQ|hwDhgeLfP%~jWY7HETdl6MpL84 znB-PiwwX5*Q^oXiU2&>K^!pwl_gPXd4TrwL;g$5uMPZkZv-5C$L)^P^%|<+ybopzd zXcFqpzM2@vcf^@IOg{Sq1{JwU7q)wg&4q>`GA6>F|DfSFI|h7E@rOp-z=``SX9_RG zC!ZrBL`ergp$0u96}&1U1QUPl4LA?oW0wSyJ;IXNF-G+UMKQ6r^AmuQi!`C>1$Z>h zJC)VYG7hSDbkWJ>j@>MuAD)DR8V`h7@tpl`bnIY^vWM=?Or zs)_t!L^G)<^oBYcFEF)9bXsTFO*MAr6g%7{z4K5clcess0<6q>2Tc~v?LY6dXB81aN*ZZ{#`6fX2A{-0VZ?qH zCCA49zEmuUbqtgh6{uhbH6V*%?xYIk@;A}wZ+ccv{7>r9-{lreMCA#n*wwMA=6BNB zO;`Ow)jBbZD3urw$yJVuTX+AnCiGT#B$Ss>bmiu1&1W+Kwbf)nIu1g6nRp?@=r7{G z69V*GYZBi;LpflLzxn5FL)bLug;KOr9L2E_KgZ+$lZT zC!p=+k`DW`h4$By!s*b|BDd4+4#vRcHVV1lS^u6l$t$@qD^uz33nmFD%RQK2yk@&k z(M7SXIr+2?TJ^mlNU`NVC%aG-Lfj#HS2%j^8C-Mp_UEd`(sInOv~M{gY8vRK16m`C z+hx^v8@l|L=~_sv?-STVcNOwYd|Yzns3Icza@$`TxJPB*m@t0hPyJ zV1mg@jTWpFKe9G8rOiCfJZ)7tE)k7M`UQxtY5(tkR4EG%B}x8nl_Z4{dkAsZK1|S9 z5a%RpoEY=&HuEoH)$Vwmh~K+$igJ%8zgc=sl^PYxbk?I@3A`d`ec%Knto^0fUzrPJ zlUmx3Fxc}TDH+mg@4wf3drz2vj_`3$sx5i!^61)(Q9&ufJ3v|HIik&f|MQdooH1~_ zppxMBPI74*`Xpum2-#k}|`&FQ2u0SIC21{=r3ZgiS|)<1yiU%@4ALi4M;xD=FQ%9UIw z4qbcS-a^+uQx$d<0@(l)#c+u)p+$AmnMv{RwKC{a;rZ53^Dl&<0?=g5-G4is5 zsTPSn^k4zrhCN@&Y5T-dZFf^G57&%F#5u_0_Mc_>y+PeP&9)IYogbo&?#NG41%s(T z?7zQdwTX&>vI?dDqXPXUSMJ9Yh=D-3&jq~WBO_yDanPbKWgAj-Mw7xH?8Of9mr}ZA zxWc<29xxa-zRU&ANq|jtiAc4D5bLM%f{Cmwr-(tOQ3{0$;v@7uS>@#d>D`P~y6^-9 zTtI;Cw+|N>!l`p*{6E6e9xD(t$dO74WZw#47}VRq7^9r*a;vB26^=zcnkJJOC3g-n z=Y9Jm zADagx$ErnKoz@K$9u|F1_NYM!6K5wOdJN#4gs{Bs6OukUPoJ_@aNZ#JUtN&S)zHd( zlQWq28hj}Vl*ts4p;zN}PKbnkZLA{h8l*g4LQxt;S@*v8`d0l7#DNDThI2q+HeC$% zXfP=F1HN)Yt?Anrw8@<8APl&Ll8%#wc6GDLB7Mc^1U~)^% zuAMza&z6yKeccIR%Jq~cln!Mj*`x{=Nam)y#~4vS#1u@cdoz1=`acqJ^fcdGMWs1% zoQRZEI10+X7%G94!J$2S#i*rwvds9G&d$yS^P${)R!q7Shb0u1yj+vs;a1|KHZeDB zLda>M_sHTQs0Ebe+yYu+V0Ut|%2%9S#gadgfjtpko6SXFA&9>ODzL2Lkg-?FCZXkb z!(ThG(xl}_%#muHv{T4u=)EUt3t_+VE2sI-JVKgyKwYFTaw}A@Kmcv1yV7z$Fgouc|yae&xfI)A;3v9HI(VGF!xR&;5W=al6oW@a1@gewSk6fj(cnYuLvJo|iV#A%4e%Z?@Ef)3 zvT|Xy@UuF?ZQY)AksE@|!S=gpDQ zHqTCou6tL240d;-=3##Id|pQ%qD3?JCDR{qM~yaW<|r>55Cqd?I)hYRwo7Hp`1gWd)BXTD zy4;b;=oCAVj*7belksb4sqoo~mdxa3Et6Ed(`~!#>jJT#Lp5wI z&r96m81R<&{WhD&H5bKtIF^PCg*H3ZNnDn!?c!nM-+x+s(3DW9BvqkQFL{h4VzFhG zndEU={}f?~JUz;Qwnec zptHIP4h;_!Ln}1+D$Zi?2wt8DWG68WrZvYwm&oxRkPgJ*;p4g>UyBrBf(Nn!iMcLO zC?MWj{Fdi8wD-55&B*(Nxn?F77Af7Ep&(iHEC&_>kK5JHL(u8W;gN)JI1djVS<97Z XX4XzPJoXs$&rj=~9;{T&GW7od2g>tu literal 0 HcmV?d00001 diff --git a/assets/screenshots/marcut-settings.png b/assets/screenshots/marcut-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..db5a1d604cea98b5bdb6e7fff6f527a09dc0788e GIT binary patch literal 465828 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 wcu^DL>@5bd{HB$KFE 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 z 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 z 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

O_t7ol#qk1J|>z| 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 z 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 literal 0 HcmV?d00001 From b721b4d25b282bd12a608215783e8cdf14c903d6 Mon Sep 17 00:00:00 2001 From: Marc Mandel Date: Tue, 14 Jul 2026 23:52:23 -0400 Subject: [PATCH 8/8] fix: pin SwiftFormat version in CI, fix real cross-version violations The macOS CI runner image ships SwiftFormat 0.61.1 pre-cached, so the `brew install swiftformat` step was a no-op and never picked up the 0.62.1 I tested locally -- CI failed on 4 real violations 0.62.1 doesn't flag: redundant explicit `Sendable` conformance on two non-public enums (DocumentModels.swift), a comment style mismatch, and a string-literal indent/trailing-space conflict inside a multi-line alert message that 0.61.1's indent and trailingSpace rules disagreed on for blank lines -- resolved by using explicit `\n\n` instead of literal blank lines in the string, sidestepping the whole blank-line-in-multiline-string ambiguity. Verified all fixes clean under both 0.61.1 and 0.62.1 (downloaded both release binaries directly rather than trusting brew's ambient version). CI now pins to a specific downloaded release (0.62.1) instead of whatever the runner image happens to have cached, so this can't silently drift again. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/ci.yml | 10 ++++++++-- .../Sources/MarcutApp/DocumentModels.swift | 4 ++-- .../MarcutApp/DocumentRedactionViewModel.swift | 13 +++++-------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67f980b..a77b7c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,5 +87,11 @@ jobs: - name: SwiftFormat (lint gate) run: | - brew install swiftformat - swiftformat --lint src/swift/MarcutApp/Sources src/swift/MarcutApp/Tests + # Pinned to an exact release rather than `brew install` -- the runner image's + # pre-cached brew version silently drifts from what contributors have locally, + # and different SwiftFormat versions disagree on some rules (E4 hardening, 2026-07). + curl -sL -o /tmp/swiftformat.zip "https://github.com/nicklockwood/SwiftFormat/releases/download/0.62.1/swiftformat.zip" + unzip -o -q /tmp/swiftformat.zip -d /tmp/swiftformat + chmod +x /tmp/swiftformat/swiftformat + /tmp/swiftformat/swiftformat --version + /tmp/swiftformat/swiftformat --lint src/swift/MarcutApp/Sources src/swift/MarcutApp/Tests diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift b/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift index 69350e3..ab88e13 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DocumentModels.swift @@ -784,7 +784,7 @@ struct AlertInfo: Identifiable { let message: String } -enum RedactionStatus: Sendable { +enum RedactionStatus { case checking case validDocument case invalidDocument @@ -846,7 +846,7 @@ enum RedactionStatus: Sendable { } } -enum DocumentOperation: String, Sendable { +enum DocumentOperation: String { case redaction case scrub } diff --git a/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift b/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift index 87b514e..8ce1ecf 100644 --- a/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift +++ b/src/swift/MarcutApp/Sources/MarcutApp/DocumentRedactionViewModel.swift @@ -245,7 +245,8 @@ final class DocumentRedactionViewModel: ObservableObject { /// embedded engine was already marked unavailable by an earlier stall" -- restarting the /// app is the only recovery in either case (see `PythonBridgeError`). static let processingStalledMessage = "Processing stalled - the embedded engine stopped responding. Restart Marcut to resume processing." - // Note: retryCounts was removed along with retry logic - heartbeat stalls now immediately fail + + /// Note: retryCounts was removed along with retry logic - heartbeat stalls now immediately fail private var hasPrefetchedModels = false enum FirstRunEntryPoint: Equatable { @@ -1886,13 +1887,9 @@ final class DocumentRedactionViewModel: ObservableObject { let alert = NSAlert() alert.messageText = "Send Document" - alert.informativeText = """ - Choose the DOCX you want to send. - - Final redacted copy accepts Marcut's redaction Track Changes in a new copy and scrubs metadata before sending. - - Review copy sends the current review artifact with Track Changes and metadata exactly as they are in that file. - """ + alert.informativeText = "Choose the DOCX you want to send.\n\n" + + "Final redacted copy accepts Marcut's redaction Track Changes in a new copy and scrubs metadata before sending.\n\n" + + "Review copy sends the current review artifact with Track Changes and metadata exactly as they are in that file." alert.alertStyle = .warning alert.addButton(withTitle: "Send Final Redacted Copy") alert.addButton(withTitle: "Send Review Copy")

l~|o4x#+8)rDk4JQ#6Up?Sl$k*z7luX20Z(!8f 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%0AUmAh(82C6m9?KHl+&*knbHa*JO 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