mirror of https://github.com/openclaw/openclaw.git
refactor: replace bot.molt identifiers with ai.openclaw
This commit is contained in:
parent
6e97470515
commit
52d933b3a9
|
|
@ -7,6 +7,7 @@ Docs: https://docs.openclaw.ai
|
||||||
### Changes
|
### Changes
|
||||||
|
|
||||||
- Android/Chat: improve streaming delivery handling and markdown rendering quality in the native Android chat UI, including better GitHub-flavored markdown behavior. (#26079) Thanks @obviyus.
|
- Android/Chat: improve streaming delivery handling and markdown rendering quality in the native Android chat UI, including better GitHub-flavored markdown behavior. (#26079) Thanks @obviyus.
|
||||||
|
- Branding/Docs + Apple surfaces: replace remaining `bot.molt` launchd label, bundle-id, logging subsystem, and command examples with `ai.openclaw` across docs, iOS app surfaces, helper scripts, and CLI test fixtures.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ final class NetworkStatusService: @unchecked Sendable {
|
||||||
func currentStatus(timeoutMs: Int = 1500) async -> OpenClawNetworkStatusPayload {
|
func currentStatus(timeoutMs: Int = 1500) async -> OpenClawNetworkStatusPayload {
|
||||||
await withCheckedContinuation { cont in
|
await withCheckedContinuation { cont in
|
||||||
let monitor = NWPathMonitor()
|
let monitor = NWPathMonitor()
|
||||||
let queue = DispatchQueue(label: "bot.molt.ios.network-status")
|
let queue = DispatchQueue(label: "ai.openclaw.ios.network-status")
|
||||||
let state = NetworkStatusState()
|
let state = NetworkStatusState()
|
||||||
|
|
||||||
monitor.pathUpdateHandler = { path in
|
monitor.pathUpdateHandler = { path in
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ final class GatewayDiscoveryModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.browsers[domain] = browser
|
self.browsers[domain] = browser
|
||||||
browser.start(queue: DispatchQueue(label: "bot.molt.ios.gateway-discovery.\(domain)"))
|
browser.start(queue: DispatchQueue(label: "ai.openclaw.ios.gateway-discovery.\(domain)"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ final class ScreenRecordService: @unchecked Sendable {
|
||||||
outPath: outPath)
|
outPath: outPath)
|
||||||
|
|
||||||
let state = CaptureState()
|
let state = CaptureState()
|
||||||
let recordQueue = DispatchQueue(label: "bot.molt.screenrecord")
|
let recordQueue = DispatchQueue(label: "ai.openclaw.screenrecord")
|
||||||
|
|
||||||
try await self.startCapture(state: state, config: config, recordQueue: recordQueue)
|
try await self.startCapture(state: state, config: config, recordQueue: recordQueue)
|
||||||
try await Task.sleep(nanoseconds: UInt64(config.durationMs) * 1_000_000)
|
try await Task.sleep(nanoseconds: UInt64(config.durationMs) * 1_000_000)
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ final class TalkModeManager: NSObject {
|
||||||
private var incrementalSpeechPrefetch: IncrementalSpeechPrefetchState?
|
private var incrementalSpeechPrefetch: IncrementalSpeechPrefetchState?
|
||||||
private var incrementalSpeechPrefetchMonitorTask: Task<Void, Never>?
|
private var incrementalSpeechPrefetchMonitorTask: Task<Void, Never>?
|
||||||
|
|
||||||
private let logger = Logger(subsystem: "bot.molt", category: "TalkMode")
|
private let logger = Logger(subsystem: "ai.openclaw", category: "TalkMode")
|
||||||
|
|
||||||
init(allowSimulatorCapture: Bool = false) {
|
init(allowSimulatorCapture: Bool = false) {
|
||||||
self.allowSimulatorCapture = allowSimulatorCapture
|
self.allowSimulatorCapture = allowSimulatorCapture
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import Testing
|
||||||
|
|
||||||
@Suite struct KeychainStoreTests {
|
@Suite struct KeychainStoreTests {
|
||||||
@Test func saveLoadUpdateDeleteRoundTrip() {
|
@Test func saveLoadUpdateDeleteRoundTrip() {
|
||||||
let service = "bot.molt.tests.\(UUID().uuidString)"
|
let service = "ai.openclaw.tests.\(UUID().uuidString)"
|
||||||
let account = "value"
|
let account = "value"
|
||||||
|
|
||||||
#expect(KeychainStore.delete(service: service, account: account))
|
#expect(KeychainStore.delete(service: service, account: account))
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
app_identifier("bot.molt.ios")
|
app_identifier("ai.openclaw.ios")
|
||||||
|
|
||||||
# Auth is expected via App Store Connect API key.
|
# Auth is expected via App Store Connect API key.
|
||||||
# Provide either:
|
# Provide either:
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ To have the SSH tunnel start automatically when you log in, create a Launch Agen
|
||||||
|
|
||||||
### Create the PLIST file
|
### Create the PLIST file
|
||||||
|
|
||||||
Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`:
|
Save this as `~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist`:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
@ -92,7 +92,7 @@ Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`:
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>Label</key>
|
<key>Label</key>
|
||||||
<string>bot.molt.ssh-tunnel</string>
|
<string>ai.openclaw.ssh-tunnel</string>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
<array>
|
<array>
|
||||||
<string>/usr/bin/ssh</string>
|
<string>/usr/bin/ssh</string>
|
||||||
|
|
@ -110,7 +110,7 @@ Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`:
|
||||||
### Load the Launch Agent
|
### Load the Launch Agent
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist
|
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
The tunnel will now:
|
The tunnel will now:
|
||||||
|
|
@ -135,13 +135,13 @@ lsof -i :18789
|
||||||
**Restart the tunnel:**
|
**Restart the tunnel:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl kickstart -k gui/$UID/bot.molt.ssh-tunnel
|
launchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnel
|
||||||
```
|
```
|
||||||
|
|
||||||
**Stop the tunnel:**
|
**Stop the tunnel:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl bootout gui/$UID/bot.molt.ssh-tunnel
|
launchctl bootout gui/$UID/ai.openclaw.ssh-tunnel
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -2475,7 +2475,7 @@ Quick setup (recommended):
|
||||||
- Set a unique `gateway.port` in each profile config (or pass `--port` for manual runs).
|
- Set a unique `gateway.port` in each profile config (or pass `--port` for manual runs).
|
||||||
- Install a per-profile service: `openclaw --profile <name> gateway install`.
|
- Install a per-profile service: `openclaw --profile <name> gateway install`.
|
||||||
|
|
||||||
Profiles also suffix service names (`bot.molt.<profile>`; legacy `com.openclaw.*`, `openclaw-gateway-<profile>.service`, `OpenClaw Gateway (<profile>)`).
|
Profiles also suffix service names (`ai.openclaw.<profile>`; legacy `com.openclaw.*`, `openclaw-gateway-<profile>.service`, `OpenClaw Gateway (<profile>)`).
|
||||||
Full guide: [Multiple gateways](/gateway/multiple-gateways).
|
Full guide: [Multiple gateways](/gateway/multiple-gateways).
|
||||||
|
|
||||||
### What does invalid handshake code 1008 mean
|
### What does invalid handshake code 1008 mean
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ On macOS, the GUI app does not automatically inherit shell env vars. You can
|
||||||
also enable Nix mode via defaults:
|
also enable Nix mode via defaults:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
defaults write bot.molt.mac openclaw.nixMode -bool true
|
defaults write ai.openclaw.mac openclaw.nixMode -bool true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Config + state paths
|
### Config + state paths
|
||||||
|
|
|
||||||
|
|
@ -81,14 +81,14 @@ Use this if the gateway service keeps running but `openclaw` is missing.
|
||||||
|
|
||||||
### macOS (launchd)
|
### macOS (launchd)
|
||||||
|
|
||||||
Default label is `bot.molt.gateway` (or `bot.molt.<profile>`; legacy `com.openclaw.*` may still exist):
|
Default label is `ai.openclaw.gateway` (or `ai.openclaw.<profile>`; legacy `com.openclaw.*` may still exist):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl bootout gui/$UID/bot.molt.gateway
|
launchctl bootout gui/$UID/ai.openclaw.gateway
|
||||||
rm -f ~/Library/LaunchAgents/bot.molt.gateway.plist
|
rm -f ~/Library/LaunchAgents/ai.openclaw.gateway.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
If you used a profile, replace the label and plist name with `bot.molt.<profile>`. Remove any legacy `com.openclaw.*` plists if present.
|
If you used a profile, replace the label and plist name with `ai.openclaw.<profile>`. Remove any legacy `com.openclaw.*` plists if present.
|
||||||
|
|
||||||
### Linux (systemd user unit)
|
### Linux (systemd user unit)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,7 @@ openclaw logs --follow
|
||||||
|
|
||||||
If you’re supervised:
|
If you’re supervised:
|
||||||
|
|
||||||
- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/bot.molt.gateway` (use `bot.molt.<profile>`; legacy `com.openclaw.*` still works)
|
- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/ai.openclaw.gateway` (use `ai.openclaw.<profile>`; legacy `com.openclaw.*` still works)
|
||||||
- Linux systemd user service: `systemctl --user restart openclaw-gateway[-<profile>].service`
|
- Linux systemd user service: `systemctl --user restart openclaw-gateway[-<profile>].service`
|
||||||
- Windows (WSL2): `systemctl --user restart openclaw-gateway[-<profile>].service`
|
- Windows (WSL2): `systemctl --user restart openclaw-gateway[-<profile>].service`
|
||||||
- `launchctl`/`systemctl` only work if the service is installed; otherwise run `openclaw gateway install`.
|
- `launchctl`/`systemctl` only work if the service is installed; otherwise run `openclaw gateway install`.
|
||||||
|
|
|
||||||
|
|
@ -49,5 +49,5 @@ Use one of these (all supported):
|
||||||
|
|
||||||
The service target depends on OS:
|
The service target depends on OS:
|
||||||
|
|
||||||
- macOS: LaunchAgent (`bot.molt.gateway` or `bot.molt.<profile>`; legacy `com.openclaw.*`)
|
- macOS: LaunchAgent (`ai.openclaw.gateway` or `ai.openclaw.<profile>`; legacy `com.openclaw.*`)
|
||||||
- Linux/WSL2: systemd user service (`openclaw-gateway[-<profile>].service`)
|
- Linux/WSL2: systemd user service (`openclaw-gateway[-<profile>].service`)
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,12 @@ The macOS app’s **Install CLI** button runs the same flow via npm/pnpm (bun no
|
||||||
|
|
||||||
Label:
|
Label:
|
||||||
|
|
||||||
- `bot.molt.gateway` (or `bot.molt.<profile>`; legacy `com.openclaw.*` may remain)
|
- `ai.openclaw.gateway` (or `ai.openclaw.<profile>`; legacy `com.openclaw.*` may remain)
|
||||||
|
|
||||||
Plist location (per‑user):
|
Plist location (per‑user):
|
||||||
|
|
||||||
- `~/Library/LaunchAgents/bot.molt.gateway.plist`
|
- `~/Library/LaunchAgents/ai.openclaw.gateway.plist`
|
||||||
(or `~/Library/LaunchAgents/bot.molt.<profile>.plist`)
|
(or `~/Library/LaunchAgents/ai.openclaw.<profile>.plist`)
|
||||||
|
|
||||||
Manager:
|
Manager:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ If you need tighter coupling to the UI, run the Gateway manually in a terminal.
|
||||||
|
|
||||||
## Default behavior (launchd)
|
## Default behavior (launchd)
|
||||||
|
|
||||||
- The app installs a per‑user LaunchAgent labeled `bot.molt.gateway`
|
- The app installs a per‑user LaunchAgent labeled `ai.openclaw.gateway`
|
||||||
(or `bot.molt.<profile>` when using `--profile`/`OPENCLAW_PROFILE`; legacy `com.openclaw.*` is supported).
|
(or `ai.openclaw.<profile>` when using `--profile`/`OPENCLAW_PROFILE`; legacy `com.openclaw.*` is supported).
|
||||||
- When Local mode is enabled, the app ensures the LaunchAgent is loaded and
|
- When Local mode is enabled, the app ensures the LaunchAgent is loaded and
|
||||||
starts the Gateway if needed.
|
starts the Gateway if needed.
|
||||||
- Logs are written to the launchd gateway log path (visible in Debug Settings).
|
- Logs are written to the launchd gateway log path (visible in Debug Settings).
|
||||||
|
|
@ -27,11 +27,11 @@ If you need tighter coupling to the UI, run the Gateway manually in a terminal.
|
||||||
Common commands:
|
Common commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl kickstart -k gui/$UID/bot.molt.gateway
|
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
|
||||||
launchctl bootout gui/$UID/bot.molt.gateway
|
launchctl bootout gui/$UID/ai.openclaw.gateway
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace the label with `bot.molt.<profile>` when running a named profile.
|
Replace the label with `ai.openclaw.<profile>` when running a named profile.
|
||||||
|
|
||||||
## Unsigned dev builds
|
## Unsigned dev builds
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ If the app crashes when you try to allow **Speech Recognition** or **Microphone*
|
||||||
1. Reset the TCC permissions:
|
1. Reset the TCC permissions:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
tccutil reset All bot.molt.mac.debug
|
tccutil reset All ai.openclaw.mac.debug
|
||||||
```
|
```
|
||||||
|
|
||||||
2. If that fails, change the `BUNDLE_ID` temporarily in [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh) to force a "clean slate" from macOS.
|
2. If that fails, change the `BUNDLE_ID` temporarily in [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh) to force a "clean slate" from macOS.
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,12 @@ Notes:
|
||||||
|
|
||||||
Unified logging redacts most payloads unless a subsystem opts into `privacy -off`. Per Peter's write-up on macOS [logging privacy shenanigans](https://steipete.me/posts/2025/logging-privacy-shenanigans) (2025) this is controlled by a plist in `/Library/Preferences/Logging/Subsystems/` keyed by the subsystem name. Only new log entries pick up the flag, so enable it before reproducing an issue.
|
Unified logging redacts most payloads unless a subsystem opts into `privacy -off`. Per Peter's write-up on macOS [logging privacy shenanigans](https://steipete.me/posts/2025/logging-privacy-shenanigans) (2025) this is controlled by a plist in `/Library/Preferences/Logging/Subsystems/` keyed by the subsystem name. Only new log entries pick up the flag, so enable it before reproducing an issue.
|
||||||
|
|
||||||
## Enable for OpenClaw (`bot.molt`)
|
## Enable for OpenClaw (`ai.openclaw`)
|
||||||
|
|
||||||
- Write the plist to a temp file first, then install it atomically as root:
|
- Write the plist to a temp file first, then install it atomically as root:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat <<'EOF' >/tmp/bot.molt.plist
|
cat <<'EOF' >/tmp/ai.openclaw.plist
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
|
|
@ -44,7 +44,7 @@ cat <<'EOF' >/tmp/bot.molt.plist
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
EOF
|
EOF
|
||||||
sudo install -m 644 -o root -g wheel /tmp/bot.molt.plist /Library/Preferences/Logging/Subsystems/bot.molt.plist
|
sudo install -m 644 -o root -g wheel /tmp/ai.openclaw.plist /Library/Preferences/Logging/Subsystems/ai.openclaw.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
- No reboot is required; logd notices the file quickly, but only new log lines will include private payloads.
|
- No reboot is required; logd notices the file quickly, but only new log lines will include private payloads.
|
||||||
|
|
@ -52,6 +52,6 @@ sudo install -m 644 -o root -g wheel /tmp/bot.molt.plist /Library/Preferences/Lo
|
||||||
|
|
||||||
## Disable after debugging
|
## Disable after debugging
|
||||||
|
|
||||||
- Remove the override: `sudo rm /Library/Preferences/Logging/Subsystems/bot.molt.plist`.
|
- Remove the override: `sudo rm /Library/Preferences/Logging/Subsystems/ai.openclaw.plist`.
|
||||||
- Optionally run `sudo log config --reload` to force logd to drop the override immediately.
|
- Optionally run `sudo log config --reload` to force logd to drop the override immediately.
|
||||||
- Remember this surface can include phone numbers and message bodies; keep the plist in place only while you actively need the extra detail.
|
- Remember this surface can include phone numbers and message bodies; keep the plist in place only while you actively need the extra detail.
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ grants, and prompts can disappear entirely until the stale entries are cleared.
|
||||||
Example resets (replace bundle ID as needed):
|
Example resets (replace bundle ID as needed):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo tccutil reset Accessibility bot.molt.mac
|
sudo tccutil reset Accessibility ai.openclaw.mac
|
||||||
sudo tccutil reset ScreenCapture bot.molt.mac
|
sudo tccutil reset ScreenCapture ai.openclaw.mac
|
||||||
sudo tccutil reset AppleEvents
|
sudo tccutil reset AppleEvents
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ Notes:
|
||||||
```bash
|
```bash
|
||||||
# From repo root; set release IDs so Sparkle feed is enabled.
|
# From repo root; set release IDs so Sparkle feed is enabled.
|
||||||
# APP_BUILD must be numeric + monotonic for Sparkle compare.
|
# APP_BUILD must be numeric + monotonic for Sparkle compare.
|
||||||
BUNDLE_ID=bot.molt.mac \
|
BUNDLE_ID=ai.openclaw.mac \
|
||||||
APP_VERSION=2026.2.25 \
|
APP_VERSION=2026.2.25 \
|
||||||
APP_BUILD="$(git rev-list --count HEAD)" \
|
APP_BUILD="$(git rev-list --count HEAD)" \
|
||||||
BUILD_CONFIG=release \
|
BUILD_CONFIG=release \
|
||||||
|
|
@ -51,7 +51,7 @@ scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.2.25.dmg
|
||||||
# xcrun notarytool store-credentials "openclaw-notary" \
|
# xcrun notarytool store-credentials "openclaw-notary" \
|
||||||
# --apple-id "<apple-id>" --team-id "<team-id>" --password "<app-specific-password>"
|
# --apple-id "<apple-id>" --team-id "<team-id>" --password "<app-specific-password>"
|
||||||
NOTARIZE=1 NOTARYTOOL_PROFILE=openclaw-notary \
|
NOTARIZE=1 NOTARYTOOL_PROFILE=openclaw-notary \
|
||||||
BUNDLE_ID=bot.molt.mac \
|
BUNDLE_ID=ai.openclaw.mac \
|
||||||
APP_VERSION=2026.2.25 \
|
APP_VERSION=2026.2.25 \
|
||||||
APP_BUILD="$(git rev-list --count HEAD)" \
|
APP_BUILD="$(git rev-list --count HEAD)" \
|
||||||
BUILD_CONFIG=release \
|
BUILD_CONFIG=release \
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ Audience: macOS app contributors. Goal: keep the voice overlay predictable when
|
||||||
- Push-to-talk: no delay; wake-word: optional delay for auto-send.
|
- Push-to-talk: no delay; wake-word: optional delay for auto-send.
|
||||||
- Apply a short cooldown to the wake runtime after push-to-talk finishes so wake-word doesn’t immediately retrigger.
|
- Apply a short cooldown to the wake runtime after push-to-talk finishes so wake-word doesn’t immediately retrigger.
|
||||||
5. **Logging**
|
5. **Logging**
|
||||||
- Coordinator emits `.info` logs in subsystem `bot.molt`, categories `voicewake.overlay` and `voicewake.chime`.
|
- Coordinator emits `.info` logs in subsystem `ai.openclaw`, categories `voicewake.overlay` and `voicewake.chime`.
|
||||||
- Key events: `session_started`, `adopted_by_push_to_talk`, `partial`, `finalized`, `send`, `dismiss`, `cancel`, `cooldown`.
|
- Key events: `session_started`, `adopted_by_push_to_talk`, `partial`, `finalized`, `send`, `dismiss`, `cancel`, `cooldown`.
|
||||||
|
|
||||||
## Debugging checklist
|
## Debugging checklist
|
||||||
|
|
@ -45,7 +45,7 @@ Audience: macOS app contributors. Goal: keep the voice overlay predictable when
|
||||||
- Stream logs while reproducing a sticky overlay:
|
- Stream logs while reproducing a sticky overlay:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo log stream --predicate 'subsystem == "bot.molt" AND category CONTAINS "voicewake"' --level info --style compact
|
sudo log stream --predicate 'subsystem == "ai.openclaw" AND category CONTAINS "voicewake"' --level info --style compact
|
||||||
```
|
```
|
||||||
|
|
||||||
- Verify only one active session token; stale callbacks should be dropped by the coordinator.
|
- Verify only one active session token; stale callbacks should be dropped by the coordinator.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ agent (with a session switcher for other sessions).
|
||||||
dist/OpenClaw.app/Contents/MacOS/OpenClaw --webchat
|
dist/OpenClaw.app/Contents/MacOS/OpenClaw --webchat
|
||||||
```
|
```
|
||||||
|
|
||||||
- Logs: `./scripts/clawlog.sh` (subsystem `bot.molt`, category `WebChatSwiftUI`).
|
- Logs: `./scripts/clawlog.sh` (subsystem `ai.openclaw`, category `WebChatSwiftUI`).
|
||||||
|
|
||||||
## How it’s wired
|
## How it’s wired
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,15 @@ capabilities to the agent as a node.
|
||||||
|
|
||||||
## Launchd control
|
## Launchd control
|
||||||
|
|
||||||
The app manages a per‑user LaunchAgent labeled `bot.molt.gateway`
|
The app manages a per‑user LaunchAgent labeled `ai.openclaw.gateway`
|
||||||
(or `bot.molt.<profile>` when using `--profile`/`OPENCLAW_PROFILE`; legacy `com.openclaw.*` still unloads).
|
(or `ai.openclaw.<profile>` when using `--profile`/`OPENCLAW_PROFILE`; legacy `com.openclaw.*` still unloads).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl kickstart -k gui/$UID/bot.molt.gateway
|
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
|
||||||
launchctl bootout gui/$UID/bot.molt.gateway
|
launchctl bootout gui/$UID/ai.openclaw.gateway
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace the label with `bot.molt.<profile>` when running a named profile.
|
Replace the label with `ai.openclaw.<profile>` when running a named profile.
|
||||||
|
|
||||||
If the LaunchAgent isn’t installed, enable it from the app or run
|
If the LaunchAgent isn’t installed, enable it from the app or run
|
||||||
`openclaw gateway install`.
|
`openclaw gateway install`.
|
||||||
|
|
|
||||||
|
|
@ -265,5 +265,5 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$NO_SIGN" -eq 1 ] && [ "$ATTACH_ONLY" -ne 1 ]; then
|
if [ "$NO_SIGN" -eq 1 ] && [ "$ATTACH_ONLY" -ne 1 ]; then
|
||||||
run_step "show gateway launch agent args (unsigned)" bash -lc "/usr/bin/plutil -p '${HOME}/Library/LaunchAgents/bot.molt.gateway.plist' | head -n 40 || true"
|
run_step "show gateway launch agent args (unsigned)" bash -lc "/usr/bin/plutil -p '${HOME}/Library/LaunchAgents/ai.openclaw.gateway.plist' | head -n 40 || true"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ describe("daemon-cli coverage", () => {
|
||||||
OPENCLAW_CONFIG_PATH: "/tmp/openclaw-daemon-state/openclaw.json",
|
OPENCLAW_CONFIG_PATH: "/tmp/openclaw-daemon-state/openclaw.json",
|
||||||
OPENCLAW_GATEWAY_PORT: "19001",
|
OPENCLAW_GATEWAY_PORT: "19001",
|
||||||
},
|
},
|
||||||
sourcePath: "/tmp/bot.molt.gateway.plist",
|
sourcePath: "/tmp/ai.openclaw.gateway.plist",
|
||||||
});
|
});
|
||||||
|
|
||||||
await runDaemonCommand(["daemon", "status", "--json"]);
|
await runDaemonCommand(["daemon", "status", "--json"]);
|
||||||
|
|
|
||||||
|
|
@ -297,7 +297,7 @@ vi.mock("../daemon/service.js", () => ({
|
||||||
readRuntime: async () => ({ status: "running", pid: 1234 }),
|
readRuntime: async () => ({ status: "running", pid: 1234 }),
|
||||||
readCommand: async () => ({
|
readCommand: async () => ({
|
||||||
programArguments: ["node", "dist/entry.js", "gateway"],
|
programArguments: ["node", "dist/entry.js", "gateway"],
|
||||||
sourcePath: "/tmp/Library/LaunchAgents/bot.molt.gateway.plist",
|
sourcePath: "/tmp/Library/LaunchAgents/ai.openclaw.gateway.plist",
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
@ -310,7 +310,7 @@ vi.mock("../daemon/node-service.js", () => ({
|
||||||
readRuntime: async () => ({ status: "running", pid: 4321 }),
|
readRuntime: async () => ({ status: "running", pid: 4321 }),
|
||||||
readCommand: async () => ({
|
readCommand: async () => ({
|
||||||
programArguments: ["node", "dist/entry.js", "node-host"],
|
programArguments: ["node", "dist/entry.js", "node-host"],
|
||||||
sourcePath: "/tmp/Library/LaunchAgents/bot.molt.node.plist",
|
sourcePath: "/tmp/Library/LaunchAgents/ai.openclaw.node.plist",
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue