Full Code of Lakr233/ActionBee for AI

main b9807306513d cached
286 files
1.3 MB
352.7k tokens
10 symbols
1 requests
Download .txt
Showing preview only (1,438K chars total). Download the full file or copy to clipboard to get everything.
Repository: Lakr233/ActionBee
Branch: main
Commit: b9807306513d
Files: 286
Total size: 1.3 MB

Directory structure:
gitextract_cxsqbwhp/

├── .gitignore
├── .gitmodules
├── .root
├── App/
│   └── Action/
│       ├── Action/
│       │   ├── Action.entitlements
│       │   ├── Application/
│       │   │   ├── Action.entitlements
│       │   │   ├── ActionApp.swift
│       │   │   ├── AppDelegate.swift
│       │   │   ├── AppSetup.swift
│       │   │   ├── Assets.xcassets/
│       │   │   │   ├── AccentColor.colorset/
│       │   │   │   │   └── Contents.json
│       │   │   │   ├── AppIcon.appiconset/
│       │   │   │   │   └── Contents.json
│       │   │   │   ├── Avatar.imageset/
│       │   │   │   │   └── Contents.json
│       │   │   │   └── Contents.json
│       │   │   ├── License.txt
│       │   │   ├── en.lproj/
│       │   │   │   └── Localizable.strings
│       │   │   └── zh-Hans.lproj/
│       │   │       └── Localizable.strings
│       │   ├── Backend/
│       │   │   ├── Action/
│       │   │   │   ├── ActionManager+Artifact.swift
│       │   │   │   ├── ActionManager+Event.swift
│       │   │   │   ├── ActionManager+History.swift
│       │   │   │   ├── ActionManager+Module.swift
│       │   │   │   ├── ActionManager.swift
│       │   │   │   ├── ActionModuleTemplates/
│       │   │   │   │   ├── ActionManager+Template.swift
│       │   │   │   │   ├── Template+Executable.swift
│       │   │   │   │   ├── Template+Node.swift
│       │   │   │   │   ├── Template+Python.swift
│       │   │   │   │   └── Template+Swift.swift
│       │   │   │   └── ActionTemplates/
│       │   │   │       └── .templates
│       │   │   ├── Config/
│       │   │   │   └── Config.swift
│       │   │   ├── Executor/
│       │   │   │   └── Executor.swift
│       │   │   ├── PasteboardManager/
│       │   │   │   ├── PasteboardManager+Event.swift
│       │   │   │   └── PasteboardManager.swift
│       │   │   └── StatusBarManager/
│       │   │       └── StatusBarManager.swift
│       │   ├── Extension/
│       │   │   ├── AES.swift
│       │   │   ├── Data.swift
│       │   │   ├── DispatchQueue.swift
│       │   │   ├── Notification.swift
│       │   │   ├── Result.swift
│       │   │   ├── Throttle.swift
│       │   │   ├── UserDefault.swift
│       │   │   └── View.swift
│       │   └── Interface/
│       │       ├── ActionModule/
│       │       │   ├── ModuleCreateView.swift
│       │       │   ├── ModuleEditView.swift
│       │       │   ├── ModuleElementView.swift
│       │       │   ├── ModuleImportView.swift
│       │       │   └── ModuleManageView.swift
│       │       ├── Effect/
│       │       │   └── RandomCodeTextView.swift
│       │       ├── Generic/
│       │       │   ├── ApplicationView.swift
│       │       │   ├── DiagnosticLogView.swift
│       │       │   ├── HistoryView.swift
│       │       │   ├── LicenseView.swift
│       │       │   ├── MainView.swift
│       │       │   ├── SettingView.swift
│       │       │   ├── SidebarView.swift
│       │       │   └── WelcomeView.swift
│       │       ├── Menubar/
│       │       │   ├── Menubar.swift
│       │       │   └── MenubarView.swift
│       │       └── Toast/
│       │           └── Toast.swift
│       └── Action.xcodeproj/
│           └── project.pbxproj
├── App.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       └── IDEWorkspaceChecks.plist
├── External/
│   ├── AuxiliaryExecute/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── Package.swift
│   │   ├── README.md
│   │   ├── Sources/
│   │   │   └── AuxiliaryExecute/
│   │   │       ├── AuxiliaryExecute+Async.swift
│   │   │       ├── AuxiliaryExecute+Shell.swift
│   │   │       ├── AuxiliaryExecute+Spawn.swift
│   │   │       └── AuxiliaryExecute.swift
│   │   └── Tests/
│   │       └── AuxiliaryExecuteTests/
│   │           └── AuxiliaryExecuteTests.swift
│   ├── Colorful/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── Package.swift
│   │   ├── README.md
│   │   └── Sources/
│   │       └── Colorful/
│   │           ├── Colorful.swift
│   │           ├── ColorfulView.swift
│   │           └── PointRandomization.swift
│   ├── KeychainAccess/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── Examples/
│   │   │   └── Example-iOS/
│   │   │       ├── Example-iOS/
│   │   │       │   ├── AccountsViewController.swift
│   │   │       │   ├── AppDelegate.swift
│   │   │       │   ├── Base.lproj/
│   │   │       │   │   ├── LaunchScreen.xib
│   │   │       │   │   └── Main.storyboard
│   │   │       │   ├── Example-iOS.entitlements
│   │   │       │   ├── Images.xcassets/
│   │   │       │   │   └── AppIcon.appiconset/
│   │   │       │   │       └── Contents.json
│   │   │       │   ├── Info.plist
│   │   │       │   └── InputViewController.swift
│   │   │       └── Example-iOS.xcodeproj/
│   │   │           ├── project.pbxproj
│   │   │           └── xcshareddata/
│   │   │               └── xcschemes/
│   │   │                   └── Example-iOS.xcscheme
│   │   ├── KeychainAccess.podspec
│   │   ├── KeychainAccess.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   ├── LICENSE
│   │   ├── Lib/
│   │   │   ├── Certificates/
│   │   │   │   ├── KeychainAccess_Tests.provisionprofile.enc
│   │   │   │   ├── apple.cer
│   │   │   │   ├── developer_id_app.p12.enc
│   │   │   │   ├── iOS_Development.mobileprovision.enc
│   │   │   │   ├── ios_developer.p12.enc
│   │   │   │   └── tvOS_Development.mobileprovision.enc
│   │   │   ├── Configurations/
│   │   │   │   ├── Base.xcconfig
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   ├── KeychainAccess.xcconfig
│   │   │   │   ├── Release.xcconfig
│   │   │   │   ├── TestHost.xcconfig
│   │   │   │   └── Tests.xcconfig
│   │   │   ├── Gemfile
│   │   │   ├── KeychainAccess/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Keychain.swift
│   │   │   │   └── KeychainAccess.h
│   │   │   ├── KeychainAccess.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           ├── KeychainAccess.xcscheme
│   │   │   │           └── TestHost.xcscheme
│   │   │   ├── KeychainAccessTests/
│   │   │   │   ├── EnumTests.swift
│   │   │   │   ├── ErrorTypeTests.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── KeychainAccessTests.swift
│   │   │   │   └── SharedCredentialTests.swift
│   │   │   ├── Rakefile
│   │   │   ├── Scripts/
│   │   │   │   ├── add_key.sh
│   │   │   │   └── decode_cert.sh
│   │   │   ├── TestHost/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Info.plist
│   │   │   │   └── TestHost.entitlements
│   │   │   └── TestHost-MacCatalyst/
│   │   │       ├── KeychainAccessTests-MacCatalyst/
│   │   │       │   ├── EnumTests.swift
│   │   │       │   ├── ErrorTypeTests.swift
│   │   │       │   ├── Info.plist
│   │   │       │   └── KeychainAccessTests.swift
│   │   │       ├── TestHost-MacCatalyst/
│   │   │       │   ├── AppDelegate.swift
│   │   │       │   ├── Assets.xcassets/
│   │   │       │   │   ├── AppIcon.appiconset/
│   │   │       │   │   │   └── Contents.json
│   │   │       │   │   └── Contents.json
│   │   │       │   ├── Base.lproj/
│   │   │       │   │   ├── LaunchScreen.storyboard
│   │   │       │   │   └── Main.storyboard
│   │   │       │   ├── Info.plist
│   │   │       │   ├── SceneDelegate.swift
│   │   │       │   ├── TestHost-MacCatalyst.entitlements
│   │   │       │   └── ViewController.swift
│   │   │       └── TestHost-MacCatalyst.xcodeproj/
│   │   │           ├── project.pbxproj
│   │   │           └── xcshareddata/
│   │   │               └── xcschemes/
│   │   │                   └── TestHost-MacCatalyst.xcscheme
│   │   ├── Package.swift
│   │   ├── Package@swift-5.3.swift
│   │   ├── README.md
│   │   └── Sources/
│   │       └── Keychain.swift
│   └── SymbolPicker/
│       ├── .gitignore
│       ├── LICENSE
│       ├── Package.swift
│       ├── README.md
│       └── Sources/
│           └── SymbolPicker/
│               ├── Resources/
│               │   ├── en.lproj/
│               │   │   └── Localizable.strings
│               │   ├── sfsymbols.txt
│               │   └── zh_CN.lproj/
│               │       └── Localizable.strings
│               └── SymbolPicker.swift
├── LICENSE
├── README.md
└── Resources/
    ├── ModuleSample/
    │   ├── Module Export - Link Cleaner/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               ├── CleanerRule/
    │   │               │   ├── CleanerRule.swift
    │   │               │   ├── Rule+BiliBili.swift
    │   │               │   └── Rule+Twitter.swift
    │   │               └── Source.swift
    │   ├── Module Export - Multiline Init Formatter/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               └── Source.swift
    │   ├── Module Export - Quick SFImage/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               └── Source.swift
    │   └── Module Export - Speak Dictionary/
    │       ├── .ActionManifest.plist
    │       ├── .gitignore
    │       ├── .supplement/
    │       │   ├── Binary/
    │       │   │   └── CommandLineBridge/
    │       │   │       ├── CommandLineBridge/
    │       │   │       │   └── main.swift
    │       │   │       └── CommandLineBridge.xcodeproj/
    │       │   │           ├── project.pbxproj
    │       │   │           └── xcshareddata/
    │       │   │               └── xcschemes/
    │       │   │                   └── CommandLineBridge.xcscheme
    │       │   ├── Communicator/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Communicator/
    │       │   │           ├── Communicator.h
    │       │   │           ├── Communicator.m
    │       │   │           └── include/
    │       │   │               └── Communicator.h
    │       │   ├── Definition/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Definition/
    │       │   │           └── Definition.swift
    │       │   ├── compile.sh
    │       │   └── launch.sh
    │       ├── App.xcworkspace/
    │       │   ├── contents.xcworkspacedata
    │       │   └── xcshareddata/
    │       │       └── IDEWorkspaceChecks.plist
    │       └── Source/
    │           ├── .gitignore
    │           ├── Package.swift
    │           └── Sources/
    │               └── Source/
    │                   └── Source.swift
    ├── ModuleTemplate/
    │   ├── .templates
    │   ├── Executable/
    │   │   ├── ActionBeeModule.exec
    │   │   └── Put your binary here
    │   ├── ExecutableSwift/
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   └── Definition/
    │   │   │       ├── .gitignore
    │   │   │       ├── Package.swift
    │   │   │       └── Sources/
    │   │   │           └── Definition/
    │   │   │               └── Definition.swift
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   ├── Source/
    │   │   │   ├── .gitignore
    │   │   │   ├── Package.swift
    │   │   │   └── Sources/
    │   │   │       └── Source/
    │   │   │           └── Source.swift
    │   │   └── compile.command
    │   ├── SourceNode/
    │   │   ├── .eslintrc.js
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   └── compile.sh
    │   │   ├── package.json
    │   │   ├── src/
    │   │   │   ├── global.d.ts
    │   │   │   └── index.ts
    │   │   └── tsconfig.json
    │   ├── SourcePython/
    │   │   └── main.py
    │   └── SourceSwift/
    │       ├── .gitignore
    │       ├── .supplement/
    │       │   ├── Binary/
    │       │   │   └── CommandLineBridge/
    │       │   │       ├── CommandLineBridge/
    │       │   │       │   └── main.swift
    │       │   │       └── CommandLineBridge.xcodeproj/
    │       │   │           ├── project.pbxproj
    │       │   │           └── xcshareddata/
    │       │   │               └── xcschemes/
    │       │   │                   └── CommandLineBridge.xcscheme
    │       │   ├── Communicator/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Communicator/
    │       │   │           ├── Communicator.h
    │       │   │           ├── Communicator.m
    │       │   │           └── include/
    │       │   │               └── Communicator.h
    │       │   ├── Definition/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Definition/
    │       │   │           └── Definition.swift
    │       │   ├── compile.sh
    │       │   └── launch.sh
    │       ├── App.xcworkspace/
    │       │   ├── contents.xcworkspacedata
    │       │   └── xcshareddata/
    │       │       └── IDEWorkspaceChecks.plist
    │       └── Source/
    │           ├── .gitignore
    │           ├── Package.swift
    │           └── Sources/
    │               └── Source/
    │                   └── Source.swift
    └── Scripts/
        ├── NewlineDeduplicate.swift
        ├── PackTemplates.sh
        ├── UpdateGitHub.sh
        └── UpdateLicenses.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
!default.xcworkspace
*.dSYM
*.dSYM.zip
*.hmap
*.ipa
*.lcov
*.lock
*.log
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
*.pid
*.pid.lock
*.seed
*.swp
*.tgz
*.tsbuildinfo
*.xccheckout
*.xcscmblueprint
*.xcuserstate
*~.nib
.AppleDB
.AppleDesktop
.AppleDouble
.DS_Store
.DocumentRevisions-V100
.LSOverride
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
._*
.apdisk
.build
.bundle
.cache
.cache/
.com.apple.timemachine.donotpresent
.dynamodb/
.env
.env.test
.eslintcache
.fseventsd
.fusebox/
.grunt
.idea
.lock-wscript
.next
.node_repl_history
.npm
.nuxt
.nyc_output
.parcel-cache
.pnp.*
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
.serverless/
.swiftpm
.tern-port
.vscode-test
.vuepress/dist
.yarn-integrity
.yarn/build-state.yml
.yarn/cache
.yarn/unplugged
/*.gcno
Artifacts/
CI
CI-Pods.tar
Carthage/Build
Carthage/Build/
DerivedData
DerivedData/
Icon
Network Trash Folder
Pipeline/Dockers/Buildtime/
Podfile.lock
Pods/
Temporary Items
artifacts/
bower_components
build/
build/Release
coverage
default.profraw
dist
dockerbuild
dockermnt
fastlane/Preview.html
fastlane/report.xml
fastlane/screenshots/**/*.png
fastlane/test_output
iOSInjectionProject/
jspm_packages/
lerna-debug.log*
lib-cov
logs
node_modules/
npm-debug.log*
pids
profile
project.xcworkspace
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
temp/
temps/
web_modules/
xcuserdata
xcuserdata/
yarn-debug.log*
yarn-error.log*

*.ActionTemplatePackage


================================================
FILE: .gitmodules
================================================
[submodule "External/Colorful"]
	path = External/Colorful
	url = https://github.com/Lakr233/Colorful
[submodule "External/AuxiliaryExecute"]
	path = External/AuxiliaryExecute
	url = https://github.com/Lakr233/AuxiliaryExecute
[submodule "External/SymbolPicker"]
	path = External/SymbolPicker
	url = https://github.com/xnth97/SymbolPicker
[submodule "External/KeychainAccess"]
	path = External/KeychainAccess
	url = https://github.com/kishikawakatsumi/KeychainAccess


================================================
FILE: .root
================================================


================================================
FILE: App/Action/Action/Action.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>


================================================
FILE: App/Action/Action/Application/Action.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>


================================================
FILE: App/Action/Action/Application/ActionApp.swift
================================================
//
//  ActionApp.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import SwiftUI

@main
struct ActionApp: App {
    static let bootTime: Date = .init()

    @AppStorage("wiki.qaq.agreeToLicense")
    static var agreeToLicense: Bool = false

    static let documentDirectory: URL = {
        let availableDirectories = FileManager
            .default
            .urls(for: .documentDirectory, in: .userDomainMask)

        #if DEBUG
            return availableDirectories[0]
                .appendingPathComponent("ActionBee.Debug")
        #else
            return availableDirectories[0]
                .appendingPathComponent("ActionBee")
        #endif
    }()

    init() {
        _ = ActionApp.bootTime
        applicationSetup()
    }

    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            MainView()
        }
        .windowToolbarStyle(.unifiedCompact)
        .commands { SidebarCommands() }
        .commands { CommandGroup(replacing: CommandGroupPlacement.newItem) {} }
    }
}


================================================
FILE: App/Action/Action/Application/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import AppKit
import SwiftUI

class AppDelegate: NSObject, NSApplicationDelegate {
    func switchDockIconMode() {
        let windowCount = NSApp
            .windows
            .filter { self.filteringSpecialWindow($0) }
            .count
        if !StatusBarManager.shared.hasWindowOpened,
           windowCount == 0,
           !Menubar.shared.popover.isShown
        {
            NSApp.setActivationPolicy(.accessory)
        } else {
            NSApp.setActivationPolicy(.regular)
        }
    }

    private func filteringSpecialWindow(_ window: NSWindow) -> Bool {
        let list = ["NSStatusBarWindow", "_NSPopoverWindow"]
        for item in list {
            guard let clz = NSClassFromString(item) else { continue }
            if window.isKind(of: clz.self) { return false }
        }
        return true
    }
}


================================================
FILE: App/Action/Action/Application/AppSetup.swift
================================================
//
//  ApplicationSetup.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import AppKit

extension ActionApp {
    static let appBundleIdentifier: String = Bundle
        .main
        .bundleIdentifier ?? "wiki.qaq.unknown"

    static let appVersion: String =
        Bundle
            .main
            .infoDictionary?["CFBundleShortVersionString"] as? String
            ?? "unknown"

    func applicationSetup() {
        assert(Thread.isMainThread)
        assert(getuid() != 0)

        print(
            """
            \(ActionApp.appBundleIdentifier) - \(ActionApp.appVersion)
            Location:
                [*] \(Bundle.main.bundleURL.path)
                [*] \(Self.documentDirectory.path)
            Environment: uid \(getuid()) gid \(getgid())
            """
        )

        disableDebuggerIfNeeded()

        _ = AXUIElementCreateSystemWide()
        _ = Executor.shared
        _ = PasteboardManager.shared
        _ = StatusBarManager.shared

        let timer = Timer(timeInterval: 0.5, repeats: true) { _ in
            appDelegate.switchDockIconMode()
        }
        RunLoop.current.add(timer, forMode: .common)

        #if DEBUG
            let debuggerTimer = Timer(timeInterval: 1, repeats: true) { _ in
                _ = 0
            }
            RunLoop.current.add(debuggerTimer, forMode: .common)
        #endif
    }

    private func disableDebuggerIfNeeded() {
        #if !DEBUG
            do {
                typealias ptrace = @convention(c) (_ request: Int, _ pid: Int, _ addr: Int, _ data: Int) -> AnyObject
                let open = dlopen("/usr/lib/system/libsystem_kernel.dylib", RTLD_NOW)
                if unsafeBitCast(open, to: Int.self) > 0x1024 {
                    let result = dlsym(open, "ptrace")
                    if let result = result {
                        let target = unsafeBitCast(result, to: ptrace.self)
                        _ = target(0x1F, 0, 0, 0)
                    }
                }
            }
        #endif
    }
}


