mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-11-15 02:49:33 +01:00
Adds packages/desktop, a small native app (Rust: tao, wry/WKWebView, muda, objc2) that opens Codeman in its own window. The universal app is about 5 MB (3.2 MB as a DMG) and runs on macOS 11.3 or later. - Connect screen with two tabs. This Mac finds the local Codeman and offers Open, Start or Install. Start uses launchd for a LaunchAgent install and codeman web -d otherwise. It never starts a second server while one runs, because two servers on one data dir share live sessions. Another machine connects by address (recent servers, Keychain logins) and can install Codeman there over SSH. - Installs run Codeman's install.sh in Terminal from a self-deleting .command script. The installer needs a terminal for sudo, Homebrew and ssh. A local install uses --local --service and the first free port from 3000, and the app opens Codeman once it answers. - The local Codeman's login is read from its LaunchAgent or ~/.codeman/.env. It is sent only to 127.0.0.1 on that port, only while the user's own Codeman process holds it, and is never saved. - Native JS dialogs (alert, confirm, prompt) and HTTP Basic challenge answers, both scoped to Codeman's own pages, so the page keeps working after a server restart. App cookies are cleared before every connect. - Pop-outs through window.CodemanHost, with an allowlist (webview/ never opens a window), external links in the default browser, downloads to ~/Downloads, real full screen and window state that is remembered. - The connect page refuses a WebKit older than Safari 16.4, which Codeman's terminal needs. Codeman side: viewSubagentTranscript shows a toast when the pop-up is refused instead of failing, with zh-CN strings and a test that pins them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60 lines
2.5 KiB
Plaintext
60 lines
2.5 KiB
Plaintext
<?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>CFBundleName</key>
|
|
<string>Codeman</string>
|
|
<key>CFBundleDisplayName</key>
|
|
<string>Codeman</string>
|
|
<key>CFBundleIdentifier</key>
|
|
<string>com.getcodeman.desktop</string>
|
|
<key>CFBundleVersion</key>
|
|
<string>__VERSION__</string>
|
|
<key>CFBundleShortVersionString</key>
|
|
<string>__VERSION__</string>
|
|
<key>CFBundleExecutable</key>
|
|
<string>codeman-desktop</string>
|
|
<key>CFBundleIconFile</key>
|
|
<string>Codeman</string>
|
|
<key>CFBundlePackageType</key>
|
|
<string>APPL</string>
|
|
<key>CFBundleInfoDictionaryVersion</key>
|
|
<string>6.0</string>
|
|
<!-- 11.3 is where WKDownload arrived; wry saves files through it. Below
|
|
that a Download link replaces the window or saves nothing.
|
|
scripts/bundle-macos.sh builds for this version too. -->
|
|
<key>LSMinimumSystemVersion</key>
|
|
<string>11.3</string>
|
|
<key>LSApplicationCategoryType</key>
|
|
<string>public.app-category.developer-tools</string>
|
|
<key>NSHighResolutionCapable</key>
|
|
<true/>
|
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
|
<true/>
|
|
<key>NSHumanReadableCopyright</key>
|
|
<string>MIT License, Codeman Contributors</string>
|
|
<!-- Voice dictation and gesture control ask for these; without the
|
|
strings macOS kills the app the first time a page requests them. -->
|
|
<key>NSMicrophoneUsageDescription</key>
|
|
<string>Codeman uses the microphone for voice dictation when you turn it on.</string>
|
|
<key>NSCameraUsageDescription</key>
|
|
<string>Codeman uses the camera for hand-gesture control when you turn it on.</string>
|
|
<!-- macOS 15 asks before an app reaches the local network (a LAN address,
|
|
a .local name), and shows this text in that question. A process the
|
|
app starts counts as the app (Apple TN3179), so a server started with
|
|
"Start Codeman on this Mac" runs under the same answer. -->
|
|
<key>NSLocalNetworkUsageDescription</key>
|
|
<string>Codeman connects to Codeman servers on your local network. A Codeman server you start from this app uses the same permission for what it reaches on the network.</string>
|
|
<!-- App Transport Security would block plain http:// to a host NAME
|
|
(my-mac.local, a LAN box). IP literals are exempt, which is why
|
|
http://127.0.0.1 works without this. -->
|
|
<key>NSAppTransportSecurity</key>
|
|
<dict>
|
|
<key>NSAllowsLocalNetworking</key>
|
|
<true/>
|
|
<key>NSAllowsArbitraryLoadsInWebContent</key>
|
|
<true/>
|
|
</dict>
|
|
</dict>
|
|
</plist>
|