Skip to content

Commit 0b200a0

Browse files
committed
feat: polish tasks + terms
1 parent a141071 commit 0b200a0

39 files changed

+3169
-406
lines changed

Axel.xcodeproj/project.pbxproj

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
224F4D7EECEE1287AF701CE6 /* TaskAssignmentCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE485CA04822282FDD056DFB /* TaskAssignmentCoordinatorTests.swift */; };
1414
3724AAF9F7B57FC2766507ED /* SyncEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE366A3151FDDA78680EDF0C /* SyncEngineTests.swift */; };
1515
39E9C6A3C0CAA85B4B8993D8 /* Axel.app in Frameworks */ = {isa = PBXBuildFile; fileRef = A1000001001A0001 /* Axel.app */; };
16+
4312E5D82F366B6A0093897C /* PlatformServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4312E5D72F366B6A0093897C /* PlatformServices.swift */; };
17+
4312E5DA2F366B730093897C /* PreviewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4312E5D92F366B730093897C /* PreviewContainer.swift */; };
1618
43BD82722F1D63F40092A96C /* Supabase in Frameworks */ = {isa = PBXBuildFile; productRef = 43BD82712F1D63F40092A96C /* Supabase */; };
1719
43BD82732F1D63F40092A96C /* AutomergeWrapper in Frameworks */ = {isa = PBXBuildFile; productRef = 43BD82742F1D63F40092A96C /* AutomergeWrapper */; };
1820
43BD82802F1D70000092A96C /* Sparkle in Frameworks */ = {isa = PBXBuildFile; platformFilters = (macos, ); productRef = 43BD827F2F1D70000092A96C /* Sparkle */; };
@@ -23,7 +25,6 @@
2325
A1000001201A0002 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0002 /* ContentView.swift */; };
2426
A1000001201A0003 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0003 /* Task.swift */; };
2527
A1000001201A0004 /* TodoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0004 /* TodoViewModel.swift */; };
26-
A1000001201A0008 /* PreviewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0008 /* PreviewContainer.swift */; };
2728
A1000001201A0009 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A1000001101A0009 /* Assets.xcassets */; };
2829
A1000001201A0010 /* TerminalPanelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0010 /* TerminalPanelView.swift */; };
2930
A1000001201A0011 /* SwiftTermWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0011 /* SwiftTermWrapper.swift */; };
@@ -66,7 +67,6 @@
6667
A1000001201A0084 /* SwipeCardsKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0084 /* SwipeCardsKit.swift */; };
6768
A1000001201A0090 /* URLOpening.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0090 /* URLOpening.swift */; };
6869
A1000001201A0091 /* SyncMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0091 /* SyncMode.swift */; };
69-
A1000001201A0092 /* PlatformServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0092 /* PlatformServices.swift */; };
7070
A1000001201A0093 /* KeyboardShortcuts.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0093 /* KeyboardShortcuts.swift */; };
7171
A1000001201A0094 /* NavigationTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0094 /* NavigationTypes.swift */; };
7272
A1000001201A0095 /* IOSContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1000001101A0095 /* IOSContentView.swift */; };
@@ -133,6 +133,12 @@
133133
0178D0EB98540F719EB6D5CE /* TaskAssignmentCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TaskAssignmentCoordinator.swift; sourceTree = "<group>"; };
134134
04E9C8657F1187F40A1EC1DB /* AutomergeModelTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AutomergeModelTests.swift; sourceTree = "<group>"; };
135135
23797E4E4415996BCCFE8E45 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
136+
4312E5CD2F3668720093897C /* IOSContentView_Simple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSContentView_Simple.swift; sourceTree = "<group>"; };
137+
4312E5CF2F36695D0093897C /* IOSContentView_Clean.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSContentView_Clean.swift; sourceTree = "<group>"; };
138+
4312E5D12F3669DB0093897C /* IOSContentView_Fixed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSContentView_Fixed.swift; sourceTree = "<group>"; };
139+
4312E5D52F366B5D0093897C /* ContentView_Unified.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView_Unified.swift; sourceTree = "<group>"; };
140+
4312E5D72F366B6A0093897C /* PlatformServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformServices.swift; sourceTree = "<group>"; };
141+
4312E5D92F366B730093897C /* PreviewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewContainer.swift; sourceTree = "<group>"; };
136142
43D900F12F3060FF00323371 /* Axel.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = Axel.icon; sourceTree = "<group>"; };
137143
43E774722F298D900093DEC6 /* AxelUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AxelUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
138144
6238124A78A2C3A74FCFEDBB /* WorktreeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorktreeService.swift; sourceTree = "<group>"; };
@@ -143,7 +149,6 @@
143149
A1000001101A0002 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
144150
A1000001101A0003 /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = "<group>"; };
145151
A1000001101A0004 /* TodoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoViewModel.swift; sourceTree = "<group>"; };
146-
A1000001101A0008 /* PreviewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewContainer.swift; sourceTree = "<group>"; };
147152
A1000001101A0009 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
148153
A1000001101A000A /* Axel.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Axel.entitlements; sourceTree = "<group>"; };
149154
A1000001101A0010 /* TerminalPanelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalPanelView.swift; sourceTree = "<group>"; };
@@ -188,7 +193,6 @@
188193
A1000001101A0084 /* SwipeCardsKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeCardsKit.swift; sourceTree = "<group>"; };
189194
A1000001101A0090 /* URLOpening.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLOpening.swift; sourceTree = "<group>"; };
190195
A1000001101A0091 /* SyncMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncMode.swift; sourceTree = "<group>"; };
191-
A1000001101A0092 /* PlatformServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformServices.swift; sourceTree = "<group>"; };
192196
A1000001101A0093 /* KeyboardShortcuts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardShortcuts.swift; sourceTree = "<group>"; };
193197
A1000001101A0094 /* NavigationTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationTypes.swift; sourceTree = "<group>"; };
194198
A1000001101A0095 /* IOSContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSContentView.swift; sourceTree = "<group>"; };
@@ -329,6 +333,9 @@
329333
A1000001101A0014 /* Context.swift */,
330334
A1000001101A0040 /* InboxEvent.swift */,
331335
A1000001101A0043 /* TaskMetrics.swift */,
336+
4312E5CD2F3668720093897C /* IOSContentView_Simple.swift */,
337+
4312E5CF2F36695D0093897C /* IOSContentView_Clean.swift */,
338+
4312E5D12F3669DB0093897C /* IOSContentView_Fixed.swift */,
332339
);
333340
path = Models;
334341
sourceTree = "<group>";
@@ -350,14 +357,15 @@
350357
A1000001401A0013 /* macOS */,
351358
A1000001401A0014 /* iOS */,
352359
A1000001401A0015 /* visionOS */,
360+
4312E5D52F366B5D0093897C /* ContentView_Unified.swift */,
361+
4312E5D92F366B730093897C /* PreviewContainer.swift */,
353362
);
354363
path = Views;
355364
sourceTree = "<group>";
356365
};
357366
A1000001401A0007 /* Preview Content */ = {
358367
isa = PBXGroup;
359368
children = (
360-
A1000001101A0008 /* PreviewContainer.swift */,
361369
);
362370
path = "Preview Content";
363371
sourceTree = "<group>";
@@ -463,7 +471,7 @@
463471
children = (
464472
A1000001101A0090 /* URLOpening.swift */,
465473
A1000001101A0091 /* SyncMode.swift */,
466-
A1000001101A0092 /* PlatformServices.swift */,
474+
4312E5D72F366B6A0093897C /* PlatformServices.swift */,
467475
);
468476
path = Platform;
469477
sourceTree = "<group>";
@@ -675,7 +683,6 @@
675683
A100000120A10030 /* TaskAssignee.swift in Sources */,
676684
A1000001201A0004 /* TodoViewModel.swift in Sources */,
677685
A1000001201A0114 /* TasksSceneViewModel.swift in Sources */,
678-
A1000001201A0008 /* PreviewContainer.swift in Sources */,
679686
A1000001201A0010 /* TerminalPanelView.swift in Sources */,
680687
A1000001201A0011 /* SwiftTermWrapper.swift in Sources */,
681688
A1000001201A0012 /* Skill.swift in Sources */,
@@ -714,14 +721,14 @@
714721
A1000001201A0084 /* SwipeCardsKit.swift in Sources */,
715722
A1000001201A0090 /* URLOpening.swift in Sources */,
716723
A1000001201A0091 /* SyncMode.swift in Sources */,
717-
A1000001201A0092 /* PlatformServices.swift in Sources */,
718724
A1000001201A0093 /* KeyboardShortcuts.swift in Sources */,
719725
A1000001201A0094 /* NavigationTypes.swift in Sources */,
720726
A1000001201A0116 /* AIProviderUI.swift in Sources */,
721727
A1000001201A0095 /* IOSContentView.swift in Sources */,
722728
A1000001201A0096 /* VisionContentView.swift in Sources */,
723729
A1000001201A0097 /* MacHelpers.swift in Sources */,
724730
A1000001201A0098 /* MacScenes.swift in Sources */,
731+
4312E5D82F366B6A0093897C /* PlatformServices.swift in Sources */,
725732
A1000001201A0099 /* MobileScene.swift in Sources */,
726733
A1000001201A0100 /* ImmersiveView.swift in Sources */,
727734
A1000001201A0101 /* CommandPanelViews.swift in Sources */,
@@ -734,6 +741,7 @@
734741
SCRPT0001201A0001 /* ScriptingSupport.swift in Sources */,
735742
D83C5EA8B2548DEC8D10DA27 /* SessionRecoveryService.swift in Sources */,
736743
92F9F81D9C73F02C7FA61BB3 /* RecoveredSessionsView.swift in Sources */,
744+
4312E5DA2F366B730093897C /* PreviewContainer.swift in Sources */,
737745
);
738746
runOnlyForDeploymentPostprocessing = 0;
739747
};
@@ -774,7 +782,7 @@
774782
DEVELOPMENT_TEAM = 8ZJ55A62XN;
775783
GENERATE_INFOPLIST_FILE = YES;
776784
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
777-
MARKETING_VERSION = 0.1.12;
785+
MARKETING_VERSION = 0.1.13;
778786
PRODUCT_BUNDLE_IDENTIFIER = md.axel.AxelUITests;
779787
PRODUCT_NAME = "$(TARGET_NAME)";
780788
SDKROOT = iphoneos;
@@ -796,7 +804,7 @@
796804
DEVELOPMENT_TEAM = 8ZJ55A62XN;
797805
GENERATE_INFOPLIST_FILE = YES;
798806
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
799-
MARKETING_VERSION = 0.1.12;
807+
MARKETING_VERSION = 0.1.13;
800808
PRODUCT_BUNDLE_IDENTIFIER = md.axel.AxelUITests;
801809
PRODUCT_NAME = "$(TARGET_NAME)";
802810
SDKROOT = iphoneos;
@@ -826,7 +834,7 @@
826834
"@loader_path/../Frameworks",
827835
);
828836
MACOSX_DEPLOYMENT_TARGET = 15.6;
829-
MARKETING_VERSION = 0.1.12;
837+
MARKETING_VERSION = 0.1.13;
830838
PRODUCT_BUNDLE_IDENTIFIER = com.axel.AxelTests;
831839
PRODUCT_MODULE_NAME = AxelTests;
832840
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -852,7 +860,7 @@
852860
"@loader_path/../Frameworks",
853861
);
854862
MACOSX_DEPLOYMENT_TARGET = 15.6;
855-
MARKETING_VERSION = 0.1.12;
863+
MARKETING_VERSION = 0.1.13;
856864
PRODUCT_BUNDLE_IDENTIFIER = com.axel.AxelTests;
857865
PRODUCT_MODULE_NAME = AxelTests;
858866
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -915,13 +923,14 @@
915923
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
916924
GCC_WARN_UNUSED_FUNCTION = YES;
917925
GCC_WARN_UNUSED_VARIABLE = YES;
918-
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
926+
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
919927
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
920-
MACOSX_DEPLOYMENT_TARGET = 14.0;
928+
MACOSX_DEPLOYMENT_TARGET = 15.6;
921929
MARKETING_VERSION = 0.1.0;
922930
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
923931
MTL_FAST_MATH = YES;
924932
ONLY_ACTIVE_ARCH = YES;
933+
SDKROOT = macosx26.0;
925934
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
926935
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
927936
};
@@ -973,12 +982,13 @@
973982
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
974983
GCC_WARN_UNUSED_FUNCTION = YES;
975984
GCC_WARN_UNUSED_VARIABLE = YES;
976-
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
985+
IPHONEOS_DEPLOYMENT_TARGET = 18.6;
977986
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
978-
MACOSX_DEPLOYMENT_TARGET = 14.0;
987+
MACOSX_DEPLOYMENT_TARGET = 15.6;
979988
MARKETING_VERSION = 0.1.0;
980989
MTL_ENABLE_DEBUG_INFO = NO;
981990
MTL_FAST_MATH = YES;
991+
SDKROOT = macosx26.0;
982992
SWIFT_COMPILATION_MODE = wholemodule;
983993
};
984994
name = Release;
@@ -1024,7 +1034,7 @@
10241034
"@executable_path/Frameworks",
10251035
);
10261036
MACOSX_DEPLOYMENT_TARGET = 15.6;
1027-
MARKETING_VERSION = 0.1.12;
1037+
MARKETING_VERSION = 0.1.13;
10281038
"OTHER_LDFLAGS[sdk=macosx*]" = (
10291039
"-lc++",
10301040
"-framework",
@@ -1084,7 +1094,7 @@
10841094
"@executable_path/Frameworks",
10851095
);
10861096
MACOSX_DEPLOYMENT_TARGET = 15.6;
1087-
MARKETING_VERSION = 0.1.12;
1097+
MARKETING_VERSION = 0.1.13;
10881098
"OTHER_LDFLAGS[sdk=macosx*]" = (
10891099
"-lc++",
10901100
"-framework",

Axel/App/macOS/MacScenes.swift

Lines changed: 80 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -5,78 +5,9 @@ import UserNotifications
55
#if os(macOS)
66
import AppKit
77
import Sparkle
8+
import UserNotifications
89

9-
// MARK: - Sparkle Updater (Shared)
10-
11-
/// Observable state for tracking update availability
12-
@MainActor
13-
@Observable
14-
final class SparkleUpdateState {
15-
static let shared = SparkleUpdateState()
16-
17-
/// Whether an update is available
18-
var updateAvailable = false
19-
20-
/// Version string of the available update (e.g., "1.2.0")
21-
var availableVersion: String?
22-
23-
private init() {}
24-
}
25-
26-
/// Delegate that receives Sparkle update callbacks and updates the shared state
27-
final class SparkleUpdaterDelegate: NSObject, SPUUpdaterDelegate {
28-
static let shared = SparkleUpdaterDelegate()
29-
30-
private override init() {
31-
super.init()
32-
}
33-
34-
func updater(_ updater: SPUUpdater, didFindValidUpdate item: SUAppcastItem) {
35-
Task { @MainActor in
36-
SparkleUpdateState.shared.updateAvailable = true
37-
SparkleUpdateState.shared.availableVersion = item.displayVersionString
38-
}
39-
}
40-
41-
func updaterDidNotFindUpdate(_ updater: SPUUpdater) {
42-
Task { @MainActor in
43-
SparkleUpdateState.shared.updateAvailable = false
44-
SparkleUpdateState.shared.availableVersion = nil
45-
}
46-
}
47-
48-
func updater(_ updater: SPUUpdater, didAbortWithError error: Error) {
49-
Task { @MainActor in
50-
// On error, don't show update pill
51-
SparkleUpdateState.shared.updateAvailable = false
52-
SparkleUpdateState.shared.availableVersion = nil
53-
}
54-
}
55-
}
56-
57-
/// Shared Sparkle updater controller - initialized once at app launch
58-
final class SparkleUpdater {
59-
static let shared = SparkleUpdater()
60-
61-
let controller: SPUStandardUpdaterController
62-
63-
private init() {
64-
controller = SPUStandardUpdaterController(
65-
startingUpdater: true,
66-
updaterDelegate: SparkleUpdaterDelegate.shared,
67-
userDriverDelegate: nil
68-
)
69-
}
70-
71-
var updater: SPUUpdater {
72-
controller.updater
73-
}
74-
75-
/// Trigger the update check/installation
76-
func checkForUpdates() {
77-
updater.checkForUpdates()
78-
}
79-
}
10+
// MARK: - AppDelegate (needs to be at top level for @NSApplicationDelegateAdaptor)
8011

8112
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
8213
/// Flag to suppress window opening when handling notification actions
@@ -158,6 +89,78 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
15889
}
15990
}
16091