================================================
FILE: App/Action/Action/Application/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
  "colors" : [
    {
      "color" : {
        "color-space" : "srgb",
        "components" : {
          "alpha" : "1.000",
          "blue" : "0.227",
          "green" : "0.533",
          "red" : "0.910"
        }
      },
      "idiom" : "universal"
    },
    {
      "appearances" : [
        {
          "appearance" : "luminosity",
          "value" : "dark"
        }
      ],
      "color" : {
        "color-space" : "srgb",
        "components" : {
          "alpha" : "1.000",
          "blue" : "0.455",
          "green" : "0.659",
          "red" : "0.910"
        }
      },
      "idiom" : "universal"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: App/Action/Action/Application/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "icon_16x16.png",
      "idiom" : "mac",
      "scale" : "1x",
      "size" : "16x16"
    },
    {
      "filename" : "icon_16x16@2x.png",
      "idiom" : "mac",
      "scale" : "2x",
      "size" : "16x16"
    },
    {
      "filename" : "icon_32x32.png",
      "idiom" : "mac",
      "scale" : "1x",
      "size" : "32x32"
    },
    {
      "filename" : "icon_32x32@2x.png",
      "idiom" : "mac",
      "scale" : "2x",
      "size" : "32x32"
    },
    {
      "filename" : "icon_128x128.png",
      "idiom" : "mac",
      "scale" : "1x",
      "size" : "128x128"
    },
    {
      "filename" : "icon_128x128@2x.png",
      "idiom" : "mac",
      "scale" : "2x",
      "size" : "128x128"
    },
    {
      "filename" : "icon_256x256.png",
      "idiom" : "mac",
      "scale" : "1x",
      "size" : "256x256"
    },
    {
      "filename" : "icon_256x256@2x.png",
      "idiom" : "mac",
      "scale" : "2x",
      "size" : "256x256"
    },
    {
      "filename" : "icon_512x512.png",
      "idiom" : "mac",
      "scale" : "1x",
      "size" : "512x512"
    },
    {
      "filename" : "icon_512x512@2x.png",
      "idiom" : "mac",
      "scale" : "2x",
      "size" : "512x512"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: App/Action/Action/Application/Assets.xcassets/Avatar.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "Avatar.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: App/Action/Action/Application/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: App/Action/Action/Application/License.txt
================================================
MIT License

Copyright (c) 2022 Lakr Aream

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========

AuxiliaryExecute
MIT License

Copyright (c) 2021 Lakr Aream

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========

Colorful
MIT License

Copyright (c) 2021 Lakr Aream

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========

KeychainAccess
The MIT License (MIT)

Copyright (c) 2014 kishikawa katsumi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========

SymbolPicker
MIT License

Copyright (c) 2022 Yubo Qin & Lakr Aream

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

==========

Updated: 2022-08-30


================================================
FILE: App/Action/Action/Application/en.lproj/Localizable.strings
================================================
/* 
  Localizable.strings
  Action

  Created by 维安雨轩 on 2022/08/19.
  
*/


================================================
FILE: App/Action/Action/Application/zh-Hans.lproj/Localizable.strings
================================================
/* 
  Localizable.strings
  Action

  Created by 维安雨轩 on 2022/08/19.
  
*/

//ModuleManageView.swift

"Create an action by click plus button on toolbar to process your pasteboard event. Format text, clean up links, speak when copy from special app, send to your device, etc etc. Choose an language you are familiar with to get start." = "通过点击工具栏上的加号按钮创建一个自动化来处理你的剪贴板事件。\n如格式化文本、清理链接或从设定应用中复制时,发送至你的设备等。\n现在快选择一种你熟悉的语言来开始吧。";
"Add Action" = "添加自动化模块";
"Import Action" = "导入自动化模块";
"Module" = "模块";
"You are about to import an Action Module which is untrusted with no signature. Importing malicious modules can pose unknown risks and there is no sandbox nor container dealing with it." = "你正在导入一个没有签名的不受信任的自动化模块。导入恶意模块可能会带来未知风险,在运行这个模块时并不会通过沙盒或容器来处理它。";
"Trust And Import" = "信任并导入";
"Cancel" = "取消";
"Failed to import this module" = "导入模块失败";


//  ModuleImportView.swift

"You are about to import an untrusted module" = "您正在导入一个不受信任的模块";
"Importing malicious module may damage your system, you are in charge to review this module." = "导入恶意模块可能会损坏你的系统,您需要负责审查这个模块。";
"Trust & Import" = "信任并导入";
"OK" = "成功";


//  ModuleElementView.swift

"Error" = "出错了";


//  ModuleCreateView.swift

"Create Action" = "创建自动化模块";
"Module Name" = "模块名称";
"Language" = "语言";
"Next" = "继续";


//  ModuleEditView.swift

"Edit Action" = "编辑自动化模块";
"Save" = "保存";
"Compiling Source" = "正在编译模块...";
"Compile Finished" = "编译完成";
"Broken Module" = "损坏的模块";
"Delete" = "删除";
"Close" = "关闭";
"Enabled" = "启用";
"Name" = "名称";
"Timeout: " = "超时:";
"Enable In App" = "在应用程序中启用";
"Enabled for All Apps" = "为所有应用程序启用";
"This pasteboard action will only run if copying from these apps" = "此自动化只有在从这些应用程序复制时才会运行";
"Coding" = "编辑";
"Edit Code" = "编辑代码";
"Show in Finder" = "在 Finder 中显示";
"Export" = "导出";
"Module Template: %@" = "模板: %@";
"Unknown" = "未知";
"No Build Hint" = "没有构建提示";
"You should recompile, click save, this module each time you edit it" = "在每次编辑该模块时,点击保存将会重新编译。";
"Unable to compile this action: %@" = "无法编译这个自动化模块: %@";
"Are you sure you want to delete this module? This operation can not be undone." = "您确定要删除这个模块吗?\n确定后将无法撤销。";
"Select Application" = "选择应用程序";
"Failed to load this module" = "加载此模块失败";
"Module Export - %@" = "导出模块 - %@";
"Unnamed" = "未命名";


//  ContentView.swift

"Toggle Sidebar" = "切换侧边栏";


//  SidebarView.swift

"App" = "应用";
"Welcome" = "欢迎";
"Action" = "自动化";
"Module" = "模块";
"History" = "历史";
"Misc" = "其他";
"Setting" = "设置";
"Diagnostic" = "诊断";


//  WelcomeView.swift

"Welcome to Action Bee" = "欢迎使用 Action Bee";
"A programmable pasteboard action trigger." = "一个可编程的剪贴板触发器";


//  HistoryView.swift

"No History Was Found" = "暂无历史记录";
"Clear History" = "清除历史记录";
"Are you sure you want to delete all history records? This operation can not be undone." = "你确定要删除所有历史记录吗?\n确定后将无法撤销。";
"Pasteboard Event" = "剪贴板事件";
"Length: %lld Action Candidates: %lld" = "剪贴长度: %lld 共执行模块: %lld";
"Deleted Action" = "被删除的动作";
"  Post Action: %@" = "  动作: %@";
"  Content: %@" = "  内容: %@";

//  SettingView.swift

"Pasteboard Deduplicate" = "阻拦重复执行";
"Pasteboard content matches previous will not generate event if on" = "如剪贴板的内容与之前的相匹配,开启后,将不会执行事件。";
"Silent Mode" = "静默模式";
"Do not show popover after action triggered" = "动作触发后不弹出窗口";
"Toast Mode" = "Toast 模式";
"Use toast instead of popover on menubar" = "在屏幕上显示简易提示框而不是弹出式菜单";
"Reduced UI Effects" = "减少 UI 视觉效果";
"Turning off visual effects does not affect app's core functionality" = "关闭视觉效果并不会影响应用程序的核心功能";
"Application" = "应用";
"Get Source Code" = "获取源代码";
"License" = "许可证";


//  MenubarView.swift

"ActionBee is ready to accept pasteboard events." = "ActionBee 已准备好处理剪贴板事件。";


//  LicenseView.swift

"Software License" = "软件许可证";
"I understand and agree to this license." = "我理解并同意此许可。";
"Done" = "同意";


================================================
FILE: App/Action/Action/Backend/Action/ActionManager+Artifact.swift
================================================
//
//  ActionManager+Artifact.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Foundation

private let artifactPathExtension = "ActionBeeArtifact"

extension ActionManager {
    struct ModuleArtifact: Codable {
        let id: Action.ID
        let signature: String

        init?(id: Action.ID, copyingArtifactAt atUrl: URL) {
            self.id = id
            let targetDir = Self.obtainArtifactUrlForAction(withId: id)
            do {
                try? FileManager.default.removeItem(at: targetDir)
                var isDir = ObjCBool(false)
                guard FileManager.default.fileExists(atPath: atUrl.path, isDirectory: &isDir) else {
                    return nil
                }
                if isDir.boolValue {
                    try FileManager.default.copyItem(at: atUrl, to: targetDir)
                } else {
                    try FileManager.default.createDirectory(at: targetDir, withIntermediateDirectories: true)
                    let name = atUrl.lastPathComponent
                    let target = targetDir.appendingPathComponent(name)
                    try FileManager.default.copyItem(at: atUrl, to: target)
                }
                signature = try Self.generatePackageSignature(at: targetDir)
            } catch {
                print("[E] \(error.localizedDescription)")
                return nil
            }
        }

        static func deletingDotFiles(at atUrl: URL) throws {
            let enumerator = FileManager.default.enumerator(atPath: atUrl.path)
            while let subPath = enumerator?.nextObject() as? String {
                let url = atUrl.appendingPathComponent(subPath)
                var shouldClean = false
                if subPath == ".DS_Store" { shouldClean = true }
                if subPath.hasPrefix("._") { shouldClean = true }
                if shouldClean {
                    print("[*] deleting dot files inside artifact \(url.path)")
                    try FileManager.default.removeItem(at: url)
                }
            }
        }

        static func generatePackageSignature(at atUrl: URL) throws -> String {
            try deletingDotFiles(at: atUrl)
            var signatureDic = [String: String]()
            let enumerator = FileManager.default.enumerator(atPath: atUrl.path)
            while let subPath = enumerator?.nextObject() as? String {
                let path = atUrl.appendingPathComponent(subPath)
                var isDir = ObjCBool(false)
                guard FileManager
                    .default
                    .fileExists(atPath: path.path, isDirectory: &isDir)
                else {
                    throw GenericActionError.brokenResources
                }
                let data = try Data(contentsOf: path)
                let hash = data.sha256()
                signatureDic[subPath] = hash
            }
            var hasher = String()
            let valueArray = signatureDic.sorted { $0.key < $1.key }
            for (key, value) in valueArray {
                hasher += key
                hasher += value
                hasher += "\n"
            }
            guard let signature = hasher.data(using: .utf8)?.sha256() else {
                throw GenericActionError.unknown
            }
            return signature
        }

        static func obtainArtifactUrlForAction(withId: Action.ID) -> URL {
            ActionManager.shared
                .actionArtifactBaseUrl
                .appendingPathComponent(withId.uuidString)
                .appendingPathExtension(artifactPathExtension)
        }

        func obtainArtifactUrl() -> URL {
            Self.obtainArtifactUrlForAction(withId: id)
        }

        func validateSignature() -> Bool {
            do {
                let testSignature = try Self.generatePackageSignature(at: obtainArtifactUrl())
                return signature == testSignature
            } catch {
                print("[E] \(error.localizedDescription)")
                return false
            }
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionManager+Event.swift
================================================
//
//  ActionManager+Event.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Cocoa
import Foundation

private let decoder = JSONDecoder()
private let encoder = JSONEncoder()

extension ActionManager {
    struct ActionRecipeData: Codable {
        let postAction: PostAction
        let postContent: String
        let continueQueue: Bool

        enum PostAction: String, Codable {
            case overwrite
            case speak
            case none

            func humanReadableDescription() -> String {
                switch self {
                case .overwrite: return "Overwrite Pasteboard"
                case .speak: return "Speak Message"
                case .none: return "None"
                }
            }
        }

        init(postAction: PostAction, postContent: String, continueQueue: Bool) {
            self.postAction = postAction
            self.postContent = postContent
            self.continueQueue = continueQueue
        }

        func compileBase64() -> String? {
            (try? encoder.encode(self))?.base64EncodedString()
        }

        static func retrieve(withData data: Data) -> Self? {
            try? decoder.decode(Self.self, from: data)
        }
    }

    func handle(pasteboardEvent event: PasteboardManager.PEvent) {
        assert(!Thread.isMainThread)
        var actionCandidates: [Action] = []
        DispatchQueue.withMainAndWait {
            actionCandidates = self.actions
        }
        actionCandidates = actionCandidates
            .filter { enabledActions.contains($0.id) }
            .filter { !initialingAciton.contains($0.id) }
            .filter {
                if $0.enabledAppList.isEmpty {
                    return true
                }
                guard let appBundleIdentifier = event.app?.bundleIdentifier else {
                    return false
                }
                return $0.enabledAppList.contains(appBundleIdentifier)
            }
            .sorted { a, b in
                guard a.priority == b.priority else {
                    return a.priority < b.priority
                }
                return a.name < b.name
            }
        guard !actionCandidates.isEmpty else {
            print("[-] no action candidate found, ignoring pasteboard event")
            return
        }
        print("[*] pasteboard event resolved \(actionCandidates.count) candidates")

        DispatchQueue.withMainAndWait {
            self.actionRunning = true
            self.actionRunningHint = "Resolved \(actionCandidates.count) Action Candidates"
            Menubar.shared.switchTitle(status: .running)
        }

        var successAction: [HistoryElement.SuccessRecord] = []
        var failedAction: [HistoryElement.FailureRecord] = []
        var shouldShowResultWindow = false

        defer {
            let history = HistoryElement(
                event: event,
                actionCandidates: actionCandidates.map(\.id),
                succeedAction: successAction,
                failedAction: failedAction
            )
            DispatchQueue.withMainAndWait {
                self.histories.append(history)
                self.actionRunning = false
                self.actionRunningHint = ""
                Menubar.shared.switchTitle(status: .ready)

                if shouldShowResultWindow, !Config.shared.silentMode {
                    if Config.shared.toastMode {
                        var image = "checkmark.circle.fill"
                        if !failedAction.isEmpty {
                            image = "checkmark.circle.trianglebadge.exclamationmark"
                        }
                        Toast.post(systemIcon: image, message: "ActionBee Completed")
                    } else {
                        Menubar.shared.showPopover()
                    }
                }
            }
        }

        for action in actionCandidates {
            DispatchQueue.withMainAndWait {
                self.actionRunningHint = "Executing Action - \(action.name)"
            }
            let recipe = action.template
                .obtainTemplateDetails()
                .executeModule(
                    id: action.id,
                    withPasteboardEvent: event
                ) { print($0) }
            switch recipe {
            case let .success(recipe):
                successAction.append(.init(
                    action: action.id,
                    recipeAction: recipe.postAction.humanReadableDescription(),
                    recipeContent: recipe.postContent
                ))
                resolvePostAction(recipe)
                if recipe.postAction != .none { shouldShowResultWindow = true }
                guard recipe.continueQueue else { return }
            case let .failure(failure):
                shouldShowResultWindow = true
                failedAction.append(.init(action: action.id, errorHint: failure.message))
                print("[E] error executing aciton: \(failure.message)")
                continue
            }
        }
    }

    func resolvePostAction(_ object: ActionRecipeData) {
        assert(!Thread.isMainThread)
        switch object.postAction {
        case .none: break
        case .speak:
            DispatchQueue.global().async {
                Executor.shared.speak(object.postContent)
            }
        case .overwrite:
            NSPasteboard.general.prepareForNewContents()
            NSPasteboard.general.setString(object.postContent, forType: .string)
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionManager+History.swift
================================================
//
//  ActionManager+History.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Foundation

extension ActionManager {
    struct HistoryElement: Codable, Identifiable, Hashable, Equatable {
        var id: UUID = .init()

        let date: Date

        let event: PasteboardManager.PEvent
        let actionCandidates: [Action.ID]

        struct SuccessRecord: Codable, Identifiable, Hashable, Equatable {
            var id: UUID = .init()
            let action: Action.ID
            let recipeAction: String
            let recipeContent: String
        }

        let succeedAction: [SuccessRecord]

        struct FailureRecord: Codable, Identifiable, Hashable, Equatable {
            var id: UUID = .init()
            let action: Action.ID
            let errorHint: String
        }

        let failedAction: [FailureRecord]

        init(
            id: UUID = .init(),
            date: Date = .init(),
            event: PasteboardManager.PEvent,
            actionCandidates: [ActionManager.Action.ID] = [],
            succeedAction: [ActionManager.HistoryElement.SuccessRecord] = [],
            failedAction: [ActionManager.HistoryElement.FailureRecord] = []
        ) {
            self.id = id
            self.date = date
            self.event = event
            self.actionCandidates = actionCandidates
            self.succeedAction = succeedAction
            self.failedAction = failedAction
        }

        func search(with key: String) -> Bool {
            if event.app?.name.lowercased().contains(key) ?? false { return true }
            if event.app?.bundleIdentifier.lowercased().contains(key) ?? false { return true }
            if event.content.lowercased().contains(key) { return true }
            if date.formatted(date: .complete, time: .complete).lowercased().contains(key) {
                return true
            }
            return false
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionManager+Module.swift
================================================
//
//  ActionManager+Module.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import Foundation

/*

 Action will be compiled into ActionManifest.plist
 into project root dir

 so the project dir looks like: eg swift
 .
 ├── .build
 │   └── cli                        <- binary
 ├── App.xcworkspace
 └── compile.sh                     <- emit binary, called each time when compile

 // user editable

 ├── Source
 │   ├── Package.swift
 │   └── Sources
 │       └── Source
 │           └── Source.swift       <- user code

 // program granted

 ├── .ActionManifest.plist          <- exported definition of this action

 */

extension ActionManager {
    struct Action: Codable, Equatable, Hashable, Identifiable {
        var id: UUID
        var name: String
        var icon: String
        var priority: Int // lower first-er P0~
        var timeout: Int

        var template: ActionManager.ModuleTemplateIdentifier

        // will only run if copy from these apps
        var enabledAppList: [String] = []

        // keep for future usage
        var attachment: [String: String]

        init(
            id: UUID = .init(),
            name: String,
            icon: String = "text.append",
            priority: Int = 100,
            timeout: Int = 5,
            template: ActionManager.ModuleTemplateIdentifier,
            enabledAppList: [String] = [],
            attachment: [String: String] = [:]
        ) {
            self.id = id
            self.name = name
            self.icon = icon
            self.priority = priority
            self.timeout = timeout
            self.template = template
            self.enabledAppList = enabledAppList
            self.attachment = attachment
        }
    }

    func updateActionModuleManifest(onActionId: Action.ID? = nil) {
        if let id = onActionId {
            guard let action = self[id] else {
                return
            }
            try? compileManifestAndSave(forAction: action)
        }
        for action in actions {
            try? compileManifestAndSave(forAction: action)
        }
    }

    func compileManifestAndSave(forAction action: Action) throws {
        let actionModuleDir = actionModuleBaseUrl
            .appendingPathComponent(action.id.uuidString)
        let manifestUrl = actionModuleDir
            .appendingPathComponent(actionManifestFileName)
            .appendingPathExtension(actionManifestExtension)
        guard FileManager.default.fileExists(atPath: actionModuleBaseUrl.path) else {
            return
        }
        let data = try actionManifestEncoder.encode(action)
        try data.write(to: manifestUrl, options: .atomic)
    }

    func deleteModule(withId id: Action.ID) {
        print("[*] deleting module \(id)")
        let moduleUrl = actionModuleBaseUrl
            .appendingPathComponent(id.uuidString)
        try? FileManager.default.removeItem(at: moduleUrl)
        actions = actions.filter { $0.id != id }
        enabledActions = enabledActions.filter { $0 != id }
        invalidateArtifactCache(forAction: id)
    }

    func issueCompile(forAction actionId: Action.ID, output: @escaping (String) -> Void) -> Result<Void, GenericActionError> {
        assert(!Thread.isMainThread)
        guard let action = self[actionId] else {
            return .failure(.brokenResources)
        }
        let result = action.template
            .obtainTemplateDetails()
            .compileModule(id: actionId, output: output)
        return result
    }

    func registerArtifact(forAction actionId: Action.ID, artifact: URL) {
        print("[*] copying artifact at path \(artifact.path) for action \(actionId)")
        try? FileManager.default.createDirectory(
            at: ActionManager.shared.actionArtifactBaseUrl,
            withIntermediateDirectories: true
        )
        guard let object = ModuleArtifact(id: actionId, copyingArtifactAt: artifact) else {
            return
        }
        print("[*] registering artifact \(actionId) with signature \(object.signature)")
        guard Thread.isMainThread else {
            DispatchQueue.withMainAndWait {
                self.artifacts[object.id] = object
            }
            return
        }
        artifacts[object.id] = object
    }

    func invalidateArtifactCache(forAction actionId: Action.ID) {
        print("[*] invalidating artifact cache for \(actionId)")
        if let value = artifacts[actionId] {
            try? FileManager.default.removeItem(at: value.obtainArtifactUrl())
        }
        if Thread.isMainThread {
            artifacts.removeValue(forKey: actionId)
        } else {
            DispatchQueue.withMainAndWait {
                self.artifacts.removeValue(forKey: actionId)
            }
        }
    }

    func importModule(at: URL) -> Result<Action.ID, Error> {
        print("[*] importing module at \(at.path)")
        let manifest = at
            .appendingPathComponent(actionManifestFileName)
            .appendingPathExtension(actionManifestExtension)
        do {
            let data = try Data(contentsOf: manifest)
            let action = try actionManifestDecoder.decode(Action.self, from: data)
            let target = actionModuleBaseUrl
                .appendingPathComponent(action.id.uuidString)
            print("[*] manifest returns id \(action.id)")
            try? FileManager.default.removeItem(at: target)
            try FileManager.default.copyItem(at: at, to: target)
            invalidateArtifactCache(forAction: action.id)
            DispatchQueue.withMainAndWait {
                self[action.id] = action
                self.enabledActions.append(action.id)
            }
            updateActionModuleManifest(onActionId: action.id)
            return .success(action.id)
        } catch {
            return .failure(error)
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionManager.swift
================================================
//
//  ActionManager.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import Combine
import Foundation

final class ActionManager: ObservableObject {
    static let shared = ActionManager()

    private init() {
        #if DEBUG
            for item in ModuleTemplateIdentifier.allCases {
                _ = item.obtainTemplateDetails().getTemplateBundleURL()
            }
        #endif

        var buildAction: [Action.ID: Action] = [:]
        for action in actionsStore {
            buildAction[action.id] = action
        }

        // now clean the items inside the dir if not exists in plist
        do {
            let actionIds = buildAction.keys.map(\.uuidString)
            let list = (
                try? FileManager
                    .default
                    .contentsOfDirectory(atPath: actionModuleBaseUrl.path)
            ) ?? []
            var deleteList = [String]()
            deleteList += list.filter { !actionIds.contains($0) }
            deleteList += actionIds.filter { !list.contains($0) }
            for element in deleteList {
                let url = actionModuleBaseUrl.appendingPathComponent(element)
                try? FileManager.default.removeItem(at: url)
                if let id = UUID(uuidString: element) {
                    buildAction.removeValue(forKey: id)
                }
                print("[-] removing unregistered action module file at path \(url.path)")
            }
        }

        actions = buildAction.values
            .sorted { $0.name < $1.name }
        updateActionModuleManifest()

        enabledActions = Array(Set(enabledActionsStore))

        for action in actions {
            print("[+] loading module \(action.name) - \(action.id.uuidString)")
        }

        artifacts = artifactsStore
        for artifact in artifacts {
            let found = actions.contains { $0.id == artifact.key }
            if found {
                print("[+] loading artifact \(artifact.key.uuidString)")
                DispatchQueue.global().async {
                    guard artifact.value.validateSignature() else {
                        print("[E] artifact signature mismatch!")
                        self.invalidateArtifactCache(forAction: artifact.key)
                        return
                    }
                }
            } else {
                DispatchQueue.global().async {
                    self.invalidateArtifactCache(forAction: artifact.key)
                }
            }
        }

        histories = historiesStore
            .sorted { $0.date < $1.date }
    }

    var actionModuleBaseUrl: URL {
        let ret = ActionApp
            .documentDirectory
            .appendingPathComponent("ActionModules")
        try? FileManager.default.createDirectory(
            at: ret,
            withIntermediateDirectories: true
        )
        return ret
    }

    var actionArtifactBaseUrl: URL {
        let ret = ActionApp
            .documentDirectory
            .appendingPathComponent("ActionArtifact")
        try? FileManager.default.createDirectory(
            at: ret,
            withIntermediateDirectories: true
        )
        return ret
    }

    let actionManifestFileName = ".ActionManifest"
    let actionManifestExtension = "plist"
    let actionManifestEncoder = PropertyListEncoder()
    let actionManifestDecoder = PropertyListDecoder()

    @EncryptedCodableDefaultsWrapper(key: "wiki.qaq.ActionManager.actionsStoreKey", defaultValue: [Action]())
    private var actionsStore

    @Published var actions: [Action] = [] {
        didSet { DispatchQueue.global().async { self.actionsStore = self.actions } }
    }

    @Published var initialingAciton: Set<Action.ID> = []

    subscript(actionId: UUID) -> Action? {
        get {
            actions.first { $0.id == actionId }
        }
        set {
            assert(Thread.isMainThread)
            guard let newValue = newValue else {
                deleteModule(withId: actionId)
                return
            }
            let idx = actions.firstIndex { $0.id == newValue.id }
            if let idx = idx {
                actions[idx] = newValue
            } else {
                actions = (
                    actions + [newValue]
                )
                .sorted { $0.name < $1.name }
            }
        }
    }

    @EncryptedCodableDefaultsWrapper(key: "wiki.qaq.ActionManager.enabledActions", defaultValue: [])
    private var enabledActionsStore: [Action.ID]

    @Published var enabledActions = [Action.ID]() {
        didSet { DispatchQueue.global().async { self.enabledActionsStore = self.enabledActions } }
    }

    @EncryptedCodableDefaultsWrapper(key: "wiki.qaq.ActionManager.artifactsStore", defaultValue: [Action.ID: ModuleArtifact]())
    private var artifactsStore

    @Published var artifacts: [Action.ID: ModuleArtifact] = [:] {
        didSet { DispatchQueue.global().async { self.artifactsStore = self.artifacts } }
    }

    @EncryptedCodableDefaultsWrapper(key: "wiki.qaq.ActionManager.historiesStore", defaultValue: [HistoryElement]())
    private var historiesStore

    @Published var histories: [HistoryElement] = [] {
        didSet {
            let historyLimit = 500
            guard histories.count < historyLimit else {
                DispatchQueue.main.async {
                    self.histories.removeFirst(self.histories.count - historyLimit)
                }
                return
            }
            DispatchQueue.global().async { self.historiesStore = self.histories }
        }
    }

    @Published var actionRunning = false
    @Published var actionRunningHint = ""
}


================================================
FILE: App/Action/Action/Backend/Action/ActionModuleTemplates/ActionManager+Template.swift
================================================
//
//  ActionManager+ModuleTemplate.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import Cocoa
import Foundation

protocol ModuleTemplate {
    func getLanguage() -> String
    func getTemplateBundleName() -> String
    func getBuildHint() -> String

    func getTemplateBundleURL() -> URL

    func openDesignatedEditor(id: ActionManager.Action.ID) -> Result<Void, ActionManager.GenericActionError>
    func compileModule(
        id: ActionManager.Action.ID,
        output: @escaping (String) -> Void
    ) -> Result<Void, ActionManager.GenericActionError>
    func executeModule(
        id: ActionManager.Action.ID,
        withPasteboardEvent event: PasteboardManager.PEvent,
        output: @escaping (String) -> Void
    ) -> Result<ActionManager.ActionRecipeData, ActionManager.GenericActionError>
}

extension ModuleTemplate {
    func getTemplateBundleURL() -> URL {
        Bundle.main.url(
            forResource: getTemplateBundleName(),
            withExtension: "ActionTemplatePackage",
            subdirectory: "ActionTemplates"
        )!
    }
}

extension ActionManager {
    enum GenericActionError: Error {
        case permissionDenied
        case compilerError
        case brokenResources
        case designatedEditorMissing
        case unauthorizedModificationDetected
        case invalidResponse
        case unknown

        var message: String {
            switch self {
            case .permissionDenied: return "Permission denied for requires resources."
            case .compilerError: return "Compiler returned an error, check your source."
            case .brokenResources: return "Resources for this module was not found."
            case .designatedEditorMissing: return "The designated editor app for this module was not found, please edit it in Finder yourself."
            case .unauthorizedModificationDetected: return "The requires resource was modified by unauthorized event."
            case .invalidResponse: return "Invalid respond."
            case .unknown: return "Unknown error occurred."
            }
        }
    }

    enum ModuleTemplateIdentifier: String, Codable, CaseIterable, Hashable, Equatable {
        case executable
        case executableSwift

        case swift
        case node
        case python

        func obtainTemplateDetails() -> ModuleTemplate {
            switch self {
            case .executable: return ModuleTemplateExecutable()
            case .executableSwift: return ModuleTemplateExecutableSwift()
            case .swift: return ModuleTemplateSwift()
            case .node: return ModuleTemplateNode()
            case .python: return ModuleTemplatePython()
            }
        }
    }

    func createAction(withName name: String, withModuleTemplate template: ModuleTemplateIdentifier) -> UUID? {
        let actionUUID = UUID()
        let templateBundleUrl = template
            .obtainTemplateDetails()
            .getTemplateBundleURL()
        let extractTarget = actionModuleBaseUrl
            .appendingPathComponent(actionUUID.uuidString)

        let action = Action(id: actionUUID, name: name, template: template)

        print("[*] creating module at \(extractTarget.path)")

        do {
            try FileManager.default.createDirectory(at: extractTarget, withIntermediateDirectories: true)
            try Executor.shared.unarchiveTar(at: templateBundleUrl, toDest: extractTarget)
            try compileManifestAndSave(forAction: action)
        } catch {
            return nil
        }

        DispatchQueue.withMainAndWait {
            self.actions = (
                self.actions + [action]
            )
            .sorted { $0.name < $1.name }
            self.enabledActions.append(action.id)
        }

        return actionUUID
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Executable.swift
================================================
//
//  Template+Executable.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/17.
//

import AuxiliaryExecute
import Cocoa
import Foundation

extension ActionManager {
    class ModuleTemplateExecutable: ModuleTemplate {
        func getLanguage() -> String { "Binary Executable" }
        func getTemplateBundleName() -> String { "Executable" }
        func getBuildHint() -> String { "Compile your binary, name it ActionBeeModule.exec, and put it here." }

        struct ArgumentData: Codable {
            let focusAppID: String?
            let focusAppName: String?
            let pasteboardContent: String

            init(focusAppID: String?, focusAppName: String?, pasteboardContent: String) {
                self.focusAppID = focusAppID
                self.focusAppName = focusAppName
                self.pasteboardContent = pasteboardContent
            }

            func compileBase64() -> String? {
                (try? JSONEncoder().encode(self))?.base64EncodedString()
            }
        }

        func openDesignatedEditor(id: ActionManager.Action.ID) -> Result<Void, ActionManager.GenericActionError> {
            guard let action = ActionManager.shared[id] else {
                return .failure(GenericActionError.brokenResources)
            }
            let target = ActionManager.shared.actionModuleBaseUrl
                .appendingPathComponent(action.id.uuidString)
            guard FileManager.default.fileExists(atPath: target.path) else {
                return .failure(GenericActionError.brokenResources)
            }
            guard NSWorkspace.shared.open(target) else {
                return .failure(GenericActionError.designatedEditorMissing)
            }
            return .success
        }

        func compileModule(id: ActionManager.Action.ID, output _: @escaping (String) -> Void) -> Result<Void, ActionManager.GenericActionError> {
            assert(!Thread.isMainThread)

            guard let action = ActionManager.shared[id] else {
                return .failure(.brokenResources)
            }

            let target = ActionManager.shared.actionModuleBaseUrl
                .appendingPathComponent(action.id.uuidString)
                .appendingPathComponent("ActionBeeModule.exec")

            guard FileManager.default.fileExists(atPath: target.path) else {
                return .failure(.brokenResources)
            }

            guard FileManager.default.isExecutableFile(atPath: target.path) else {
                return .failure(.permissionDenied)
            }

            ActionManager.shared.registerArtifact(forAction: action.id, artifact: target)
            return .success
        }

        func executeModule(id: ActionManager.Action.ID, withPasteboardEvent event: PasteboardManager.PEvent, output: @escaping (String) -> Void) -> Result<ActionManager.ActionRecipeData, ActionManager.GenericActionError> {
            assert(!Thread.isMainThread)

            guard let action = ActionManager.shared[id],
                  let artifact = ActionManager.shared.artifacts[id]
            else {
                return .failure(.brokenResources)
            }
            guard artifact.validateSignature() else {
                return .failure(.unauthorizedModificationDetected)
            }

            guard let argument = ArgumentData(
                focusAppID: event.app?.bundleIdentifier,
                focusAppName: event.app?.name,
                pasteboardContent: event.content
            )
            .compileBase64()
            else {
                return .failure(.brokenResources)
            }

            print("[*] executing action \(id.uuidString)")

            var resultData: ActionRecipeData?

            let binary = artifact
                .obtainArtifactUrl()
                .appendingPathComponent("cli")
                .path

            let recipe = AuxiliaryExecute.spawn(
                command: binary,
                environment: ["Communicator_Message": argument],
                timeout: Double(action.timeout),
                output: output
            )

            var lastLine = recipe.stderr
                .trimmingCharacters(in: .whitespacesAndNewlines)
                .components(separatedBy: "\n")
                .last?
                .trimmingCharacters(in: .whitespaces)
                ?? ""
            let prefix = "ActionBee-Result-Recipe://"
            if lastLine.hasPrefix(prefix) {
                lastLine.removeFirst(prefix.count)
            }
            if let base64 = Data(base64Encoded: lastLine) {
                resultData = ActionRecipeData.retrieve(withData: base64)
            }

            guard let result = resultData else {
                return .failure(.invalidResponse)
            }

            return .success(result)
        }
    }

    class ModuleTemplateExecutableSwift: ModuleTemplateExecutable {
        override func getLanguage() -> String { "Binary Executable - Swift" }
        override func getTemplateBundleName() -> String { "ExecutableSwift" }
        override func getBuildHint() -> String { "Compile your binary, name it ActionBeeModule.exec, and put it here." }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Node.swift
================================================
//
//  Template+Node.swift
//  Action
//
//  Created by Innei on 2022/8/21.
//

import AuxiliaryExecute
import Foundation

extension ActionManager {
    class ModuleTemplateNode: ModuleTemplateExecutable {
        override func getLanguage() -> String { "Source - Node" }
        override func getTemplateBundleName() -> String { "SourceNode" }
        override func getBuildHint() -> String { "To build Node Module, node and it's tool is required. Install them yourself." }

        override func openDesignatedEditor(id: ActionManager.Action.ID) -> Result<Void, ActionManager.GenericActionError> {
            let url = ActionManager.shared
                .actionModuleBaseUrl
                .appendingPathComponent(id.uuidString)

            let recipe = AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", "code \(url.path)"]
            )

            guard recipe.exitCode == 0 else {
                return .failure(.designatedEditorMissing)
            }

            return .success
        }

        override func compileModule(id: ActionManager.Action.ID, output: @escaping (String) -> Void) -> Result<Void, ActionManager.GenericActionError> {
            guard let action = ActionManager.shared[id] else {
                return .failure(.brokenResources)
            }

            let temporaryDir = URL(fileURLWithPath: NSTemporaryDirectory())
                .appendingPathComponent(UUID().uuidString)
            try? FileManager.default.removeItem(at: temporaryDir)
            defer {
                try? FileManager.default.removeItem(at: temporaryDir)
            }

            do {
                output("[*] starting compiler at \(temporaryDir.path)\n")
                let userSrc = ActionManager.shared
                    .actionModuleBaseUrl
                    .appendingPathComponent(action.id.uuidString)
                let targetSrc = temporaryDir
                output("[*] copying user source from \(userSrc.path) to \(targetSrc.path)\n")
                try FileManager.default.copyItem(at: userSrc, to: targetSrc)
                FileManager.default.createFile(
                    atPath: temporaryDir.appendingPathComponent(".action").path,
                    contents: nil
                )
            } catch {
                output("[E] \(error.localizedDescription)")
                return .failure(.permissionDenied)
            }

            output("[*] calling compiler script\n")
            let compileScript = temporaryDir
                .appendingPathComponent(".supplement")
                .appendingPathComponent("compile.sh")
            let recipe = executeZshScript(atLocation: compileScript, output: output)
            guard recipe.exitCode == 0 else {
                return .failure(.compilerError)
            }

            let artifactLocation = temporaryDir
                .appendingPathComponent("dist")
//                .appendingPathComponent("index.js")

            guard FileManager.default.fileExists(atPath: artifactLocation.path) else {
                return .failure(.permissionDenied)
            }

            output("[*] compiled binary at \(artifactLocation.path)\n")
            ActionManager.shared.registerArtifact(forAction: action.id, artifact: artifactLocation)
            return .success
        }

        override func executeModule(id: ActionManager.Action.ID, withPasteboardEvent event: PasteboardManager.PEvent, output: @escaping (String) -> Void) -> Result<ActionManager.ActionRecipeData, ActionManager.GenericActionError> {
            assert(!Thread.isMainThread)

            guard let action = ActionManager.shared[id],
                  let artifact = ActionManager.shared.artifacts[id]
            else {
                return .failure(.brokenResources)
            }
            guard artifact.validateSignature() else {
                return .failure(.unauthorizedModificationDetected)
            }

            let script = artifact
                .obtainArtifactUrl()
                .appendingPathComponent("index.js")

            guard let argument = ArgumentData(
                focusAppID: event.app?.bundleIdentifier,
                focusAppName: event.app?.name,
                pasteboardContent: event.content
            )
            .compileBase64()
            else {
                return .failure(.brokenResources)
            }

            print("[*] executing action \(id.uuidString)")

            var resultData: ActionRecipeData?

            let recipe = AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", "node \(script.path)"],
                environment: ["Communicator_Message": argument],
                timeout: Double(action.timeout),
                output: output
            )

            var lastLine = recipe.stderr
                .trimmingCharacters(in: .whitespacesAndNewlines)
                .components(separatedBy: "\n")
                .last?
                .trimmingCharacters(in: .whitespaces)
                ?? ""
            let prefix = "ActionBee-Result-Recipe://"
            if lastLine.hasPrefix(prefix) {
                lastLine.removeFirst(prefix.count)
            }
            if let base64 = Data(base64Encoded: lastLine) {
                resultData = ActionRecipeData.retrieve(withData: base64)
            }

            guard let result = resultData else {
                return .failure(.invalidResponse)
            }

            return .success(result)
        }

        func executeZshScript(atLocation: URL, output: @escaping (String) -> Void = { _ in }) -> AuxiliaryExecute.ExecuteRecipe {
            AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", atLocation.path],
                output: output
            )
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Python.swift
================================================
//
//  Template+Python.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/30.
//

import AuxiliaryExecute
import Foundation

extension ActionManager {
    class ModuleTemplatePython: ModuleTemplateExecutable {
        override func getLanguage() -> String { "Source - Python" }
        override func getTemplateBundleName() -> String { "SourcePython" }
        override func getBuildHint() -> String { "To build Python Module, python 3 and it's tool is required. Install them yourself." }

        override func openDesignatedEditor(id: ActionManager.Action.ID) -> Result<Void, ActionManager.GenericActionError> {
            let url = ActionManager.shared
                .actionModuleBaseUrl
                .appendingPathComponent(id.uuidString)

            let recipe = AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", "code \(url.path)"]
            )

            guard recipe.exitCode == 0 else {
                return .failure(.designatedEditorMissing)
            }

            return .success
        }

        override func compileModule(id: ActionManager.Action.ID, output _: @escaping (String) -> Void) -> Result<Void, ActionManager.GenericActionError> {
            guard let action = ActionManager.shared[id] else {
                return .failure(.brokenResources)
            }
            let actionUrl = ActionManager.shared
                .actionModuleBaseUrl
                .appendingPathComponent(action.id.uuidString)

            ActionManager.shared.registerArtifact(forAction: action.id, artifact: actionUrl)
            return .success
        }

        override func executeModule(id: ActionManager.Action.ID, withPasteboardEvent event: PasteboardManager.PEvent, output: @escaping (String) -> Void) -> Result<ActionManager.ActionRecipeData, ActionManager.GenericActionError> {
            assert(!Thread.isMainThread)

            guard let action = ActionManager.shared[id],
                  let artifact = ActionManager.shared.artifacts[id]
            else {
                return .failure(.brokenResources)
            }
            guard artifact.validateSignature() else {
                return .failure(.unauthorizedModificationDetected)
            }

            let script = artifact
                .obtainArtifactUrl()
                .appendingPathComponent("main.py")

            guard let argument = ArgumentData(
                focusAppID: event.app?.bundleIdentifier,
                focusAppName: event.app?.name,
                pasteboardContent: event.content
            )
            .compileBase64()
            else {
                return .failure(.brokenResources)
            }

            print("[*] executing action \(id.uuidString)")

            var resultData: ActionRecipeData?

            let recipe = AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", "python3 \(script.path)"],
                environment: ["Communicator_Message": argument],
                timeout: Double(action.timeout),
                output: output
            )

            var lastLine = recipe.stderr
                .trimmingCharacters(in: .whitespacesAndNewlines)
                .components(separatedBy: "\n")
                .last?
                .trimmingCharacters(in: .whitespaces)
                ?? ""
            let prefix = "ActionBee-Result-Recipe://"
            if lastLine.hasPrefix(prefix) {
                lastLine.removeFirst(prefix.count)
            }
            if let base64 = Data(base64Encoded: lastLine) {
                resultData = ActionRecipeData.retrieve(withData: base64)
            }

            guard let result = resultData else {
                return .failure(.invalidResponse)
            }

            return .success(result)
        }

        func executeZshScript(atLocation: URL, output: @escaping (String) -> Void = { _ in }) -> AuxiliaryExecute.ExecuteRecipe {
            AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", atLocation.path],
                output: output
            )
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Swift.swift
================================================
//
//  ModuleTemplate+Swift.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import AuxiliaryExecute
import Cocoa

extension ActionManager {
    class ModuleTemplateSwift: ModuleTemplateExecutable {
        override func getLanguage() -> String { "Source - Swift" }
        override func getTemplateBundleName() -> String { "SourceSwift" }
        override func getBuildHint() -> String { "To build Swift Module, Xcode and it's tool xcode-build is required. Install Xcode yourself." }

        override func openDesignatedEditor(id: ActionManager.Action.ID) -> Result<Void, ActionManager.GenericActionError> {
            guard let action = ActionManager.shared[id] else {
                return .failure(GenericActionError.brokenResources)
            }
            let target = ActionManager.shared.actionModuleBaseUrl
                .appendingPathComponent(action.id.uuidString)
                .appendingPathComponent("App.xcworkspace")
            guard FileManager.default.fileExists(atPath: target.path) else {
                return .failure(GenericActionError.brokenResources)
            }
            guard NSWorkspace.shared.open(target) else {
                return .failure(GenericActionError.designatedEditorMissing)
            }
            return .success
        }

        override func compileModule(id: ActionManager.Action.ID, output: @escaping (String) -> Void) -> Result<Void, ActionManager.GenericActionError> {
            assert(!Thread.isMainThread)

            guard let action = ActionManager.shared[id] else {
                return .failure(.brokenResources)
            }

            let temporaryDir = URL(fileURLWithPath: NSTemporaryDirectory())
                .appendingPathComponent(UUID().uuidString)
            try? FileManager.default.removeItem(at: temporaryDir)
            defer {
                try? FileManager.default.removeItem(at: temporaryDir)
            }

            do {
                output("[*] starting compiler at \(temporaryDir.path)\n")
                try FileManager.default.createDirectory(at: temporaryDir, withIntermediateDirectories: true)
                try Executor.shared.unarchiveTar(at: getTemplateBundleURL(), toDest: temporaryDir)
                let validatedSourcePathComponents = "Source"
                let userSrc = ActionManager.shared
                    .actionModuleBaseUrl
                    .appendingPathComponent(action.id.uuidString)
                    .appendingPathComponent(validatedSourcePathComponents)
                let targetSrc = temporaryDir
                    .appendingPathComponent(validatedSourcePathComponents)
                output("[*] copying user source from \(userSrc.path) to \(targetSrc.path)\n")
                try FileManager.default.removeItem(at: targetSrc)
                try FileManager.default.copyItem(at: userSrc, to: targetSrc)
                FileManager.default.createFile(
                    atPath: temporaryDir.appendingPathComponent(".action").path,
                    contents: nil
                )
            } catch {
                output("[E] \(error.localizedDescription)")
                return .failure(.permissionDenied)
            }

            output("[*] calling compiler script\n")
            let compileScript = temporaryDir
                .appendingPathComponent(".supplement")
                .appendingPathComponent("compile.sh")
            let recipe = executeZshScript(atLocation: compileScript, output: output)
            guard recipe.exitCode == 0 else {
                return .failure(.compilerError)
            }

            let binaryLocation = temporaryDir
                .appendingPathComponent(".build")
                .appendingPathComponent("cli")
            guard FileManager.default.fileExists(atPath: binaryLocation.path) else {
                return .failure(.permissionDenied)
            }

            output("[*] compiled binary at \(binaryLocation.path)\n")
            ActionManager.shared.registerArtifact(forAction: action.id, artifact: binaryLocation)
            return .success
        }

        func executeZshScript(atLocation: URL, output: @escaping (String) -> Void = { _ in }) -> AuxiliaryExecute.ExecuteRecipe {
            AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", atLocation.path],
                output: output
            )
        }
    }
}


================================================
FILE: App/Action/Action/Backend/Action/ActionTemplates/.templates
================================================


================================================
FILE: App/Action/Action/Backend/Config/Config.swift
================================================
//
//  Config.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/17.
//

import Combine
import Foundation

class Config: ObservableObject {
    static let shared = Config()

    private init() {
        reducedEffects = reducedEffectsStore
        pasteboardDeduplicate = pasteboardDeduplicateStore
        silentMode = silentModeStore
        toastMode = toastModeStore
    }

    @UserDefaultsWrapper(key: "wiki.qaq.config.reducedEffects", defaultValue: false)
    private var reducedEffectsStore

    @Published var reducedEffects: Bool = false {
        didSet { reducedEffectsStore = reducedEffects }
    }

    @UserDefaultsWrapper(key: "wiki.qaq.config.pasteboardDeduplicate", defaultValue: true)
    private var pasteboardDeduplicateStore

    @Published var pasteboardDeduplicate: Bool = true {
        didSet { pasteboardDeduplicateStore = pasteboardDeduplicate }
    }

    @UserDefaultsWrapper(key: "wiki.qaq.config.silentMode", defaultValue: false)
    private var silentModeStore

    @Published var silentMode: Bool = true {
        didSet { silentModeStore = silentMode }
    }

    @UserDefaultsWrapper(key: "wiki.qaq.config.toastMode", defaultValue: false)
    private var toastModeStore

    @Published var toastMode: Bool = true {
        didSet { toastModeStore = toastMode }
    }
}


================================================
FILE: App/Action/Action/Backend/Executor/Executor.swift
================================================
//
//  Executor.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import AuxiliaryExecute
import Foundation

final class Executor {
    static let shared = Executor()

    let executorDir = ActionApp
        .documentDirectory
        .appendingPathComponent("Executor")

    private init() {
        let whoami = "/usr/bin/whoami"
        let receipt = AuxiliaryExecute.spawn(command: whoami)
        let username = receipt.stdout.trimmingCharacters(in: .whitespacesAndNewlines)
        guard receipt.exitCode == 0, !username.isEmpty /* , username != "root" */ else {
            fatalError("Malformed application permission")
        }
        print("[*] whoami \(username)")

        do {
            let findEnv = AuxiliaryExecute.spawn(
                command: "/bin/zsh",
                args: ["-c", "source ~/.zshrc 1>/dev/null 2>/dev/null && echo $PATH"]
            )
            let env = findEnv.stdout.trimmingCharacters(in: .whitespacesAndNewlines)
            print("[*] setting up env PATH value \(findEnv.stdout)")
            let envPathBuilder = env.components(separatedBy: ":")
                .filter { FileManager.default.fileExists(atPath: $0) }
            let origPathBuilder = (
                ProcessInfo
                    .processInfo
                    .environment["PATH"] ?? ""
            )
            .components(separatedBy: ":")
            .filter { FileManager.default.fileExists(atPath: $0) }
            let newPath = Array(Set(envPathBuilder + origPathBuilder))
                .joined(separator: ":")

            setenv("PATH", newPath, 1)
        }

        try? FileManager.default.createDirectory(at: executorDir, withIntermediateDirectories: true)
    }

    enum ExecutorError: Error {
        case unknown
    }

    func obtainXcodeCommandLineToolLocation() -> URL? {
        let receipt = AuxiliaryExecute.spawn(
            command: "/usr/bin/xcode-select",
            args: ["--print-path"]
        )
        let path = receipt
            .stdout
            .trimmingCharacters(in: .whitespacesAndNewlines)

        guard path != "/",
              path.hasPrefix("/"),
              FileManager.default.fileExists(atPath: path)
        else {
            return nil
        }
        return URL(fileURLWithPath: path)
    }

    func unarchiveTar(at: URL, toDest: URL) throws {
        let receipt = AuxiliaryExecute.spawn(
            command: "/usr/bin/tar",
            args: ["-xf", at.path, "--directory", toDest.path]
        )
        guard receipt.exitCode == 0 else {
            throw ExecutorError.unknown
        }
    }

    func speak(_ str: String) {
        AuxiliaryExecute.spawn(
            command: "/usr/bin/say",
            args: [str]
        )
    }
}


================================================
FILE: App/Action/Action/Backend/PasteboardManager/PasteboardManager+Event.swift
================================================
//
//  PasteboardManager+Event.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import Foundation

extension PasteboardManager {
    struct PEvent: Codable, Equatable, Hashable {
        let content: String
        let app: AppInfo?

        init(content: String, app: PasteboardManager.AppInfo?) {
            self.content = content
            self.app = app
        }
    }

    struct AppInfo: Codable, Equatable, Hashable {
        let name: String
        let bundleIdentifier: String

        init(name: String, bundleIdentifier: String) {
            self.name = name
            self.bundleIdentifier = bundleIdentifier
        }
    }
}


================================================
FILE: App/Action/Action/Backend/PasteboardManager/PasteboardManager.swift
================================================
//
//  PasteboardManager.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import AppKit

final class PasteboardManager {
    static let shared = PasteboardManager()

    private init() {
        print("[*] setting up Pasteboard Manager")

        Thread(
            target: self,
            selector: #selector(startMonitorThread),
            object: nil
        )
        .start()
    }

    let systemPasteboard = NSPasteboard.general
    private var monitorThread: Thread?
    private var monitorRunLoop: RunLoop?

    private var accessQueue = DispatchQueue(label: "wiki.qaq.PasteboardManager.accessQueue")
    private var executeQueue = DispatchQueue(label: "wiki.qaq.PasteboardManager.executeQueue")
    private var previousPasteboardChangeCount: Int?
    private var previousPasteboardEvent: PEvent?

    var eventBlockaded: Bool = false

    @objc private func startMonitorThread() {
        monitorThread = Thread.current
        monitorRunLoop = RunLoop.current
        defer {
            self.monitorThread = nil
            self.monitorRunLoop = nil
        }
        let timer = Timer(timeInterval: 0.25, repeats: true) { _ in
            self.accessQueue.async { self.checkPasteboard() }
        }
        RunLoop.current.add(timer, forMode: .common)
        CFRunLoopRun()
    }

    func clearLastEvent() {
        print("[*] clearing previous pasteboard event")
        accessQueue.async {
            self.previousPasteboardEvent = nil
        }
    }

    func requestCheckPasteboard() {
        accessQueue.async { self.checkPasteboard() }
    }

    private func checkPasteboard() {
        guard systemPasteboard.changeCount != previousPasteboardChangeCount else {
            return
        }

        let newChangeCount = systemPasteboard.changeCount
        print("[*] NSPasteboard has changeCount \(newChangeCount) previous at \(previousPasteboardChangeCount ?? -1)")
        previousPasteboardChangeCount = newChangeCount
        guard let copied = systemPasteboard.string(forType: .string) else {
            print("[?] system pasteboard does not returns as string > ignoring")
            return
        }

        let app: AppInfo? = obtainRunningApplication()
        let event = PEvent(content: copied, app: app)
        print("[*] PasteboardEvent content len \(copied.count) from \(app?.name ?? "nil")")

        var shouldDispatchEvent = false
        if let previousEvent = previousPasteboardEvent,
           previousEvent != event || !Config.shared.pasteboardDeduplicate
        {
            shouldDispatchEvent = true
        } else {
            print("[*] event content did not change, ignore dispatch")
        }

        previousPasteboardEvent = event

        if shouldDispatchEvent { prepareWorkflow(forPasteboardEvent: event) }
    }

    private func obtainRunningApplication() -> AppInfo? {
        if let axApp = obtainRunningApplicationUsingAXElement() {
            return axApp
        }

        if let currentApplication = NSWorkspace.shared.menuBarOwningApplication,
           let name = currentApplication.localizedName,
           let bundleIdentifier = currentApplication.bundleIdentifier
        {
            return AppInfo(name: name, bundleIdentifier: bundleIdentifier)
        }

        if let currentApplication = NSWorkspace.shared.frontmostApplication,
           let name = currentApplication.localizedName,
           let bundleIdentifier = currentApplication.bundleIdentifier
        {
            return AppInfo(name: name, bundleIdentifier: bundleIdentifier)
        }

        return nil
    }

    private func obtainRunningApplicationUsingAXElement() -> AppInfo? {
        let systemWideElement: AXUIElement = AXUIElementCreateSystemWide()
        var focusedElement: AnyObject?
        AXUIElementCopyAttributeValue(
            systemWideElement,
            kAXFocusedUIElementAttribute as CFString,
            &focusedElement
        )
        guard let element = focusedElement else { return nil }
        var pid: pid_t = 0
        AXUIElementGetPid(element as! AXUIElement, &pid)
        guard pid > 0 else { return nil }
        let runningApp = NSRunningApplication(processIdentifier: pid)
        if let name = runningApp?.localizedName,
           let bundleIdentifier = runningApp?.bundleIdentifier
        {
            return AppInfo(name: name, bundleIdentifier: bundleIdentifier)
        }
        return nil
    }

    private func prepareWorkflow(forPasteboardEvent pasteboardEvent: PEvent) {
        assert(!Thread.isMainThread)
        guard !eventBlockaded else {
            print("[*] this pasteboard has been blockaded due to other process exists")
            return
        }
        PasteboardManager.shared.eventBlockaded = true
        defer {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                PasteboardManager.shared.eventBlockaded = false
            }
        }
        print("[*] calling workflow manager to resolve event")
        print("    content length \(pasteboardEvent.content.count)")
        print("    from \(pasteboardEvent.app?.bundleIdentifier ?? "unknown") (\(pasteboardEvent.app?.name ?? "nope"))")
        ActionManager.shared.handle(pasteboardEvent: pasteboardEvent)
    }
}


================================================
FILE: App/Action/Action/Backend/StatusBarManager/StatusBarManager.swift
================================================
//
//  StatusBarManager.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import Foundation

final class StatusBarManager {
    var hasWindowOpened: Bool = false

    static let shared = StatusBarManager()

    private init() {}
}


================================================
FILE: App/Action/Action/Extension/AES.swift
================================================
//
//  AES.swift
//  PTFoundation
//
//  Created by Lakr Aream on 12/15/20.
//

import CommonCrypto
import Foundation
import KeychainAccess

private var bundleId: String {
    guard let id = Bundle.main.bundleIdentifier,
          !id.isEmpty
    else {
        fatalError("AES Engine requires bundle identifier to work")
    }
    return id
}

private let keychainServiceID = "wiki.qaq.ActionBee.kcAccess"
private let keychainMainKeyID = "wiki.qaq.ActionBee.keychainMainKeyID"
private let keychainLabel = "ActionBee Main Crypto Key"
private let keychainComment = "ActionBee requires this crypto key to access your encrypted data and sign sensitive information."

public struct AES {
    private let key: Data
    private let iv: Data

    public static let shared: AES = {
        #if DEBUG

            var keyBuilder = ""
            #if os(macOS)
                let platformExpert = IOServiceGetMatchingService(
                    kIOMainPortDefault,
                    IOServiceMatching("IOPlatformExpertDevice")
                )
                guard platformExpert > 0 else {
                    fatalError()
                }
                guard let serialNumber = (
                    IORegistryEntryCreateCFProperty(
                        platformExpert,
                        kIOPlatformSerialNumberKey as CFString,
                        kCFAllocatorDefault,
                        0
                    )
                    .takeUnretainedValue() as? String
                )
                else {
                    fatalError()
                }
                IOObjectRelease(platformExpert)
                keyBuilder = serialNumber
            #else
                keyBuilder = "0xdeadbeef & 0xbadf00d & 0xdeadbeef & 0xbadf00d & 0xdeadbeef & 0xbadf00d"
            #endif

            let key = keyBuilder + keyBuilder + keyBuilder
            guard let aes = AES(key: key, iv: key) else {
                fatalError("failed to initialize crypto engine")
            }
            return aes
        #else
            let keychain = Keychain(service: keychainServiceID)
            var retry = 3
            var key: String?
            repeat {
                defer { retry -= 1 }
                do {
                    let main = try keychain.getString(keychainMainKeyID)
                    if let main = main, main.count > 2 {
                        key = main
                        break
                    } else {
                        try keychain.remove(keychainMainKeyID)
                        let new = UUID().uuidString
                        key = new
                        try keychain
                            .label(keychainLabel)
                            .comment(keychainComment)
                            .set(new, key: keychainMainKeyID)
                        break
                    }
                } catch {
                    continue
                }
            } while retry > 0
            guard let key = key else {
                fatalError("failed to load crypto keys")
            }
            guard let aes = AES(key: key, iv: key) else {
                fatalError("failed to initialize crypto engine")
            }
            return aes
        #endif
    }()

    internal init?(key initKey: String, iv initIV: String) {
        if initKey.count < kCCKeySizeAES128 || initIV.count < kCCBlockSizeAES128 {
            return nil
        }
        var initKey = initKey
        while initKey.count < 32 {
            initKey += initKey
        }
        while initKey.count > 32 {
            initKey.removeLast()
        }
        guard initKey.count == kCCKeySizeAES128 || initKey.count == kCCKeySizeAES256,
              let keyData = initKey.data(using: .utf8)
        else {
            return nil
        }

        var initIV = initIV
        while initIV.count < kCCBlockSizeAES128 {
            initIV += initIV
        }
        while initIV.count > kCCBlockSizeAES128 {
            initIV.removeLast()
        }
        guard initIV.count == kCCBlockSizeAES128, let ivData = initIV.data(using: .utf8) else {
            return nil
        }

        key = keyData
        iv = ivData
    }

    // MARK: - API

    public func encrypt(data: Data) -> Data? {
        crypt(data: data, option: CCOperation(kCCEncrypt))
    }

    public func decrypt(data: Data) -> Data? {
        crypt(data: data, option: CCOperation(kCCDecrypt))
    }

    // MARK: - INTERNAL

    private func crypt(data: Data?, option: CCOperation) -> Data? {
        guard let data = data else { return nil }

        let cryptLength = data.count + kCCBlockSizeAES128
        var cryptData = Data(count: cryptLength)

        let keyLength = key.count
        let options = CCOptions(kCCOptionPKCS7Padding)

        var bytesLength = Int(0)

        let status = cryptData.withUnsafeMutableBytes { cryptBytes in
            data.withUnsafeBytes { dataBytes in
                iv.withUnsafeBytes { ivBytes in
                    key.withUnsafeBytes { keyBytes in
                        CCCrypt(option, CCAlgorithm(kCCAlgorithmAES), options, keyBytes.baseAddress, keyLength, ivBytes.baseAddress, dataBytes.baseAddress, data.count, cryptBytes.baseAddress, cryptLength, &bytesLength)
                    }
                }
            }
        }

        guard UInt32(status) == UInt32(kCCSuccess) else {
            assertionFailure()
            return nil
        }

        cryptData.removeSubrange(bytesLength ..< cryptData.count)
        return cryptData
    }
}


================================================
FILE: App/Action/Action/Extension/Data.swift
================================================
//
//  Data.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import CommonCrypto
import Foundation

extension Data {
    func sha256() -> String {
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
        withUnsafeBytes {
            _ = CC_SHA256($0.baseAddress, CC_LONG(count), &digest)
        }
        let hexBytes = digest.map { String(format: "%02hhx", $0) }
        let sha256Hex = hexBytes.joined()
        return sha256Hex
    }
}


================================================
FILE: App/Action/Action/Extension/DispatchQueue.swift
================================================
//
//  DispatchQueue.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import Foundation

extension DispatchQueue {
    static func withMainAndWait(block: @escaping () -> Void) {
        assert(!Thread.isMainThread)

        guard !Thread.isMainThread else {
            block()
            return
        }

        let sem = DispatchSemaphore(value: 0)
        DispatchQueue.main.async {
            block()
            sem.signal()
        }
        sem.wait()
    }
}


================================================
FILE: App/Action/Action/Extension/Notification.swift
================================================
//
//  Notification.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import Foundation

extension Notification.Name {
    static let editAction = Notification.Name("wiki.qaq.editAction")
}


================================================
FILE: App/Action/Action/Extension/Result.swift
================================================
//
//  Result.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Foundation

public extension Result where Success == Void {
    static var success: Result { .success(()) }
}


================================================
FILE: App/Action/Action/Extension/Throttle.swift
================================================
//  SwiftThrottle.swift
//  Twitter @Lakr233
//
//  Created by Lakr Aream on 12/12/20.
//

import Foundation

/*

 This throttle is intended to prevent the program from crashing with
 too many requests or is used for saving computer resources.

 ** Swift Throttle is not designed for operations that require high time accuracy **

 */

// MARK: - THROTTLE

public class Throttle {
    // MARK: - PROPERTY

    /// Setup with these values to control the throttle behave
    /// - minimumDelay >= 0.5 second is suggested
    public private(set) var minimumDelay: TimeInterval
    public private(set) var workingQueue: DispatchQueue

    /// lock when dispatch job to execution
    private var executeLock = NSLock()

    /// These value controls throttle behavior
    public private(set) var lastExecute: Date?
    public private(set) var lastRequestWasCanceled: Bool = false
    public private(set) var scheduled: Bool = false

    /// Lock when setting jobs, required by thread safe design
    private var _assignmentLock = NSLock()
    private var _assignment: (() -> Void)?
    public private(set) var assignment: (() -> Void)? {
        set {
            _assignmentLock.lock()
            defer { _assignmentLock.unlock() }
            _assignment = newValue
        }
        get {
            _assignmentLock.lock()
            defer { _assignmentLock.unlock() }
            return _assignment
        }
    }

    // MARK: - INIT

    /// Create a throttle
    /// - Parameters:
    ///   - minimumDelay: in second
    ///   - queue: the queue that job will executed on, default to main
    public init(minimumDelay delay: TimeInterval,
                queue: DispatchQueue = DispatchQueue.main)
    {
        minimumDelay = delay
        workingQueue = queue

        #if DEBUG
            if minimumDelay < 0.5 {
                // we suggest minimumDelay to be at least 0.5 second
                debugPrint("[SwiftThrottle] "
                    + "minimumDelay(\(minimumDelay) less then 0.5s will be inaccurate"
                    + ", last callback not guaranteed")
            }
        #endif
    }

    // MARK: - API

    /// Update property minimumDelay
    /// - Parameter interval: in second
    public func updateMinimumDelay(interval: Double) {
        executeLock.lock()
        minimumDelay = interval
        executeLock.unlock()
    }

    /// Assign job to throttle
    /// - Parameter job: call block
    public func throttle(job: (() -> Void)?) {
        realThrottle(job: job, useAssignment: false)
    }

    // MARK: - BACKEND

    /// Check nothing but execute
    /// - Parameter capturedJob: block to execute
    private func releaseExec(capturedJob: @escaping (() -> Void)) {
        lastExecute = Date()
        workingQueue.async {
            capturedJob()
        }
    }

    /// Throttle is working here
    /// - Parameters:
    ///   - job: block that was required to execute
    ///   - useAssignment: shall we overwrite assigned job?
    private func realThrottle(job: (() -> Void)?, useAssignment: Bool) {
        // lock down every thing when resigning job
        executeLock.lock()
        defer { self.executeLock.unlock() }

        // if called from rescheduled job, cancel job overwrite
        var capturedJobDecision: (() -> Void)?
        if !useAssignment {
            // resign job every time calling from user
            assignment = job
            capturedJobDecision = job
        } else {
            capturedJobDecision = assignment
        }
        guard let capturedJob = capturedJobDecision else { return }

        // MARK: LOCK BEGIN

        if let lastExec = lastExecute {
            // executed before, value negative
            let timeBetween = -lastExec.timeIntervalSinceNow

            if timeBetween < minimumDelay {
                // The throttle will be reprogrammed once for future execution
                lastRequestWasCanceled = true
                if !scheduled {
                    scheduled = true
                    let dispatchTime = Double(minimumDelay - timeBetween + 0.01)
                    // Preventing trigger failures
                    // This is where the inaccuracy comes from
                    workingQueue.asyncAfter(deadline: .now() + dispatchTime) {
                        self.realThrottle(job: nil, useAssignment: true)
                        self.scheduled = false
                    }
                }
            } else {
                // Throttle release to execution
                releaseExec(capturedJob: capturedJob)
            }
        }
        else // never called before, release to execution
        {
            releaseExec(capturedJob: capturedJob)
        }

        // MARK: LOCK END
    }
}


================================================
FILE: App/Action/Action/Extension/UserDefault.swift
================================================
//
//  UserDefault.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import Foundation

#if DEBUG
    private let keyPrefix = "debug."
#else
    private let keyPrefix = ""
#endif

@propertyWrapper
struct UserDefaultsWrapper<Value> {
    let key: String
    let defaultValue: Value
    var storage: UserDefaults = .standard

    init(key: String, defaultValue: Value, storage: UserDefaults = .standard) {
        self.key = keyPrefix + key
        self.defaultValue = defaultValue
        self.storage = storage
    }

    var wrappedValue: Value {
        get {
            let value = storage.value(forKey: key) as? Value
            return value ?? defaultValue
        }
        set {
            storage.setValue(newValue, forKey: key)
        }
    }
}

extension UserDefaultsWrapper where Value: ExpressibleByNilLiteral {
    init(key: String, storage: UserDefaults = .standard) {
        self.init(key: key, defaultValue: nil, storage: storage)
    }
}

private let documentEncoder = PropertyListEncoder()
private let documentDecoder = PropertyListDecoder()

@propertyWrapper
struct CodableDefaultsWrapper<Value: Codable> {
    let key: String
    let defaultValue: Value
    var storage: UserDefaults = .standard

    init(key: String, defaultValue: Value, storage: UserDefaults = .standard) {
        self.key = keyPrefix + key
        self.defaultValue = defaultValue
        self.storage = storage
    }

    var wrappedValue: Value {
        get {
            guard let data = storage.value(forKey: key) as? Data,
                  let value = try? documentDecoder.decode(Value.self, from: data)
            else {
                return defaultValue
            }
            return value
        }
        set {
            guard let data = try? documentEncoder.encode(newValue) else {
                return
            }
            storage.setValue(data, forKey: key)
        }
    }
}

@propertyWrapper
struct EncryptedCodableDefaultsWrapper<Value: Codable> {
    let key: String
    let defaultValue: Value
    var storage: UserDefaults = .standard

    init(key: String, defaultValue: Value, storage: UserDefaults = .standard) {
        self.key = keyPrefix + key
        self.defaultValue = defaultValue
        self.storage = storage
    }

    var wrappedValue: Value {
        get {
            guard let data = storage.value(forKey: key) as? Data,
                  let decrypted = AES.shared.decrypt(data: data),
                  let value = try? documentDecoder.decode(Value.self, from: decrypted)
            else {
                return defaultValue
            }
            return value
        }
        set {
            guard let data = try? documentEncoder.encode(newValue),
                  let encrypt = AES.shared.encrypt(data: data)
            else {
                return
            }
            storage.setValue(encrypt, forKey: key)
        }
    }
}

extension EncryptedCodableDefaultsWrapper where Value: ExpressibleByNilLiteral {
    init(key: String, storage: UserDefaults = .standard) {
        self.init(key: key, defaultValue: nil, storage: storage)
    }
}


================================================
FILE: App/Action/Action/Extension/View.swift
================================================
//
//  View.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import SwiftUI

extension View {
    func usePreferredContentSize() -> some View {
        frame(
            minWidth: 400, idealWidth: 500, maxWidth: .infinity,
            minHeight: 300, idealHeight: 350, maxHeight: .infinity,
            alignment: .center
        )
    }
}


================================================
FILE: App/Action/Action/Interface/ActionModule/ModuleCreateView.swift
================================================
//
//  ModuleCreateView.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import SwiftUI

struct ModuleCreateSheet: View {
    @Environment(\.presentationMode) var presentationMode

    @State var moduleName: String = "Module - 0x\(Int.random(in: 100_000 ... 999_999))"
    @State var selectedTemplate: ActionManager.ModuleTemplateIdentifier = .swift

    @State var showProgress: Bool = false

    var body: some View {
        VStack(alignment: .leading, spacing: 6) {
            if showProgress {
                ProgressView()
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
            } else {
                Label("Create Action", systemImage: "doc.badge.gearshape.fill")
                    .font(.system(.headline, design: .rounded))
                Divider()
                TextField("Module Name", text: $moduleName)
                Picker("Language", selection: $selectedTemplate) {
                    ForEach(ActionManager.ModuleTemplateIdentifier.allCases, id: \.self) { template in
                        Text(template.obtainTemplateDetails().getLanguage())
                    }
                }
                Divider()
                HStack {
                    Button("Cancel") {
                        presentationMode.wrappedValue.dismiss()
                    }
                    .keyboardShortcut(.cancelAction)
                    Spacer()
                    Button("Next") {
                        callCreate()
                    }
                    .buttonStyle(.borderedProminent)
                    .keyboardShortcut(.defaultAction)
                }
            }
        }
        .padding()
        .frame(width: 300, alignment: .center)
    }

    func callCreate() {
        showProgress = true
        DispatchQueue.global().async {
            var actionId: UUID?
            defer {
                DispatchQueue.main.async {
                    presentationMode.wrappedValue.dismiss()
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
                    if let id = actionId {
                        ActionManager.shared.initialingAciton.insert(id)
                        NotificationCenter.default.post(name: .editAction, object: id)
                    }
                }
            }
            print("[*] \(moduleName) \(selectedTemplate)")
            actionId = ActionManager.shared.createAction(
                withName: moduleName,
                withModuleTemplate: selectedTemplate
            )
        }
    }
}


================================================
FILE: App/Action/Action/Interface/ActionModule/ModuleEditView.swift
================================================
//
//  ModuleEditView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import SwiftUI
import SymbolPicker

struct ModuleEditView: View {
    let id: UUID

    @Environment(\.presentationMode) var presentationMode

    @State var editingAction: ActionManager.Action? = nil

    @State var actionEnabled: Bool = true
    @State var openSymbolPicker: Bool = false
    @State var openCompileView: Bool = false
    @State var hoverApplication: String? = nil

    @State var compileLog: String = ""
    @State var compilerFinished: Bool = false

    var body: some View {
        VStack(alignment: .leading, spacing: 8) {
            if editingAction == nil {
                brokenModule
            } else {
                HStack {
                    Label("Edit Action", systemImage: "slider.horizontal.3")
                        .font(.system(.headline, design: .rounded))
                    Spacer()
                    Button {
                        delete()
                    } label: {
                        Image(systemName: "trash")
                            .font(.system(.headline, design: .rounded))
                            .foregroundColor(.accentColor)
                    }
                    .buttonStyle(.plain)
                }
                Divider()
                basicMetaBlock
                enableForAppsBlock
                editCodeBlock
                Divider()
                HStack {
                    Button("Cancel") {
                        presentationMode.wrappedValue.dismiss()
                    }
                    .keyboardShortcut(.cancelAction)
                    Spacer()
                    Button("Save") {
                        finalizeEdit()
                    }
                    .buttonStyle(.borderedProminent)
                    .keyboardShortcut(.defaultAction)
                }
            }
        }
        .onAppear {
            editingAction = ActionManager.shared[id]
            actionEnabled = ActionManager.shared.enabledActions.contains(id)
        }
        .opacity(openCompileView ? 0 : 1)
        .overlay(compileOverlay)
        .padding()
        .frame(width: 500, alignment: .center)
    }

    var compileOverlay: some View {
        VStack(alignment: .leading) {
            if !compilerFinished { ProgressView().padding(.top, 20) }
            Spacer().frame(height: 20)
            Text(compilerFinished ? "Compile Finished" : "Compiling Source")
                .font(.headline)
            Spacer().frame(height: 6)
            if !compilerFinished { RandomCodeTextView() }
            Divider()
            ScrollView(.vertical, showsIndicators: true) {
                VStack(alignment: .leading, spacing: 4) {
                    ForEach(Array(
                        compileLog
                            .components(separatedBy: "\n")
                            .reversed()
                            .enumerated()
                    ), id: \.offset) { _, log in
                        Text(log).textSelection(.enabled)
                    }
                    .font(.system(.footnote, design: .monospaced))
                    .opacity(0.5)
                }
            }
            Button("Cancel") {
                compileLog = ""
                openCompileView = false
            }
            .opacity(compilerFinished ? 1 : 0)
        }
        .opacity(openCompileView ? 1 : 0)
    }

    var brokenModule: some View {
        VStack {
            Image(systemName: "xmark.seal.fill")
                .font(.system(size: 36, weight: .semibold, design: .rounded))
                .foregroundColor(.pink)
                .frame(width: 80, height: 80)
            Text("Broken Module")
                .font(.headline)
            Divider()
            HStack {
                Button("Delete") {
                    ActionManager.shared.deleteModule(withId: id)
                }
                Button("Close") {
                    presentationMode.wrappedValue.dismiss()
                }
                .buttonStyle(.borderedProminent)
            }
        }
        .padding()
    }

    var actionIcon: String {
        guard let icon = editingAction?.icon,
              !icon.isEmpty
        else {
            return "text.append"
        }
        return icon
    }

    var basicMetaBlock: some View {
        Group {
            Toggle("Enabled", isOn: $actionEnabled)
                .font(.system(.headline, design: .rounded))
            HStack {
                Button {
                    openSymbolPicker = true
                } label: {
                    Image(systemName: actionIcon)
                }
                TextField("Name", text: Binding<String>(
                    get: {
                        editingAction?.name ?? ""
                    },
                    set: { newValue in
                        editingAction?.name = newValue
                    }
                ))
                Text("Timeout: ")
                TextField("Name", text: Binding<String>(
                    get: {
                        String(editingAction?.timeout ?? 5)
                    },
                    set: { newValue in
                        editingAction?.timeout = Int(newValue) ?? 5
                    }
                ))
                .frame(width: 26)
                Text("s")
            }
            Text("ID: \(editingAction?.id.uuidString ?? "0x4422DEADBEEF")")
                .textSelection(.enabled)
                .font(.system(.footnote, design: .monospaced))
        }
        .sheet(isPresented: $openSymbolPicker) {
            SymbolPicker(symbol: Binding<String>(
                get: {
                    actionIcon
                },
                set: { newValue in
                    editingAction?.icon = newValue
                }
            ))
        }
    }

    var enableForAppsBlock: some View {
        Group {
            HStack {
                Text("Enable In App")
                    .font(.system(.headline, design: .rounded))
                Spacer()
                Button {
                    addApp()
                } label: {
                    Image(systemName: "plus")
                        .foregroundColor(.accentColor)
                        .font(.system(.headline, design: .rounded))
                }
                .buttonStyle(.plain)
            }
            if let appList = editingAction?.enabledAppList,
               !appList.isEmpty
            {
                ScrollView(.horizontal, showsIndicators: false) {
                    HStack {
                        ForEach(appList, id: \.self) { appId in
                            ApplicationView(appId: appId)
                                .blur(radius: hoverApplication == appId ? 6 : 0)
                                .overlay {
                                    Button {
                                        editingAction?.enabledAppList = editingAction?
                                            .enabledAppList
                                            .filter { $0 != appId }
                                            ?? []
                                    } label: {
                                        Image(systemName: "xmark")
                                            .foregroundColor(.white)
                                            .font(.system(.headline, design: .rounded))
                                            .frame(maxWidth: .infinity, maxHeight: .infinity)
                                            .background(Color.black.opacity(0.5))
                                            .cornerRadius(4)
                                    }
                                    .buttonStyle(.plain)
                                    .opacity(hoverApplication == appId ? 1 : 0)
                                }
                                .animation(.interactiveSpring(), value: hoverApplication)
                                .onHover { hover in
                                    if hover {
                                        hoverApplication = appId
                                    } else {
                                        hoverApplication = nil
                                    }
                                }
                        }
                    }
                }
                .frame(height: 26)
            } else {
                Button {
                    addApp()
                } label: {
                    Label("Enabled for All Apps", systemImage: "app.badge.checkmark")
                        .font(.system(.subheadline, design: .rounded))
                        .frame(height: 26)
                        .frame(maxWidth: .infinity)
                        .background(Color.accentColor.opacity(0.1))
                        .cornerRadius(4)
                }
                .buttonStyle(.plain)
            }
            Text("This pasteboard action will only run if copying from these apps")
                .textSelection(.enabled)
                .font(.system(.footnote))
        }
    }

    var editCodeBlock: some View {
        Group {
            Text("Coding")
                .font(.system(.headline, design: .rounded))
            HStack(spacing: 8) {
                Button("Edit Code") {
                    editModule()
                }
                .buttonStyle(.borderedProminent)
                Button("Show in Finder") {
                    showInFinder()
                }
                Button("Export") {
                    exportModule()
                }
            }
            VStack(alignment: .leading, spacing: 2) {
                Text("Module Template: \(editingAction?.template.obtainTemplateDetails().getLanguage() ?? "Unknown")")
                Text(editingAction?.template.obtainTemplateDetails().getBuildHint() ?? "No Build Hint")
                    .underline()
                Text("You should recompile, click save, this module each time you edit it")
            }
            .textSelection(.enabled)
            .font(.system(.footnote))
        }
    }

    func finalizeEdit() {
        guard ActionManager.shared[id] != nil else {
            presentationMode.wrappedValue.dismiss()
            return
        }
        guard let action = editingAction else {
            presentationMode.wrappedValue.dismiss()
            return
        }
        ActionManager.shared.invalidateArtifactCache(forAction: id)
        ActionManager.shared.enabledActions = ActionManager.shared
            .enabledActions
            .filter { $0 != id }
        guard actionEnabled else {
            presentationMode.wrappedValue.dismiss()
            return
        }
        ActionManager.shared.enabledActions += [id]
        ActionManager.shared.initialingAciton.remove(id)
        compile { result in
            switch result {
            case .success:
                ActionManager.shared[id] = action
                presentationMode.wrappedValue.dismiss()
            case let .failure(failure):
                compilerFinished = true
                let alert = NSAlert()
                alert.alertStyle = .critical
                alert.messageText = "Unable to compile this action: \(failure.message)"
                if let window = NSApp.keyWindow {
                    alert.beginSheetModal(for: window)
                } else {
                    alert.runModal()
                }
            }
        }
    }

    func delete() {
        let alert = NSAlert()
        alert.messageText = NSLocalizedString("Are you sure you want to delete this module? This operation can not be undone.", comment: "")
        alert.alertStyle = .critical
        alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
        alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
        guard let window = NSApp.keyWindow else {
            return
        }
        alert.beginSheetModal(for: window) { resp in
            guard resp == .alertFirstButtonReturn else {
                return
            }
            presentationMode.wrappedValue.dismiss()
            DispatchQueue.main.async {
                ActionManager.shared[id] = nil
            }
        }
    }

    func addApp() {
        let openPanel = NSOpenPanel()
        openPanel.prompt = NSLocalizedString("Select Application", comment: "")
        openPanel.allowedContentTypes = [.application]
        openPanel.allowsMultipleSelection = true
        openPanel.canChooseDirectories = true
        openPanel.treatsFilePackagesAsDirectories = true
        openPanel.directoryURL = URL(fileURLWithPath: "/Applications/")
        guard let window = NSApp.keyWindow else {
            return
        }
        openPanel.beginSheetModal(for: window) { resp in
            guard resp == .OK else {
                return
            }
            var buildId: Set<String> = []
            for id in editingAction?.enabledAppList ?? [] {
                buildId.insert(id)
            }
            for url in openPanel.urls {
                guard let bundle = Bundle(path: url.path),
                      let id = bundle.bundleIdentifier
                else {
                    continue
                }
                buildId.insert(id)
            }
            editingAction?.enabledAppList = Array(buildId).sorted()
        }
    }

    func showInFinder() {
        let url = ActionManager
            .shared
            .actionModuleBaseUrl
            .appendingPathComponent(editingAction?.id.uuidString ?? "")
        guard NSWorkspace.shared.open(url) else {
            let alert = NSAlert()
            alert.alertStyle = .critical
            alert.messageText = NSLocalizedString("Failed to load this module", comment: "")
            if let window = NSApp.keyWindow {
                alert.beginSheetModal(for: window)
            }
            return
        }
    }

    func editModule() {
        let result = editingAction?.template.obtainTemplateDetails()
            .openDesignatedEditor(id: id)
        if case let .failure(failure) = result {
            let alert = NSAlert()
            alert.alertStyle = .critical
            alert.messageText = failure.message
            if let window = NSApp.keyWindow {
                alert.beginSheetModal(for: window)
            }
        }
    }

    func exportModule() {
        let panel = NSSavePanel()
        panel.nameFieldStringValue = "Module Export - \(editingAction?.name ?? "Unnamed")"
        guard let window = NSApp.keyWindow else {
            return
        }
        panel.beginSheetModal(for: window) { resp in
            guard resp == .OK,
                  let url = panel.url
            else {
                return
            }
            ActionManager.shared.updateActionModuleManifest(onActionId: id)
            try? FileManager.default.removeItem(at: url)
            try? FileManager.default.copyItem(
                at: ActionManager.shared.actionModuleBaseUrl.appendingPathComponent(id.uuidString),
                to: url
            )
        }
    }

    func compile(completion: @escaping (Result<Void, ActionManager.GenericActionError>) -> Void = { _ in }) {
        openCompileView = true
        guard let action = editingAction else {
            openCompileView = false
            completion(.failure(.brokenResources))
            return
        }
        DispatchQueue.global().async {
            let result = ActionManager.shared.issueCompile(forAction: action.id) { str in
                DispatchQueue.withMainAndWait {
                    compileLog.append(str)
                }
            }
            DispatchQueue.main.async {
                completion(result)
            }
        }
    }
}


================================================
FILE: App/Action/Action/Interface/ActionModule/ModuleElementView.swift
================================================
//
//  ModuleElementView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import SwiftUI

struct ModuleElementView: View {
    let id: UUID
    let notificationPublisher = NotificationCenter
        .default
        .publisher(for: .editAction)
        .receive(on: RunLoop.main)

    @StateObject var actionManager = ActionManager.shared
    @State var openEdit: Bool = false

    var gradientColor: Gradient {
        if actionManager.enabledActions.contains(id) {
            if actionManager.artifacts[id] == nil {
                return Gradient(colors: [.pink, .red])

            } else {
                return Gradient(colors: [.yellow, .orange])
            }
        } else {
            return Gradient(colors: [.gray, .black.opacity(0.8)])
        }
    }

    var body: some View {
        Button {
            openEdit = true
        } label: {
            LinearGradient(
                gradient: gradientColor,
                startPoint: .topTrailing,
                endPoint: .bottomTrailing
            )
            .overlay { Color.orange.opacity(0.5) }
            .overlay { content }
            .cornerRadius(8)
            .clipped()
            .frame(width: 140, height: 80)
        }
        .overlay {
            if actionManager.artifacts[id] == nil {
                Image(systemName: "xmark.octagon.fill")
                    .foregroundColor(.white)
                    .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topTrailing)
                    .padding(4)
            }
        }
        .buttonStyle(.plain)
        .onHover { hover in
            if hover {
                NSCursor.pointingHand.push()
            } else {
                NSCursor.pop()
            }
        }
        .onReceive(notificationPublisher) { notification in
            guard let notificationId = notification.object as? UUID,
                  notificationId == id
            else {
                return
            }
            openEdit = true
        }
        .sheet(isPresented: $openEdit) {
            ModuleEditView(id: id)
        }
    }

    var content: some View {
        Group {
            if let action = actionManager[id] {
                VStack(spacing: 4) {
                    Image(systemName: action.icon)
                        .font(.system(.headline, design: .rounded))
                        .foregroundColor(.white)
                        .frame(maxWidth: .infinity, alignment: .leading)
                    Spacer()
                    Text(action.name)
                        .font(.system(.headline, design: .rounded))
                        .lineLimit(3)
                        .foregroundColor(.white)
                        .frame(maxWidth: .infinity, alignment: .leading)
                }
                .background(
                    Image(systemName: action.icon)
                        .font(.system(size: 48, weight: .semibold, design: .rounded))
                        .foregroundColor(.white)
                        .opacity(0.1)
                        .offset(x: 50, y: 10)
                )
                .padding(8)
            } else {
                Text("Error").font(.headline)
            }
        }
    }
}


================================================
FILE: App/Action/Action/Interface/ActionModule/ModuleImportView.swift
================================================
//
//  ModuleImportView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/18.
//

import SwiftUI

struct ModuleImportView: View {
    let url: URL

    @Environment(\.presentationMode) var presentationMode

    @State var openEdit: Bool = false
    @State var editingAction: ActionManager.Action.ID? = nil

    var body: some View {
        VStack(alignment: .leading, spacing: 12) {
            Image(systemName: "exclamationmark.triangle.fill")
                .font(.system(size: 42, weight: .semibold, design: .rounded))
                .foregroundColor(.pink)
            Text("You are about to import an untrusted module")
                .font(.system(.headline))
                .foregroundColor(.pink)
            Text("Importing malicious module may damage your system, you are in charge to review this module.")
                .font(.system(.footnote))
                .foregroundColor(.pink)
            HStack {
                Button("Trust & Import") {
                    startImport()
                }
                .keyboardShortcut(.defaultAction)
                .tint(.pink)
                .buttonStyle(.borderedProminent)
                Button("Cancel") {
                    presentationMode.wrappedValue.dismiss()
                }
                .keyboardShortcut(.cancelAction)
            }
            Divider()
            Text(url.path)
                .underline()
                .font(.system(.footnote, design: .monospaced))
                .opacity(0.5)
                .onHover { if $0 { NSCursor.pointingHand.push() } else { NSCursor.pop() }}
                .onTapGesture { NSWorkspace.shared.open(url) }
        }
        .padding()
        .sheet(isPresented: $openEdit) {
            ModuleEditView(id: editingAction ?? .init())
        }
        .onChange(of: openEdit) { newValue in
            if newValue == false, editingAction != nil {
                presentationMode.wrappedValue.dismiss()
            }
        }
        .frame(width: 400)
    }

    func startImport() {
        DispatchQueue.global().async {
            let result = ActionManager.shared.importModule(at: url)
            DispatchQueue.main.async {
                switch result {
                case let .success(action):
                    openEdit = true
                    editingAction = action
                case let .failure(failure):
                    guard let window = NSApp.keyWindow else {
                        presentationMode.wrappedValue.dismiss()
                        return
                    }
                    let alert = NSAlert()
                    alert.alertStyle = .critical
                    alert.messageText = failure.localizedDescription
                    alert.addButton(withTitle: "OK")
                    alert.beginSheetModal(for: window) { _ in
                        presentationMode.wrappedValue.dismiss()
                    }
                }
            }
        }
    }
}


================================================
FILE: App/Action/Action/Interface/ActionModule/ModuleManageView.swift
================================================
//
//  ModuleManageView.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/26.
//

import SwiftUI

struct ModuleManageView: View {
    @ObservedObject var actionManager = ActionManager.shared

    @State var searchKey: String = ""
    @State var openCreate: Bool = false

    @State var importQueue: [URL]? = nil
    @State var importingItem: URL? = nil

    var actions: [ActionManager.Action] {
        if searchKey.isEmpty {
            return actionManager.actions
        } else {
            let key = searchKey.lowercased()
            return actionManager
                .actions
                .filter { $0.name.lowercased().contains(key) }
        }
    }

    var body: some View {
        GeometryReader { r in
            if actionManager.actions.isEmpty {
                VStack(spacing: 12) {
                    Image(systemName: "arrow.up")
                        .font(.system(size: 26, weight: .regular, design: .rounded))
                    Text("Create an action by click plus button on toolbar to process your pasteboard event. Format text, clean up links, speak when copy from special app, send to your device, etc etc. Choose an language you are familiar with to get start.")
                        .font(.system(.subheadline))
                }
                .padding()
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            } else {
                ScrollView {
                    LazyVGrid(columns: [GridItem(.adaptive(minimum: 140, maximum: 140))], alignment: .leading, spacing: 8) {
                        ForEach(actions, id: \.hashValue) { action in
                            ModuleElementView(id: action.id)
                        }
                    }
                    .padding(10)
                    .animation(.interactiveSpring(), value: r.size)
                    .animation(.interactiveSpring(), value: searchKey)
                }
            }
        }
        .sheet(isPresented: $openCreate) { ModuleCreateSheet() }
        .sheet(
            isPresented: Binding<Bool>(
                get: { importingItem != nil },
                set: { opened in
                    importingItem = nil
                    if !opened {
                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                            if !(importQueue?.isEmpty ?? true) {
                                importQueue?.removeFirst()
                            }
                            checkImportQueue()
                        }
                    }
                }
            )
        ) {
            ModuleImportView(url: importingItem ?? URL(fileURLWithPath: "/bad/"))
        }
        .searchable(text: $searchKey)
        .toolbar {
            ToolbarItem {
                Button {
                    openCreate = true
                } label: {
                    Label("Add Action", systemImage: "plus")
                }
                .keyboardShortcut("n", modifiers: .command)
            }
            ToolbarItem {
                Button {
                    importActions()
                } label: {
                    Label("Import Action", systemImage: "square.and.arrow.down")
                }
            }
        }
        .navigationTitle("Module")
        .usePreferredContentSize()
    }

    func checkImportQueue() {
        guard let newValue = importQueue else {
            return
        }
        guard !newValue.isEmpty else {
            importQueue = nil
            importingItem = nil
            return
        }
        importingItem = newValue.first
    }

    func importActions() {
        let panel = NSOpenPanel()
        panel.canChooseDirectories = true
        panel.canChooseFiles = false
        panel.resolvesAliases = true
        panel.treatsFilePackagesAsDirectories = true
        panel.allowsMultipleSelection = true
        guard let window = NSApp.keyWindow else {
            return
        }
        panel.beginSheetModal(for: window) { resp in
            guard resp == .OK,
                  !panel.urls.isEmpty
            else {
                return
            }
            self.importQueue = panel.urls
            self.checkImportQueue()
        }
    }

    func importModule(at: URL) {
        assert(!Thread.isMainThread)
        let sem = DispatchSemaphore(value: 0)
        DispatchQueue.main.async {
            guard let window = NSApp.keyWindow else {
                sem.signal()
                return
            }
            let alert = NSAlert()
            alert.alertStyle = .critical
            alert.messageText = "You are about to import an Action Module which is untrusted with no signature. Importing malicious modules can pose unknown risks and there is no sandbox nor container dealing with it."
            alert.informativeText = at.path
            alert.addButton(withTitle: "Trust And Import")
            alert.addButton(withTitle: "Cancel")
            alert.beginSheetModal(for: window) { resp in
                guard resp == .alertFirstButtonReturn else {
                    sem.signal()
                    return
                }
                DispatchQueue.global().async {
                    let result = actionManager.importModule(at: at)
                    if case let .failure(failure) = result {
                        print(failure.localizedDescription)
                        let sem2 = DispatchSemaphore(value: 0)
                        DispatchQueue.main.async {
                            let alert = NSAlert()
                            alert.alertStyle = .critical
                            alert.messageText = "Failed to import this module"
                            alert.informativeText = failure.localizedDescription
                            alert.beginSheetModal(for: window) { _ in sem2.signal() }
                        }
                        sem2.wait()
                    }
                    sem.signal()
                }
            }
        }
        sem.wait()
    }
}


================================================
FILE: App/Action/Action/Interface/Effect/RandomCodeTextView.swift
================================================
//
//  RandomCodeTextView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import SwiftUI

struct RandomCodeTextView: View {
    @State var code = "Made with love by @Lakr233 "

    let timer = Timer
        .publish(every: 0.1, on: .main, in: .common)
        .autoconnect()

    var body: some View {
        Text(code)
            .font(.system(.footnote, design: .monospaced))
            .lineLimit(1)
            .onReceive(timer) { _ in
                if code.count > 50 { code = "" }
                for _ in 0 ... Int.random(in: 1 ... 3) {
                    if let c = "`1234567890-=qwertyuiop[]asdfghjkl;'\\zxcvbnm,./".randomElement() {
                        code += String(c)
                    }
                }
            }
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/ApplicationView.swift
================================================
//
//  ApplicationView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import SwiftUI

struct ApplicationView: View {
    let appId: String

    var body: some View {
        Group {
            if let url = NSWorkspace
                .shared
                .urlForApplication(withBundleIdentifier: appId),
                let bundle = Bundle(url: url)
            {
                HStack(spacing: 4) {
                    Image(nsImage: NSWorkspace.shared.icon(forFile: url.path))
                        .resizable()
                        .antialiased(true)
                        .frame(width: 24, height: 24)
                        .cornerRadius(4)
                        .clipped()
                    VStack(alignment: .leading, spacing: 2) {
                        Text(bundle.infoDictionary?[kCFBundleNameKey as String] as? String ?? "Unknown Name")
                            .font(.system(size: 10, weight: .semibold, design: .rounded))
                            .lineLimit(1)
                        Text(appId)
                            .font(.system(size: 6, weight: .semibold, design: .monospaced))
                            .lineLimit(1)
                    }
                }
            } else {
                HStack(spacing: 4) {
                    Image(systemName: "questionmark.app.dashed")
                        .font(.system(size: 16, weight: .regular, design: .rounded))
                    Text(appId)
                        .font(.system(size: 10, weight: .semibold, design: .rounded))
                }
            }
        }
        .frame(height: 26)
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/DiagnosticLogView.swift
================================================
//
//  DiagnosticLogView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/15.
//

import SwiftUI

class Logger: ObservableObject {
    fileprivate static let shared = Logger()

    private let logCountLimitation = 4096

    private init() {
        logs.reserveCapacity(logCountLimitation + 1)
    }

    struct Log: Identifiable, Equatable {
        var id: UUID = .init()
        var message: String
    }

    @Published var logs: [Log] = []
    private var logsLock = NSLock()

    fileprivate func append(_ str: String) {
        DispatchQueue.global().async { [self] in
            logsLock.lock()
            var read = logs
            read.append(.init(message: str))
            if read.count > logCountLimitation {
                read.removeFirst(read.count - logCountLimitation)
            }
            DispatchQueue.withMainAndWait {
                self.logs = read
            }
            logsLock.unlock()
        }
    }
}

// overwrite print function
func print(_ str: String) {
    let str = str.trimmingCharacters(in: .newlines)
    Swift.print(str)
    Logger.shared.append(str)
}

struct DiagnosticLogView: View {
    @StateObject var logger = Logger.shared

    @State var highlight: Logger.Log.ID?
    @State var searchKey: String = ""

    var logs: [Logger.Log] {
        if searchKey.count > 0 {
            let key = searchKey.lowercased()
            return logger
                .logs
                .filter { $0.message.lowercased().contains(key) }
        } else {
            return logger.logs
        }
    }

    var body: some View {
        ScrollView(.vertical, showsIndicators: true) {
            ScrollViewReader { reader in
                LazyVStack(alignment: .leading, spacing: 0) {
                    ForEach(logs) { log in
                        ScrollView(.horizontal, showsIndicators: false) {
                            Text(log.message)
                                .textSelection(.enabled)
                        }
                        .frame(maxWidth: .infinity)
                        .padding(2)
                        .background(
                            RoundedRectangle(cornerRadius: 4)
                                .foregroundColor(.accentColor)
                                .opacity(highlight == log.id ? 0.1 : 0)
                                .animation(.interactiveSpring(), value: highlight)
                        )
                        .tag(log.id)
                        .onHover { hover in
                            if hover {
                                highlight = log.id
                            } else {
                                highlight = nil
                            }
                        }
                    }
                    .font(.system(size: 10, weight: .regular, design: .monospaced))
                }
                .padding(10)
                .onChange(of: logger.logs) { newValue in
                    guard let id = newValue.last?.id else {
                        return
                    }
                    withAnimation(.interactiveSpring()) {
                        reader.scrollTo(id)
                    }
                }
            }
        }
        .searchable(text: $searchKey)
        .toolbar {
            ToolbarItem {
                Button {
                    let panel = NSSavePanel()
                    panel.nameFieldStringValue = "ActionBee Diagnostic \(Int(Date().timeIntervalSince1970)).log"
                    guard let window = NSApp.keyWindow else {
                        return
                    }
                    panel.beginSheetModal(for: window) { resp in
                        guard resp == .OK, let url = panel.url else {
                            return
                        }
                        let logs = logger.logs.map(\.message).joined(separator: "\n")
                        try? logs.write(toFile: url.path, atomically: true, encoding: .utf8)
                    }
                } label: {
                    Label("Share", systemImage: "square.and.arrow.up")
                }
            }
        }
        .navigationTitle("Diagnostic")
        .usePreferredContentSize()
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/HistoryView.swift
================================================
//
//  HistoryView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import SwiftUI

struct HistoryView: View {
    @StateObject var actionManager = ActionManager.shared

    @State var searchKey = ""
    @State var hoverId: ActionManager.HistoryElement.ID? = nil

    var histories: [ActionManager.HistoryElement] {
        if searchKey.isEmpty {
            return actionManager.histories
        }
        let key = searchKey.lowercased()
        return actionManager
            .histories
            .filter { $0.search(with: key) }
    }

    var body: some View {
        Group {
            if histories.isEmpty {
                VStack(spacing: 12) {
                    Image(systemName: "rectangle.dashed.badge.record")
                        .font(.system(size: 26, weight: .regular, design: .rounded))
                    Text("No History Was Found")
                        .font(.system(.footnote))
                }
                .padding()
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            } else {
                ScrollView {
                    LazyVStack(spacing: 2) {
                        ForEach(histories.reversed()) { record in
                            HStack(alignment: .top, spacing: 6) {
                                Text("> ")
                                    .font(.system(.subheadline, design: .rounded))
                                Divider()
                                HistoryRecordView(record: record)
                            }
                            .frame(maxWidth: .infinity)
                            .padding(2)
                            .background(Color.accentColor.opacity(record.id == hoverId ? 0.1 : 0))
                            .cornerRadius(8)
                            .onHover { hover in
                                hoverId = hover ? record.id : nil
                            }
                        }
                    }
                    .padding(10)
                }
                .animation(.interactiveSpring(), value: hoverId)
                .animation(.interactiveSpring(), value: searchKey)
            }
        }

        .toolbar {
            ToolbarItem {
                Button { clearHistory() } label: {
                    Label("Clear History", systemImage: "xmark.circle")
                }
            }
        }
        .searchable(text: $searchKey)
        .navigationTitle("History")
        .usePreferredContentSize()
    }

    func clearHistory() {
        let alert = NSAlert()
        alert.alertStyle = .critical
        alert.messageText = NSLocalizedString("Are you sure you want to delete all history records? This operation can not be undone.", comment: "")
        alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
        alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
        guard let window = NSApp.keyWindow else {
            return
        }
        alert.beginSheetModal(for: window) { resp in
            guard resp == .alertFirstButtonReturn else {
                return
            }
            actionManager.histories = []
        }
    }
}

struct HistoryRecordView: View {
    let record: ActionManager.HistoryElement
    var body: some View {
        VStack(alignment: .leading, spacing: 4) {
            Text("Pasteboard Event")
                .font(.system(.subheadline, design: .monospaced))
                .bold()
            Text("Length: \(record.event.content.count) Action Candidates: \(record.actionCandidates.count)")
            if !record.succeedAction.isEmpty {
                Divider()
                ForEach(record.succeedAction) { item in
                    Text("+ [\(ActionManager.shared[item.action]?.name ?? "Deleted Action")]")
                    Text("  Post Action: \(item.recipeAction)")
                    ScrollView(.horizontal, showsIndicators: false) {
                        Text("  Content: \(item.recipeContent)").lineLimit(1)
                    }
                }
                .foregroundColor(.blue)
            }
            if !record.failedAction.isEmpty {
                Divider()
                ForEach(record.failedAction) { item in
                    Text("- [\(ActionManager.shared[item.action]?.name ?? "Deleted Action")]")
                    Text("  \(item.errorHint)")
                }
                .foregroundColor(.pink)
            }
            Divider()
            Text(record.date.formatted(date: .complete, time: .complete))
                .opacity(0.5)
        }
        .font(.system(.footnote, design: .monospaced))
        .frame(maxWidth: .infinity, alignment: .leading)
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/LicenseView.swift
================================================
//
//  LicenseView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/17.
//

import SwiftUI

struct LicenseView: View {
    @State var agreed = false
    @Environment(\.presentationMode) var presentationMode

    var licenseText: String {
        guard let url = Bundle.main.url(forResource: "License", withExtension: "txt"),
              let text = try? String(contentsOfFile: url.path)
        else {
            return "This app's bundle is broken, do not use it."
        }
        return text
    }

    var body: some View {
        VStack(alignment: .leading, spacing: 8) {
            Label("Software License", systemImage: "flag.2.crossed")
                .font(.system(.headline, design: .rounded))
            Divider()
            ScrollView {
                Text(licenseText)
                    .font(.system(.subheadline, design: .rounded))
            }
            .frame(maxHeight: 250)
            Divider()
            HStack {
                Toggle("I understand and agree to this license.", isOn: $agreed)
                Spacer()
                Button("Done") {
                    ActionApp.agreeToLicense = agreed
                    presentationMode.wrappedValue.dismiss()
                }
                .disabled(!agreed)
                .buttonStyle(.borderedProminent)
                .keyboardShortcut(.defaultAction)
            }
        }
        .padding()
        .task {
            agreed = ActionApp.agreeToLicense
        }
        .onChange(of: agreed) { newValue in
            if !newValue {
                ActionApp.agreeToLicense = false
            }
        }
        .frame(width: 450, alignment: .center)
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/MainView.swift
================================================
//
//  ContentView.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import SwiftUI

struct MainView: View {
    @State var openArgumentsSeet: Bool = false

    var body: some View {
        NavigationView {
            SidebarView()
            WelcomeView()
        }
        .navigationTitle("Action Bee")
        .toolbar {
            ToolbarItem(placement: .navigation) {
                Button {
                    NSApp.keyWindow?.firstResponder?.tryToPerform(
                        #selector(NSSplitViewController.toggleSidebar(_:)),
                        with: nil
                    )
                } label: {
                    Label("Toggle Sidebar", systemImage: "sidebar.leading")
                }
            }
        }
        .sheet(isPresented: $openArgumentsSeet) {
            LicenseView()
        }
        .task {
            _ = Menubar.shared
        }
        .task {
            checkRequirements()
        }
        .onChange(of: openArgumentsSeet) { newValue in
            if !newValue { checkRequirements() }
        }
    }

    func checkRequirements() {
        guard ActionApp.agreeToLicense else {
            openArgumentsSeet = true
            return
        }
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/SettingView.swift
================================================
//
//  SettingView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/17.
//

import SwiftUI

struct SettingView: View {
    @StateObject var config = Config.shared
    @State var showLicense = false

    var body: some View {
        ScrollView {
            VStack(alignment: .leading, spacing: 10) {
                Section {
                    Toggle("Pasteboard Deduplicate", isOn: $config.pasteboardDeduplicate)
                        .font(.subheadline)
                    Text("Pasteboard content matches previous will not generate event if on")
                        .font(.footnote)
                    Toggle("Silent Mode", isOn: $config.silentMode)
                        .font(.subheadline)
                    Text("Do not show popover after action triggered")
                        .font(.footnote)
                    Toggle("Toast Mode", isOn: $config.toastMode)
                        .font(.subheadline)
                        .disabled(config.silentMode)
                    Text("Use toast instead of popover on menubar")
                        .font(.footnote)
                        .opacity(config.silentMode ? 0.25 : 1)
                    Toggle("Reduced UI Effects", isOn: $config.reducedEffects)
                        .font(.subheadline)
                    Text("Turning off visual effects does not affect app's core functionality")
                        .font(.footnote)
                } header: {
                    Text("Application")
                        .font(.system(.headline, design: .rounded))
                } footer: {
                    Divider()
                }
                Label("EOF", systemImage: "text.append")
                    .font(.system(.caption2, design: .rounded))
            }
            .padding(10)
        }
        .toolbar {
            ToolbarItem {
                Button {
                    NSWorkspace.shared.open(URL(string: "https://github.com/Lakr233/ActionBee")!)
                } label: {
                    Label("Get Source Code", systemImage: "chevron.left.forwardslash.chevron.right")
                }
            }
            ToolbarItem {
                Button {
                    showLicense = true
                } label: {
                    Label("License", systemImage: "flag.2.crossed")
                }
                .sheet(isPresented: $showLicense) {
                    LicenseView()
                }
            }
        }
        .navigationTitle("Setting")
        .usePreferredContentSize()
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/SidebarView.swift
================================================
//
//  SidebarView.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import SwiftUI

#if DEBUG
    private let stubNavigationTarget: some View = Text("Hello World")
        .usePreferredContentSize()
#endif

struct SidebarView: View {
    var body: some View {
        List {
            Section("App") {
                NavigationLink {
                    WelcomeView()
                } label: {
                    Label("Welcome", systemImage: "sun.min.fill")
                }
            }

            Section("Action") {
                NavigationLink {
                    ModuleManageView()
                } label: {
                    Label("Module", systemImage: "tray.full")
                }
                NavigationLink {
                    HistoryView()
                } label: {
                    Label("History", systemImage: "clock")
                }
            }

            Section("Misc") {
                NavigationLink {
                    SettingView()
                } label: {
                    Label("Setting", systemImage: "gear")
                }
                NavigationLink {
                    DiagnosticLogView()
                } label: {
                    Label("Diagnostic", systemImage: "heart.text.square")
                }
            }
        }
        .listStyle(SidebarListStyle())
    }
}


================================================
FILE: App/Action/Action/Interface/Generic/WelcomeView.swift
================================================
//
//  WelcomeView.swift
//  Action
//
//  Created by Lakr Aream on 2022/7/25.
//

import Colorful
import SwiftUI

struct WelcomeView: View {
    @State var config = Config.shared

    var version: String {
        var ret = "Version: " +
            (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown")
            + " Build: " +
            (Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown")
        #if DEBUG
            ret = "👾 \(ret) 👾"
        #endif
        return ret
    }

    var body: some View {
        ZStack {
            if !config.reducedEffects {
                ColorfulView(colors: [.accentColor], colorCount: 4)
                    .ignoresSafeArea()
            }
            VStack(spacing: 4) {
                Image("Avatar")
                    .antialiased(true)
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 128, height: 128)

                Spacer().frame(height: 16)

                Text("Welcome to Action Bee")
                    .font(.system(.headline, design: .rounded))
                Text("A programmable pasteboard action trigger.")
                    .font(.system(.body, design: .rounded))

                Spacer().frame(height: 24)
            }

            VStack {
                Spacer()
                Text(version)
                    .font(.system(size: 12, weight: .semibold, design: .rounded))
                    .opacity(0.5)
            }
        }
        .padding()
        .navigationTitle("Action Bee")
        .usePreferredContentSize()
    }
}


================================================
FILE: App/Action/Action/Interface/Menubar/Menubar.swift
================================================
//
//  Menubar.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Cocoa
import SwiftUI

class Menubar: ObservableObject {
    static let shared = Menubar()

    var popover: NSPopover
    var statusItem: NSStatusItem?
    var eventMonitor: EventMonitor?

    private init() {
        let statusItem = NSStatusBar
            .system
            .statusItem(withLength: NSStatusItem.variableLength)
        statusItem.button?.action = #selector(togglePopover(sender:))
        self.statusItem = statusItem
        let buildPopover = NSPopover()
        popover = buildPopover
        let view = MenubarView()
        buildPopover.contentViewController = NSHostingController(rootView: view)
        eventMonitor = EventMonitor(mask: [.leftMouseDown, .rightMouseDown], handler: mouseEventHandler)

        statusItem.button?.title = "🎉"
        statusItem.button?.target = self
    }

    func showPopover(_: AnyObject? = nil) {
        if let statusBarButton = statusItem?.button {
            popover.show(relativeTo: statusBarButton.bounds, of: statusBarButton, preferredEdge: NSRectEdge.maxY)
            eventMonitor?.start()
        }
    }

    func hidePopover(_ sender: AnyObject? = nil) {
        popover.performClose(sender)
        eventMonitor?.stop()
    }

    func mouseEventHandler(_ event: NSEvent?) {
        if popover.isShown, let event = event {
            hidePopover(event)
        }
    }

    @objc
    func togglePopover(sender: AnyObject) {
        if popover.isShown {
            hidePopover(sender)
        } else {
            showPopover(sender)
        }
    }

    enum TitleType: String {
        case ready = "🎉"
        case running = "💨"
    }

    private let titleThrottle = Throttle(minimumDelay: 0.5, queue: .main)
    func switchTitle(status: TitleType) {
        titleThrottle.throttle {
            self.statusItem?.button?.title = status.rawValue
        }
    }
}

extension Menubar {
    class EventMonitor {
        private var monitor: Any?
        private let mask: NSEvent.EventTypeMask
        private let handler: (NSEvent?) -> Void

        public init(mask: NSEvent.EventTypeMask, handler: @escaping (NSEvent?) -> Void) {
            self.mask = mask
            self.handler = handler
        }

        deinit {
            stop()
        }

        public func start() {
            monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler) as! NSObject
        }

        public func stop() {
            if monitor != nil {
                NSEvent.removeMonitor(monitor!)
                monitor = nil
            }
        }
    }
}


================================================
FILE: App/Action/Action/Interface/Menubar/MenubarView.swift
================================================
//
//  MenubarView.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/16.
//

import Colorful
import SwiftUI

struct MenubarView: View {
    @StateObject var menubar = Menubar.shared
    @StateObject var actionManager = ActionManager.shared

    var lastHistory: ActionManager.HistoryElement? {
        if let last = actionManager.histories.last,
           last.date > ActionApp.bootTime
        {
            return last
        }
        return nil
    }

    var body: some View {
        ZStack {
            if actionManager.actionRunning {
                ZStack {
                    VStack(spacing: 20) {
                        ProgressView()
                        Text(actionManager.actionRunningHint)
                            .font(.system(.subheadline, design: .monospaced))
                    }
                }
                .frame(width: 400, height: 200)
            } else if let lastHistory = lastHistory {
                VStack {
                    Spacer().frame(height: 16)
                    Image(
                        systemName: lastHistory.failedAction.isEmpty
                            ? "checkmark.circle.fill"
                            : "checkmark.circle.trianglebadge.exclamationmark"
                    )
                    .foregroundColor(lastHistory.failedAction.isEmpty ? .green : .orange)
                    .font(.system(size: 36, weight: .semibold, design: .rounded))
                    Spacer().frame(height: 16)
                    HistoryRecordView(record: lastHistory)
                    Divider().hidden()
                }
                .padding()
                .frame(width: 400)
            } else {
                VStack(alignment: .leading, spacing: 8) {
                    Image("Avatar")
                        .antialiased(true)
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .frame(width: 50, height: 50)
                    HStack {
                        Image(systemName: "circle.fill")
                            .font(.headline)
                            .foregroundColor(.green)
                        Text("ActionBee is ready to accept pasteboard events.")
                            .font(.headline)
                    }

                    RandomCodeTextView()
                    Divider().hidden()
                }
                .padding()
                .frame(width: 400, height: 200)
            }
        }
    }
}


================================================
FILE: App/Action/Action/Interface/Toast/Toast.swift
================================================
//
//  Toast.swift
//  Action
//
//  Created by Lakr Aream on 2022/8/17.
//

import Cocoa
import Foundation
import SwiftUI

private class ToastWindow: NSWindow {
    init(with screen: NSScreen) {
        super.init(
            contentRect: screen.frame,
            styleMask: [.borderless, .fullSizeContentView],
            backing: .buffered,
            defer: false
        )

        isOpaque = false
        alphaValue = 1

        titleVisibility = .hidden
        titlebarAppearsTransparent = true

        backgroundColor = .clear

        ignoresMouseEvents = true
        isMovable = false
        isMovableByWindowBackground = false

        // .fullScreenAuxiliary .stationary .canJoinAllSpaces
        collectionBehavior = NSWindow.CollectionBehavior(rawValue: 273)
        styleMask = .borderless

        // The standard ScreenSaverView class actually sets the window
        // level to 2002, not the 1000 defined by NSScreenSaverWindowLevel
        // and kCGScreenSaverWindowLevel
        /// https://github.com/genekogan/ofxScreenGrab/blob/master/src/macGlutfix.m
        level = NSWindow.Level(rawValue: 2005)

        setFrameOrigin(screen.frame.origin)

        makeKeyAndOrderFront(nil)
        hasShadow = false
    }
}

private class ToastWindowController: NSWindowController {
    init(with screen: NSScreen, systemIcon: String, message: String) {
        super.init(window: ToastWindow(with: screen))
        contentViewController = NSHostingController(
            rootView: ToastView(systemIcon: systemIcon, message: message)
        )
    }

    @available(*, unavailable)
    required init(coder _: NSCoder) {
        fatalError()
    }
}

struct ToastView: View {
    let systemIcon: String
    let message: String

    @State var opacity: Double = 1

    var body: some View {
        GeometryReader { _ in
            HStack {
                Spacer()
                VStack {
                    Spacer()
                    Spacer()
                    Spacer()
                    Spacer()
                    content
                    Spacer()
                }
                Spacer()
            }
        }
        .opacity(opacity)
        .animation(.interactiveSpring(), value: opacity)
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
                opacity = 0
            }
        }
    }

    var content: some View {
        VStack(alignment: .center, spacing: 12) {
            Image(systemName: systemIcon)
                .font(.system(size: 36, weight: .bold, design: .rounded))
            Text(message)
                .font(.system(.headline, design: .rounded))
        }
        .padding()
        .background(.regularMaterial)
        .cornerRadius(8)
    }
}

enum Toast {
    static func post(systemIcon: String, message: String) {
        guard let screen = NSScreen.main else {
            return
        }
        let windowController = ToastWindowController(
            with: screen,
            systemIcon: systemIcon,
            message: message
        )
        windowController.window?.setFrameOrigin(screen.frame.origin)
        windowController.window?.setContentSize(screen.frame.size)
        windowController.window?.makeKeyAndOrderFront(nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            windowController.window?.close()
        }
    }
}


================================================
FILE: App/Action/Action.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 55;
	objects = {

/* Begin PBXBuildFile section */
		13C6C62128AF1BF0008ADA60 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 13C6C62328AF1BF0008ADA60 /* Localizable.strings */; };
		1F6BCF0628B219B400C2B417 /* Template+Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6BCF0528B219B400C2B417 /* Template+Node.swift */; };
		5001740128AA557100FF9B99 /* UserDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5001740028AA557100FF9B99 /* UserDefault.swift */; };
		5001740528AA818500FF9B99 /* DiagnosticLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5001740428AA818500FF9B99 /* DiagnosticLogView.swift */; };
		5006F55E28A9663100C8ADBE /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5006F55D28A9663100C8ADBE /* Notification.swift */; };
		5006F56028A9683C00C8ADBE /* DispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5006F55F28A9683C00C8ADBE /* DispatchQueue.swift */; };
		502D1F0A28A8F88D0022CCD3 /* ActionTemplates in Resources */ = {isa = PBXBuildFile; fileRef = 502D1F0928A8F88D0022CCD3 /* ActionTemplates */; };
		502E87A328AA954500CAB5E1 /* ModuleEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 502E87A228AA954500CAB5E1 /* ModuleEditView.swift */; };
		502E87A528AA95BF00CAB5E1 /* ModuleElementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 502E87A428AA95BF00CAB5E1 /* ModuleElementView.swift */; };
		5030D80828ABDD72001A96B5 /* ActionManager+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D80728ABDD72001A96B5 /* ActionManager+History.swift */; };
		5030D80A28ABE953001A96B5 /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D80928ABE953001A96B5 /* HistoryView.swift */; };
		5030D80C28ABEF64001A96B5 /* ApplicationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D80B28ABEF64001A96B5 /* ApplicationView.swift */; };
		5030D80E28ABFA82001A96B5 /* SettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D80D28ABFA82001A96B5 /* SettingView.swift */; };
		5030D81028AC0045001A96B5 /* LicenseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D80F28AC0045001A96B5 /* LicenseView.swift */; };
		5030D81228AC01A7001A96B5 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5030D81128AC01A7001A96B5 /* License.txt */; };
		5030D81628AC090A001A96B5 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5030D81528AC090A001A96B5 /* Config.swift */; };
		503976FA28AE143600588622 /* ModuleImportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503976F928AE143600588622 /* ModuleImportView.swift */; };
		5053CF85288F724E00A92822 /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF84288F724E00A92822 /* Executor.swift */; };
		5053CF87288F764000A92822 /* ModuleManageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF86288F764000A92822 /* ModuleManageView.swift */; };
		5053CF8A288F76E700A92822 /* PasteboardManager+Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF89288F76E700A92822 /* PasteboardManager+Event.swift */; };
		5053CF91288F776000A92822 /* ActionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF90288F776000A92822 /* ActionManager.swift */; };
		5053CF93288F788B00A92822 /* ActionManager+Module.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF92288F788B00A92822 /* ActionManager+Module.swift */; };
		5053CF9A288F9A5E00A92822 /* ModuleCreateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053CF99288F9A5E00A92822 /* ModuleCreateView.swift */; };
		5053CF9C288F9D8700A92822 /* SymbolPicker in Frameworks */ = {isa = PBXBuildFile; productRef = 5053CF9B288F9D8700A92822 /* SymbolPicker */; };
		505A10A828A95EC200D46DB3 /* ActionManager+Template.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505A10A728A95EC200D46DB3 /* ActionManager+Template.swift */; };
		5067392628AB786A003A6A9C /* Template+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067392528AB786A003A6A9C /* Template+Swift.swift */; };
		5067392B28AB7A51003A6A9C /* ActionManager+Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067392A28AB7A51003A6A9C /* ActionManager+Event.swift */; };
		5067392D28AB7D6C003A6A9C /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067392C28AB7D6C003A6A9C /* Result.swift */; };
		5067393228AB8E55003A6A9C /* RandomCodeTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067393128AB8E55003A6A9C /* RandomCodeTextView.swift */; };
		5067393428ABA328003A6A9C /* ActionManager+Artifact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067393328ABA328003A6A9C /* ActionManager+Artifact.swift */; };
		5067393628ABA422003A6A9C /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 5067393528ABA422003A6A9C /* KeychainAccess */; };
		5067393828ABA445003A6A9C /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067393728ABA445003A6A9C /* AES.swift */; };
		5067393C28ABA89D003A6A9C /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067393B28ABA89D003A6A9C /* Data.swift */; };
		5067394128ABC9C3003A6A9C /* Menubar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067394028ABC9C3003A6A9C /* Menubar.swift */; };
		5067394328ABCB18003A6A9C /* MenubarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5067394228ABCB18003A6A9C /* MenubarView.swift */; };
		507137EC288E934000C23E7F /* ActionApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507137EB288E934000C23E7F /* ActionApp.swift */; };
		507137EE288E934000C23E7F /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507137ED288E934000C23E7F /* MainView.swift */; };
		507137F0288E934100C23E7F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 507137EF288E934100C23E7F /* Assets.xcassets */; };
		507137FC288E935A00C23E7F /* AuxiliaryExecute in Frameworks */ = {isa = PBXBuildFile; productRef = 507137FB288E935A00C23E7F /* AuxiliaryExecute */; };
		507137FE288E935A00C23E7F /* Colorful in Frameworks */ = {isa = PBXBuildFile; productRef = 507137FD288E935A00C23E7F /* Colorful */; };
		50713803288E976600C23E7F /* AppSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50713802288E976600C23E7F /* AppSetup.swift */; };
		50713808288E9C0C00C23E7F /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50713807288E9C0C00C23E7F /* View.swift */; };
		5071380A288E9C8100C23E7F /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50713809288E9C8100C23E7F /* WelcomeView.swift */; };
		5071380C288E9C8800C23E7F /* SidebarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5071380B288E9C8800C23E7F /* SidebarView.swift */; };
		5071380E288E9D8A00C23E7F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5071380D288E9D8A00C23E7F /* AppDelegate.swift */; };
		50A7D7FE28ACCB4C004F0B34 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A7D7FD28ACCB4C004F0B34 /* Throttle.swift */; };
		50A7D80128ACCE23004F0B34 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A7D80028ACCE23004F0B34 /* Toast.swift */; };
		50A7D80328ACD14B004F0B34 /* Template+Executable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A7D80228ACD14B004F0B34 /* Template+Executable.swift */; };
		50BCF6AC288EE81000A97B4C /* PasteboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BCF6AB288EE81000A97B4C /* PasteboardManager.swift */; };
		50BCF6AE288F01EF00A97B4C /* StatusBarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BCF6AD288F01EF00A97B4C /* StatusBarManager.swift */; };
		50E5204228BE04FC00C3228F /* Template+Python.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E5204128BE04FC00C3228F /* Template+Python.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		13C6C62228AF1BF0008ADA60 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
		13C6C62428AF1DEB008ADA60 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
		1F6BCF0528B219B400C2B417 /* Template+Node.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Template+Node.swift"; sourceTree = "<group>"; };
		5001740028AA557100FF9B99 /* UserDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefault.swift; sourceTree = "<group>"; };
		5001740428AA818500FF9B99 /* DiagnosticLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticLogView.swift; sourceTree = "<group>"; };
		5006F55D28A9663100C8ADBE /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
		5006F55F28A9683C00C8ADBE /* DispatchQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DispatchQueue.swift; sourceTree = "<group>"; };
		502D1F0928A8F88D0022CCD3 /* ActionTemplates */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ActionTemplates; sourceTree = "<group>"; };
		502E87A228AA954500CAB5E1 /* ModuleEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleEditView.swift; sourceTree = "<group>"; };
		502E87A428AA95BF00CAB5E1 /* ModuleElementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleElementView.swift; sourceTree = "<group>"; };
		5030D80728ABDD72001A96B5 /* ActionManager+History.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActionManager+History.swift"; sourceTree = "<group>"; };
		5030D80928ABE953001A96B5 /* HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryView.swift; sourceTree = "<group>"; };
		5030D80B28ABEF64001A96B5 /* ApplicationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationView.swift; sourceTree = "<group>"; };
		5030D80D28ABFA82001A96B5 /* SettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = "<group>"; };
		5030D80F28AC0045001A96B5 /* LicenseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseView.swift; sourceTree = "<group>"; };
		5030D81128AC01A7001A96B5 /* License.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
		5030D81528AC090A001A96B5 /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
		503976F928AE143600588622 /* ModuleImportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleImportView.swift; sourceTree = "<group>"; };
		5053CF84288F724E00A92822 /* Executor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Executor.swift; sourceTree = "<group>"; };
		5053CF86288F764000A92822 /* ModuleManageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleManageView.swift; sourceTree = "<group>"; };
		5053CF89288F76E700A92822 /* PasteboardManager+Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PasteboardManager+Event.swift"; sourceTree = "<group>"; };
		5053CF90288F776000A92822 /* ActionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionManager.swift; sourceTree = "<group>"; };
		5053CF92288F788B00A92822 /* ActionManager+Module.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActionManager+Module.swift"; sourceTree = "<group>"; };
		5053CF99288F9A5E00A92822 /* ModuleCreateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModuleCreateView.swift; sourceTree = "<group>"; };
		505A10A728A95EC200D46DB3 /* ActionManager+Template.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActionManager+Template.swift"; sourceTree = "<group>"; };
		5067392528AB786A003A6A9C /* Template+Swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Template+Swift.swift"; sourceTree = "<group>"; };
		5067392A28AB7A51003A6A9C /* ActionManager+Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActionManager+Event.swift"; sourceTree = "<group>"; };
		5067392C28AB7D6C003A6A9C /* Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = "<group>"; };
		5067393128AB8E55003A6A9C /* RandomCodeTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RandomCodeTextView.swift; sourceTree = "<group>"; };
		5067393328ABA328003A6A9C /* ActionManager+Artifact.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActionManager+Artifact.swift"; sourceTree = "<group>"; };
		5067393728ABA445003A6A9C /* AES.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AES.swift; sourceTree = "<group>"; };
		5067393B28ABA89D003A6A9C /* Data.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = "<group>"; };
		5067394028ABC9C3003A6A9C /* Menubar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Menubar.swift; sourceTree = "<group>"; };
		5067394228ABCB18003A6A9C /* MenubarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenubarView.swift; sourceTree = "<group>"; };
		507137E8288E934000C23E7F /* Action.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Action.app; sourceTree = BUILT_PRODUCTS_DIR; };
		507137EB288E934000C23E7F /* ActionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionApp.swift; sourceTree = "<group>"; };
		507137ED288E934000C23E7F /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = "<group>"; };
		507137EF288E934100C23E7F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		507137F4288E934100C23E7F /* Action.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Action.entitlements; sourceTree = "<group>"; };
		50713802288E976600C23E7F /* AppSetup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSetup.swift; sourceTree = "<group>"; };
		50713807288E9C0C00C23E7F /* View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = "<group>"; };
		50713809288E9C8100C23E7F /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = "<group>"; };
		5071380B288E9C8800C23E7F /* SidebarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarView.swift; sourceTree = "<group>"; };
		5071380D288E9D8A00C23E7F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		50A7D7FD28ACCB4C004F0B34 /* Throttle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Throttle.swift; sourceTree = "<group>"; };
		50A7D80028ACCE23004F0B34 /* Toast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = "<group>"; };
		50A7D80228ACD14B004F0B34 /* Template+Executable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Template+Executable.swift"; sourceTree = "<group>"; };
		50BCF6AB288EE81000A97B4C /* PasteboardManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteboardManager.swift; sourceTree = "<group>"; };
		50BCF6AD288F01EF00A97B4C /* StatusBarManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBarManager.swift; sourceTree = "<group>"; };
		50E5204128BE04FC00C3228F /* Template+Python.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Template+Python.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		507137E5288E934000C23E7F /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				507137FE288E935A00C23E7F /* Colorful in Frameworks */,
				507137FC288E935A00C23E7F /* AuxiliaryExecute in Frameworks */,
				5053CF9C288F9D8700A92822 /* SymbolPicker in Frameworks */,
				5067393628ABA422003A6A9C /* KeychainAccess in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		502E87A628AA95DF00CAB5E1 /* ActionModule */ = {
			isa = PBXGroup;
			children = (
				5053CF86288F764000A92822 /* ModuleManageView.swift */,
				503976F928AE143600588622 /* ModuleImportView.swift */,
				502E87A428AA95BF00CAB5E1 /* ModuleElementView.swift */,
				5053CF99288F9A5E00A92822 /* ModuleCreateView.swift */,
				502E87A228AA954500CAB5E1 /* ModuleEditView.swift */,
			);
			path = ActionModule;
			sourceTree = "<group>";
		};
		502E87A728AA95E800CAB5E1 /* Generic */ = {
			isa = PBXGroup;
			children = (
				507137ED288E934000C23E7F /* MainView.swift */,
				5071380B288E9C8800C23E7F /* SidebarView.swift */,
				50713809288E9C8100C23E7F /* WelcomeView.swift */,
				5030D80928ABE953001A96B5 /* HistoryView.swift */,
				5030D80D28ABFA82001A96B5 /* SettingView.swift */,
				5001740428AA818500FF9B99 /* DiagnosticLogView.swift */,
				5030D80F28AC0045001A96B5 /* LicenseView.swift */,
				5030D80B28ABEF64001A96B5 /* ApplicationView.swift */,
			);
			path = Generic;
			sourceTree = "<group>";
		};
		5030D81428AC08FC001A96B5 /* Config */ = {
			isa = PBXGroup;
			children = (
				5030D81528AC090A001A96B5 /* Config.swift */,
			);
			path = Config;
			sourceTree = "<group>";
		};
		5053CF88288F76CC00A92822 /* PasteboardManager */ = {
			isa = PBXGroup;
			children = (
				50BCF6AB288EE81000A97B4C /* PasteboardManager.swift */,
				5053CF89288F76E700A92822 /* PasteboardManager+Event.swift */,
			);
			path = PasteboardManager;
			sourceTree = "<group>";
		};
		5053CF8B288F770B00A92822 /* StatusBarManager */ = {
			isa = PBXGroup;
			children = (
				50BCF6AD288F01EF00A97B4C /* StatusBarManager.swift */,
			);
			path = StatusBarManager;
			sourceTree = "<group>";
		};
		5053CF8C288F771500A92822 /* Executor */ = {
			isa = PBXGroup;
			children = (
				5053CF84288F724E00A92822 /* Executor.swift */,
			);
			path = Executor;
			sourceTree = "<group>";
		};
		5053CF8D288F771C00A92822 /* Action */ = {
			isa = PBXGroup;
			children = (
				5053CF90288F776000A92822 /* ActionManager.swift */,
				5030D80728ABDD72001A96B5 /* ActionManager+History.swift */,
				5053CF92288F788B00A92822 /* ActionManager+Module.swift */,
				5067393328ABA328003A6A9C /* ActionManager+Artifact.swift */,
				5067392A28AB7A51003A6A9C /* ActionManager+Event.swift */,
				5067392728AB78CD003A6A9C /* ActionModuleTemplates */,
				502D1F0928A8F88D0022CCD3 /* ActionTemplates */,
			);
			path = Action;
			sourceTree = "<group>";
		};
		5067392728AB78CD003A6A9C /* ActionModuleTemplates */ = {
			isa = PBXGroup;
			children = (
				505A10A728A95EC200D46DB3 /* ActionManager+Template.swift */,
				50A7D80228ACD14B004F0B34 /* Template+Executable.swift */,
				5067392528AB786A003A6A9C /* Template+Swift.swift */,
				1F6BCF0528B219B400C2B417 /* Template+Node.swift */,
				50E5204128BE04FC00C3228F /* Template+Python.swift */,
			);
			path = ActionModuleTemplates;
			sourceTree = "<group>";
		};
		5067393028AB8E42003A6A9C /* Effect */ = {
			isa = PBXGroup;
			children = (
				5067393128AB8E55003A6A9C /* RandomCodeTextView.swift */,
			);
			path = Effect;
			sourceTree = "<group>";
		};
		5067393F28ABC9B1003A6A9C /* Menubar */ = {
			isa = PBXGroup;
			children = (
				5067394028ABC9C3003A6A9C /* Menubar.swift */,
				5067394228ABCB18003A6A9C /* MenubarView.swift */,
			);
			path = Menubar;
			sourceTree = "<group>";
		};
		507137DF288E934000C23E7F = {
			isa = PBXGroup;
			children = (
				507137EA288E934000C23E7F /* Action */,
				507137E9288E934000C23E7F /* Products */,
				507137FA288E935A00C23E7F /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		507137E9288E934000C23E7F /* Products */ = {
			isa = PBXGroup;
			children = (
				507137E8288E934000C23E7F /* Action.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		507137EA288E934000C23E7F /* Action */ = {
			isa = PBXGroup;
			children = (
				50713801288E975200C23E7F /* Application */,
				50BCF6AA288EE7F900A97B4C /* Backend */,
				50713805288E9B5200C23E7F /* Interface */,
				50713806288E9C0100C23E7F /* Extension */,
			);
			path = Action;
			sourceTree = "<group>";
		};
		507137FA288E935A00C23E7F /* Frameworks */ = {
			isa = PBXGroup;
			children = (
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
		50713801288E975200C23E7F /* Application */ = {
			isa = PBXGroup;
			children = (
				13C6C62328AF1BF0008ADA60 /* Localizable.strings */,
				507137EB288E934000C23E7F /* ActionApp.swift */,
				507137F4288E934100C23E7F /* Action.entitlements */,
				507137EF288E934100C23E7F /* Assets.xcassets */,
				5030D81128AC01A7001A96B5 /* License.txt */,
				50713802288E976600C23E7F /* AppSetup.swift */,
				5071380D288E9D8A00C23E7F /* AppDelegate.swift */,
			);
			path = Application;
			sourceTree = "<group>";
		};
		50713805288E9B5200C23E7F /* Interface */ = {
			isa = PBXGroup;
			children = (
				502E87A628AA95DF00CAB5E1 /* ActionModule */,
				5067393028AB8E42003A6A9C /* Effect */,
				502E87A728AA95E800CAB5E1 /* Generic */,
				5067393F28ABC9B1003A6A9C /* Menubar */,
				50A7D7FF28ACCE18004F0B34 /* Toast */,
			);
			path = Interface;
			sourceTree = "<group>";
		};
		50713806288E9C0100C23E7F /* Extension */ = {
			isa = PBXGroup;
			children = (
				5067393728ABA445003A6A9C /* AES.swift */,
				5067393B28ABA89D003A6A9C /* Data.swift */,
				5006F55F28A9683C00C8ADBE /* DispatchQueue.swift */,
				5006F55D28A9663100C8ADBE /* Notification.swift */,
				5067392C28AB7D6C003A6A9C /* Result.swift */,
				5001740028AA557100FF9B99 /* UserDefault.swift */,
				50713807288E9C0C00C23E7F /* View.swift */,
				50A7D7FD28ACCB4C004F0B34 /* Throttle.swift */,
			);
			path = Extension;
			sourceTree = "<group>";
		};
		50A7D7FF28ACCE18004F0B34 /* Toast */ = {
			isa = PBXGroup;
			children = (
				50A7D80028ACCE23004F0B34 /* Toast.swift */,
			);
			path = Toast;
			sourceTree = "<group>";
		};
		50BCF6AA288EE7F900A97B4C /* Backend */ = {
			isa = PBXGroup;
			children = (
				5053CF8D288F771C00A92822 /* Action */,
				5030D81428AC08FC001A96B5 /* Config */,
				5053CF8C288F771500A92822 /* Executor */,
				5053CF88288F76CC00A92822 /* PasteboardManager */,
				5053CF8B288F770B00A92822 /* StatusBarManager */,
			);
			path = Backend;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		507137E7288E934000C23E7F /* Action */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 507137F7288E934100C23E7F /* Build configuration list for PBXNativeTarget "Action" */;
			buildPhases = (
				507137FF288E93A600C23E7F /* Swift Format */,
				502D1F0B28A8FA910022CCD3 /* Update Action Templates */,
				5030D81328AC022A001A96B5 /* Scan License */,
				507137E4288E934000C23E7F /* Sources */,
				507137E5288E934000C23E7F /* Frameworks */,
				507137E6288E934000C23E7F /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = Action;
			packageProductDependencies = (
				507137FB288E935A00C23E7F /* AuxiliaryExecute */,
				507137FD288E935A00C23E7F /* Colorful */,
				5053CF9B288F9D8700A92822 /* SymbolPicker */,
				5067393528ABA422003A6A9C /* KeychainAccess */,
			);
			productName = Action;
			productReference = 507137E8288E934000C23E7F /* Action.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		507137E0288E934000C23E7F /* Project object */ = {
			isa = PBXProject;
			attributes = {
				BuildIndependentTargetsInParallel = 1;
				LastSwiftUpdateCheck = 1340;
				LastUpgradeCheck = 1400;
				TargetAttributes = {
					507137E7288E934000C23E7F = {
						CreatedOnToolsVersion = 13.4.1;
					};
				};
			};
			buildConfigurationList = 507137E3288E934000C23E7F /* Build configuration list for PBXProject "Action" */;
			compatibilityVersion = "Xcode 13.0";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
				"zh-Hans",
			);
			mainGroup = 507137DF288E934000C23E7F;
			productRefGroup = 507137E9288E934000C23E7F /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				507137E7288E934000C23E7F /* Action */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		507137E6288E934000C23E7F /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				502D1F0A28A8F88D0022CCD3 /* ActionTemplates in Resources */,
				13C6C62128AF1BF0008ADA60 /* Localizable.strings in Resources */,
				507137F0288E934100C23E7F /* Assets.xcassets in Resources */,
				5030D81228AC01A7001A96B5 /* License.txt in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		502D1F0B28A8FA910022CCD3 /* Update Action Templates */ = {
			isa = PBXShellScriptBuildPhase;
			alwaysOutOfDate = 1;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
			);
			name = "Update Action Templates";
			outputFileListPaths = (
			);
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "$SOURCE_ROOT/../../Resources/Scripts/PackTemplates.sh\n";
		};
		5030D81328AC022A001A96B5 /* Scan License */ = {
			isa = PBXShellScriptBuildPhase;
			alwaysOutOfDate = 1;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
			);
			name = "Scan License";
			outputFileListPaths = (
			);
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "$SOURCE_ROOT/../../Resources/Scripts/UpdateLicenses.sh\n";
		};
		507137FF288E93A600C23E7F /* Swift Format */ = {
			isa = PBXShellScriptBuildPhase;
			alwaysOutOfDate = 1;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
			);
			name = "Swift Format";
			outputFileListPaths = (
			);
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "cd $SOURCE_ROOT\npwd\n\nif ! command -v \"swiftformat\" &> /dev/null\nthen\n    echo \"swiftformat could not be found, skipping\"\n    exit 0\nfi\n\nswiftformat . --swiftversion 5.6\n";
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		507137E4288E934000C23E7F /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				50E5204228BE04FC00C3228F /* Template+Python.swift in Sources */,
				50BCF6AE288F01EF00A97B4C /* StatusBarManager.swift in Sources */,
				503976FA28AE143600588622 /* ModuleImportView.swift in Sources */,
				5067393C28ABA89D003A6A9C /* Data.swift in Sources */,
				5030D81028AC0045001A96B5 /* LicenseView.swift in Sources */,
				50A7D80328ACD14B004F0B34 /* Template+Executable.swift in Sources */,
				5053CF8A288F76E700A92822 /* PasteboardManager+Event.swift in Sources */,
				5006F56028A9683C00C8ADBE /* DispatchQueue.swift in Sources */,
				5030D80E28ABFA82001A96B5 /* SettingView.swift in Sources */,
				5001740528AA818500FF9B99 /* DiagnosticLogView.swift in Sources */,
				5071380A288E9C8100C23E7F /* WelcomeView.swift in Sources */,
				5030D80A28ABE953001A96B5 /* HistoryView.swift in Sources */,
				5030D80828ABDD72001A96B5 /* ActionManager+History.swift in Sources */,
				502E87A328AA954500CAB5E1 /* ModuleEditView.swift in Sources */,
				5067392628AB786A003A6A9C /* Template+Swift.swift in Sources */,
				50713808288E9C0C00C23E7F /* View.swift in Sources */,
				507137EE288E934000C23E7F /* MainView.swift in Sources */,
				5001740128AA557100FF9B99 /* UserDefault.swift in Sources */,
				50A7D80128ACCE23004F0B34 /* Toast.swift in Sources */,
				50A7D7FE28ACCB4C004F0B34 /* Throttle.swift in Sources */,
				5067393828ABA445003A6A9C /* AES.swift in Sources */,
				50713803288E976600C23E7F /* AppSetup.swift in Sources */,
				5071380E288E9D8A00C23E7F /* AppDelegate.swift in Sources */,
				5053CF85288F724E00A92822 /* Executor.swift in Sources */,
				5067392D28AB7D6C003A6A9C /* Result.swift in Sources */,
				5067394128ABC9C3003A6A9C /* Menubar.swift in Sources */,
				5053CF91288F776000A92822 /* ActionManager.swift in Sources */,
				5053CF93288F788B00A92822 /* ActionManager+Module.swift in Sources */,
				5030D80C28ABEF64001A96B5 /* ApplicationView.swift in Sources */,
				5067392B28AB7A51003A6A9C /* ActionManager+Event.swift in Sources */,
				507137EC288E934000C23E7F /* ActionApp.swift in Sources */,
				5067394328ABCB18003A6A9C /* MenubarView.swift in Sources */,
				5006F55E28A9663100C8ADBE /* Notification.swift in Sources */,
				5067393228AB8E55003A6A9C /* RandomCodeTextView.swift in Sources */,
				5071380C288E9C8800C23E7F /* SidebarView.swift in Sources */,
				5030D81628AC090A001A96B5 /* Config.swift in Sources */,
				5067393428ABA328003A6A9C /* ActionManager+Artifact.swift in Sources */,
				50BCF6AC288EE81000A97B4C /* PasteboardManager.swift in Sources */,
				5053CF87288F764000A92822 /* ModuleManageView.swift in Sources */,
				502E87A528AA95BF00CAB5E1 /* ModuleElementView.swift in Sources */,
				5053CF9A288F9A5E00A92822 /* ModuleCreateView.swift in Sources */,
				505A10A828A95EC200D46DB3 /* ActionManager+Template.swift in Sources */,
				1F6BCF0628B219B400C2B417 /* Template+Node.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		13C6C62328AF1BF0008ADA60 /* Localizable.strings */ = {
			isa = PBXVariantGroup;
			children = (
				13C6C62228AF1BF0008ADA60 /* en */,
				13C6C62428AF1DEB008ADA60 /* zh-Hans */,
			);
			name = Localizable.strings;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		507137F5288E934100C23E7F /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = NO;
				DEAD_CODE_STRIPPING = YES;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 12.3;
				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
				MTL_FAST_MATH = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = macosx;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
			};
			name = Debug;
		};
		507137F6288E934100C23E7F /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = NO;
				DEAD_CODE_STRIPPING = YES;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 12.3;
				MTL_ENABLE_DEBUG_INFO = NO;
				MTL_FAST_MATH = YES;
				SDKROOT = macosx;
				SWIFT_COMPILATION_MODE = wholemodule;
				SWIFT_OPTIMIZATION_LEVEL = "-O";
			};
			name = Release;
		};
		507137F8288E934100C23E7F /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
				CODE_SIGN_ENTITLEMENTS = Action/Action.entitlements;
				CODE_SIGN_IDENTITY = "-";
				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
				CODE_SIGN_STYLE = Automatic;
				COMBINE_HIDPI_IMAGES = YES;
				CURRENT_PROJECT_VERSION = 4;
				DEAD_CODE_STRIPPING = YES;
				DEVELOPMENT_ASSET_PATHS = "";
				DEVELOPMENT_TEAM = M4Z5DVY94F;
				ENABLE_HARDENED_RUNTIME = YES;
				ENABLE_PREVIEWS = YES;
				GENERATE_INFOPLIST_FILE = YES;
				INFOPLIST_KEY_CFBundleDisplayName = "Action Bee";
				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
				INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Lakr Aream. All Rights Reserved.";
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/../Frameworks",
				);
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				MARKETING_VERSION = 1.5;
				PRODUCT_BUNDLE_IDENTIFIER = wiki.qaq.Action;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = YES;
				SWIFT_VERSION = 5.0;
			};
			name = Debug;
		};
		507137F9288E934100C23E7F /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
				CODE_SIGN_ENTITLEMENTS = Action/Action.entitlements;
				CODE_SIGN_IDENTITY = "-";
				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
				CODE_SIGN_STYLE = Automatic;
				COMBINE_HIDPI_IMAGES = YES;
				CURRENT_PROJECT_VERSION = 4;
				DEAD_CODE_STRIPPING = YES;
				DEVELOPMENT_ASSET_PATHS = "";
				DEVELOPMENT_TEAM = M4Z5DVY94F;
				ENABLE_HARDENED_RUNTIME = YES;
				ENABLE_PREVIEWS = YES;
				GENERATE_INFOPLIST_FILE = YES;
				INFOPLIST_KEY_CFBundleDisplayName = "Action Bee";
				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
				INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Lakr Aream. All Rights Reserved.";
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/../Frameworks",
				);
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				MARKETING_VERSION = 1.5;
				PRODUCT_BUNDLE_IDENTIFIER = wiki.qaq.Action;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_EMIT_LOC_STRINGS = YES;
				SWIFT_VERSION = 5.0;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		507137E3288E934000C23E7F /* Build configuration list for PBXProject "Action" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				507137F5288E934100C23E7F /* Debug */,
				507137F6288E934100C23E7F /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		507137F7288E934100C23E7F /* Build configuration list for PBXNativeTarget "Action" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				507137F8288E934100C23E7F /* Debug */,
				507137F9288E934100C23E7F /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */

