Skip to content

Commit

Permalink
1.2.1-4, redesign UI, cleaning, code improvements, perf improved,
Browse files Browse the repository at this point in the history
  • Loading branch information
cdillard committed Jun 10, 2023
1 parent f67e180 commit 807f5ec
Show file tree
Hide file tree
Showing 34 changed files with 748 additions and 1,143 deletions.
39 changes: 39 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,45 @@
## news
----------------

06-10-2023

LogicSage 1.2.1 (4) Could it be the one?

Hello LogicSage Enthusiasts,

LogicSage 1.2.1 brings many enhancements to the app experience.

Please give a try at using my app called LogicSage. It’s a mobile AI workspace that allows you to use GPTs to help you write code that you incorporate in your Xcode or Swift playgrounds projects. Or you can use it a a GPT chatting app, your choice.
What will you ask LogicSage today? LogicSage is the Mobile AI workspace for iPadOS (and iOS) :). Join me as we spark creativity.

We are excited to announce the release of LogicSage 1.2.1, an upgrade that brings you a plethora of enhancements to your favourite mobile AI workspace. LogicSage, an open-source AI workspace, is now more user-friendly than ever.

Whether you're a developer looking to sharpen your programming skills or a curious mind eager to delve into AI, LogicSage is your perfect companion. It lets you interact with GPTs, view and edit code, and even submit pull requests. You can also use it as a GPT chat app – the choice is yours!

Here's a sneak peek at what you can do with LogicSage:

View and examine app source code or any git repositories, with fully color-customizable viewing file windows.
Chat with GPTs directly via views in the app or through a command-line interface complete with a toolbar and command bar.
Integrate with text-to-speech software in both the client and server.
Create apps automatically in Xcode with Term window and LogicSage for Mac.
Enjoy interaction without a Mac

And the best part? All you need is an AI API Key, which can be entered in the Settings menu.

So, what are you waiting for? Unlock the power of the future with LogicSage and change the way you interact with technology. Try it out today on iPadOS or iOS.

We're constantly working on enhancing your LogicSage experience. Stay tuned for Google and Link cmd support coming soon!

Your feedback is invaluable to us. If you have any suggestions, ideas, or queries, feel free to drop a mail at [email protected].

Happy coding!

Regards,
Chris Dillard,
Creator, LogicSage

----------------

06-06-2023