92+
// MARK: - Sparkle Updater (Shared)
93+
94+
/// Observable state for tracking update availability
95+
@MainActor
96+
@Observable
97+
final class SparkleUpdateState {
98+
static let shared = SparkleUpdateState()
99+
100+
/// Whether an update is available
101+
var updateAvailable = false
102+
103+
/// Version string of the available update (e.g., "1.2.0")
104+
var availableVersion: String?
105+
106+
private init() {}
107+
}
108+
109+
/// Delegate that receives Sparkle update callbacks and updates the shared state
110+
final class SparkleUpdaterDelegate: NSObject, SPUUpdaterDelegate {
111+
static let shared = SparkleUpdaterDelegate()
112+
113+
private override init() {
114+
super.init()
115+
}
116+
117+
func updater(_ updater: SPUUpdater, didFindValidUpdate item: SUAppcastItem) {
118+
Task { @MainActor in
119+
SparkleUpdateState.shared.updateAvailable = true
120+
SparkleUpdateState.shared.availableVersion = item.displayVersionString
121+
}
122+
}
123+
124+
func updaterDidNotFindUpdate(_ updater: SPUUpdater) {
125+
Task { @MainActor in
126+
SparkleUpdateState.shared.updateAvailable = false
127+
SparkleUpdateState.shared.availableVersion = nil
128+
}
129+
}
130+
131+
func updater(_ updater: SPUUpdater, didAbortWithError error: Error) {
132+
Task { @MainActor in
133+
// On error, don't show update pill
134+
SparkleUpdateState.shared.updateAvailable = false
135+
SparkleUpdateState.shared.availableVersion = nil
136+
}
137+
}
138+
}
139+
140+
/// Shared Sparkle updater controller - initialized once at app launch
141+
final class SparkleUpdater {
142+
static let shared = SparkleUpdater()
143+
144+
let controller: SPUStandardUpdaterController
145+
146+
private init() {
147+
controller = SPUStandardUpdaterController(
148+
startingUpdater: true,
149+
updaterDelegate: SparkleUpdaterDelegate.shared,
150+
userDriverDelegate: nil
151+
)
152+
}
153+
154+
var updater: SPUUpdater {
155+
controller.updater
156+
}
157+
158+
/// Trigger the update check/installation
159+
func checkForUpdates() {
160+
updater.checkForUpdates()
161+
}
162+
}
163+
161164
// MARK: - Notification Names for View Switching
162165

163166
extension Notification.Name {
@@ -174,6 +177,11 @@ extension Notification.Name {
174177
/// Posted when a task's status changes from running - used to trigger session cleanup
175178
/// userInfo: ["taskId": UUID]
176179
static let taskNoLongerRunning = Notification.Name("taskNoLongerRunning")
180+
181+
// MARK: - Scripting Notifications (moved from ScriptingSupport.swift)
182+
/// Posted when AppleScript requests starting a new agent
183+
/// userInfo: ["workspaceId": UUID, "worktree": String?, "provider": AIProvider, "taskId": UUID?]
184+
static let scriptingStartAgent = Notification.Name("scriptingStartAgent")
177185
}
178186

179187
// MARK: - Focused Scene Values for Window-Specific Actions
@@ -369,6 +377,7 @@ struct MacScenes: Scene {
369377
Label("Show Optimizations", systemImage: "gauge.with.dots.needle.50percent")
370378
}
371379
.keyboardShortcut("4", modifiers: .command)
380+
.disabled(true)
372381
}
373382

374383
// Check for Updates in app menu

0 commit comments

Comments
 (0)