/* Begin XCSwiftPackageProductDependency section */
		5053CF9B288F9D8700A92822 /* SymbolPicker */ = {
			isa = XCSwiftPackageProductDependency;
			productName = SymbolPicker;
		};
		5067393528ABA422003A6A9C /* KeychainAccess */ = {
			isa = XCSwiftPackageProductDependency;
			productName = KeychainAccess;
		};
		507137FB288E935A00C23E7F /* AuxiliaryExecute */ = {
			isa = XCSwiftPackageProductDependency;
			productName = AuxiliaryExecute;
		};
		507137FD288E935A00C23E7F /* Colorful */ = {
			isa = XCSwiftPackageProductDependency;
			productName = Colorful;
		};
/* End XCSwiftPackageProductDependency section */
	};
	rootObject = 507137E0288E934000C23E7F /* Project object */;
}


================================================
FILE: App.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:App/Action/Action.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:External/AuxiliaryExecute">
   </FileRef>
   <FileRef
      location = "group:External/Colorful">
   </FileRef>
   <FileRef
      location = "group:External/KeychainAccess">
   </FileRef>
   <FileRef
      location = "group:External/SymbolPicker">
   </FileRef>
</Workspace>


================================================
FILE: App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: External/AuxiliaryExecute/.gitignore
================================================
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
!default.xcworkspace
*.dSYM
*.dSYM.zip
*.hmap
*.ipa
*.lcov
*.lock
*.log
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
*.pid
*.pid.lock
*.seed
*.swp
*.tgz
*.tsbuildinfo
*.xccheckout
*.xcscmblueprint
*.xcuserstate
*~.nib
.AppleDB
.AppleDesktop
.AppleDouble
.DS_Store
.DocumentRevisions-V100
.LSOverride
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
._*
.apdisk
.build
.bundle
.cache
.cache/
.com.apple.timemachine.donotpresent
.dynamodb/
.env
.env.test
.eslintcache
.fseventsd
.fusebox/
.grunt
.idea
.lock-wscript
.next
.node_repl_history
.npm
.nuxt
.nyc_output
.parcel-cache
.pnp.*
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
.serverless/
.swiftpm
.tern-port
.vscode-test
.vuepress/dist
.yarn-integrity
.yarn/build-state.yml
.yarn/cache
.yarn/unplugged
/*.gcno
Artifacts/
CI
CI-Pods.tar
Carthage/Build
Carthage/Build/
DerivedData
DerivedData/
Icon
Network Trash Folder
Pipeline/Dockers/Buildtime/
Podfile.lock
Pods/
Temporary Items
artifacts/
bower_components
build/
build/Release
coverage
default.profraw
dist
dockerbuild
dockermnt
fastlane/Preview.html
fastlane/report.xml
fastlane/screenshots/**/*.png
fastlane/test_output
iOSInjectionProject/
jspm_packages/
lerna-debug.log*
lib-cov
logs
node_modules/
npm-debug.log*
pids
profile
project.xcworkspace
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
temp/
temps/
web_modules/
xcuserdata
xcuserdata/
yarn-debug.log*
yarn-error.log*