LogicSage 1.2.1-2 in development!!!!
Expand Down
2 changes: 1 addition & 1 deletion SwiftSageServer/Package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@
"location" : "https://github.com/vapor/vapor.git",
"state" : {
"branch" : "main",
"revision" : "65877a5db28cd0e97bed0cc667be58d3c7e575a6"
"revision" : "38cb397c6a0cc66031bb454a8614e6f988a7bbdb"
}
},
{
Expand Down
4 changes: 2 additions & 2 deletions SwiftSageServer/Sources/App/configure.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import var Darwin.stdout

// SwiftSageServer

// Run with `swift run` in the SwiftSageServer directory.
// Run with `./run.sh` in the LogicSage directory.

let debugging = true
let debugging = false

let specs = ["", "", "", "", "", "", "", "", "", "", "", "", "", ""] +
["", "", "", "","", "","", "","", "","", "", "", "",""] + ["."]
Expand Down
38 changes: 18 additions & 20 deletions SwiftSageiOS/Sourceful/SwiftUI/SourceCodeTextEditor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ public struct SourceCodeTextEditor: _ViewRepresentable {

self._isMoveGestureActive = isMoveGestureActive
self._isResizeGestureActive = isResizeGestureActive

}

public func makeCoordinator() -> Coordinator {
Expand All @@ -122,34 +121,33 @@ public struct SourceCodeTextEditor: _ViewRepresentable {
_ = view.becomeFirstResponder()
}

// TODO: Incorporate this performance fixing code.
// // Only auto scroll when not gesturing
// guard !isResizeGestureActive && !isMoveGestureActive else { return }


let overrideText = custom.overrideText()
// TODO: Make sure -- Is it strictly needed?????
// Is it strictly needed?????
// DispatchQueue.main.async {

view.textView.isEditable = isEditing
view.textView.isEditable = isEditing

view.contentTextView.isEditable = isEditing
view.contentTextView.isEditable = isEditing


view.isEditing = isEditing
view.textView.isSelectable = isEditing
view.contentTextView.isSelectable = isEditing
if let overrideText = overrideText {
view.isEditing = isEditing
view.textView.isSelectable = isEditing
view.contentTextView.isSelectable = isEditing
if let overrideText = overrideText {


context.coordinator.wrappedView.text = overrideText

if isLocktoBottom {
let location = view.textView.text.count - 1
let bottom = NSMakeRange(location, 1)
view.textView.scrollRangeToVisible(bottom)
context.coordinator.wrappedView.text = overrideText
//
// // Only auto scroll when not gesturing
// guard !isResizeGestureActive && !isMoveGestureActive else { return }

if isLocktoBottom {
let location = view.textView.text.count - 1
let bottom = NSMakeRange(location, 1)
view.textView.scrollRangeToVisible(bottom)
}
}
}
// }
}
#endif

Expand Down
18 changes: 12 additions & 6 deletions SwiftSageiOS/SwiftSageiOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@
B7C446332A2A917000B03FF5 /* SageMultiView+onDrag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7C446322A2A917000B03FF5 /* SageMultiView+onDrag.swift */; };
B7C446352A2A91E600B03FF5 /* ResizingHandle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7C446342A2A91E600B03FF5 /* ResizingHandle.swift */; };
B7D7AD022A26ACFF003C9AFE /* Settings+ColorGen.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7D7AD012A26ACFF003C9AFE /* Settings+ColorGen.swift */; };
B7DB97DF2A32E1C600304B80 /* SettingsViewModel+Websocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7DB97DE2A32E1C600304B80 /* SettingsViewModel+Websocket.swift */; };
B7DB97E12A32EABB00304B80 /* SettingsViewModel+Convo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7DB97E02A32EABB00304B80 /* SettingsViewModel+Convo.swift */; };
B7EF2A2B2A0C2D620048CFFC /* View+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EF2A2A2A0C2D620048CFFC /* View+Keyboard.swift */; };
B7F3A11629F74C9E0006C837 /* NetServiceBrowserWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7F3A11529F74C9E0006C837 /* NetServiceBrowserWrapper.swift */; };
B7F3A11929F75EAB0006C837 /* CommandButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7F3A11829F75EAB0006C837 /* CommandButton.swift */; };
Expand Down Expand Up @@ -325,6 +327,8 @@
B7C446322A2A917000B03FF5 /* SageMultiView+onDrag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SageMultiView+onDrag.swift"; sourceTree = "<group>"; };
B7C446342A2A91E600B03FF5 /* ResizingHandle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResizingHandle.swift; sourceTree = "<group>"; };
B7D7AD012A26ACFF003C9AFE /* Settings+ColorGen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Settings+ColorGen.swift"; sourceTree = "<group>"; };
B7DB97DE2A32E1C600304B80 /* SettingsViewModel+Websocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SettingsViewModel+Websocket.swift"; sourceTree = "<group>"; };
B7DB97E02A32EABB00304B80 /* SettingsViewModel+Convo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SettingsViewModel+Convo.swift"; sourceTree = "<group>"; };
B7EF2A2A2A0C2D620048CFFC /* View+Keyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Keyboard.swift"; sourceTree = "<group>"; };
B7F3A11529F74C9E0006C837 /* NetServiceBrowserWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetServiceBrowserWrapper.swift; sourceTree = "<group>"; };
B7F3A11829F75EAB0006C837 /* CommandButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandButton.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -757,6 +761,8 @@
B78EAF5E2A116D76003095A2 /* Github */,
B737F40A29F837CE00E57577 /* SettingsVIew.swift */,
B737F40C29F8395B00E57577 /* SettingsViewModel.swift */,
B7DB97E02A32EABB00304B80 /* SettingsViewModel+Convo.swift */,
B7DB97DE2A32E1C600304B80 /* SettingsViewModel+Websocket.swift */,
B7D7AD012A26ACFF003C9AFE /* Settings+ColorGen.swift */,
);
path = Settings;
Expand Down Expand Up @@ -1039,6 +1045,7 @@
B7378BFD2A1B192600A1D44C /* HapticMan.swift in Sources */,
B7191F2929F9F09A00078D8D /* TextViewWrapperView.swift in Sources */,
B78DA96C2A0312F1002343AB /* HelpPopup.swift in Sources */,
B7DB97E12A32EABB00304B80 /* SettingsViewModel+Convo.swift in Sources */,
B7544E302A191BCE00961F4C /* AudioTranscriptionQuery.swift in Sources */,
B7191F2C29F9F09A00078D8D /* Paragraphs.swift in Sources */,
B737F40B29F837CE00E57577 /* SettingsVIew.swift in Sources */,
Expand Down Expand Up @@ -1072,6 +1079,7 @@
B7D7AD022A26ACFF003C9AFE /* Settings+ColorGen.swift in Sources */,
B78DA9762A04A0A5002343AB /* RepositoryTreeView.swift in Sources */,
B7C11F2B2A01C62500701721 /* PTTWrapper.swift in Sources */,
B7DB97DF2A32E1C600304B80 /* SettingsViewModel+Websocket.swift in Sources */,
B7544E322A191BCE00961F4C /* ModelsResult.swift in Sources */,
B7AED3712A0AC0420013E8D9 /* SageMultiViewModel.swift in Sources */,
B7544E362A191BCE00961F4C /* CompletionsQuery.swift in Sources */,
Expand Down Expand Up @@ -1260,7 +1268,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"SwiftSageiOS/Preview Content\"";
DEVELOPMENT_TEAM = "";
Expand All @@ -1274,9 +1282,8 @@
INFOPLIST_KEY_CFBundleDisplayName = LogicSageDev;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
INFOPLIST_KEY_NSAppleEventsUsageDescription = "To communicate with your computer.";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "To receive and send messages to LogicSage";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "To receive and send messages to LogicSage for Mac. See github repo for LogicSage for more info. If declined now, reconnect in Settings menu.";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "";
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "LogicSage uses your mic and speech recognition to capture commands";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
Expand Down Expand Up @@ -1312,7 +1319,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = SwiftSageiOS/SwiftSageiOS.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEFINES_MODULE = YES;
DEVELOPMENT_ASSET_PATHS = "\"SwiftSageiOS/Preview Content\"";
DEVELOPMENT_TEAM = 72WEN2C47N;
Expand All @@ -1324,9 +1331,8 @@
INFOPLIST_KEY_CFBundleDisplayName = LogicSage;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
INFOPLIST_KEY_NSAppleEventsUsageDescription = "To communicate with your computer.";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "To receive and send messages to LogicSage";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "To receive and send messages to LogicSage for Mac. See github repo for LogicSage for more info. If declined now, reconnect in Settings menu.";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "";
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "LogicSage uses your mic and speech recognition to capture commands";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
Expand Down
49 changes: 14 additions & 35 deletions SwiftSageiOS/SwiftSageiOS/SwiftSageiOSApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,16 @@ struct SwiftSageiOSApp: App {
}
var body: some Scene {
WindowGroup {
ZStack {
HStack(spacing: 0) {
ContentView(settingsViewModel: settingsViewModel)
}
ContentView(settingsViewModel: settingsViewModel)
.onAppear {
#if !os(macOS)
SwiftSageiOSAppDelegate.applicationDidFinishLaunching()
#endif

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.666) {
serviceDiscovery?.startDiscovering()
}
DispatchQueue.main.async {
#if !os(macOS)

isPortrait = UIApplication.shared.statusBarOrientation == .portrait || UIApplication.shared.statusBarOrientation == .portraitUpsideDown
#endif
settingsViewModel.printVoicesInMyDevice()
Expand Down Expand Up @@ -84,7 +79,7 @@ struct SwiftSageiOSApp: App {
}
#endif
}
}

}
}
func setHasSeenInstructions(_ hasSeen: Bool) {
Expand All @@ -93,31 +88,15 @@ func setHasSeenInstructions(_ hasSeen: Bool) {
func hasSeenInstructions() -> Bool {
return UserDefaults.standard.bool(forKey: "hasSeenInstructions")
}
class AppState: ObservableObject {
@Published var isInBackground: Bool = false
private var cancellables: [AnyCancellable] = []

init() {
#if !os(macOS)
// let didEnterBackground = NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)
// .map { _ in true }
// .debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
// .removeDuplicates()
//
// let willEnterForeground = NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)
// .map { _ in false }
// .debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
// .removeDuplicates()
//
// didEnterBackground
// .merge(with: willEnterForeground)
// .sink { [weak self] in
// self?.isInBackground = $0
// DispatchQueue.main.asyncAfter(deadline: .now() + reconnectInterval) {
// serviceDiscovery?.startDiscovering()
// }
// }
// .store(in: &cancellables)
#endif
}
func setHasSeenLogo(_ hasSeen: Bool) {
UserDefaults.standard.set(hasSeen, forKey: "hasSeenLogo")
}
func hasSeenLogo() -> Bool {
return UserDefaults.standard.bool(forKey: "hasSeenLogo")
}
func hasSeenAnim() -> Bool {
return UserDefaults.standard.bool(forKey: "hasSeenAnim")
}
func setHasSeenAnim(_ hasSeen: Bool) {
UserDefaults.standard.set(hasSeen, forKey: "hasSeenAnim")
}
Loading

0 comments on commit 807f5ec

Please sign in to comment.