================================================
FILE: External/AuxiliaryExecute/LICENSE
================================================
MIT License

Copyright (c) 2
Download .txt
gitextract_cxsqbwhp/

├── .gitignore
├── .gitmodules
├── .root
├── App/
│   └── Action/
│       ├── Action/
│       │   ├── Action.entitlements
│       │   ├── Application/
│       │   │   ├── Action.entitlements
│       │   │   ├── ActionApp.swift
│       │   │   ├── AppDelegate.swift
│       │   │   ├── AppSetup.swift
│       │   │   ├── Assets.xcassets/
│       │   │   │   ├── AccentColor.colorset/
│       │   │   │   │   └── Contents.json
│       │   │   │   ├── AppIcon.appiconset/
│       │   │   │   │   └── Contents.json
│       │   │   │   ├── Avatar.imageset/
│       │   │   │   │   └── Contents.json
│       │   │   │   └── Contents.json
│       │   │   ├── License.txt
│       │   │   ├── en.lproj/
│       │   │   │   └── Localizable.strings
│       │   │   └── zh-Hans.lproj/
│       │   │       └── Localizable.strings
│       │   ├── Backend/
│       │   │   ├── Action/
│       │   │   │   ├── ActionManager+Artifact.swift
│       │   │   │   ├── ActionManager+Event.swift
│       │   │   │   ├── ActionManager+History.swift
│       │   │   │   ├── ActionManager+Module.swift
│       │   │   │   ├── ActionManager.swift
│       │   │   │   ├── ActionModuleTemplates/
│       │   │   │   │   ├── ActionManager+Template.swift
│       │   │   │   │   ├── Template+Executable.swift
│       │   │   │   │   ├── Template+Node.swift
│       │   │   │   │   ├── Template+Python.swift
│       │   │   │   │   └── Template+Swift.swift
│       │   │   │   └── ActionTemplates/
│       │   │   │       └── .templates
│       │   │   ├── Config/
│       │   │   │   └── Config.swift
│       │   │   ├── Executor/
│       │   │   │   └── Executor.swift
│       │   │   ├── PasteboardManager/
│       │   │   │   ├── PasteboardManager+Event.swift
│       │   │   │   └── PasteboardManager.swift
│       │   │   └── StatusBarManager/
│       │   │       └── StatusBarManager.swift
│       │   ├── Extension/
│       │   │   ├── AES.swift
│       │   │   ├── Data.swift
│       │   │   ├── DispatchQueue.swift
│       │   │   ├── Notification.swift
│       │   │   ├── Result.swift
│       │   │   ├── Throttle.swift
│       │   │   ├── UserDefault.swift
│       │   │   └── View.swift
│       │   └── Interface/
│       │       ├── ActionModule/
│       │       │   ├── ModuleCreateView.swift
│       │       │   ├── ModuleEditView.swift
│       │       │   ├── ModuleElementView.swift
│       │       │   ├── ModuleImportView.swift
│       │       │   └── ModuleManageView.swift
│       │       ├── Effect/
│       │       │   └── RandomCodeTextView.swift
│       │       ├── Generic/
│       │       │   ├── ApplicationView.swift
│       │       │   ├── DiagnosticLogView.swift
│       │       │   ├── HistoryView.swift
│       │       │   ├── LicenseView.swift
│       │       │   ├── MainView.swift
│       │       │   ├── SettingView.swift
│       │       │   ├── SidebarView.swift
│       │       │   └── WelcomeView.swift
│       │       ├── Menubar/
│       │       │   ├── Menubar.swift
│       │       │   └── MenubarView.swift
│       │       └── Toast/
│       │           └── Toast.swift
│       └── Action.xcodeproj/
│           └── project.pbxproj
├── App.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       └── IDEWorkspaceChecks.plist
├── External/
│   ├── AuxiliaryExecute/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── Package.swift
│   │   ├── README.md
│   │   ├── Sources/
│   │   │   └── AuxiliaryExecute/
│   │   │       ├── AuxiliaryExecute+Async.swift
│   │   │       ├── AuxiliaryExecute+Shell.swift
│   │   │       ├── AuxiliaryExecute+Spawn.swift
│   │   │       └── AuxiliaryExecute.swift
│   │   └── Tests/
│   │       └── AuxiliaryExecuteTests/
│   │           └── AuxiliaryExecuteTests.swift
│   ├── Colorful/
│   │   ├── .gitignore
│   │   ├── LICENSE
│   │   ├── Package.swift
│   │   ├── README.md
│   │   └── Sources/
│   │       └── Colorful/
│   │           ├── Colorful.swift
│   │           ├── ColorfulView.swift
│   │           └── PointRandomization.swift
│   ├── KeychainAccess/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── Examples/
│   │   │   └── Example-iOS/
│   │   │       ├── Example-iOS/
│   │   │       │   ├── AccountsViewController.swift
│   │   │       │   ├── AppDelegate.swift
│   │   │       │   ├── Base.lproj/
│   │   │       │   │   ├── LaunchScreen.xib
│   │   │       │   │   └── Main.storyboard
│   │   │       │   ├── Example-iOS.entitlements
│   │   │       │   ├── Images.xcassets/
│   │   │       │   │   └── AppIcon.appiconset/
│   │   │       │   │       └── Contents.json
│   │   │       │   ├── Info.plist
│   │   │       │   └── InputViewController.swift
│   │   │       └── Example-iOS.xcodeproj/
│   │   │           ├── project.pbxproj
│   │   │           └── xcshareddata/
│   │   │               └── xcschemes/
│   │   │                   └── Example-iOS.xcscheme
│   │   ├── KeychainAccess.podspec
│   │   ├── KeychainAccess.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   ├── LICENSE
│   │   ├── Lib/
│   │   │   ├── Certificates/
│   │   │   │   ├── KeychainAccess_Tests.provisionprofile.enc
│   │   │   │   ├── apple.cer
│   │   │   │   ├── developer_id_app.p12.enc
│   │   │   │   ├── iOS_Development.mobileprovision.enc
│   │   │   │   ├── ios_developer.p12.enc
│   │   │   │   └── tvOS_Development.mobileprovision.enc
│   │   │   ├── Configurations/
│   │   │   │   ├── Base.xcconfig
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   ├── KeychainAccess.xcconfig
│   │   │   │   ├── Release.xcconfig
│   │   │   │   ├── TestHost.xcconfig
│   │   │   │   └── Tests.xcconfig
│   │   │   ├── Gemfile
│   │   │   ├── KeychainAccess/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Keychain.swift
│   │   │   │   └── KeychainAccess.h
│   │   │   ├── KeychainAccess.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           ├── KeychainAccess.xcscheme
│   │   │   │           └── TestHost.xcscheme
│   │   │   ├── KeychainAccessTests/
│   │   │   │   ├── EnumTests.swift
│   │   │   │   ├── ErrorTypeTests.swift
│   │   │   │   ├── Info.plist
│   │   │   │   ├── KeychainAccessTests.swift
│   │   │   │   └── SharedCredentialTests.swift
│   │   │   ├── Rakefile
│   │   │   ├── Scripts/
│   │   │   │   ├── add_key.sh
│   │   │   │   └── decode_cert.sh
│   │   │   ├── TestHost/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Info.plist
│   │   │   │   └── TestHost.entitlements
│   │   │   └── TestHost-MacCatalyst/
│   │   │       ├── KeychainAccessTests-MacCatalyst/
│   │   │       │   ├── EnumTests.swift
│   │   │       │   ├── ErrorTypeTests.swift
│   │   │       │   ├── Info.plist
│   │   │       │   └── KeychainAccessTests.swift
│   │   │       ├── TestHost-MacCatalyst/
│   │   │       │   ├── AppDelegate.swift
│   │   │       │   ├── Assets.xcassets/
│   │   │       │   │   ├── AppIcon.appiconset/
│   │   │       │   │   │   └── Contents.json
│   │   │       │   │   └── Contents.json
│   │   │       │   ├── Base.lproj/
│   │   │       │   │   ├── LaunchScreen.storyboard
│   │   │       │   │   └── Main.storyboard
│   │   │       │   ├── Info.plist
│   │   │       │   ├── SceneDelegate.swift
│   │   │       │   ├── TestHost-MacCatalyst.entitlements
│   │   │       │   └── ViewController.swift
│   │   │       └── TestHost-MacCatalyst.xcodeproj/
│   │   │           ├── project.pbxproj
│   │   │           └── xcshareddata/
│   │   │               └── xcschemes/
│   │   │                   └── TestHost-MacCatalyst.xcscheme
│   │   ├── Package.swift
│   │   ├── Package@swift-5.3.swift
│   │   ├── README.md
│   │   └── Sources/
│   │       └── Keychain.swift
│   └── SymbolPicker/
│       ├── .gitignore
│       ├── LICENSE
│       ├── Package.swift
│       ├── README.md
│       └── Sources/
│           └── SymbolPicker/
│               ├── Resources/
│               │   ├── en.lproj/
│               │   │   └── Localizable.strings
│               │   ├── sfsymbols.txt
│               │   └── zh_CN.lproj/
│               │       └── Localizable.strings
│               └── SymbolPicker.swift
├── LICENSE
├── README.md
└── Resources/
    ├── ModuleSample/
    │   ├── Module Export - Link Cleaner/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               ├── CleanerRule/
    │   │               │   ├── CleanerRule.swift
    │   │               │   ├── Rule+BiliBili.swift
    │   │               │   └── Rule+Twitter.swift
    │   │               └── Source.swift
    │   ├── Module Export - Multiline Init Formatter/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               └── Source.swift
    │   ├── Module Export - Quick SFImage/
    │   │   ├── .ActionManifest.plist
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   ├── Definition/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Definition/
    │   │   │   │           └── Definition.swift
    │   │   │   ├── compile.sh
    │   │   │   └── launch.sh
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   └── Source/
    │   │       ├── .gitignore
    │   │       ├── Package.swift
    │   │       └── Sources/
    │   │           └── Source/
    │   │               └── Source.swift
    │   └── Module Export - Speak Dictionary/
    │       ├── .ActionManifest.plist
    │       ├── .gitignore
    │       ├── .supplement/
    │       │   ├── Binary/
    │       │   │   └── CommandLineBridge/
    │       │   │       ├── CommandLineBridge/
    │       │   │       │   └── main.swift
    │       │   │       └── CommandLineBridge.xcodeproj/
    │       │   │           ├── project.pbxproj
    │       │   │           └── xcshareddata/
    │       │   │               └── xcschemes/
    │       │   │                   └── CommandLineBridge.xcscheme
    │       │   ├── Communicator/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Communicator/
    │       │   │           ├── Communicator.h
    │       │   │           ├── Communicator.m
    │       │   │           └── include/
    │       │   │               └── Communicator.h
    │       │   ├── Definition/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Definition/
    │       │   │           └── Definition.swift
    │       │   ├── compile.sh
    │       │   └── launch.sh
    │       ├── App.xcworkspace/
    │       │   ├── contents.xcworkspacedata
    │       │   └── xcshareddata/
    │       │       └── IDEWorkspaceChecks.plist
    │       └── Source/
    │           ├── .gitignore
    │           ├── Package.swift
    │           └── Sources/
    │               └── Source/
    │                   └── Source.swift
    ├── ModuleTemplate/
    │   ├── .templates
    │   ├── Executable/
    │   │   ├── ActionBeeModule.exec
    │   │   └── Put your binary here
    │   ├── ExecutableSwift/
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   ├── Binary/
    │   │   │   │   └── CommandLineBridge/
    │   │   │   │       ├── CommandLineBridge/
    │   │   │   │       │   └── main.swift
    │   │   │   │       └── CommandLineBridge.xcodeproj/
    │   │   │   │           ├── project.pbxproj
    │   │   │   │           └── xcshareddata/
    │   │   │   │               └── xcschemes/
    │   │   │   │                   └── CommandLineBridge.xcscheme
    │   │   │   ├── Communicator/
    │   │   │   │   ├── .gitignore
    │   │   │   │   ├── Package.swift
    │   │   │   │   └── Sources/
    │   │   │   │       └── Communicator/
    │   │   │   │           ├── Communicator.h
    │   │   │   │           ├── Communicator.m
    │   │   │   │           └── include/
    │   │   │   │               └── Communicator.h
    │   │   │   └── Definition/
    │   │   │       ├── .gitignore
    │   │   │       ├── Package.swift
    │   │   │       └── Sources/
    │   │   │           └── Definition/
    │   │   │               └── Definition.swift
    │   │   ├── App.xcworkspace/
    │   │   │   ├── contents.xcworkspacedata
    │   │   │   └── xcshareddata/
    │   │   │       └── IDEWorkspaceChecks.plist
    │   │   ├── Source/
    │   │   │   ├── .gitignore
    │   │   │   ├── Package.swift
    │   │   │   └── Sources/
    │   │   │       └── Source/
    │   │   │           └── Source.swift
    │   │   └── compile.command
    │   ├── SourceNode/
    │   │   ├── .eslintrc.js
    │   │   ├── .gitignore
    │   │   ├── .supplement/
    │   │   │   └── compile.sh
    │   │   ├── package.json
    │   │   ├── src/
    │   │   │   ├── global.d.ts
    │   │   │   └── index.ts
    │   │   └── tsconfig.json
    │   ├── SourcePython/
    │   │   └── main.py
    │   └── SourceSwift/
    │       ├── .gitignore
    │       ├── .supplement/
    │       │   ├── Binary/
    │       │   │   └── CommandLineBridge/
    │       │   │       ├── CommandLineBridge/
    │       │   │       │   └── main.swift
    │       │   │       └── CommandLineBridge.xcodeproj/
    │       │   │           ├── project.pbxproj
    │       │   │           └── xcshareddata/
    │       │   │               └── xcschemes/
    │       │   │                   └── CommandLineBridge.xcscheme
    │       │   ├── Communicator/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Communicator/
    │       │   │           ├── Communicator.h
    │       │   │           ├── Communicator.m
    │       │   │           └── include/
    │       │   │               └── Communicator.h
    │       │   ├── Definition/
    │       │   │   ├── .gitignore
    │       │   │   ├── Package.swift
    │       │   │   └── Sources/
    │       │   │       └── Definition/
    │       │   │           └── Definition.swift
    │       │   ├── compile.sh
    │       │   └── launch.sh
    │       ├── App.xcworkspace/
    │       │   ├── contents.xcworkspacedata
    │       │   └── xcshareddata/
    │       │       └── IDEWorkspaceChecks.plist
    │       └── Source/
    │           ├── .gitignore
    │           ├── Package.swift
    │           └── Sources/
    │               └── Source/
    │                   └── Source.swift
    └── Scripts/
        ├── NewlineDeduplicate.swift
        ├── PackTemplates.sh
        ├── UpdateGitHub.sh
        └── UpdateLicenses.sh
Download .txt
SYMBOL INDEX (10 symbols across 3 files)

FILE: Resources/ModuleTemplate/SourceNode/src/global.d.ts
  type ActionBeeMessageEvent (line 2) | interface ActionBeeMessageEvent {
  type ActionBeeAction (line 8) | type ActionBeeAction = 'none' | 'overwrite' | 'speak'

FILE: Resources/ModuleTemplate/SourceNode/src/index.ts
  function finalizeResult (line 5) | function finalizeResult(
  function moduleMain (line 20) | function moduleMain() {

FILE: Resources/ModuleTemplate/SourcePython/main.py
  class PasteboardEvent (line 12) | class PasteboardEvent:
    method __init__ (line 13) | def __init__(self, focusAppID, focusAppName, pasteboardContent):
  class ActionBeeRecipe (line 19) | class ActionBeeRecipe:
    method __init__ (line 20) | def __init__(self, postAction, postContent, continueQueue):
    method finalizeAndSend (line 25) | def finalizeAndSend(self):
  function SolutionMain (line 33) | def SolutionMain(event: PasteboardEvent) -> ActionBeeRecipe:
Condensed preview — 286 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,457K chars).
[
  {
    "path": ".gitignore",
    "chars": 1518,
    "preview": "!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n!default.xcworkspace\n*.dSYM\n*.dSYM.zip\n*.hmap\n"
  },
  {
    "path": ".gitmodules",
    "chars": 466,
    "preview": "[submodule \"External/Colorful\"]\n\tpath = External/Colorful\n\turl = https://github.com/Lakr233/Colorful\n[submodule \"Externa"
  },
  {
    "path": ".root",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "App/Action/Action/Action.entitlements",
    "chars": 181,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "App/Action/Action/Application/Action.entitlements",
    "chars": 181,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "App/Action/Action/Application/ActionApp.swift",
    "chars": 1087,
    "preview": "//\n//  ActionApp.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport SwiftUI\n\n@main\nstruct ActionApp:"
  },
  {
    "path": "App/Action/Action/Application/AppDelegate.swift",
    "chars": 919,
    "preview": "//\n//  AppDelegate.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport AppKit\nimport SwiftUI\n\nclass A"
  },
  {
    "path": "App/Action/Action/Application/AppSetup.swift",
    "chars": 2036,
    "preview": "//\n//  ApplicationSetup.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport AppKit\n\nextension ActionA"
  },
  {
    "path": "App/Action/Action/Application/Assets.xcassets/AccentColor.colorset/Contents.json",
    "chars": 695,
    "preview": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1"
  },
  {
    "path": "App/Action/Action/Application/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1301,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icon_16x16.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : "
  },
  {
    "path": "App/Action/Action/Application/Assets.xcassets/Avatar.imageset/Contents.json",
    "chars": 304,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"Avatar.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n "
  },
  {
    "path": "App/Action/Action/Application/Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "App/Action/Action/Application/License.txt",
    "chars": 5502,
    "preview": "MIT License\n\nCopyright (c) 2022 Lakr Aream\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "App/Action/Action/Application/en.lproj/Localizable.strings",
    "chars": 75,
    "preview": "/* \n  Localizable.strings\n  Action\n\n  Created by 维安雨轩 on 2022/08/19.\n  \n*/\n"
  },
  {
    "path": "App/Action/Action/Application/zh-Hans.lproj/Localizable.strings",
    "chars": 3767,
    "preview": "/* \n  Localizable.strings\n  Action\n\n  Created by 维安雨轩 on 2022/08/19.\n  \n*/\n\n//ModuleManageView.swift\n\n\"Create an action "
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionManager+Artifact.swift",
    "chars": 4068,
    "preview": "//\n//  ActionManager+Artifact.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Foundation\n\nprivate"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionManager+Event.swift",
    "chars": 5554,
    "preview": "//\n//  ActionManager+Event.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Cocoa\nimport Foundatio"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionManager+History.swift",
    "chars": 1929,
    "preview": "//\n//  ActionManager+History.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Foundation\n\nextensio"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionManager+Module.swift",
    "chars": 5863,
    "preview": "//\n//  ActionManager+Module.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport Foundation\n\n/*\n\n Acti"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionManager.swift",
    "chars": 5676,
    "preview": "//\n//  ActionManager.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport Combine\nimport Foundation\n\nf"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionModuleTemplates/ActionManager+Template.swift",
    "chars": 3801,
    "preview": "//\n//  ActionManager+ModuleTemplate.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport Cocoa\nimport "
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Executable.swift",
    "chars": 5193,
    "preview": "//\n//  Template+Executable.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport AuxiliaryExecute\nimpor"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Node.swift",
    "chars": 5852,
    "preview": "//\n//  Template+Node.swift\n//  Action\n//\n//  Created by Innei on 2022/8/21.\n//\n\nimport AuxiliaryExecute\nimport Foundatio"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Python.swift",
    "chars": 4140,
    "preview": "//\n//  Template+Python.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/30.\n//\n\nimport AuxiliaryExecute\nimport Fo"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionModuleTemplates/Template+Swift.swift",
    "chars": 4424,
    "preview": "//\n//  ModuleTemplate+Swift.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport AuxiliaryExecute\nimpo"
  },
  {
    "path": "App/Action/Action/Backend/Action/ActionTemplates/.templates",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "App/Action/Action/Backend/Config/Config.swift",
    "chars": 1310,
    "preview": "//\n//  Config.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport Combine\nimport Foundation\n\nclass Co"
  },
  {
    "path": "App/Action/Action/Backend/Executor/Executor.swift",
    "chars": 2753,
    "preview": "//\n//  Executor.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport AuxiliaryExecute\nimport Foundatio"
  },
  {
    "path": "App/Action/Action/Backend/PasteboardManager/PasteboardManager+Event.swift",
    "chars": 662,
    "preview": "//\n//  PasteboardManager+Event.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport Foundation\n\nextens"
  },
  {
    "path": "App/Action/Action/Backend/PasteboardManager/PasteboardManager.swift",
    "chars": 5255,
    "preview": "//\n//  PasteboardManager.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport AppKit\n\nfinal class Past"
  },
  {
    "path": "App/Action/Action/Backend/StatusBarManager/StatusBarManager.swift",
    "chars": 245,
    "preview": "//\n//  StatusBarManager.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport Foundation\n\nfinal class S"
  },
  {
    "path": "App/Action/Action/Extension/AES.swift",
    "chars": 5552,
    "preview": "//\n//  AES.swift\n//  PTFoundation\n//\n//  Created by Lakr Aream on 12/15/20.\n//\n\nimport CommonCrypto\nimport Foundation\nim"
  },
  {
    "path": "App/Action/Action/Extension/Data.swift",
    "chars": 487,
    "preview": "//\n//  Data.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport CommonCrypto\nimport Foundation\n\nexten"
  },
  {
    "path": "App/Action/Action/Extension/DispatchQueue.swift",
    "chars": 486,
    "preview": "//\n//  DispatchQueue.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport Foundation\n\nextension Dispat"
  },
  {
    "path": "App/Action/Action/Extension/Notification.swift",
    "chars": 204,
    "preview": "//\n//  Notification.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport Foundation\n\nextension Notific"
  },
  {
    "path": "App/Action/Action/Extension/Result.swift",
    "chars": 195,
    "preview": "//\n//  Result.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Foundation\n\npublic extension Result"
  },
  {
    "path": "App/Action/Action/Extension/Throttle.swift",
    "chars": 4741,
    "preview": "//  SwiftThrottle.swift\n//  Twitter @Lakr233\n//\n//  Created by Lakr Aream on 12/12/20.\n//\n\nimport Foundation\n\n/*\n\n This "
  },
  {
    "path": "App/Action/Action/Extension/UserDefault.swift",
    "chars": 3128,
    "preview": "//\n//  UserDefault.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport Foundation\n\n#if DEBUG\n    priv"
  },
  {
    "path": "App/Action/Action/Extension/View.swift",
    "chars": 356,
    "preview": "//\n//  View.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport SwiftUI\n\nextension View {\n    func us"
  },
  {
    "path": "App/Action/Action/Interface/ActionModule/ModuleCreateView.swift",
    "chars": 2563,
    "preview": "//\n//  ModuleCreateView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport SwiftUI\n\nstruct ModuleCre"
  },
  {
    "path": "App/Action/Action/Interface/ActionModule/ModuleEditView.swift",
    "chars": 15818,
    "preview": "//\n//  ModuleEditView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport SwiftUI\nimport SymbolPicker"
  },
  {
    "path": "App/Action/Action/Interface/ActionModule/ModuleElementView.swift",
    "chars": 3238,
    "preview": "//\n//  ModuleElementView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport SwiftUI\n\nstruct ModuleEl"
  },
  {
    "path": "App/Action/Action/Interface/ActionModule/ModuleImportView.swift",
    "chars": 2969,
    "preview": "//\n//  ModuleImportView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/18.\n//\n\nimport SwiftUI\n\nstruct ModuleImp"
  },
  {
    "path": "App/Action/Action/Interface/ActionModule/ModuleManageView.swift",
    "chars": 6032,
    "preview": "//\n//  ModuleManageView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/26.\n//\n\nimport SwiftUI\n\nstruct ModuleMan"
  },
  {
    "path": "App/Action/Action/Interface/Effect/RandomCodeTextView.swift",
    "chars": 769,
    "preview": "//\n//  RandomCodeTextView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport SwiftUI\n\nstruct RandomC"
  },
  {
    "path": "App/Action/Action/Interface/Generic/ApplicationView.swift",
    "chars": 1628,
    "preview": "//\n//  ApplicationView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport SwiftUI\n\nstruct Applicatio"
  },
  {
    "path": "App/Action/Action/Interface/Generic/DiagnosticLogView.swift",
    "chars": 4222,
    "preview": "//\n//  DiagnosticLogView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/15.\n//\n\nimport SwiftUI\n\nclass Logger: O"
  },
  {
    "path": "App/Action/Action/Interface/Generic/HistoryView.swift",
    "chars": 4699,
    "preview": "//\n//  HistoryView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport SwiftUI\n\nstruct HistoryView: V"
  },
  {
    "path": "App/Action/Action/Interface/Generic/LicenseView.swift",
    "chars": 1676,
    "preview": "//\n//  LicenseView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport SwiftUI\n\nstruct LicenseView: V"
  },
  {
    "path": "App/Action/Action/Interface/Generic/MainView.swift",
    "chars": 1234,
    "preview": "//\n//  ContentView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport SwiftUI\n\nstruct MainView: View"
  },
  {
    "path": "App/Action/Action/Interface/Generic/SettingView.swift",
    "chars": 2542,
    "preview": "//\n//  SettingView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport SwiftUI\n\nstruct SettingView: V"
  },
  {
    "path": "App/Action/Action/Interface/Generic/SidebarView.swift",
    "chars": 1372,
    "preview": "//\n//  SidebarView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport SwiftUI\n\n#if DEBUG\n    private"
  },
  {
    "path": "App/Action/Action/Interface/Generic/WelcomeView.swift",
    "chars": 1639,
    "preview": "//\n//  WelcomeView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/7/25.\n//\n\nimport Colorful\nimport SwiftUI\n\nstruc"
  },
  {
    "path": "App/Action/Action/Interface/Menubar/Menubar.swift",
    "chars": 2634,
    "preview": "//\n//  Menubar.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Cocoa\nimport SwiftUI\n\nclass Menuba"
  },
  {
    "path": "App/Action/Action/Interface/Menubar/MenubarView.swift",
    "chars": 2502,
    "preview": "//\n//  MenubarView.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/16.\n//\n\nimport Colorful\nimport SwiftUI\n\nstruc"
  },
  {
    "path": "App/Action/Action/Interface/Toast/Toast.swift",
    "chars": 3389,
    "preview": "//\n//  Toast.swift\n//  Action\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport Cocoa\nimport Foundation\nimport Swift"
  },
  {
    "path": "App/Action/Action.xcodeproj/project.pbxproj",
    "chars": 39132,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "App.xcworkspace/contents.xcworkspacedata",
    "chars": 461,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:App/Action/Act"
  },
  {
    "path": "App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/AuxiliaryExecute/.gitignore",
    "chars": 1494,
    "preview": "!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n!default.xcworkspace\n*.dSYM\n*.dSYM.zip\n*.hmap\n"
  },
  {
    "path": "External/AuxiliaryExecute/LICENSE",
    "chars": 1068,
    "preview": "MIT License\n\nCopyright (c) 2021 Lakr Aream\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "External/AuxiliaryExecute/Package.swift",
    "chars": 577,
    "preview": "// swift-tools-version:5.5\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
  },
  {
    "path": "External/AuxiliaryExecute/README.md",
    "chars": 1201,
    "preview": "# AuxiliaryExecute\n\nA Swift wrapper for system shell over posix_spawn with search path and env support.\n\n## Usage\n\n```\ni"
  },
  {
    "path": "External/AuxiliaryExecute/Sources/AuxiliaryExecute/AuxiliaryExecute+Async.swift",
    "chars": 3272,
    "preview": "//\n//  AuxiliaryExecute+Spawn.swift\n//  AuxiliaryExecute\n//\n//  Created by Cyandev on 2022/1/10.\n//\n\n#if swift(>=5.5)\n\n "
  },
  {
    "path": "External/AuxiliaryExecute/Sources/AuxiliaryExecute/AuxiliaryExecute+Shell.swift",
    "chars": 7341,
    "preview": "//\n//  AuxiliaryExecute+Shell.swift\n//  AuxiliaryExecute\n//\n//  Created by Lakr Aream on 2021/12/6.\n//\n\nimport Foundatio"
  },
  {
    "path": "External/AuxiliaryExecute/Sources/AuxiliaryExecute/AuxiliaryExecute+Spawn.swift",
    "chars": 11332,
    "preview": "//\n//  AuxiliaryExecute+Spawn.swift\n//  AuxiliaryExecute\n//\n//  Created by Lakr Aream on 2021/12/6.\n//\n\nimport Foundatio"
  },
  {
    "path": "External/AuxiliaryExecute/Sources/AuxiliaryExecute/AuxiliaryExecute.swift",
    "chars": 4831,
    "preview": "//\n//  AuxiliaryExecute.swift\n//  MyYearWithGit\n//\n//  Created by Lakr Aream on 2021/11/27.\n//\n\nimport Foundation\n\n/// E"
  },
  {
    "path": "External/AuxiliaryExecute/Tests/AuxiliaryExecuteTests/AuxiliaryExecuteTests.swift",
    "chars": 3303,
    "preview": "@testable import AuxiliaryExecute\nimport XCTest\n\nfinal class AuxiliaryExecuteTests: XCTestCase {\n    func testMain() thr"
  },
  {
    "path": "External/Colorful/.gitignore",
    "chars": 125,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspac"
  },
  {
    "path": "External/Colorful/LICENSE",
    "chars": 1066,
    "preview": "MIT License\n\nCopyright (c) 2021 Lakr Aream\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "External/Colorful/Package.swift",
    "chars": 370,
    "preview": "// swift-tools-version:5.3\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Colorful\",\n    platforms: [\n   "
  },
  {
    "path": "External/Colorful/README.md",
    "chars": 572,
    "preview": "# Colorful\n\nA SwiftUI implementation of AppleCard's animated colorful blur background.\n\n## Preview\n\n![Preview](./Preview"
  },
  {
    "path": "External/Colorful/Sources/Colorful/Colorful.swift",
    "chars": 1301,
    "preview": "//\n//  Colorful.swift\n//\n//\n//  Created by Lakr Aream on 2021/9/19.\n//\n\nimport SwiftUI\n\nprivate let kDefaultSourceColorL"
  },
  {
    "path": "External/Colorful/Sources/Colorful/ColorfulView.swift",
    "chars": 4778,
    "preview": "//\n//  ColorfulView.swift\n//  Colorful\n//\n//  Created by Lakr Aream on 2021/9/19.\n//\n\nimport SwiftUI\n\npublic struct Colo"
  },
  {
    "path": "External/Colorful/Sources/Colorful/PointRandomization.swift",
    "chars": 1142,
    "preview": "//\n//  PointRandomization.swift\n//  Colorful\n//\n//  Created by Lakr Aream on 2021/9/19.\n//\n\nimport SwiftUI\n\nextension Co"
  },
  {
    "path": "External/KeychainAccess/.gitignore",
    "chars": 4096,
    "preview": "### https://raw.github.com/github/gitignore/2a4de265d37eca626309d8e115218d18985b5435/Swift.gitignore\n\n# Xcode\n#\n# gitign"
  },
  {
    "path": "External/KeychainAccess/.travis.yml",
    "chars": 2663,
    "preview": "language: objective-c\ncache:\n  directories:\n  - Lib/vendor\ninstall:\n- \"(cd Lib && bundle install --path=vendor/bundle --"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/AccountsViewController.swift",
    "chars": 5060,
    "preview": "//\n//  AccountsViewController.swift\n//  Example\n//\n//  Created by kishikawa katsumi on 2014/12/25.\n//  Copyright (c) 201"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/AppDelegate.swift",
    "chars": 1744,
    "preview": "//\n//  AppDelegate.swift\n//  Example\n//\n//  Created by kishikawa katsumi on 2014/12/25.\n//  Copyright (c) 2014 kishikawa"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/LaunchScreen.xib",
    "chars": 1362,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/Base.lproj/Main.storyboard",
    "chars": 19062,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements",
    "chars": 316,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 848,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/Info.plist",
    "chars": 1205,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS/InputViewController.swift",
    "chars": 2777,
    "preview": "//\n//  InputViewController.swift\n//  Example\n//\n//  Created by kishikawa katsumi on 2014/12/26.\n//  Copyright (c) 2014 k"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj",
    "chars": 16719,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "External/KeychainAccess/Examples/Example-iOS/Example-iOS.xcodeproj/xcshareddata/xcschemes/Example-iOS.xcscheme",
    "chars": 4284,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1200\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "External/KeychainAccess/KeychainAccess.podspec",
    "chars": 1698,
    "preview": "Pod::Spec.new do |s|\n  s.name             = 'KeychainAccess'\n  s.version          = '4.2.2'\n  s.summary          = 'Keyc"
  },
  {
    "path": "External/KeychainAccess/KeychainAccess.xcworkspace/contents.xcworkspacedata",
    "chars": 367,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Lib/KeychainAc"
  },
  {
    "path": "External/KeychainAccess/KeychainAccess.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/LICENSE",
    "chars": 1085,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 kishikawa katsumi\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "External/KeychainAccess/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc",
    "chars": 10230,
    "preview": "U2FsdGVkX18WxFfapSdab5VH8V0ALvJ1p4DGQkV6PkLcteNXpYJVZYP7ibe0xSo8\neEXjFyvV6Gx/O+FW90M40ejNOoG5qgTchrGR4mym4ECWHtaxijlIsr8"
  },
  {
    "path": "External/KeychainAccess/Lib/Certificates/developer_id_app.p12.enc",
    "chars": 4355,
    "preview": "U2FsdGVkX1/4QHYY+F1WXNzik0JkRjHnbPBKxSmoGF9U1obIxXuwJFkrXbbl94H2\n5QXAAk9u4jNH0lT04yUqvEWhU3e3g2C5AxVPxvh0rCVRhePshHlEozF"
  },
  {
    "path": "External/KeychainAccess/Lib/Certificates/iOS_Development.mobileprovision.enc",
    "chars": 12220,
    "preview": "U2FsdGVkX19cf2MW5JJE/5KsHZyCu4ZjhPpcntHNbx65ZWlReP6R/XjwT/efUlKt\ne860B2eljMtgwCbf+BCXQ21i72LSY8z8J/dd3qqcwF+n2U53zvaN3S1"
  },
  {
    "path": "External/KeychainAccess/Lib/Certificates/ios_developer.p12.enc",
    "chars": 8475,
    "preview": "U2FsdGVkX1/A9JqBXQY1nHIgQ22pp/7/eETLbgBOMJgqmSZP79CPn1brO+WrYJe4\n4UcW1ZYnJYyIz+tINiie2XGQqLExiFh9cgI/aJRvKt4Aq0B7VZ/wk1b"
  },
  {
    "path": "External/KeychainAccess/Lib/Certificates/tvOS_Development.mobileprovision.enc",
    "chars": 10270,
    "preview": "U2FsdGVkX19sMm4dCPgcgTnND1wPKUERPjbnGI40mBJnBBi5mimAk6o1qbZ5ciBA\n/StXHcQHcZxl+YNP/jcku6q0VI9zxdl7O5pBv2b4dSOlJAg35Jf0BE0"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/Base.xcconfig",
    "chars": 1635,
    "preview": "ALWAYS_SEARCH_USER_PATHS = NO;\nCLANG_ANALYZER_NONNULL = YES\nCLANG_CXX_LANGUAGE_STANDARD = gnu++0x;\nCLANG_CXX_LIBRARY = l"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/Debug.xcconfig",
    "chars": 279,
    "preview": "#include \"Base.xcconfig\"\n\nBITCODE_GENERATION_MODE = marker;\nMTL_ENABLE_DEBUG_INFO = YES;\nCOPY_PHASE_STRIP = NO;\nENABLE_T"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/KeychainAccess.xcconfig",
    "chars": 1171,
    "preview": "SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator watchos watchsimulator appletvos appletvsimulator;\nTARGETED_DEVICE"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/Release.xcconfig",
    "chars": 266,
    "preview": "#include \"Base.xcconfig\"\n\nBITCODE_GENERATION_MODE = bitcode;\nDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\nENABLE_NS_ASS"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/TestHost.xcconfig",
    "chars": 1398,
    "preview": "SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator;\nTARGETED_DEVICE_FAMILY = 1,2,3;\nSUPPOR"
  },
  {
    "path": "External/KeychainAccess/Lib/Configurations/Tests.xcconfig",
    "chars": 1244,
    "preview": "SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator;\nTARGETED_DEVICE_FAMILY = 1,2;\nSUPPORTS"
  },
  {
    "path": "External/KeychainAccess/Lib/Gemfile",
    "chars": 70,
    "preview": "source 'https://rubygems.org'\n\ngem 'rake'\ngem 'xcpretty'\ngem 'xcjobs'\n"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess/Info.plist",
    "chars": 808,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess/Keychain.swift",
    "chars": 123497,
    "preview": "//\n//  Keychain.swift\n//  KeychainAccess\n//\n//  Created by kishikawa katsumi on 2014/12/24.\n//  Copyright (c) 2014 kishi"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess/KeychainAccess.h",
    "chars": 1391,
    "preview": "//\n//  KeychainAccess.h\n//  KeychainAccess\n//\n//  Created by kishikawa katsumi on 2014/12/24.\n//  Copyright (c) 2014 kis"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess.xcodeproj/project.pbxproj",
    "chars": 20181,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/KeychainAccess.xcscheme",
    "chars": 4748,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1200\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccess.xcodeproj/xcshareddata/xcschemes/TestHost.xcscheme",
    "chars": 3233,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1200\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccessTests/EnumTests.swift",
    "chars": 13515,
    "preview": "//\n//  EnumTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 10/12/15.\n//  Copyright © 2015 kis"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccessTests/ErrorTypeTests.swift",
    "chars": 101154,
    "preview": "//\n//  ErrorTypeTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 10/12/15.\n//  Copyright © 201"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccessTests/Info.plist",
    "chars": 735,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccessTests/KeychainAccessTests.swift",
    "chars": 91760,
    "preview": "//\n//  KeychainAccessTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 2014/12/24.\n//  Copyrigh"
  },
  {
    "path": "External/KeychainAccess/Lib/KeychainAccessTests/SharedCredentialTests.swift",
    "chars": 3048,
    "preview": "//\n//  SharedCredentialTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 10/12/15.\n//  Copyrigh"
  },
  {
    "path": "External/KeychainAccess/Lib/Rakefile",
    "chars": 12886,
    "preview": "require 'xcjobs'\nrequire 'json'\n\ndef xcode_version\n  `xcodebuild -version`.split(\"\\n\").first.scan(/\\d+/).join('.')\nend\n\n"
  },
  {
    "path": "External/KeychainAccess/Lib/Scripts/add_key.sh",
    "chars": 918,
    "preview": "#!/bin/sh\n\nsecurity create-keychain -p travis build.keychain\nsecurity default-keychain -s build.keychain\nsecurity unlock"
  },
  {
    "path": "External/KeychainAccess/Lib/Scripts/decode_cert.sh",
    "chars": 348,
    "preview": "#!/bin/sh\n\nCERT_DIR=\"./Lib/Certificates\"\nFILES=('ios_developer.p12' 'developer_id_app.p12' 'iOS_Development.mobileprovis"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost/AppDelegate.swift",
    "chars": 1967,
    "preview": "//\n//  AppDelegate.swift\n//  TestHost\n//\n//  Created by kishikawa katsumi on 7/10/16.\n//  Copyright © 2016 kishikawa kat"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1495,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost/Info.plist",
    "chars": 1481,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost/TestHost.entitlements",
    "chars": 376,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/KeychainAccessTests-MacCatalyst/EnumTests.swift",
    "chars": 13515,
    "preview": "//\n//  EnumTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 10/12/15.\n//  Copyright © 2015 kis"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/KeychainAccessTests-MacCatalyst/ErrorTypeTests.swift",
    "chars": 101154,
    "preview": "//\n//  ErrorTypeTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 10/12/15.\n//  Copyright © 201"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/KeychainAccessTests-MacCatalyst/Info.plist",
    "chars": 727,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/KeychainAccessTests-MacCatalyst/KeychainAccessTests.swift",
    "chars": 91760,
    "preview": "//\n//  KeychainAccessTests.swift\n//  KeychainAccessTests\n//\n//  Created by kishikawa katsumi on 2014/12/24.\n//  Copyrigh"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/AppDelegate.swift",
    "chars": 1797,
    "preview": "//\n//  AppDelegate.swift\n//  TestHost-MacCatalyst\n//\n//  Created by Kishikawa Katsumi on 2019/10/21.\n//  Copyright © 201"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1590,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/Base.lproj/LaunchScreen.storyboard",
    "chars": 1665,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/Base.lproj/Main.storyboard",
    "chars": 1604,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/Info.plist",
    "chars": 2005,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/SceneDelegate.swift",
    "chars": 1340,
    "preview": "//\n//  SceneDelegate.swift\n//  TestHost-MacCatalyst\n//\n//  Created by Kishikawa Katsumi on 2019/10/21.\n//  Copyright © 2"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/TestHost-MacCatalyst.entitlements",
    "chars": 495,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst/ViewController.swift",
    "chars": 1366,
    "preview": "//\n//  ViewController.swift\n//  TestHost-MacCatalyst\n//\n//  Created by Kishikawa Katsumi on 2019/10/21.\n//  Copyright © "
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst.xcodeproj/project.pbxproj",
    "chars": 21389,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "External/KeychainAccess/Lib/TestHost-MacCatalyst/TestHost-MacCatalyst.xcodeproj/xcshareddata/xcschemes/TestHost-MacCatalyst.xcscheme",
    "chars": 2957,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1200\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "External/KeychainAccess/Package.swift",
    "chars": 530,
    "preview": "// swift-tools-version:5.0\n\n//  Package.swift\n//  KeychainAccess\n//\n//  Created by kishikawa katsumi on 2015/12/4.\n//  C"
  },
  {
    "path": "External/KeychainAccess/Package@swift-5.3.swift",
    "chars": 554,
    "preview": "// swift-tools-version:5.3\n\n//  Package.swift\n//  KeychainAccess\n//\n//  Created by kishikawa katsumi on 2015/12/4.\n//  C"
  },
  {
    "path": "External/KeychainAccess/README.md",
    "chars": 19249,
    "preview": "# KeychainAccess\n\n[![Build Status](https://travis-ci.com/kishikawakatsumi/KeychainAccess.svg?branch=master)](https://tra"
  },
  {
    "path": "External/KeychainAccess/Sources/Keychain.swift",
    "chars": 123497,
    "preview": "//\n//  Keychain.swift\n//  KeychainAccess\n//\n//  Created by kishikawa katsumi on 2014/12/24.\n//  Copyright (c) 2014 kishi"
  },
  {
    "path": "External/SymbolPicker/.gitignore",
    "chars": 2192,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "External/SymbolPicker/LICENSE",
    "chars": 1078,
    "preview": "MIT License\n\nCopyright (c) 2022 Yubo Qin & Lakr Aream\n\nPermission is hereby granted, free of charge, to any person obtai"
  },
  {
    "path": "External/SymbolPicker/Package.swift",
    "chars": 728,
    "preview": "// swift-tools-version:5.5\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
  },
  {
    "path": "External/SymbolPicker/README.md",
    "chars": 1651,
    "preview": "# SymbolPicker\n\nA simple and cross-platform SFSymbol picker for SwiftUI\n\n![](https://img.shields.io/badge/License-MIT-gr"
  },
  {
    "path": "External/SymbolPicker/Sources/SymbolPicker/Resources/en.lproj/Localizable.strings",
    "chars": 111,
    "preview": "\"search_placeholder\" = \"Search\";\n\"cancel\" = \"Cancel\";\n\"sf_symbol_picker\" = \"Select a symbol\";\n\"done\" = \"Done\";\n"
  },
  {
    "path": "External/SymbolPicker/Sources/SymbolPicker/Resources/sfsymbols.txt",
    "chars": 64474,
    "preview": "square.and.arrow.up\nsquare.and.arrow.up.fill\nsquare.and.arrow.up.circle\nsquare.and.arrow.up.circle.fill\nsquare.and.arrow"
  },
  {
    "path": "External/SymbolPicker/Sources/SymbolPicker/Resources/zh_CN.lproj/Localizable.strings",
    "chars": 90,
    "preview": "\"search_placeholder\" = \"搜索\";\n\"cancel\" = \"取消\";\n\"sf_symbol_picker\" = \"选择符号\";\n\"done\" = \"确定\";\n"
  },
  {
    "path": "External/SymbolPicker/Sources/SymbolPicker/SymbolPicker.swift",
    "chars": 8580,
    "preview": "//\n//  SymbolPicker.swift\n//  SymbolPicker\n//\n//  Created by Yubo Qin on 2/14/22.\n//\n\nimport SwiftUI\n\n#if os(macOS)\nimpo"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2022 Lakr Aream\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 2410,
    "preview": "# ActionBee\n\nActionBee is a programmable pasteboard action trigger.\n\n![Screenshot](./Resources/Demo/ScreenshotMain.png)\n"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.gitignore",
    "chars": 1495,
    "preview": "!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n!default.xcworkspace\n*.dSYM\n*.dSYM.zip\n*.hmap\n"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Binary/CommandLineBridge/CommandLineBridge/main.swift",
    "chars": 1207,
    "preview": "//\n//  main.swift\n//  CommandLineBridge\n//\n//  Created by Lakr Aream on 2022/8/13.\n//\n\nimport Communicator\nimport Defini"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/project.pbxproj",
    "chars": 11009,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/xcshareddata/xcschemes/CommandLineBridge.xcscheme",
    "chars": 3258,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1400\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Communicator/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Communicator/Package.swift",
    "chars": 372,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Communicator/Sources/Communicator/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Communicator/Sources/Communicator/Communicator.m",
    "chars": 906,
    "preview": "//\n//  Communicator.m\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import \"Communicator.h\"\n\nNSData *argumentData"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Communicator/Sources/Communicator/include/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Definition/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Definition/Package.swift",
    "chars": 364,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/Definition/Sources/Definition/Definition.swift",
    "chars": 1422,
    "preview": "import Foundation\n\nprivate let decoder = JSONDecoder()\nprivate let encoder = JSONEncoder()\n\npublic struct ArgumentData: "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/compile.sh",
    "chars": 1310,
    "preview": "#!/bin/bash\n\n# this compiler script is designed to issue binary to ./.build/cli\n\nset -e\n\ncd \"$(dirname \"$0\")\"/../\n\necho "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/.supplement/launch.sh",
    "chars": 57,
    "preview": "#!/bin/bash\n\nset -e\n\ncd \"$(dirname \"$0\")\"/../\n\n.build/cli"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/App.xcworkspace/contents.xcworkspacedata",
    "chars": 411,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Source\">\n   </"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/Package.swift",
    "chars": 459,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/Sources/Source/CleanerRule/CleanerRule.swift",
    "chars": 753,
    "preview": "//\n//  DomainRule.swift\n//\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport Foundation\n\nlet cleaners: [CleanerRule]"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/Sources/Source/CleanerRule/Rule+BiliBili.swift",
    "chars": 1825,
    "preview": "//\n//  File.swift\n//\n//\n//  Created by Lakr Aream on 2022/8/18.\n//\n\nimport Foundation\n\nclass BiliBili: CleanerRule {\n   "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/Sources/Source/CleanerRule/Rule+Twitter.swift",
    "chars": 522,
    "preview": "//\n//  CleanerRule+Twitter.swift\n//\n//\n//  Created by Lakr Aream on 2022/8/17.\n//\n\nimport Foundation\n\nclass Twitter: Cle"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Link Cleaner/Source/Sources/Source/Source.swift",
    "chars": 3439,
    "preview": "// ActionBee\n//\n// Executable Source Template - v1.0\n//\n\nimport Definition\nimport Foundation\nimport Cocoa\n\npublic enum A"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.gitignore",
    "chars": 1495,
    "preview": "!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n!default.xcworkspace\n*.dSYM\n*.dSYM.zip\n*.hmap\n"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Binary/CommandLineBridge/CommandLineBridge/main.swift",
    "chars": 1207,
    "preview": "//\n//  main.swift\n//  CommandLineBridge\n//\n//  Created by Lakr Aream on 2022/8/13.\n//\n\nimport Communicator\nimport Defini"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/project.pbxproj",
    "chars": 11009,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/xcshareddata/xcschemes/CommandLineBridge.xcscheme",
    "chars": 3258,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1400\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Communicator/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Communicator/Package.swift",
    "chars": 372,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Communicator/Sources/Communicator/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Communicator/Sources/Communicator/Communicator.m",
    "chars": 737,
    "preview": "//\n//  Communicator.m\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import \"Communicator.h\"\n\nNSData *argumentData"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Communicator/Sources/Communicator/include/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Definition/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Definition/Package.swift",
    "chars": 364,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/Definition/Sources/Definition/Definition.swift",
    "chars": 1422,
    "preview": "import Foundation\n\nprivate let decoder = JSONDecoder()\nprivate let encoder = JSONEncoder()\n\npublic struct ArgumentData: "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/compile.sh",
    "chars": 1310,
    "preview": "#!/bin/bash\n\n# this compiler script is designed to issue binary to ./.build/cli\n\nset -e\n\ncd \"$(dirname \"$0\")\"/../\n\necho "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/.supplement/launch.sh",
    "chars": 57,
    "preview": "#!/bin/bash\n\nset -e\n\ncd \"$(dirname \"$0\")\"/../\n\n.build/cli"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/App.xcworkspace/contents.xcworkspacedata",
    "chars": 411,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Source\">\n   </"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/Source/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/Source/Package.swift",
    "chars": 459,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Multiline Init Formatter/Source/Sources/Source/Source.swift",
    "chars": 1119,
    "preview": "// ActionBee\n//\n// Executable Source Template - v1.0\n//\n\nimport Definition\nimport Foundation\n\n/*\n\n ⚠️\n\n Only changes wit"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.gitignore",
    "chars": 1495,
    "preview": "!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n!default.xcworkspace\n*.dSYM\n*.dSYM.zip\n*.hmap\n"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Binary/CommandLineBridge/CommandLineBridge/main.swift",
    "chars": 1207,
    "preview": "//\n//  main.swift\n//  CommandLineBridge\n//\n//  Created by Lakr Aream on 2022/8/13.\n//\n\nimport Communicator\nimport Defini"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/project.pbxproj",
    "chars": 11009,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Binary/CommandLineBridge/CommandLineBridge.xcodeproj/xcshareddata/xcschemes/CommandLineBridge.xcscheme",
    "chars": 3258,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1400\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Communicator/.gitignore",
    "chars": 165,
    "preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Communicator/Package.swift",
    "chars": 372,
    "preview": "// swift-tools-version: 5.5\n// The swift-tools-version declares the minimum version of Swift required to build this pack"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Communicator/Sources/Communicator/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Communicator/Sources/Communicator/Communicator.m",
    "chars": 737,
    "preview": "//\n//  Communicator.m\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import \"Communicator.h\"\n\nNSData *argumentData"
  },
  {
    "path": "Resources/ModuleSample/Module Export - Quick SFImage/.supplement/Communicator/Sources/Communicator/include/Communicator.h",
    "chars": 258,
    "preview": "//\n//  Communicator.h\n//  \n//\n//  Created by Lakr Aream on 2022/8/14.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface "
  }
]

// ... and 86 more files (download for full content)

About this extraction

This page contains the full source code of the Lakr233/ActionBee GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 286 files (1.3 MB), approximately 352.7k tokens, and a symbol index with 10 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!