From f9c560c10958e580bf813ac06bba7d1c4307ee3f Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 10:27:22 +0100 Subject: [PATCH 01/19] Add CLAUDE.md to gitignore Keep Claude Code project instructions local-only, preventing accidental commits of per-developer config. Co-Authored-By: Claude Opus 4.6 --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index c5dd4a1d..ba6ecfe4 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,7 @@ USER.md .agents/ .agents .agent/ + +# Claude Code project instructions (local only) +CLAUDE.md +**/CLAUDE.md From 21f29ef25b2123edd9b216d0e62e6bbdefd8a74a Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:21 +0100 Subject: [PATCH 02/19] =?UTF-8?q?Rename=20clawnet=20=E2=86=92=20meshnet=20?= =?UTF-8?q?in=20refactor=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/refactor/{clawnet.md => meshnet.md} | 0 docs/zh-CN/refactor/{clawnet.md => meshnet.md} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/refactor/{clawnet.md => meshnet.md} (100%) rename docs/zh-CN/refactor/{clawnet.md => meshnet.md} (99%) diff --git a/docs/refactor/clawnet.md b/docs/refactor/meshnet.md similarity index 100% rename from docs/refactor/clawnet.md rename to docs/refactor/meshnet.md diff --git a/docs/zh-CN/refactor/clawnet.md b/docs/zh-CN/refactor/meshnet.md similarity index 99% rename from docs/zh-CN/refactor/clawnet.md rename to docs/zh-CN/refactor/meshnet.md index 0e11bd03..3987f669 100644 --- a/docs/zh-CN/refactor/clawnet.md +++ b/docs/zh-CN/refactor/meshnet.md @@ -9,7 +9,7 @@ x-i18n: model: claude-opus-4-5 provider: pi source_hash: 719b219c3b326479658fe6101c80d5273fc56eb3baf50be8535e0d1d2bb7987f - source_path: refactor/clawnet.md + source_path: refactor/meshnet.md workflow: 15 --- From 25a578c797a69d725f1498f26004ac563e0880b4 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:29 +0100 Subject: [PATCH 03/19] Update platform documentation (en + zh-CN) --- docs/automation/hooks.md | 4 ++-- docs/gateway/remote-gateway-readme.md | 10 +++++----- docs/help/faq.md | 2 +- docs/install/uninstall.md | 8 ++++---- docs/install/updating.md | 2 +- docs/platforms/index.md | 2 +- docs/platforms/mac/bundled-gateway.md | 6 +++--- docs/platforms/mac/child-process.md | 10 +++++----- docs/platforms/mac/dev-setup.md | 2 +- docs/platforms/mac/logging.md | 10 +++++----- docs/platforms/mac/permissions.md | 4 ++-- docs/platforms/mac/release.md | 4 ++-- docs/platforms/mac/signing.md | 2 +- docs/platforms/mac/voice-overlay.md | 4 ++-- docs/platforms/mac/webchat.md | 2 +- docs/platforms/macos.md | 10 +++++----- docs/zh-CN/automation/hooks.md | 4 ++-- docs/zh-CN/gateway/index.md | 14 +++++++------- docs/zh-CN/gateway/remote-gateway-readme.md | 10 +++++----- docs/zh-CN/gateway/troubleshooting.md | 4 ++-- docs/zh-CN/help/faq.md | 2 +- docs/zh-CN/install/uninstall.md | 8 ++++---- docs/zh-CN/install/updating.md | 2 +- docs/zh-CN/platforms/index.md | 2 +- docs/zh-CN/platforms/mac/bundled-gateway.md | 6 +++--- docs/zh-CN/platforms/mac/child-process.md | 10 +++++----- docs/zh-CN/platforms/mac/dev-setup.md | 2 +- docs/zh-CN/platforms/mac/logging.md | 10 +++++----- docs/zh-CN/platforms/mac/permissions.md | 4 ++-- docs/zh-CN/platforms/mac/release.md | 4 ++-- docs/zh-CN/platforms/mac/signing.md | 2 +- docs/zh-CN/platforms/mac/voice-overlay.md | 4 ++-- docs/zh-CN/platforms/mac/webchat.md | 2 +- docs/zh-CN/platforms/macos.md | 8 ++++---- 34 files changed, 90 insertions(+), 90 deletions(-) diff --git a/docs/automation/hooks.md b/docs/automation/hooks.md index c6d6282f..19aff1aa 100644 --- a/docs/automation/hooks.md +++ b/docs/automation/hooks.md @@ -781,7 +781,7 @@ Monitor gateway logs to see hook execution: ```bash # macOS -./scripts/clawlog.sh -f +./scripts/mayroslog.sh -f # Other platforms tail -f ~/.mayros/gateway.log @@ -906,7 +906,7 @@ Look for missing: 3. Check gateway logs for errors: ```bash - ./scripts/clawlog.sh | grep hook + ./scripts/mayroslog.sh | grep hook ``` ### Handler Errors diff --git a/docs/gateway/remote-gateway-readme.md b/docs/gateway/remote-gateway-readme.md index fb52bdaa..35365b30 100644 --- a/docs/gateway/remote-gateway-readme.md +++ b/docs/gateway/remote-gateway-readme.md @@ -84,7 +84,7 @@ To have the SSH tunnel start automatically when you log in, create a Launch Agen ### Create the PLIST file -Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`: +Save this as `~/Library/LaunchAgents/ai.mayros.ssh-tunnel.plist`: ```xml @@ -92,7 +92,7 @@ Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`: Label - bot.molt.ssh-tunnel + ai.mayros.ssh-tunnel ProgramArguments /usr/bin/ssh @@ -110,7 +110,7 @@ Save this as `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`: ### Load the Launch Agent ```bash -launchctl bootstrap gui/$UID ~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist +launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.mayros.ssh-tunnel.plist ``` The tunnel will now: @@ -135,13 +135,13 @@ lsof -i :18789 **Restart the tunnel:** ```bash -launchctl kickstart -k gui/$UID/bot.molt.ssh-tunnel +launchctl kickstart -k gui/$UID/ai.mayros.ssh-tunnel ``` **Stop the tunnel:** ```bash -launchctl bootout gui/$UID/bot.molt.ssh-tunnel +launchctl bootout gui/$UID/ai.mayros.ssh-tunnel ``` --- diff --git a/docs/help/faq.md b/docs/help/faq.md index 1700049f..25db281b 100644 --- a/docs/help/faq.md +++ b/docs/help/faq.md @@ -2451,7 +2451,7 @@ Quick setup (recommended): - Set a unique `gateway.port` in each profile config (or pass `--port` for manual runs). - Install a per-profile service: `mayros --profile gateway install`. -Profiles also suffix service names (`bot.molt.`; legacy `com.mayros.*`, `mayros-gateway-.service`, `Mayros Gateway ()`). +Profiles also suffix service names (`ai.mayros.`; legacy `com.mayros.*`, `mayros-gateway-.service`, `Mayros Gateway ()`). Full guide: [Multiple gateways](/gateway/multiple-gateways). ### What does invalid handshake code 1008 mean diff --git a/docs/install/uninstall.md b/docs/install/uninstall.md index d3a6c65e..6d5c616f 100644 --- a/docs/install/uninstall.md +++ b/docs/install/uninstall.md @@ -81,14 +81,14 @@ Use this if the gateway service keeps running but `mayros` is missing. ### macOS (launchd) -Default label is `bot.molt.gateway` (or `bot.molt.`; legacy `com.mayros.*` may still exist): +Default label is `ai.mayros.gateway` (or `ai.mayros.`; legacy `com.mayros.*` may still exist): ```bash -launchctl bootout gui/$UID/bot.molt.gateway -rm -f ~/Library/LaunchAgents/bot.molt.gateway.plist +launchctl bootout gui/$UID/ai.mayros.gateway +rm -f ~/Library/LaunchAgents/ai.mayros.gateway.plist ``` -If you used a profile, replace the label and plist name with `bot.molt.`. Remove any legacy `com.mayros.*` plists if present. +If you used a profile, replace the label and plist name with `ai.mayros.`. Remove any legacy `com.mayros.*` plists if present. ### Linux (systemd user unit) diff --git a/docs/install/updating.md b/docs/install/updating.md index de5f6fb9..f4e0683f 100644 --- a/docs/install/updating.md +++ b/docs/install/updating.md @@ -170,7 +170,7 @@ mayros logs --follow If you’re supervised: -- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/bot.molt.gateway` (use `bot.molt.`; legacy `com.mayros.*` still works) +- macOS launchd (app-bundled LaunchAgent): `launchctl kickstart -k gui/$UID/ai.mayros.gateway` (use `ai.mayros.`; legacy `com.mayros.*` still works) - Linux systemd user service: `systemctl --user restart mayros-gateway[-].service` - Windows (WSL2): `systemctl --user restart mayros-gateway[-].service` - `launchctl`/`systemctl` only work if the service is installed; otherwise run `mayros gateway install`. diff --git a/docs/platforms/index.md b/docs/platforms/index.md index 3988e7b8..1ac2a8bc 100644 --- a/docs/platforms/index.md +++ b/docs/platforms/index.md @@ -49,5 +49,5 @@ Use one of these (all supported): The service target depends on OS: -- macOS: LaunchAgent (`bot.molt.gateway` or `bot.molt.`; legacy `com.mayros.*`) +- macOS: LaunchAgent (`ai.mayros.gateway` or `ai.mayros.`; legacy `com.mayros.*`) - Linux/WSL2: systemd user service (`mayros-gateway[-].service`) diff --git a/docs/platforms/mac/bundled-gateway.md b/docs/platforms/mac/bundled-gateway.md index bbf07322..b5dc9e6a 100644 --- a/docs/platforms/mac/bundled-gateway.md +++ b/docs/platforms/mac/bundled-gateway.md @@ -28,12 +28,12 @@ The macOS app’s **Install CLI** button runs the same flow via npm/pnpm (bun no Label: -- `bot.molt.gateway` (or `bot.molt.`; legacy `com.mayros.*` may remain) +- `ai.mayros.gateway` (or `ai.mayros.`; legacy `com.mayros.*` may remain) Plist location (per‑user): -- `~/Library/LaunchAgents/bot.molt.gateway.plist` - (or `~/Library/LaunchAgents/bot.molt..plist`) +- `~/Library/LaunchAgents/ai.mayros.gateway.plist` + (or `~/Library/LaunchAgents/ai.mayros..plist`) Manager: diff --git a/docs/platforms/mac/child-process.md b/docs/platforms/mac/child-process.md index 5d5fcaa4..f645f283 100644 --- a/docs/platforms/mac/child-process.md +++ b/docs/platforms/mac/child-process.md @@ -18,8 +18,8 @@ If you need tighter coupling to the UI, run the Gateway manually in a terminal. ## Default behavior (launchd) -- The app installs a per‑user LaunchAgent labeled `bot.molt.gateway` - (or `bot.molt.` when using `--profile`/`MAYROS_PROFILE`; legacy `com.mayros.*` is supported). +- The app installs a per‑user LaunchAgent labeled `ai.mayros.gateway` + (or `ai.mayros.` when using `--profile`/`MAYROS_PROFILE`; legacy `com.mayros.*` is supported). - When Local mode is enabled, the app ensures the LaunchAgent is loaded and starts the Gateway if needed. - 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: ```bash -launchctl kickstart -k gui/$UID/bot.molt.gateway -launchctl bootout gui/$UID/bot.molt.gateway +launchctl kickstart -k gui/$UID/ai.mayros.gateway +launchctl bootout gui/$UID/ai.mayros.gateway ``` -Replace the label with `bot.molt.` when running a named profile. +Replace the label with `ai.mayros.` when running a named profile. ## Unsigned dev builds diff --git a/docs/platforms/mac/dev-setup.md b/docs/platforms/mac/dev-setup.md index 6323f831..d4169a2e 100644 --- a/docs/platforms/mac/dev-setup.md +++ b/docs/platforms/mac/dev-setup.md @@ -84,7 +84,7 @@ If the app crashes when you try to allow **Speech Recognition** or **Microphone* 1. Reset the TCC permissions: ```bash - tccutil reset All bot.molt.mac.debug + tccutil reset All ai.mayros.mac.debug ``` 2. If that fails, change the `BUNDLE_ID` temporarily in [`scripts/package-mac-app.sh`](https://github.com/ApiliumCode/mayros/blob/main/scripts/package-mac-app.sh) to force a "clean slate" from macOS. diff --git a/docs/platforms/mac/logging.md b/docs/platforms/mac/logging.md index ab6ed3d5..5dc4f258 100644 --- a/docs/platforms/mac/logging.md +++ b/docs/platforms/mac/logging.md @@ -26,12 +26,12 @@ Notes: Unified logging redacts most payloads unless a subsystem opts into `privacy -off`. Per this 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 Mayros (`bot.molt`) +## Enable for Mayros (`ai.mayros`) - Write the plist to a temp file first, then install it atomically as root: ```bash -cat <<'EOF' >/tmp/bot.molt.plist +cat <<'EOF' >/tmp/ai.mayros.plist @@ -44,14 +44,14 @@ cat <<'EOF' >/tmp/bot.molt.plist 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.mayros.plist /Library/Preferences/Logging/Subsystems/ai.mayros.plist ``` - No reboot is required; logd notices the file quickly, but only new log lines will include private payloads. -- View the richer output with the existing helper, e.g. `./scripts/clawlog.sh --category WebChat --last 5m`. +- View the richer output with the existing helper, e.g. `./scripts/mayroslog.sh --category WebChat --last 5m`. ## 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.mayros.plist`. - 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. diff --git a/docs/platforms/mac/permissions.md b/docs/platforms/mac/permissions.md index bf4ca1e7..237e505c 100644 --- a/docs/platforms/mac/permissions.md +++ b/docs/platforms/mac/permissions.md @@ -35,8 +35,8 @@ grants, and prompts can disappear entirely until the stale entries are cleared. Example resets (replace bundle ID as needed): ```bash -sudo tccutil reset Accessibility bot.molt.mac -sudo tccutil reset ScreenCapture bot.molt.mac +sudo tccutil reset Accessibility ai.mayros.mac +sudo tccutil reset ScreenCapture ai.mayros.mac sudo tccutil reset AppleEvents ``` diff --git a/docs/platforms/mac/release.md b/docs/platforms/mac/release.md index 0377a0c7..6c61ffb7 100644 --- a/docs/platforms/mac/release.md +++ b/docs/platforms/mac/release.md @@ -33,7 +33,7 @@ Notes: ```bash # From repo root; set release IDs so Sparkle feed is enabled. # APP_BUILD must be numeric + monotonic for Sparkle compare. -BUNDLE_ID=bot.molt.mac \ +BUNDLE_ID=ai.mayros.mac \ APP_VERSION=2026.2.21 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ @@ -51,7 +51,7 @@ scripts/create-dmg.sh dist/Mayros.app dist/Mayros-2026.2.21.dmg # xcrun notarytool store-credentials "mayros-notary" \ # --apple-id "" --team-id "" --password "" NOTARIZE=1 NOTARYTOOL_PROFILE=mayros-notary \ -BUNDLE_ID=bot.molt.mac \ +BUNDLE_ID=ai.mayros.mac \ APP_VERSION=2026.2.21 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ diff --git a/docs/platforms/mac/signing.md b/docs/platforms/mac/signing.md index 4618b178..3ce53bfe 100644 --- a/docs/platforms/mac/signing.md +++ b/docs/platforms/mac/signing.md @@ -44,4 +44,4 @@ The About tab reads these keys to show version, build date, git commit, and whet ## Why -TCC permissions are tied to the bundle identifier _and_ code signature. Unsigned debug builds with changing UUIDs were causing macOS to forget grants after each rebuild. Signing the binaries (ad‑hoc by default) and keeping a fixed bundle id/path (`dist/Mayros.app`) preserves the grants between builds, matching the VibeTunnel approach. +TCC permissions are tied to the bundle identifier _and_ code signature. Unsigned debug builds with changing UUIDs were causing macOS to forget grants after each rebuild. Signing the binaries (ad‑hoc by default) and keeping a fixed bundle id/path (`dist/Mayros.app`) preserves the grants between builds, matching the Mayros approach. diff --git a/docs/platforms/mac/voice-overlay.md b/docs/platforms/mac/voice-overlay.md index 9c42601b..bba88823 100644 --- a/docs/platforms/mac/voice-overlay.md +++ b/docs/platforms/mac/voice-overlay.md @@ -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. - Apply a short cooldown to the wake runtime after push-to-talk finishes so wake-word doesn’t immediately retrigger. 5. **Logging** - - Coordinator emits `.info` logs in subsystem `bot.molt`, categories `voicewake.overlay` and `voicewake.chime`. + - Coordinator emits `.info` logs in subsystem `ai.mayros`, categories `voicewake.overlay` and `voicewake.chime`. - Key events: `session_started`, `adopted_by_push_to_talk`, `partial`, `finalized`, `send`, `dismiss`, `cancel`, `cooldown`. ## Debugging checklist @@ -45,7 +45,7 @@ Audience: macOS app contributors. Goal: keep the voice overlay predictable when - Stream logs while reproducing a sticky overlay: ```bash - sudo log stream --predicate 'subsystem == "bot.molt" AND category CONTAINS "voicewake"' --level info --style compact + sudo log stream --predicate 'subsystem == "ai.mayros" AND category CONTAINS "voicewake"' --level info --style compact ``` - Verify only one active session token; stale callbacks should be dropped by the coordinator. diff --git a/docs/platforms/mac/webchat.md b/docs/platforms/mac/webchat.md index 738d17cb..eb217452 100644 --- a/docs/platforms/mac/webchat.md +++ b/docs/platforms/mac/webchat.md @@ -24,7 +24,7 @@ agent (with a session switcher for other sessions). dist/Mayros.app/Contents/MacOS/Mayros --webchat ``` -- Logs: `./scripts/clawlog.sh` (subsystem `bot.molt`, category `WebChatSwiftUI`). +- Logs: `./scripts/mayroslog.sh` (subsystem `ai.mayros`, category `WebChatSwiftUI`). ## How it’s wired diff --git a/docs/platforms/macos.md b/docs/platforms/macos.md index 183a3a6f..c1aad502 100644 --- a/docs/platforms/macos.md +++ b/docs/platforms/macos.md @@ -34,15 +34,15 @@ capabilities to the agent as a node. ## Launchd control -The app manages a per‑user LaunchAgent labeled `bot.molt.gateway` -(or `bot.molt.` when using `--profile`/`MAYROS_PROFILE`; legacy `com.mayros.*` still unloads). +The app manages a per‑user LaunchAgent labeled `ai.mayros.gateway` +(or `ai.mayros.` when using `--profile`/`MAYROS_PROFILE`; legacy `com.mayros.*` still unloads). ```bash -launchctl kickstart -k gui/$UID/bot.molt.gateway -launchctl bootout gui/$UID/bot.molt.gateway +launchctl kickstart -k gui/$UID/ai.mayros.gateway +launchctl bootout gui/$UID/ai.mayros.gateway ``` -Replace the label with `bot.molt.` when running a named profile. +Replace the label with `ai.mayros.` when running a named profile. If the LaunchAgent isn’t installed, enable it from the app or run `mayros gateway install`. diff --git a/docs/zh-CN/automation/hooks.md b/docs/zh-CN/automation/hooks.md index e9f9c957..b49714c0 100644 --- a/docs/zh-CN/automation/hooks.md +++ b/docs/zh-CN/automation/hooks.md @@ -665,7 +665,7 @@ mayros hooks info my-hook ```bash # macOS -./scripts/clawlog.sh -f +./scripts/mayroslog.sh -f # Other platforms tail -f ~/.mayros/gateway.log @@ -788,7 +788,7 @@ mayros hooks info my-hook 3. 检查 Gateway 网关日志中的错误: ```bash - ./scripts/clawlog.sh | grep hook + ./scripts/mayroslog.sh | grep hook ``` ### 处理程序错误 diff --git a/docs/zh-CN/gateway/index.md b/docs/zh-CN/gateway/index.md index 9bde8c03..025935dd 100644 --- a/docs/zh-CN/gateway/index.md +++ b/docs/zh-CN/gateway/index.md @@ -70,7 +70,7 @@ pnpm gateway:watch 服务名称是配置文件感知的: -- macOS:`bot.molt.`(旧版 `com.mayros.*` 可能仍然存在) +- macOS:`ai.mayros.`(旧版 `com.mayros.*` 可能仍然存在) - Linux:`mayros-gateway-.service` - Windows:`Mayros Gateway ()` @@ -211,8 +211,8 @@ MAYROS_CONFIG_PATH=~/.mayros/b.json MAYROS_STATE_DIR=~/.mayros-b mayros gateway - StandardOut/Err:文件路径或 `syslog` - 失败时,launchd 重启;致命的配置错误应保持退出,以便运维人员注意到。 - LaunchAgents 是按用户的,需要已登录的会话;对于无头设置,使用自定义 LaunchDaemon(未随附)。 - - `mayros gateway install` 写入 `~/Library/LaunchAgents/bot.molt.gateway.plist` - (或 `bot.molt..plist`;旧版 `com.mayros.*` 会被清理)。 + - `mayros gateway install` 写入 `~/Library/LaunchAgents/ai.mayros.gateway.plist` + (或 `ai.mayros..plist`;旧版 `com.mayros.*` 会被清理)。 - `mayros doctor` 审计 LaunchAgent 配置,可以将其更新为当前默认值。 ## Gateway 网关服务管理(CLI) @@ -245,11 +245,11 @@ mayros logs --follow 捆绑的 mac 应用: - Mayros.app 可以捆绑基于 Node 的 Gateway 网关中继并安装标记为 - `bot.molt.gateway`(或 `bot.molt.`;旧版 `com.mayros.*` 标签仍能干净卸载)的按用户 LaunchAgent。 -- 要干净地停止它,使用 `mayros gateway stop`(或 `launchctl bootout gui/$UID/bot.molt.gateway`)。 -- 要重启,使用 `mayros gateway restart`(或 `launchctl kickstart -k gui/$UID/bot.molt.gateway`)。 + `ai.mayros.gateway`(或 `ai.mayros.`;旧版 `com.mayros.*` 标签仍能干净卸载)的按用户 LaunchAgent。 +- 要干净地停止它,使用 `mayros gateway stop`(或 `launchctl bootout gui/$UID/ai.mayros.gateway`)。 +- 要重启,使用 `mayros gateway restart`(或 `launchctl kickstart -k gui/$UID/ai.mayros.gateway`)。 - `launchctl` 仅在 LaunchAgent 已安装时有效;否则先使用 `mayros gateway install`。 - - 运行命名配置文件时,将标签替换为 `bot.molt.`。 + - 运行命名配置文件时,将标签替换为 `ai.mayros.`。 ## 监管(systemd 用户单元) diff --git a/docs/zh-CN/gateway/remote-gateway-readme.md b/docs/zh-CN/gateway/remote-gateway-readme.md index 3c7c4492..74db6f19 100644 --- a/docs/zh-CN/gateway/remote-gateway-readme.md +++ b/docs/zh-CN/gateway/remote-gateway-readme.md @@ -90,7 +90,7 @@ open /path/to/Mayros.app ### 创建 PLIST 文件 -将此保存为 `~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist`: +将此保存为 `~/Library/LaunchAgents/ai.mayros.ssh-tunnel.plist`: ```xml @@ -98,7 +98,7 @@ open /path/to/Mayros.app Label - bot.molt.ssh-tunnel + ai.mayros.ssh-tunnel ProgramArguments /usr/bin/ssh @@ -116,7 +116,7 @@ open /path/to/Mayros.app ### 加载 Launch Agent ```bash -launchctl bootstrap gui/$UID ~/Library/LaunchAgents/bot.molt.ssh-tunnel.plist +launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.mayros.ssh-tunnel.plist ``` 隧道现在将: @@ -141,13 +141,13 @@ lsof -i :18789 **重启隧道:** ```bash -launchctl kickstart -k gui/$UID/bot.molt.ssh-tunnel +launchctl kickstart -k gui/$UID/ai.mayros.ssh-tunnel ``` **停止隧道:** ```bash -launchctl bootout gui/$UID/bot.molt.ssh-tunnel +launchctl bootout gui/$UID/ai.mayros.ssh-tunnel ``` --- diff --git a/docs/zh-CN/gateway/troubleshooting.md b/docs/zh-CN/gateway/troubleshooting.md index 01d68aee..9930fff0 100644 --- a/docs/zh-CN/gateway/troubleshooting.md +++ b/docs/zh-CN/gateway/troubleshooting.md @@ -627,7 +627,7 @@ curl -fsSL https://mayros.apilium.com/install.sh | bash **修复 1:重置 TCC 缓存** ```bash -tccutil reset All bot.molt.mac.debug +tccutil reset All ai.mayros.mac.debug ``` **修复 2:强制使用新的 Bundle ID** @@ -643,7 +643,7 @@ tccutil reset All bot.molt.mac.debug ```bash mayros gateway status mayros gateway stop -# 或:launchctl bootout gui/$UID/bot.molt.gateway(用 bot.molt. 替换;旧版 com.mayros.* 仍然有效) +# 或:launchctl bootout gui/$UID/ai.mayros.gateway(用 ai.mayros. 替换;旧版 com.mayros.* 仍然有效) ``` **修复 2:端口被占用(查找监听器)** diff --git a/docs/zh-CN/help/faq.md b/docs/zh-CN/help/faq.md index fa212f50..7b47ccac 100644 --- a/docs/zh-CN/help/faq.md +++ b/docs/zh-CN/help/faq.md @@ -2245,7 +2245,7 @@ Mayros 通过在启动时立即绑定 WebSocket 监听器来强制运行时锁 - 在每个配置文件配置中设置唯一的 `gateway.port`(或手动运行时传 `--port`)。 - 安装每配置文件的服务:`mayros --profile gateway install`。 -配置文件还会为服务名称添加后缀(`bot.molt.`;旧版 `com.mayros.*`、`mayros-gateway-.service`、`Mayros Gateway 网关 ()`)。 +配置文件还会为服务名称添加后缀(`ai.mayros.`;旧版 `com.mayros.*`、`mayros-gateway-.service`、`Mayros Gateway 网关 ()`)。 完整指南:[多 Gateway 网关](/gateway/multiple-gateways)。 ### "invalid handshake" / code 1008 是什么意思 diff --git a/docs/zh-CN/install/uninstall.md b/docs/zh-CN/install/uninstall.md index befa6fa0..2935f943 100644 --- a/docs/zh-CN/install/uninstall.md +++ b/docs/zh-CN/install/uninstall.md @@ -88,14 +88,14 @@ rm -rf /Applications/Mayros.app ### macOS(launchd) -默认标签是 `bot.molt.gateway`(或 `bot.molt.`;旧版 `com.mayros.*` 可能仍然存在): +默认标签是 `ai.mayros.gateway`(或 `ai.mayros.`;旧版 `com.mayros.*` 可能仍然存在): ```bash -launchctl bootout gui/$UID/bot.molt.gateway -rm -f ~/Library/LaunchAgents/bot.molt.gateway.plist +launchctl bootout gui/$UID/ai.mayros.gateway +rm -f ~/Library/LaunchAgents/ai.mayros.gateway.plist ``` -如果你使用了配置文件,请将标签和 plist 名称替换为 `bot.molt.`。如果存在任何旧版 `com.mayros.*` plist,请将其移除。 +如果你使用了配置文件,请将标签和 plist 名称替换为 `ai.mayros.`。如果存在任何旧版 `com.mayros.*` plist,请将其移除。 ### Linux(systemd 用户单元) diff --git a/docs/zh-CN/install/updating.md b/docs/zh-CN/install/updating.md index f628b9c7..2f609d3e 100644 --- a/docs/zh-CN/install/updating.md +++ b/docs/zh-CN/install/updating.md @@ -172,7 +172,7 @@ mayros logs --follow 如果你使用受管理服务: -- macOS launchd(应用捆绑的 LaunchAgent):`launchctl kickstart -k gui/$UID/bot.molt.gateway`(使用 `bot.molt.`;旧版 `com.mayros.*` 仍然有效) +- macOS launchd(应用捆绑的 LaunchAgent):`launchctl kickstart -k gui/$UID/ai.mayros.gateway`(使用 `ai.mayros.`;旧版 `com.mayros.*` 仍然有效) - Linux systemd 用户服务:`systemctl --user restart mayros-gateway[-].service` - Windows(WSL2):`systemctl --user restart mayros-gateway[-].service` - `launchctl`/`systemctl` 仅在服务已安装时有效;否则运行 `mayros gateway install`。 diff --git a/docs/zh-CN/platforms/index.md b/docs/zh-CN/platforms/index.md index babe32d3..9e154749 100644 --- a/docs/zh-CN/platforms/index.md +++ b/docs/zh-CN/platforms/index.md @@ -56,5 +56,5 @@ Windows 原生配套应用也在计划中;推荐通过 WSL2 使用 Gateway 网 服务目标取决于操作系统: -- macOS:LaunchAgent(`bot.molt.gateway` 或 `bot.molt.`;旧版 `com.mayros.*`) +- macOS:LaunchAgent(`ai.mayros.gateway` 或 `ai.mayros.`;旧版 `com.mayros.*`) - Linux/WSL2:systemd 用户服务(`mayros-gateway[-].service`) diff --git a/docs/zh-CN/platforms/mac/bundled-gateway.md b/docs/zh-CN/platforms/mac/bundled-gateway.md index 6aca3b34..9124552a 100644 --- a/docs/zh-CN/platforms/mac/bundled-gateway.md +++ b/docs/zh-CN/platforms/mac/bundled-gateway.md @@ -32,12 +32,12 @@ macOS 应用的**安装 CLI**按钮通过 npm/pnpm 运行相同的流程(不 标签: -- `bot.molt.gateway`(或 `bot.molt.`;旧版 `com.mayros.*` 可能仍然存在) +- `ai.mayros.gateway`(或 `ai.mayros.`;旧版 `com.mayros.*` 可能仍然存在) Plist 位置(每用户): -- `~/Library/LaunchAgents/bot.molt.gateway.plist` - (或 `~/Library/LaunchAgents/bot.molt..plist`) +- `~/Library/LaunchAgents/ai.mayros.gateway.plist` + (或 `~/Library/LaunchAgents/ai.mayros..plist`) 管理者: diff --git a/docs/zh-CN/platforms/mac/child-process.md b/docs/zh-CN/platforms/mac/child-process.md index cc4976b4..f71bffe0 100644 --- a/docs/zh-CN/platforms/mac/child-process.md +++ b/docs/zh-CN/platforms/mac/child-process.md @@ -24,8 +24,8 @@ Gateway 网关;如果无法访问,它会通过外部 `mayros` CLI(无嵌 ## 默认行为(launchd) -- 应用安装标记为 `bot.molt.gateway` 的按用户 LaunchAgent - (使用 `--profile`/`MAYROS_PROFILE` 时为 `bot.molt.`;支持旧版 `com.mayros.*`)。 +- 应用安装标记为 `ai.mayros.gateway` 的按用户 LaunchAgent + (使用 `--profile`/`MAYROS_PROFILE` 时为 `ai.mayros.`;支持旧版 `com.mayros.*`)。 - 当启用本地模式时,应用确保 LaunchAgent 已加载,并 在需要时启动 Gateway 网关。 - 日志写入 launchd Gateway 网关日志路径(在调试设置中可见)。 @@ -33,11 +33,11 @@ Gateway 网关;如果无法访问,它会通过外部 `mayros` CLI(无嵌 常用命令: ```bash -launchctl kickstart -k gui/$UID/bot.molt.gateway -launchctl bootout gui/$UID/bot.molt.gateway +launchctl kickstart -k gui/$UID/ai.mayros.gateway +launchctl bootout gui/$UID/ai.mayros.gateway ``` -运行命名配置文件时,将标签替换为 `bot.molt.`。 +运行命名配置文件时,将标签替换为 `ai.mayros.`。 ## 未签名的开发构建 diff --git a/docs/zh-CN/platforms/mac/dev-setup.md b/docs/zh-CN/platforms/mac/dev-setup.md index 380d578e..c7d3a74c 100644 --- a/docs/zh-CN/platforms/mac/dev-setup.md +++ b/docs/zh-CN/platforms/mac/dev-setup.md @@ -90,7 +90,7 @@ xcrun swift --version 1. 重置 TCC 权限: ```bash - tccutil reset All bot.molt.mac.debug + tccutil reset All ai.mayros.mac.debug ``` 2. 如果这不起作用,在 [`scripts/package-mac-app.sh`](https://github.com/ApiliumCode/mayros/blob/main/scripts/package-mac-app.sh) 中临时更改 `BUNDLE_ID` 以强制 macOS 从"全新状态"开始。 diff --git a/docs/zh-CN/platforms/mac/logging.md b/docs/zh-CN/platforms/mac/logging.md index c930db57..ff499cab 100644 --- a/docs/zh-CN/platforms/mac/logging.md +++ b/docs/zh-CN/platforms/mac/logging.md @@ -33,12 +33,12 @@ Mayros 通过 swift-log(默认使用统一日志)路由 macOS 应用日志 统一日志会屏蔽大部分负载内容,除非子系统选择启用 `privacy -off`。根据这篇关于 macOS [日志隐私机制](https://steipete.me/posts/2025/logging-privacy-shenanigans)(2025)的文章,这通过 `/Library/Preferences/Logging/Subsystems/` 中以子系统名称为键的 plist 文件来控制。只有新的日志条目才会应用该标志,因此请在复现问题之前启用它。 -## 为 Mayros 启用(`bot.molt`) +## 为 Mayros 启用(`ai.mayros`) - 先将 plist 写入临时文件,然后以 root 身份原子性地安装: ```bash -cat <<'EOF' >/tmp/bot.molt.plist +cat <<'EOF' >/tmp/ai.mayros.plist @@ -51,14 +51,14 @@ cat <<'EOF' >/tmp/bot.molt.plist 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.mayros.plist /Library/Preferences/Logging/Subsystems/ai.mayros.plist ``` - 无需重启;logd 会很快检测到该文件,但只有新的日志行才会包含隐私负载。 -- 使用现有的辅助脚本查看更丰富的输出,例如 `./scripts/clawlog.sh --category WebChat --last 5m`。 +- 使用现有的辅助脚本查看更丰富的输出,例如 `./scripts/mayroslog.sh --category WebChat --last 5m`。 ## 调试后禁用 -- 移除覆盖配置:`sudo rm /Library/Preferences/Logging/Subsystems/bot.molt.plist`。 +- 移除覆盖配置:`sudo rm /Library/Preferences/Logging/Subsystems/ai.mayros.plist`。 - 可选择运行 `sudo log config --reload` 强制 logd 立即丢弃覆盖配置。 - 请注意此数据可能包含电话号码和消息正文;仅在确实需要额外详细信息时才保留该 plist 文件。 diff --git a/docs/zh-CN/platforms/mac/permissions.md b/docs/zh-CN/platforms/mac/permissions.md index 391c6d75..ef4509d7 100644 --- a/docs/zh-CN/platforms/mac/permissions.md +++ b/docs/zh-CN/platforms/mac/permissions.md @@ -38,8 +38,8 @@ macOS 权限授予是脆弱的。TCC 将权限授予与应用的代码签名、B 重置示例(根据需要替换 Bundle ID): ```bash -sudo tccutil reset Accessibility bot.molt.mac -sudo tccutil reset ScreenCapture bot.molt.mac +sudo tccutil reset Accessibility ai.mayros.mac +sudo tccutil reset ScreenCapture ai.mayros.mac sudo tccutil reset AppleEvents ``` diff --git a/docs/zh-CN/platforms/mac/release.md b/docs/zh-CN/platforms/mac/release.md index 535bc3e0..037ed805 100644 --- a/docs/zh-CN/platforms/mac/release.md +++ b/docs/zh-CN/platforms/mac/release.md @@ -40,7 +40,7 @@ x-i18n: ```bash # 从仓库根目录运行;设置发布 ID 以启用 Sparkle 订阅源。 # APP_BUILD 必须为纯数字且单调递增,以便 Sparkle 正确比较。 -BUNDLE_ID=bot.molt.mac \ +BUNDLE_ID=ai.mayros.mac \ APP_VERSION=2026.1.27-beta.1 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ @@ -58,7 +58,7 @@ scripts/create-dmg.sh dist/Mayros.app dist/Mayros-2026.1.27-beta.1.dmg # xcrun notarytool store-credentials "mayros-notary" \ # --apple-id "" --team-id "" --password "" NOTARIZE=1 NOTARYTOOL_PROFILE=mayros-notary \ -BUNDLE_ID=bot.molt.mac \ +BUNDLE_ID=ai.mayros.mac \ APP_VERSION=2026.1.27-beta.1 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ diff --git a/docs/zh-CN/platforms/mac/signing.md b/docs/zh-CN/platforms/mac/signing.md index 68fe4224..904590b8 100644 --- a/docs/zh-CN/platforms/mac/signing.md +++ b/docs/zh-CN/platforms/mac/signing.md @@ -51,4 +51,4 @@ DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # 仅限开发的 Spar ## 原因 -TCC 权限与 Bundle 标识符*和*代码签名绑定。使用不断变化的 UUID 的未签名调试构建会导致 macOS 在每次重新构建后忘记授权。对二进制文件进行签名(默认临时签名)并保持固定的 Bundle ID/路径(`dist/Mayros.app`)可以在构建之间保留授权,与 VibeTunnel 的方案一致。 +TCC 权限与 Bundle 标识符*和*代码签名绑定。使用不断变化的 UUID 的未签名调试构建会导致 macOS 在每次重新构建后忘记授权。对二进制文件进行签名(默认临时签名)并保持固定的 Bundle ID/路径(`dist/Mayros.app`)可以在构建之间保留授权,与 Mayros 的方案一致。 diff --git a/docs/zh-CN/platforms/mac/voice-overlay.md b/docs/zh-CN/platforms/mac/voice-overlay.md index c1bd05d1..304ec304 100644 --- a/docs/zh-CN/platforms/mac/voice-overlay.md +++ b/docs/zh-CN/platforms/mac/voice-overlay.md @@ -44,7 +44,7 @@ x-i18n: - 按键说话:无延迟;唤醒词:可选自动发送延迟。 - 按键说话结束后对唤醒运行时施加短暂冷却,防止唤醒词立即重新触发。 5. **日志** - - Coordinator 在子系统 `bot.molt`、分类 `voicewake.overlay` 和 `voicewake.chime` 下输出 `.info` 级别日志。 + - Coordinator 在子系统 `ai.mayros`、分类 `voicewake.overlay` 和 `voicewake.chime` 下输出 `.info` 级别日志。 - 关键事件:`session_started`、`adopted_by_push_to_talk`、`partial`、`finalized`、`send`、`dismiss`、`cancel`、`cooldown`。 ### 调试清单 @@ -52,7 +52,7 @@ x-i18n: - 复现浮层粘滞问题时流式查看日志: ```bash - sudo log stream --predicate 'subsystem == "bot.molt" AND category CONTAINS "voicewake"' --level info --style compact + sudo log stream --predicate 'subsystem == "ai.mayros" AND category CONTAINS "voicewake"' --level info --style compact ``` - 验证只有一个活跃会话令牌;过时回调应被 coordinator 丢弃。 diff --git a/docs/zh-CN/platforms/mac/webchat.md b/docs/zh-CN/platforms/mac/webchat.md index 2e564cdd..bf9aebc5 100644 --- a/docs/zh-CN/platforms/mac/webchat.md +++ b/docs/zh-CN/platforms/mac/webchat.md @@ -26,7 +26,7 @@ macOS 菜单栏应用将 WebChat UI 嵌入为原生 SwiftUI 视图。它连接 ```bash dist/Mayros.app/Contents/MacOS/Mayros --webchat ``` -- 日志:`./scripts/clawlog.sh`(子系统 `bot.molt`,类别 `WebChatSwiftUI`)。 +- 日志:`./scripts/mayroslog.sh`(子系统 `ai.mayros`,类别 `WebChatSwiftUI`)。 ## 工作原理 diff --git a/docs/zh-CN/platforms/macos.md b/docs/zh-CN/platforms/macos.md index 1ec16cb0..d8263509 100644 --- a/docs/zh-CN/platforms/macos.md +++ b/docs/zh-CN/platforms/macos.md @@ -36,14 +36,14 @@ macOS 应用是 Mayros 的**菜单栏配套应用**。它拥有权限,在本 ## Launchd 控制 -应用管理一个标记为 `bot.molt.gateway` 的每用户 LaunchAgent(使用 `--profile`/`MAYROS_PROFILE` 时为 `bot.molt.`;旧版 `com.mayros.*` 仍会卸载)。 +应用管理一个标记为 `ai.mayros.gateway` 的每用户 LaunchAgent(使用 `--profile`/`MAYROS_PROFILE` 时为 `ai.mayros.`;旧版 `com.mayros.*` 仍会卸载)。 ```bash -launchctl kickstart -k gui/$UID/bot.molt.gateway -launchctl bootout gui/$UID/bot.molt.gateway +launchctl kickstart -k gui/$UID/ai.mayros.gateway +launchctl bootout gui/$UID/ai.mayros.gateway ``` -运行命名配置文件时,将标签替换为 `bot.molt.`。 +运行命名配置文件时,将标签替换为 `ai.mayros.`。 如果 LaunchAgent 未安装,从应用中启用它或运行 `mayros gateway install`。 From 8d2fb54de35050e31966a7732e337e97ac1bc7f9 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:35 +0100 Subject: [PATCH 04/19] Update iOS app configuration and sources --- .../Sources/Device/NetworkStatusService.swift | 2 +- .../Gateway/GatewayDiscoveryModel.swift | 2 +- apps/ios/Sources/Mayros.entitlements | 2 +- apps/ios/Sources/PrivacyInfo.xcprivacy | 76 +++++++++++++++++++ .../Sources/Screen/ScreenRecordService.swift | 2 +- apps/ios/Sources/Voice/TalkModeManager.swift | 2 +- apps/ios/Tests/KeychainStoreTests.swift | 2 +- apps/ios/fastlane/Appfile | 2 +- apps/ios/project.yml | 7 ++ 9 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 apps/ios/Sources/PrivacyInfo.xcprivacy diff --git a/apps/ios/Sources/Device/NetworkStatusService.swift b/apps/ios/Sources/Device/NetworkStatusService.swift index 263e3fc0..5687f5b4 100644 --- a/apps/ios/Sources/Device/NetworkStatusService.swift +++ b/apps/ios/Sources/Device/NetworkStatusService.swift @@ -6,7 +6,7 @@ final class NetworkStatusService: @unchecked Sendable { func currentStatus(timeoutMs: Int = 1500) async -> MayrosNetworkStatusPayload { await withCheckedContinuation { cont in let monitor = NWPathMonitor() - let queue = DispatchQueue(label: "bot.molt.ios.network-status") + let queue = DispatchQueue(label: "ai.mayros.ios.network-status") let state = NetworkStatusState() monitor.pathUpdateHandler = { path in diff --git a/apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift b/apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift index 0cb2d90f..60c17c55 100644 --- a/apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift +++ b/apps/ios/Sources/Gateway/GatewayDiscoveryModel.swift @@ -104,7 +104,7 @@ final class GatewayDiscoveryModel { } self.browsers[domain] = browser - browser.start(queue: DispatchQueue(label: "bot.molt.ios.gateway-discovery.\(domain)")) + browser.start(queue: DispatchQueue(label: "ai.mayros.ios.gateway-discovery.\(domain)")) } } diff --git a/apps/ios/Sources/Mayros.entitlements b/apps/ios/Sources/Mayros.entitlements index a2663ce9..00e5df2e 100644 --- a/apps/ios/Sources/Mayros.entitlements +++ b/apps/ios/Sources/Mayros.entitlements @@ -3,7 +3,7 @@ aps-environment - development + production diff --git a/apps/ios/Sources/PrivacyInfo.xcprivacy b/apps/ios/Sources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..453f768b --- /dev/null +++ b/apps/ios/Sources/PrivacyInfo.xcprivacy @@ -0,0 +1,76 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePreciseLocation + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeContacts + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePhotosorVideos + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + diff --git a/apps/ios/Sources/Screen/ScreenRecordService.swift b/apps/ios/Sources/Screen/ScreenRecordService.swift index 764e6f16..588f5012 100644 --- a/apps/ios/Sources/Screen/ScreenRecordService.swift +++ b/apps/ios/Sources/Screen/ScreenRecordService.swift @@ -55,7 +55,7 @@ final class ScreenRecordService: @unchecked Sendable { outPath: outPath) let state = CaptureState() - let recordQueue = DispatchQueue(label: "bot.molt.screenrecord") + let recordQueue = DispatchQueue(label: "ai.mayros.ios.screenrecord") try await self.startCapture(state: state, config: config, recordQueue: recordQueue) try await Task.sleep(nanoseconds: UInt64(config.durationMs) * 1_000_000) diff --git a/apps/ios/Sources/Voice/TalkModeManager.swift b/apps/ios/Sources/Voice/TalkModeManager.swift index c5a5f76a..8f6743cb 100644 --- a/apps/ios/Sources/Voice/TalkModeManager.swift +++ b/apps/ios/Sources/Voice/TalkModeManager.swift @@ -92,7 +92,7 @@ final class TalkModeManager: NSObject { private var incrementalSpeechContext: IncrementalSpeechContext? private var incrementalSpeechDirective: TalkDirective? - private let logger = Logger(subsystem: "bot.molt", category: "TalkMode") + private let logger = Logger(subsystem: "ai.mayros", category: "TalkMode") init(allowSimulatorCapture: Bool = false) { self.allowSimulatorCapture = allowSimulatorCapture diff --git a/apps/ios/Tests/KeychainStoreTests.swift b/apps/ios/Tests/KeychainStoreTests.swift index 252b26a6..928cee84 100644 --- a/apps/ios/Tests/KeychainStoreTests.swift +++ b/apps/ios/Tests/KeychainStoreTests.swift @@ -4,7 +4,7 @@ import Testing @Suite struct KeychainStoreTests { @Test func saveLoadUpdateDeleteRoundTrip() { - let service = "bot.molt.tests.\(UUID().uuidString)" + let service = "ai.mayros.tests.\(UUID().uuidString)" let account = "value" #expect(KeychainStore.delete(service: service, account: account)) diff --git a/apps/ios/fastlane/Appfile b/apps/ios/fastlane/Appfile index adaa3fc2..ff5890a5 100644 --- a/apps/ios/fastlane/Appfile +++ b/apps/ios/fastlane/Appfile @@ -1,4 +1,4 @@ -app_identifier("bot.molt.ios") +app_identifier("ai.mayros.ios") # Auth is expected via App Store Connect API key. # Provide either: diff --git a/apps/ios/project.yml b/apps/ios/project.yml index 5f6ce375..1d6a475a 100644 --- a/apps/ios/project.yml +++ b/apps/ios/project.yml @@ -99,6 +99,7 @@ targets: UIApplicationSupportsMultipleScenes: false UIBackgroundModes: - audio + - location - remote-notification BGTaskSchedulerPermittedIdentifiers: - ai.mayros.ios.bgrefresh @@ -112,6 +113,12 @@ targets: NSLocationAlwaysAndWhenInUseUsageDescription: Mayros can share your location in the background when you enable Always. NSMicrophoneUsageDescription: Mayros needs microphone access for voice wake. NSSpeechRecognitionUsageDescription: Mayros uses on-device speech recognition for voice wake. + NSContactsUsageDescription: Mayros accesses your contacts to share them with the gateway when you allow it. + NSPhotoLibraryUsageDescription: Mayros accesses your photo library to share images with the gateway. + NSPhotoLibraryAddUsageDescription: Mayros saves photos and videos to your library when requested. + NSCalendarsUsageDescription: Mayros accesses your calendar to read and create events when you allow it. + NSRemindersUsageDescription: Mayros accesses your reminders to read and create items when you allow it. + NSMotionUsageDescription: Mayros uses motion data to detect device activity and orientation. UISupportedInterfaceOrientations: - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown From 0fe0dafbf58da16e190bd58e23452d918937894d Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:39 +0100 Subject: [PATCH 05/19] Update Android app with Play Store and sideload build flavors --- apps/android/app/build.gradle.kts | 29 ++++++++++++++++++- .../main/res/xml/network_security_config.xml | 8 +++-- .../app/src/playstore/AndroidManifest.xml | 8 +++++ .../app/src/sideload/AndroidManifest.xml | 4 +++ apps/android/keystore.properties.example | 6 ++++ 5 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 apps/android/app/src/playstore/AndroidManifest.xml create mode 100644 apps/android/app/src/sideload/AndroidManifest.xml create mode 100644 apps/android/keystore.properties.example diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts index a91e7e31..763ff479 100644 --- a/apps/android/app/build.gradle.kts +++ b/apps/android/app/build.gradle.kts @@ -1,4 +1,5 @@ import com.android.build.api.variant.impl.VariantOutputImpl +import java.util.Properties plugins { id("com.android.application") @@ -7,6 +8,11 @@ plugins { id("org.jetbrains.kotlin.plugin.serialization") } +val keystoreProperties = Properties().apply { + val f = rootProject.file("keystore.properties") + if (f.exists()) load(f.inputStream()) +} + android { namespace = "ai.mayros.android" compileSdk = 36 @@ -29,10 +35,20 @@ android { } } + signingConfigs { + create("release") { + storeFile = file(System.getenv("KEYSTORE_FILE") ?: keystoreProperties.getProperty("storeFile", "release.keystore")) + storePassword = System.getenv("KEYSTORE_PASSWORD") ?: keystoreProperties.getProperty("storePassword", "") + keyAlias = System.getenv("KEY_ALIAS") ?: keystoreProperties.getProperty("keyAlias", "") + keyPassword = System.getenv("KEY_PASSWORD") ?: keystoreProperties.getProperty("keyPassword", "") + } + } + buildTypes { release { isMinifyEnabled = true isShrinkResources = true + signingConfig = signingConfigs.getByName("release") proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } debug { @@ -40,6 +56,16 @@ android { } } + flavorDimensions += "distribution" + productFlavors { + create("playstore") { + dimension = "distribution" + } + create("sideload") { + dimension = "distribution" + } + } + buildFeatures { compose = true buildConfig = true @@ -84,7 +110,8 @@ androidComponents { val versionName = output.versionName.orNull ?: "0" val buildType = variant.buildType - val outputFileName = "mayros-${versionName}-${buildType}.apk" + val flavor = variant.flavorName ?: "" + val outputFileName = "mayros-${versionName}-${flavor}-${buildType}.apk" output.outputFileName = outputFileName } } diff --git a/apps/android/app/src/main/res/xml/network_security_config.xml b/apps/android/app/src/main/res/xml/network_security_config.xml index c91a9b61..2cf2db5f 100644 --- a/apps/android/app/src/main/res/xml/network_security_config.xml +++ b/apps/android/app/src/main/res/xml/network_security_config.xml @@ -1,7 +1,6 @@ - - - + + mayros.local @@ -9,4 +8,7 @@ ts.net + + localhost + diff --git a/apps/android/app/src/playstore/AndroidManifest.xml b/apps/android/app/src/playstore/AndroidManifest.xml new file mode 100644 index 00000000..dfe10497 --- /dev/null +++ b/apps/android/app/src/playstore/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/apps/android/app/src/sideload/AndroidManifest.xml b/apps/android/app/src/sideload/AndroidManifest.xml new file mode 100644 index 00000000..1321aa57 --- /dev/null +++ b/apps/android/app/src/sideload/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/apps/android/keystore.properties.example b/apps/android/keystore.properties.example new file mode 100644 index 00000000..4f6e1d37 --- /dev/null +++ b/apps/android/keystore.properties.example @@ -0,0 +1,6 @@ +# Copy this file to keystore.properties and fill in your values. +# Do NOT commit keystore.properties — it is gitignored. +storeFile=release.keystore +storePassword= +keyAlias= +keyPassword= From a8a05b8cdae0117febd19624a24daa9cad0233b8 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:44 +0100 Subject: [PATCH 06/19] Update macOS Package.swift --- apps/macos/Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/macos/Package.swift b/apps/macos/Package.swift index 7f144436..41d2ad76 100644 --- a/apps/macos/Package.swift +++ b/apps/macos/Package.swift @@ -19,7 +19,7 @@ let package = Package( .package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "0.1.0"), .package(url: "https://github.com/apple/swift-log.git", from: "1.8.0"), .package(url: "https://github.com/sparkle-project/Sparkle", from: "2.8.1"), - .package(url: "https://github.com/steipete/Peekaboo.git", branch: "main"), + .package(url: "https://github.com/steipete/Peekaboo.git", revision: "bace59f90bb276f1c6fb613acfda3935ec4a7a90"), .package(path: "../shared/MayrosKit"), .package(path: "../../Swabble"), ], From e9fccdbea66f7a73b7d16c3fb52f2b0fa039b958 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:49 +0100 Subject: [PATCH 07/19] Update CI workflow and build scripts --- .github/workflows/ci.yml | 6 ++++-- .gitignore | 5 +++++ scripts/make_appcast.sh | 2 ++ scripts/mayroslog.sh | 40 +++++++++++++++++++------------------- scripts/package-mac-app.sh | 2 ++ scripts/restart-mac.sh | 2 +- 6 files changed, 34 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 23f96270..f3b8c044 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -320,9 +320,11 @@ jobs: matrix: include: - task: test - command: ./gradlew --no-daemon :app:testDebugUnitTest + command: ./gradlew --no-daemon :app:testSideloadDebugUnitTest - task: build - command: ./gradlew --no-daemon :app:assembleDebug + command: ./gradlew --no-daemon :app:assembleSideloadDebug + - task: bundle-playstore + command: ./gradlew --no-daemon :app:bundlePlaystoreRelease steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index ba6ecfe4..4398a115 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,11 @@ apps/android/.gradle/ apps/android/app/build/ apps/android/.cxx/ +# Android signing (NEVER COMMIT) +apps/android/keystore.properties +*.jks +*.keystore + # Swift / macOS / iOS build artifacts *.bun-build apps/macos/.build/ diff --git a/scripts/make_appcast.sh b/scripts/make_appcast.sh index 89fa37a5..c7ba68b0 100755 --- a/scripts/make_appcast.sh +++ b/scripts/make_appcast.sh @@ -3,6 +3,8 @@ set -euo pipefail ROOT=$(cd "$(dirname "$0")/.." && pwd) ZIP=${1:?"Usage: $0 Mayros-.zip"} +# TODO: Review URL — uses mayros/mayros but public repo is ApiliumCode/mayros. +# Do NOT change without updating existing users' Sparkle feed. FEED_URL=${2:-"https://raw.githubusercontent.com/mayros/mayros/main/appcast.xml"} PRIVATE_KEY_FILE=${SPARKLE_PRIVATE_KEY_FILE:-} if [[ -z "$PRIVATE_KEY_FILE" ]]; then diff --git a/scripts/mayroslog.sh b/scripts/mayroslog.sh index 338542cf..2c12739c 100755 --- a/scripts/mayroslog.sh +++ b/scripts/mayroslog.sh @@ -1,7 +1,7 @@ #!/bin/bash -# VibeTunnel Logging Utility -# Simplifies access to VibeTunnel logs using macOS unified logging system +# Mayros Logging Utility +# Simplifies access to Mayros logs using macOS unified logging system set -euo pipefail @@ -21,7 +21,7 @@ handle_sudo_error() { echo -e "\n${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${YELLOW}⚠️ Password Required for Log Access${NC}" echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n" - echo -e "clawlog needs to use sudo to show complete log data (Apple hides sensitive info by default)." + echo -e "mayroslog needs to use sudo to show complete log data (Apple hides sensitive info by default)." echo -e "\nTo avoid password prompts, configure passwordless sudo for the log command:" echo -e "See: ${BLUE}apple/docs/logging-private-fix.md${NC}\n" echo -e "Quick fix:" @@ -48,10 +48,10 @@ SHOW_HELP=false # Function to show usage show_usage() { cat << EOF -clawlog - Mayros Logging Utility +mayroslog - Mayros Logging Utility USAGE: - clawlog [OPTIONS] + mayroslog [OPTIONS] DESCRIPTION: View Mayros logs with full details (bypasses Apple's privacy redaction). @@ -69,10 +69,10 @@ LOG CATEGORIES (examples): • shell - ShellExecutor QUICK START: - clawlog -n 100 Show last 100 lines from all components - clawlog -f Follow logs in real-time - clawlog -e Show only errors - clawlog -c ServerManager Show logs from ServerManager only + mayroslog -n 100 Show last 100 lines from all components + mayroslog -f Follow logs in real-time + mayroslog -e Show only errors + mayroslog -c ServerManager Show logs from ServerManager only OPTIONS: -h, --help Show this help message @@ -91,15 +91,15 @@ OPTIONS: --json Output in JSON format EXAMPLES: - clawlog Show last 50 lines from past 5 minutes (default) - clawlog -f Stream logs continuously - clawlog -n 100 Show last 100 lines - clawlog -e Show only recent errors - clawlog -l 30m -n 200 Show last 200 lines from past 30 minutes - clawlog -c ServerManager Show recent ServerManager logs - clawlog -s "fail" Search for "fail" in recent logs - clawlog --server -e Show recent server errors - clawlog -f -d Stream debug logs continuously + mayroslog Show last 50 lines from past 5 minutes (default) + mayroslog -f Stream logs continuously + mayroslog -n 100 Show last 100 lines + mayroslog -e Show only recent errors + mayroslog -l 30m -n 200 Show last 200 lines from past 30 minutes + mayroslog -c ServerManager Show recent ServerManager logs + mayroslog -s "fail" Search for "fail" in recent logs + mayroslog --server -e Show recent server errors + mayroslog -f -d Stream debug logs continuously CATEGORIES: Common categories include: @@ -123,7 +123,7 @@ EOF # Function to list categories list_categories() { - echo -e "${BLUE}Fetching VibeTunnel log categories from the last hour...${NC}\n" + echo -e "${BLUE}Fetching Mayros log categories from the last hour...${NC}\n" # Get unique categories from recent logs log show --predicate "subsystem == \"$SUBSYSTEM\"" --last 1h 2>/dev/null | \ @@ -231,7 +231,7 @@ if [[ "$STREAM_MODE" == true ]]; then # Streaming mode CMD="sudo log stream --predicate '$PREDICATE' --level $LOG_LEVEL --info" - echo -e "${GREEN}Streaming VibeTunnel logs continuously...${NC}" + echo -e "${GREEN}Streaming Mayros logs continuously...${NC}" echo -e "${YELLOW}Press Ctrl+C to stop${NC}\n" else # Show mode diff --git a/scripts/package-mac-app.sh b/scripts/package-mac-app.sh index d37d3264..12b69f21 100755 --- a/scripts/package-mac-app.sh +++ b/scripts/package-mac-app.sh @@ -23,6 +23,8 @@ fi IFS=' ' read -r -a BUILD_ARCHS <<< "$BUILD_ARCHS_VALUE" PRIMARY_ARCH="${BUILD_ARCHS[0]}" SPARKLE_PUBLIC_ED_KEY="${SPARKLE_PUBLIC_ED_KEY:-AGCY8w5vHirVfGGDGc8Szc5iuOqupZSh9pMj/Qs67XI=}" +# TODO: Review URL — uses mayros/mayros but public repo is ApiliumCode/mayros. +# Do NOT change without updating existing users' Sparkle feed. SPARKLE_FEED_URL="${SPARKLE_FEED_URL:-https://raw.githubusercontent.com/mayros/mayros/main/appcast.xml}" AUTO_CHECKS=true if [[ "$BUNDLE_ID" == *.debug ]]; then diff --git a/scripts/restart-mac.sh b/scripts/restart-mac.sh index 1cdd1cc0..68dad29b 100755 --- a/scripts/restart-mac.sh +++ b/scripts/restart-mac.sh @@ -265,5 +265,5 @@ else fi 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.mayros.gateway.plist' | head -n 40 || true" fi From b722eb53366fb58fb6ef4794ff8c26311eeea4dc Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:54:54 +0100 Subject: [PATCH 08/19] Update extensions: zod v4, observability route API, esbuild import --- extensions/irc/package.json | 2 +- extensions/nextcloud-talk/package.json | 2 +- extensions/semantic-observability/index.ts | 9 ++++++--- extensions/semantic-skills/sandbox/ts-transpiler.ts | 7 ++++--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/extensions/irc/package.json b/extensions/irc/package.json index 672248fa..deab6f54 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -8,7 +8,7 @@ "access": "public" }, "dependencies": { - "zod": "^3.23.0" + "zod": "^4.3.6" }, "peerDependencies": { "@apilium/mayros": ">=0.1.0" diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json index 02a2161a..8d677a64 100644 --- a/extensions/nextcloud-talk/package.json +++ b/extensions/nextcloud-talk/package.json @@ -8,7 +8,7 @@ "access": "public" }, "dependencies": { - "zod": "^3.23.0" + "zod": "^4.3.6" }, "peerDependencies": { "@apilium/mayros": ">=0.1.0" diff --git a/extensions/semantic-observability/index.ts b/extensions/semantic-observability/index.ts index 30c37a46..08aea257 100644 --- a/extensions/semantic-observability/index.ts +++ b/extensions/semantic-observability/index.ts @@ -494,9 +494,12 @@ const semanticObservabilityPlugin = { // ======================================================================== if (cfg.metrics.enabled && api.registerHttpRoute) { - api.registerHttpRoute(cfg.metrics.path, (_req, res) => { - res.setHeader("Content-Type", "text/plain; version=0.0.4; charset=utf-8"); - res.end(metrics.toPrometheus()); + api.registerHttpRoute({ + path: cfg.metrics.path, + handler: (_req, res) => { + res.setHeader("Content-Type", "text/plain; version=0.0.4; charset=utf-8"); + res.end(metrics.toPrometheus()); + }, }); api.logger.info(`semantic-observability: metrics endpoint registered at ${cfg.metrics.path}`); } diff --git a/extensions/semantic-skills/sandbox/ts-transpiler.ts b/extensions/semantic-skills/sandbox/ts-transpiler.ts index df8eb21f..cd235c7f 100644 --- a/extensions/semantic-skills/sandbox/ts-transpiler.ts +++ b/extensions/semantic-skills/sandbox/ts-transpiler.ts @@ -15,10 +15,11 @@ export async function transpileSkillToJS(source: string, filename: string): Prom try { // esbuild is available as a transitive dependency (via tsdown) // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore — esbuild is optional; dynamic import may fail at runtime - const esbuild: { + // @ts-expect-error — esbuild is optional; may not have type declarations installed + const esbuildModule = await import("esbuild"); + const esbuild = esbuildModule as { transform: (s: string, opts: Record) => Promise<{ code: string }>; - } = await import("esbuild"); + }; const result = await esbuild.transform(source, { loader: "ts", format: "esm", From cec1bbd2c171a06a51d65ad61fbe24fd97b6c558 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:55:03 +0100 Subject: [PATCH 09/19] Update plugin SDK exports and rename legacy plist references --- src/cli/daemon-cli.coverage.e2e.test.ts | 2 +- src/commands/status.e2e.test.ts | 4 ++-- src/plugin-sdk/index.ts | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cli/daemon-cli.coverage.e2e.test.ts b/src/cli/daemon-cli.coverage.e2e.test.ts index 2666a1bb..16fdc060 100644 --- a/src/cli/daemon-cli.coverage.e2e.test.ts +++ b/src/cli/daemon-cli.coverage.e2e.test.ts @@ -158,7 +158,7 @@ describe("daemon-cli coverage", () => { MAYROS_CONFIG_PATH: "/tmp/mayros-daemon-state/mayros.json", MAYROS_GATEWAY_PORT: "19001", }, - sourcePath: "/tmp/bot.molt.gateway.plist", + sourcePath: "/tmp/ai.mayros.gateway.plist", }); await runDaemonCommand(["daemon", "status", "--json"]); diff --git a/src/commands/status.e2e.test.ts b/src/commands/status.e2e.test.ts index 15f0b1ad..41283fea 100644 --- a/src/commands/status.e2e.test.ts +++ b/src/commands/status.e2e.test.ts @@ -297,7 +297,7 @@ vi.mock("../daemon/service.js", () => ({ readRuntime: async () => ({ status: "running", pid: 1234 }), readCommand: async () => ({ programArguments: ["node", "dist/entry.js", "gateway"], - sourcePath: "/tmp/Library/LaunchAgents/bot.molt.gateway.plist", + sourcePath: "/tmp/Library/LaunchAgents/ai.mayros.gateway.plist", }), }), })); @@ -310,7 +310,7 @@ vi.mock("../daemon/node-service.js", () => ({ readRuntime: async () => ({ status: "running", pid: 4321 }), readCommand: async () => ({ programArguments: ["node", "dist/entry.js", "node-host"], - sourcePath: "/tmp/Library/LaunchAgents/bot.molt.node.plist", + sourcePath: "/tmp/Library/LaunchAgents/ai.mayros.node.plist", }), }), })); diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index 23afcaf7..84a597ab 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -76,6 +76,7 @@ export type { MayrosPluginApi, MayrosPluginService, MayrosPluginServiceContext, + MayrosPluginToolFactory, ProviderAuthContext, ProviderAuthResult, } from "../plugins/types.js"; From e0b7f1ee9c687d0109e35d78e19f87544c4370ee Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:55:47 +0100 Subject: [PATCH 10/19] Fix deprecated and vulnerable transitive dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump minimatch 10.2.1 → 10.2.3 (2x HIGH ReDoS) - Bump fast-xml-parser 5.3.6 → 5.3.8 (LOW stack overflow) - Bump node-llama-cpp 3.15.1 → 3.17.1 (cmake-js 8, drops deprecated deps) - Remove @discordjs/opus direct dep, override to opusscript (eliminates node-pre-gyp chain: rimraf@3, glob@7, inflight, npmlog, gauge) --- package.json | 10 +- pnpm-lock.yaml | 1064 +++++++++++++----------------------------------- 2 files changed, 296 insertions(+), 778 deletions(-) diff --git a/package.json b/package.json index 9d5aeb69..a7eef6f7 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,6 @@ "@aws-sdk/client-bedrock": "^3.995.0", "@buape/carbon": "0.0.0-beta-20260216184201", "@clack/prompts": "^1.0.1", - "@discordjs/opus": "^0.10.0", "@discordjs/voice": "^0.19.0", "@grammyjs/runner": "^2.0.3", "@grammyjs/transformer-throttler": "^1.2.1", @@ -219,7 +218,7 @@ }, "peerDependencies": { "@napi-rs/canvas": "^0.1.89", - "node-llama-cpp": "3.15.1" + "node-llama-cpp": "3.17.1" }, "engines": { "node": ">=22.12.0" @@ -229,15 +228,16 @@ "minimumReleaseAge": 2880, "overrides": { "hono": "4.11.10", - "fast-xml-parser": "5.3.6", + "fast-xml-parser": "5.3.8", "request": "npm:@cypress/request@3.0.10", "request-promise": "npm:@cypress/request-promise@5.0.0", "form-data": "2.5.4", - "minimatch": "10.2.1", + "minimatch": "10.2.3", "qs": "6.14.2", "@sinclair/typebox": "0.34.48", "tar": "7.5.9", - "tough-cookie": "4.1.3" + "tough-cookie": "4.1.3", + "@discordjs/opus": "npm:opusscript@0.0.8" }, "onlyBuiltDependencies": [ "@lydell/node-pty", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a87acf6..8694ef67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,15 +6,16 @@ settings: overrides: hono: 4.11.10 - fast-xml-parser: 5.3.6 + fast-xml-parser: 5.3.8 request: npm:@cypress/request@3.0.10 request-promise: npm:@cypress/request-promise@5.0.0 form-data: 2.5.4 - minimatch: 10.2.1 + minimatch: 10.2.3 qs: 6.14.2 '@sinclair/typebox': 0.34.48 tar: 7.5.9 tough-cookie: 4.1.3 + '@discordjs/opus': npm:opusscript@0.0.8 importers: @@ -28,16 +29,13 @@ importers: version: 3.997.0 '@buape/carbon': specifier: 0.0.0-beta-20260216184201 - version: 0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.11.10)(opusscript@0.0.8) + version: 0.0.0-beta-20260216184201(hono@4.11.10)(opusscript@0.0.8)(opusscript@0.0.8) '@clack/prompts': specifier: ^1.0.1 version: 1.0.1 - '@discordjs/opus': - specifier: ^0.10.0 - version: 0.10.0 '@discordjs/voice': specifier: ^0.19.0 - version: 0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8) + version: 0.19.0(opusscript@0.0.8)(opusscript@0.0.8) '@grammyjs/runner': specifier: ^2.0.3 version: 2.0.3(grammy@1.40.0) @@ -141,8 +139,8 @@ importers: specifier: ^1.2.10 version: 1.2.10 node-llama-cpp: - specifier: 3.15.1 - version: 3.15.1(typescript@5.9.3) + specifier: 3.17.1 + version: 3.17.1(typescript@5.9.3) opusscript: specifier: ^0.0.8 version: 0.0.8 @@ -261,10 +259,10 @@ importers: version: link:../.. extensions/bluebubbles: - devDependencies: + dependencies: '@apilium/mayros': - specifier: workspace:* - version: link:../.. + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) extensions/copilot-proxy: devDependencies: @@ -274,6 +272,9 @@ importers: extensions/diagnostics-otel: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -307,19 +308,18 @@ importers: '@opentelemetry/semantic-conventions': specifier: ^1.39.0 version: 1.39.0 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/discord: - devDependencies: + dependencies: '@apilium/mayros': - specifier: workspace:* - version: link:../.. + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) extensions/feishu: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@larksuiteoapi/node-sdk': specifier: ^1.59.0 version: 1.59.0 @@ -329,10 +329,6 @@ importers: zod: specifier: ^4.3.6 version: 4.3.6 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/google-antigravity-auth: devDependencies: @@ -373,10 +369,13 @@ importers: version: link:../.. extensions/irc: - devDependencies: + dependencies: '@apilium/mayros': - specifier: workspace:* - version: link:../.. + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) + zod: + specifier: ^4.3.6 + version: 4.3.6 extensions/line: devDependencies: @@ -386,10 +385,20 @@ importers: extensions/llm-task: {} - extensions/lobster: {} + extensions/lobster: + dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) + '@sinclair/typebox': + specifier: 0.34.48 + version: 0.34.48 extensions/matrix: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@matrix-org/matrix-sdk-crypto-nodejs': specifier: ^0.4.0 version: 0.4.0 @@ -405,10 +414,6 @@ importers: zod: specifier: ^4.3.6 version: 4.3.6 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/mattermost: devDependencies: @@ -456,35 +461,36 @@ importers: extensions/msteams: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@microsoft/agents-hosting': specifier: ^1.3.1 version: 1.3.1 express: specifier: ^5.2.1 version: 5.2.1 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/nextcloud-talk: - devDependencies: + dependencies: '@apilium/mayros': - specifier: workspace:* - version: link:../.. + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) + zod: + specifier: ^4.3.6 + version: 4.3.6 extensions/nostr: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) nostr-tools: specifier: ^2.23.1 version: 2.23.1(typescript@5.9.3) zod: specifier: ^4.3.6 version: 4.3.6 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/open-prose: {} @@ -577,6 +583,9 @@ importers: extensions/voice-call: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@sinclair/typebox': specifier: 0.34.48 version: 0.34.48 @@ -586,10 +595,6 @@ importers: zod: specifier: ^4.3.6 version: 4.3.6 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/whatsapp: devDependencies: @@ -599,23 +604,21 @@ importers: extensions/zalo: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) undici: specifier: 7.22.0 version: 7.22.0 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. extensions/zalouser: dependencies: + '@apilium/mayros': + specifier: '>=0.1.0' + version: 0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3)) '@sinclair/typebox': specifier: 0.34.48 version: 0.34.48 - devDependencies: - '@apilium/mayros': - specifier: workspace:* - version: link:../.. ui: dependencies: @@ -673,6 +676,14 @@ packages: zod: optional: true + '@apilium/mayros@0.1.1': + resolution: {integrity: sha512-mtW1hseokxhgGsx5fvekJ+HeDngsyIV9iPC3Btk0r6hfzG+UGx5gc0vX5+aM0YShk0bC1k3lbYs6GrpeC6Dyng==} + engines: {node: '>=22.12.0'} + hasBin: true + peerDependencies: + '@napi-rs/canvas': ^0.1.89 + node-llama-cpp: 3.15.1 + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -944,14 +955,6 @@ packages: '@d-fischer/typed-event-emitter@3.3.3': resolution: {integrity: sha512-OvSEOa8icfdWDqcRtjSEZtgJTFOFNgTjje7zaL0+nAtu2/kZtRCSK5wUMrI/aXtCH8o0Qz2vA8UqkhWUTARFQQ==} - '@discordjs/node-pre-gyp@0.4.5': - resolution: {integrity: sha512-YJOVVZ545x24mHzANfYoy0BJX5PDyeZlpiJjDkUBM/V/Ao7TFX9lcUvCN4nr0tbr5ubeaXxtEBILUrHtTphVeQ==} - hasBin: true - - '@discordjs/opus@0.10.0': - resolution: {integrity: sha512-HHEnSNrSPmFEyndRdQBJN2YE6egyXS9JUnJWyP6jficK0Y+qKMEZXyYTgmzpjrxXP1exM/hKaNP7BRBUEWkU5w==} - engines: {node: '>=12.0.0'} - '@discordjs/voice@0.19.0': resolution: {integrity: sha512-UyX6rGEXzVyPzb1yvjHtPfTlnLvB5jX/stAMdiytHhfoydX+98hfympdOwsnTktzr+IRvphxTbdErgYDJkEsvw==} engines: {node: '>=22.12.0'} @@ -1410,7 +1413,6 @@ packages: '@lancedb/lancedb@0.26.2': resolution: {integrity: sha512-umk4WMCTwJntLquwvUbpqE+TXREolcQVL9MHcxr8EhRjsha88+ATJ4QuS/hpyiE1CG3R/XcgrMgJAGkziPC/gA==} engines: {node: '>= 18'} - cpu: [x64, arm64] os: [darwin, linux, win32] peerDependencies: apache-arrow: '>=15.0.0 <=18.1.0' @@ -1659,191 +1661,84 @@ packages: resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} engines: {node: '>= 20.19.0'} - '@node-llama-cpp/linux-arm64@3.15.1': - resolution: {integrity: sha512-g7JC/WwDyyBSmkIjSvRF2XLW+YA0z2ZVBSAKSv106mIPO4CzC078woTuTaPsykWgIaKcQRyXuW5v5XQMcT1OOA==} + '@node-llama-cpp/linux-arm64@3.17.1': + resolution: {integrity: sha512-QK8opgd/AnGHvSQwIDXukrMNa760PLOxcu4OrxJn/CsHxiKucch0L4bDfu17XvlKiMoK41lXa6CKFm1kjVaGIQ==} engines: {node: '>=20.0.0'} cpu: [arm64, x64] os: [linux] - '@node-llama-cpp/linux-armv7l@3.15.1': - resolution: {integrity: sha512-MSxR3A0vFSVWbmVSkNqNXQnI45L2Vg7/PRgJukcjChk7YzRxs9L+oQMeycVW3BsQ03mIZ0iORsZ9MNIBEbdS3g==} + '@node-llama-cpp/linux-armv7l@3.17.1': + resolution: {integrity: sha512-KCLDVR1hayo/kSDUq6msT4BkBaEiudFsaT14EWFMw7V7JdEX/qBcHnthPa0eAtX0SVfKG7e2TafGuKpvr54GAw==} engines: {node: '>=20.0.0'} cpu: [arm, x64] os: [linux] - '@node-llama-cpp/linux-x64-cuda-ext@3.15.1': - resolution: {integrity: sha512-toepvLcXjgaQE/QGIThHBD58jbHGBWT1jhblJkCjYBRHfVOO+6n/PmVsJt+yMfu5Z93A2gF8YOvVyZXNXmGo5g==} + '@node-llama-cpp/linux-x64-cuda-ext@3.17.1': + resolution: {integrity: sha512-wlGASJIqs6yLIUd++d7KVQvrCsJrGgWKsA87wzOkkJsWEtWqtu1qCL5Pbvja5yv7OK4B4UJ/oruzccAyuBFeqQ==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] - '@node-llama-cpp/linux-x64-cuda@3.15.1': - resolution: {integrity: sha512-kngwoq1KdrqSr/b6+tn5jbtGHI0tZnW5wofKssZy+Il2ge3eN9FowKbXG4FH452g6qSSVoDccAoTvYOxyLyX+w==} + '@node-llama-cpp/linux-x64-cuda@3.17.1': + resolution: {integrity: sha512-DNTlf/x4y7eOodLrGIk2q8LL3lLrMZOG8ztUCVi802vXm3oyIO5x+ZqoRT8zbDx90wVdo3sSZhf8jvNli+JSEQ==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] - '@node-llama-cpp/linux-x64-vulkan@3.15.1': - resolution: {integrity: sha512-CMsyQkGKpHKeOH9+ZPxo0hO0usg8jabq5/aM3JwdX9CiuXhXUa3nu3NH4RObiNi596Zwn/zWzlps0HRwcpL8rw==} + '@node-llama-cpp/linux-x64-vulkan@3.17.1': + resolution: {integrity: sha512-M14roGcHYVHBNuPI6v3eNQkoBp2BsGYbyNoks6arAX5Tstl9XqJr8Zg5cEzRcYf0h5a54Ec99uM4T871j46wxg==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] - '@node-llama-cpp/linux-x64@3.15.1': - resolution: {integrity: sha512-w4SdxJaA9eJLVYWX+Jv48hTP4oO79BJQIFURMi7hXIFXbxyyOov/r6sVaQ1WiL83nVza37U5Qg4L9Gb/KRdNWQ==} + '@node-llama-cpp/linux-x64@3.17.1': + resolution: {integrity: sha512-/o/UoqAdslg4ExdKYyYPqbw+21Dr4cQ2JgouXg8Ji3opRKoTMrlUNfrMwIsYZfbDDJ8l7xFnwfGIwdlQ5RPwJg==} engines: {node: '>=20.0.0'} cpu: [x64] os: [linux] - '@node-llama-cpp/mac-arm64-metal@3.15.1': - resolution: {integrity: sha512-ePTweqohcy6Gjs1agXWy4FxAw5W4Avr7NeqqiFWJ5ngZ1U3ZXdruUHB8L/vDxyn3FzKvstrFyN7UScbi0pzXrA==} + '@node-llama-cpp/mac-arm64-metal@3.17.1': + resolution: {integrity: sha512-oRq6/7qCMsazO2Cw0oCyiILZmMvejKJgLAIG60E00WOZWhpJGjh71JGnOybRycKA015mFPNDHzT3SDdUZtZBew==} engines: {node: '>=20.0.0'} cpu: [arm64, x64] os: [darwin] - '@node-llama-cpp/mac-x64@3.15.1': - resolution: {integrity: sha512-NAetSQONxpNXTBnEo7oOkKZ84wO2avBy6V9vV9ntjJLb/07g7Rar8s/jVaicc/rVl6C+8ljZNwqJeynirgAC5w==} + '@node-llama-cpp/mac-x64@3.17.1': + resolution: {integrity: sha512-3L0nFVi70j+Qk7Xb8p/RQVMU0E28G0xXX0YL6Vzkirq3DazPYhWOLWUUs9MtGW2FrBg/6PLqyddmxwBfCpjm3w==} engines: {node: '>=20.0.0'} cpu: [x64] os: [darwin] - '@node-llama-cpp/win-arm64@3.15.1': - resolution: {integrity: sha512-1O9tNSUgvgLL5hqgEuYiz7jRdA3+9yqzNJyPW1jExlQo442OA0eIpHBmeOtvXLwMkY7qv7wE75FdOPR7NVEnvg==} + '@node-llama-cpp/win-arm64@3.17.1': + resolution: {integrity: sha512-AStvEtvpwQoCFr6lc0OQgOs//WOS0288AN9WTTmhb4FloRj8HvGeKqlLEdhQBtIES8CXpuDXHcbYfFu4v+BXVQ==} engines: {node: '>=20.0.0'} cpu: [arm64, x64] os: [win32] - '@node-llama-cpp/win-x64-cuda-ext@3.15.1': - resolution: {integrity: sha512-mO3Tf6D3UlFkjQF5J96ynTkjdF7dac/f5f61cEh6oU4D3hdx+cwnmBWT1gVhDSLboJYzCHtx7U2EKPP6n8HoWA==} + '@node-llama-cpp/win-x64-cuda-ext@3.17.1': + resolution: {integrity: sha512-8ypciTUj1m1AYUbQehIj408a4w9hxNb6ddaW7dMiPH0Cqq9TFCspY/Pj2uXmJOH22VcijGNIvIQe5MPoAmYoUA==} engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] - '@node-llama-cpp/win-x64-cuda@3.15.1': - resolution: {integrity: sha512-swoyx0/dY4ixiu3mEWrIAinx0ffHn9IncELDNREKG+iIXfx6w0OujOMQ6+X+lGj+sjE01yMUP/9fv6GEp2pmBw==} + '@node-llama-cpp/win-x64-cuda@3.17.1': + resolution: {integrity: sha512-Gn08t64l3GHANoYwOnDzTA8Zp9BXZCQnTXHWIyc9pZ6pkDB4LAvZZIPgGuWTGSCipSk6Oi/hartehsRCin7Mhg==} engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] - '@node-llama-cpp/win-x64-vulkan@3.15.1': - resolution: {integrity: sha512-BPBjUEIkFTdcHSsQyblP0v/aPPypi6uqQIq27mo4A49CYjX22JDmk4ncdBLk6cru+UkvwEEe+F2RomjoMt32aQ==} + '@node-llama-cpp/win-x64-vulkan@3.17.1': + resolution: {integrity: sha512-HleDjYiJjL761U64eGo8Xe/U43zQ+xwzNSPw6Z82JCTnHjZ7tci33dmhJZHDl9NraG8hO15UnrDwgXzHwucDdw==} engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] - '@node-llama-cpp/win-x64@3.15.1': - resolution: {integrity: sha512-jtoXBa6h+VPsQgefrO7HDjYv4WvxfHtUO30ABwCUDuEgM0e05YYhxMZj1z2Ns47UrquNvd/LUPCyjHKqHUN+5Q==} + '@node-llama-cpp/win-x64@3.17.1': + resolution: {integrity: sha512-XDES1ublhDzw+so2ujg3qbxBopyPDJnYAr/nPyjA7Eu/HIlt2+qo682qapUXcyhV5U8wkfeMShMLzolwZ801Nw==} engines: {node: '>=20.0.0'} cpu: [x64] os: [win32] - '@octokit/app@16.1.2': - resolution: {integrity: sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==} - engines: {node: '>= 20'} - - '@octokit/auth-app@8.2.0': - resolution: {integrity: sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g==} - engines: {node: '>= 20'} - - '@octokit/auth-oauth-app@9.0.3': - resolution: {integrity: sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==} - engines: {node: '>= 20'} - - '@octokit/auth-oauth-device@8.0.3': - resolution: {integrity: sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==} - engines: {node: '>= 20'} - - '@octokit/auth-oauth-user@6.0.2': - resolution: {integrity: sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==} - engines: {node: '>= 20'} - - '@octokit/auth-token@6.0.0': - resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} - engines: {node: '>= 20'} - - '@octokit/auth-unauthenticated@7.0.3': - resolution: {integrity: sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==} - engines: {node: '>= 20'} - - '@octokit/core@7.0.6': - resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} - engines: {node: '>= 20'} - - '@octokit/endpoint@11.0.3': - resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==} - engines: {node: '>= 20'} - - '@octokit/graphql@9.0.3': - resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} - engines: {node: '>= 20'} - - '@octokit/oauth-app@8.0.3': - resolution: {integrity: sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==} - engines: {node: '>= 20'} - - '@octokit/oauth-authorization-url@8.0.0': - resolution: {integrity: sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==} - engines: {node: '>= 20'} - - '@octokit/oauth-methods@6.0.2': - resolution: {integrity: sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==} - engines: {node: '>= 20'} - - '@octokit/openapi-types@27.0.0': - resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} - - '@octokit/openapi-webhooks-types@12.1.0': - resolution: {integrity: sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==} - - '@octokit/plugin-paginate-graphql@6.0.0': - resolution: {integrity: sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-paginate-rest@14.0.0': - resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-rest-endpoint-methods@17.0.0': - resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-retry@8.1.0': - resolution: {integrity: sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=7' - - '@octokit/plugin-throttling@11.0.3': - resolution: {integrity: sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': ^7.0.0 - - '@octokit/request-error@7.1.0': - resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} - engines: {node: '>= 20'} - - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} - engines: {node: '>= 20'} - - '@octokit/types@16.0.0': - resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - - '@octokit/webhooks-methods@6.0.0': - resolution: {integrity: sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==} - engines: {node: '>= 20'} - - '@octokit/webhooks@14.2.0': - resolution: {integrity: sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==} - engines: {node: '>= 20'} - '@opentelemetry/api-logs@0.212.0': resolution: {integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==} engines: {node: '>=8.0.0'} @@ -2851,9 +2746,6 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/aws-lambda@8.10.160': - resolution: {integrity: sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA==} - '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -2926,8 +2818,8 @@ packages: '@types/node@10.17.60': resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - '@types/node@20.19.33': - resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==} + '@types/node@20.19.35': + resolution: {integrity: sha512-Uarfe6J91b9HAUXxjvSOdiO2UPOKLm07Q1oh0JHxoZ1y8HoqxDAu3gVrsrOHeiio0kSsoVBt4wFrKOm0dKxVPQ==} '@types/node@24.10.13': resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} @@ -3094,9 +2986,6 @@ packages: resolution: {tarball: https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67} version: 2.0.1 - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3119,10 +3008,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -3172,19 +3057,6 @@ packages: resolution: {integrity: sha512-v/ShMp57iBnBp4lDgV8Jx3d3Q5/Hac25FWmQ98eMahUiHPXcvwIMKJD0hBIgclm/FCG+LwPkAKtkRO1O/W0YGg==} hasBin: true - aproba@2.1.0: - resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} - - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3264,9 +3136,6 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - before-after-hook@4.0.0: - resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} @@ -3375,6 +3244,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -3382,9 +3255,9 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - cmake-js@7.4.0: - resolution: {integrity: sha512-Lw0JxEHrmk+qNj1n9W9d4IvkDdYTBn7l2BW6XmtLj7WPpIo2shvxUy+YokfjMxAAOELNonQwX3stkPhM5xSC2Q==} - engines: {node: '>= 14.15.0'} + cmake-js@8.0.0: + resolution: {integrity: sha512-YbUP88RDwCvoQkZhRtGURYm9RIpWdtvZuhT87fKNoLjk8kIFIFeARpKfuZQGdwfH99GZpUmqSfcDrK62X7lTgg==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true color-convert@2.0.1: @@ -3394,10 +3267,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -3418,9 +3287,6 @@ packages: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -3519,9 +3385,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -3707,17 +3570,14 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.6: - resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==} + fast-xml-parser@5.3.8: + resolution: {integrity: sha512-53jIF4N6u/pxvaL1eb/hEZts/cFLWZ92eCfLrNyCI0k38lettCG/Bs40W9pPwoPXyHQlKu2OUbQtiEIZK/J6Vw==} hasBin: true fdir@6.5.0: @@ -3801,9 +3661,6 @@ packages: resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3817,16 +3674,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - - gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - gaxios@7.1.3: resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} engines: {node: '>=18'} @@ -3873,10 +3720,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - google-auth-library@10.6.1: resolution: {integrity: sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==} engines: {node: '>=18'} @@ -3912,9 +3755,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -3974,10 +3814,6 @@ packages: resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} engines: {node: '>=0.10'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4007,10 +3843,6 @@ packages: resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} engines: {node: '>=20.19.0'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4065,10 +3897,6 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -4079,9 +3907,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.5: - resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} - engines: {node: '>=18'} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -4139,9 +3967,6 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-with-bigint@3.5.3: - resolution: {integrity: sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4259,10 +4084,6 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} - log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -4305,10 +4126,6 @@ packages: magicast@0.5.2: resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -4342,9 +4159,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memory-stream@1.0.0: - resolution: {integrity: sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==} - merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -4384,9 +4198,9 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.1: - resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} - engines: {node: 20 || >=22} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4450,8 +4264,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + node-addon-api@8.6.0: + resolution: {integrity: sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==} engines: {node: ^18 || ^20 || >= 21} node-api-headers@1.8.0: @@ -4484,8 +4298,8 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-llama-cpp@3.15.1: - resolution: {integrity: sha512-/fBNkuLGR2Q8xj2eeV12KXKZ9vCS2+o6aP11lW40pB9H6f0B3wOALi/liFrjhHukAoiH6C9wFTPzv6039+5DRA==} + node-llama-cpp@3.17.1: + resolution: {integrity: sha512-f+eYXag3kFeMwLrTTSTtyt+4p2etJGvTPXEdipYy7EqSZha9ZFBpGYNftxZwbdTiqh/qyNSe3TeZve5tkq5OPQ==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: @@ -4497,11 +4311,6 @@ packages: node-readable-to-web-readable-stream@0.4.2: resolution: {integrity: sha512-/cMZNI34v//jUTrI+UIo4ieHAB5EZRY/+7OmXZgBxaWBMcW2tGdceIw06RFxWxrKZ5Jp3sI2i5TsRo+CBhtVLQ==} - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - nostr-tools@2.23.1: resolution: {integrity: sha512-Q5SJ1omrseBFXtLwqDhufpFLA6vX3rS/IuBCc974qaYX6YKGwEPxa/ZsyxruUOr+b+5EpWL2hFmCB5AueYrfBw==} peerDependencies: @@ -4513,15 +4322,6 @@ packages: nostr-wasm@0.1.0: resolution: {integrity: sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA==} - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. - - npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -4540,10 +4340,6 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - octokit@5.0.5: - resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==} - engines: {node: '>= 20'} - on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -4594,9 +4390,9 @@ packages: opusscript@0.0.8: resolution: {integrity: sha512-VSTi1aWFuCkRCVq+tx/BQ5q9fMnQ9pVZ3JU4UHKqTkf0ED3fKEPdr+gKAAl3IA2hj9rrP6iyq3hlcJq3HELtNQ==} - ora@8.2.0: - resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} - engines: {node: '>=18'} + ora@9.3.0: + resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} + engines: {node: '>=20'} osc-progress@0.3.0: resolution: {integrity: sha512-4/8JfsetakdeEa4vAYV45FW20aY+B/+K8NEXp5Eiar3wR8726whgHrbSg5Ar/ZY1FLJ/AGtUqV7W2IVF+Gvp9A==} @@ -4689,10 +4485,6 @@ packages: partial-json@0.1.7: resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4786,7 +4578,7 @@ packages: prism-media@1.3.5: resolution: {integrity: sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==} peerDependencies: - '@discordjs/opus': '>=0.8.0 <1.0.0' + '@discordjs/opus': npm:opusscript@0.0.8 ffmpeg-static: ^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0 node-opus: ^0.3.3 opusscript: ^0.0.8 @@ -4890,10 +4682,6 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readdirp@5.0.0: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} @@ -4941,11 +4729,6 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -5002,10 +4785,6 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -5027,9 +4806,6 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -5082,8 +4858,8 @@ packages: peerDependencies: signal-polyfill: ^0.2.0 - simple-git@3.32.2: - resolution: {integrity: sha512-n/jhNmvYh8dwyfR6idSfpXrFazuyd57jwNMzgjGnKZV/1lTh0HKvPq20v4AQ62rP+l19bWjjXPTCdGHMt0AdrQ==} + simple-git@3.32.3: + resolution: {integrity: sha512-56a5oxFdWlsGygOXHWrG+xjj5w9ZIt2uQbzqiIGdR/6i5iococ7WQ/bNPzWxCJdEUGUCmyMH0t9zMpRJTaKxmw==} sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} @@ -5099,6 +4875,10 @@ packages: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -5172,8 +4952,8 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + stdin-discarder@0.3.1: + resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} engines: {node: '>=18'} stdout-update@4.0.1: @@ -5203,12 +4983,13 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -5269,10 +5050,6 @@ packages: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} - toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} - toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -5393,12 +5170,6 @@ packages: resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} - universal-github-app-jwt@2.2.2: - resolution: {integrity: sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==} - - universal-user-agent@7.0.3: - resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -5442,9 +5213,9 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - validate-npm-package-name@6.0.2: - resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==} - engines: {node: ^18.17.0 || >=20.5.0} + validate-npm-package-name@7.0.2: + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} + engines: {node: ^20.17.0 || >=22.9.0} vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} @@ -5543,9 +5314,9 @@ packages: engines: {node: '>= 8'} hasBin: true - which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true why-is-node-running@2.3.0: @@ -5553,9 +5324,6 @@ packages: engines: {node: '>=8'} hasBin: true - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - win-guid@0.2.1: resolution: {integrity: sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==} @@ -5648,6 +5416,81 @@ snapshots: optionalDependencies: zod: 4.3.6 + '@apilium/mayros@0.1.1(@napi-rs/canvas@0.1.95)(@types/express@5.0.6)(hono@4.11.10)(node-llama-cpp@3.17.1(typescript@5.9.3))': + dependencies: + '@agentclientprotocol/sdk': 0.14.1(zod@4.3.6) + '@aws-sdk/client-bedrock': 3.997.0 + '@buape/carbon': 0.0.0-beta-20260216184201(hono@4.11.10)(opusscript@0.0.8)(opusscript@0.0.8) + '@clack/prompts': 1.0.1 + '@discordjs/opus': opusscript@0.0.8 + '@discordjs/voice': 0.19.0(opusscript@0.0.8)(opusscript@0.0.8) + '@grammyjs/runner': 2.0.3(grammy@1.40.0) + '@grammyjs/transformer-throttler': 1.2.1(grammy@1.40.0) + '@homebridge/ciao': 1.3.5 + '@line/bot-sdk': 10.6.0 + '@lydell/node-pty': 1.2.0-beta.3 + '@mariozechner/pi-agent-core': 0.54.0(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.54.0(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-coding-agent': 0.54.0(ws@8.19.0)(zod@4.3.6) + '@mariozechner/pi-tui': 0.54.0 + '@mozilla/readability': 0.6.0 + '@napi-rs/canvas': 0.1.95 + '@sinclair/typebox': 0.34.48 + '@slack/bolt': 4.6.0(@types/express@5.0.6) + '@slack/web-api': 7.14.1 + '@whiskeysockets/baileys': 7.0.0-rc.9(sharp@0.34.5) + ajv: 8.18.0 + chalk: 5.6.2 + chokidar: 5.0.0 + cli-highlight: 2.1.11 + commander: 14.0.3 + croner: 10.0.1 + discord-api-types: 0.38.40 + dotenv: 17.3.1 + express: 5.2.1 + file-type: 21.3.0 + grammy: 1.40.0 + https-proxy-agent: 7.0.6 + jiti: 2.6.1 + json5: 2.2.3 + jszip: 3.10.1 + linkedom: 0.18.12 + long: 5.3.2 + markdown-it: 14.1.1 + node-edge-tts: 1.2.10 + node-llama-cpp: 3.17.1(typescript@5.9.3) + opusscript: 0.0.8 + osc-progress: 0.3.0 + pdfjs-dist: 5.4.624 + playwright-core: 1.58.2 + qrcode-terminal: 0.12.0 + quickjs-emscripten: 0.31.0 + semver: 7.7.4 + sharp: 0.34.5 + sqlite-vec: 0.1.7-alpha.2 + tar: 7.5.9 + tslog: 4.10.2 + undici: 7.22.0 + ws: 8.19.0 + yaml: 2.8.2 + zod: 4.3.6 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - '@types/express' + - audio-decode + - aws-crt + - bufferutil + - canvas + - debug + - encoding + - ffmpeg-static + - hono + - jimp + - link-preview-js + - node-opus + - supports-color + - utf-8-validate + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -6062,7 +5905,7 @@ snapshots: '@aws-sdk/xml-builder@3.972.6': dependencies: '@smithy/types': 4.13.0 - fast-xml-parser: 5.3.6 + fast-xml-parser: 5.3.8 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.3': {} @@ -6136,13 +5979,13 @@ snapshots: '@borewit/text-codec@0.2.1': {} - '@buape/carbon@0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.11.10)(opusscript@0.0.8)': + '@buape/carbon@0.0.0-beta-20260216184201(hono@4.11.10)(opusscript@0.0.8)(opusscript@0.0.8)': dependencies: '@types/node': 25.3.0 discord-api-types: 0.38.37 optionalDependencies: '@cloudflare/workers-types': 4.20260120.0 - '@discordjs/voice': 0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8) + '@discordjs/voice': 0.19.0(opusscript@0.0.8)(opusscript@0.0.8) '@hono/node-server': 1.19.9(hono@4.11.10) '@types/bun': 1.3.9 '@types/ws': 8.18.1 @@ -6267,34 +6110,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@discordjs/node-pre-gyp@0.4.5': - dependencies: - detect-libc: 2.1.2 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.7.4 - tar: 7.5.9 - transitivePeerDependencies: - - encoding - - supports-color - - '@discordjs/opus@0.10.0': - dependencies: - '@discordjs/node-pre-gyp': 0.4.5 - node-addon-api: 8.5.0 - transitivePeerDependencies: - - encoding - - supports-color - - '@discordjs/voice@0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8)': + '@discordjs/voice@0.19.0(opusscript@0.0.8)(opusscript@0.0.8)': dependencies: '@types/ws': 8.18.1 discord-api-types: 0.38.40 - prism-media: 1.3.5(@discordjs/opus@0.10.0)(opusscript@0.0.8) + prism-media: 1.3.5(opusscript@0.0.8)(opusscript@0.0.8) tslib: 2.8.1 ws: 8.19.0 transitivePeerDependencies: @@ -6651,7 +6471,7 @@ snapshots: '@larksuiteoapi/node-sdk@1.59.0': dependencies: - axios: 1.13.5(debug@4.4.3) + axios: 1.13.5 lodash.identity: 3.0.0 lodash.merge: 4.6.2 lodash.pickby: 4.6.0 @@ -6667,7 +6487,7 @@ snapshots: dependencies: '@types/node': 24.10.13 optionalDependencies: - axios: 1.13.5(debug@4.4.3) + axios: 1.13.5 transitivePeerDependencies: - debug @@ -6813,7 +6633,7 @@ snapshots: hosted-git-info: 9.0.2 ignore: 7.0.5 marked: 15.0.12 - minimatch: 10.2.1 + minimatch: 10.2.3 proper-lockfile: 4.1.2 yaml: 2.8.2 optionalDependencies: @@ -6856,7 +6676,7 @@ snapshots: '@azure/core-auth': 1.10.1 '@azure/msal-node': 5.0.5 '@microsoft/agents-activity': 1.3.1 - axios: 1.13.5(debug@4.4.3) + axios: 1.13.5 jsonwebtoken: 9.0.3 jwks-rsa: 3.2.2 object-path: 0.11.8 @@ -6936,193 +6756,45 @@ snapshots: '@noble/hashes@2.0.1': {} - '@node-llama-cpp/linux-arm64@3.15.1': + '@node-llama-cpp/linux-arm64@3.17.1': optional: true - '@node-llama-cpp/linux-armv7l@3.15.1': + '@node-llama-cpp/linux-armv7l@3.17.1': optional: true - '@node-llama-cpp/linux-x64-cuda-ext@3.15.1': + '@node-llama-cpp/linux-x64-cuda-ext@3.17.1': optional: true - '@node-llama-cpp/linux-x64-cuda@3.15.1': + '@node-llama-cpp/linux-x64-cuda@3.17.1': optional: true - '@node-llama-cpp/linux-x64-vulkan@3.15.1': + '@node-llama-cpp/linux-x64-vulkan@3.17.1': optional: true - '@node-llama-cpp/linux-x64@3.15.1': + '@node-llama-cpp/linux-x64@3.17.1': optional: true - '@node-llama-cpp/mac-arm64-metal@3.15.1': + '@node-llama-cpp/mac-arm64-metal@3.17.1': optional: true - '@node-llama-cpp/mac-x64@3.15.1': + '@node-llama-cpp/mac-x64@3.17.1': optional: true - '@node-llama-cpp/win-arm64@3.15.1': + '@node-llama-cpp/win-arm64@3.17.1': optional: true - '@node-llama-cpp/win-x64-cuda-ext@3.15.1': + '@node-llama-cpp/win-x64-cuda-ext@3.17.1': optional: true - '@node-llama-cpp/win-x64-cuda@3.15.1': + '@node-llama-cpp/win-x64-cuda@3.17.1': optional: true - '@node-llama-cpp/win-x64-vulkan@3.15.1': + '@node-llama-cpp/win-x64-vulkan@3.17.1': optional: true - '@node-llama-cpp/win-x64@3.15.1': + '@node-llama-cpp/win-x64@3.17.1': optional: true - '@octokit/app@16.1.2': - dependencies: - '@octokit/auth-app': 8.2.0 - '@octokit/auth-unauthenticated': 7.0.3 - '@octokit/core': 7.0.6 - '@octokit/oauth-app': 8.0.3 - '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) - '@octokit/types': 16.0.0 - '@octokit/webhooks': 14.2.0 - - '@octokit/auth-app@8.2.0': - dependencies: - '@octokit/auth-oauth-app': 9.0.3 - '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.8 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - toad-cache: 3.7.0 - universal-github-app-jwt: 2.2.2 - universal-user-agent: 7.0.3 - - '@octokit/auth-oauth-app@9.0.3': - dependencies: - '@octokit/auth-oauth-device': 8.0.3 - '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.8 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/auth-oauth-device@8.0.3': - dependencies: - '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.8 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/auth-oauth-user@6.0.2': - dependencies: - '@octokit/auth-oauth-device': 8.0.3 - '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.8 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/auth-token@6.0.0': {} - - '@octokit/auth-unauthenticated@7.0.3': - dependencies: - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - - '@octokit/core@7.0.6': - dependencies: - '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - before-after-hook: 4.0.0 - universal-user-agent: 7.0.3 - - '@octokit/endpoint@11.0.3': - dependencies: - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/graphql@9.0.3': - dependencies: - '@octokit/request': 10.0.8 - '@octokit/types': 16.0.0 - universal-user-agent: 7.0.3 - - '@octokit/oauth-app@8.0.3': - dependencies: - '@octokit/auth-oauth-app': 9.0.3 - '@octokit/auth-oauth-user': 6.0.2 - '@octokit/auth-unauthenticated': 7.0.3 - '@octokit/core': 7.0.6 - '@octokit/oauth-authorization-url': 8.0.0 - '@octokit/oauth-methods': 6.0.2 - '@types/aws-lambda': 8.10.160 - universal-user-agent: 7.0.3 - - '@octokit/oauth-authorization-url@8.0.0': {} - - '@octokit/oauth-methods@6.0.2': - dependencies: - '@octokit/oauth-authorization-url': 8.0.0 - '@octokit/request': 10.0.8 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - - '@octokit/openapi-types@27.0.0': {} - - '@octokit/openapi-webhooks-types@12.1.0': {} - - '@octokit/plugin-paginate-graphql@6.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - - '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 - - '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 - - '@octokit/plugin-retry@8.1.0(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - bottleneck: 2.19.5 - - '@octokit/plugin-throttling@11.0.3(@octokit/core@7.0.6)': - dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 - bottleneck: 2.19.5 - - '@octokit/request-error@7.1.0': - dependencies: - '@octokit/types': 16.0.0 - - '@octokit/request@10.0.8': - dependencies: - '@octokit/endpoint': 11.0.3 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.3 - universal-user-agent: 7.0.3 - - '@octokit/types@16.0.0': - dependencies: - '@octokit/openapi-types': 27.0.0 - - '@octokit/webhooks-methods@6.0.0': {} - - '@octokit/webhooks@14.2.0': - dependencies: - '@octokit/openapi-webhooks-types': 12.1.0 - '@octokit/request-error': 7.1.0 - '@octokit/webhooks-methods': 6.0.0 - '@opentelemetry/api-logs@0.212.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -7711,7 +7383,7 @@ snapshots: '@slack/types': 2.20.0 '@slack/web-api': 7.14.1 '@types/express': 5.0.6 - axios: 1.13.5(debug@4.4.3) + axios: 1.13.5 express: 5.2.1 path-to-regexp: 8.3.0 raw-body: 3.0.2 @@ -7757,7 +7429,7 @@ snapshots: '@slack/types': 2.20.0 '@types/node': 25.3.0 '@types/retry': 0.12.0 - axios: 1.13.5(debug@4.4.3) + axios: 1.13.5 eventemitter3: 5.0.4 form-data: 2.5.4 is-electron: 2.2.2 @@ -8147,8 +7819,6 @@ snapshots: tslib: 2.8.1 optional: true - '@types/aws-lambda@8.10.160': {} - '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 @@ -8233,7 +7903,7 @@ snapshots: '@types/node@10.17.60': {} - '@types/node@20.19.33': + '@types/node@20.19.35': dependencies: undici-types: 6.21.0 @@ -8464,8 +8134,6 @@ snapshots: curve25519-js: 0.0.4 protobufjs: 6.8.8 - abbrev@1.1.1: {} - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -8486,12 +8154,6 @@ snapshots: acorn@8.16.0: {} - agent-base@6.0.2: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - agent-base@7.1.4: {} ajv-formats@3.0.1(ajv@8.18.0): @@ -8528,25 +8190,13 @@ snapshots: '@swc/helpers': 0.5.19 '@types/command-line-args': 5.2.3 '@types/command-line-usage': 5.0.4 - '@types/node': 20.19.33 + '@types/node': 20.19.35 command-line-args: 5.2.1 command-line-usage: 7.0.3 flatbuffers: 24.12.23 json-bignum: 0.0.3 tslib: 2.8.1 - aproba@2.1.0: {} - - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - - are-we-there-yet@3.0.1: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - argparse@2.0.1: {} array-back@3.1.0: {} @@ -8597,9 +8247,9 @@ snapshots: aws4@1.13.2: {} - axios@1.13.5(debug@4.4.3): + axios@1.13.5: dependencies: - follow-redirects: 1.15.11(debug@4.4.3) + follow-redirects: 1.15.11 form-data: 2.5.4 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -8619,8 +8269,6 @@ snapshots: dependencies: tweetnacl: 0.14.5 - before-after-hook@4.0.0: {} - bignumber.js@9.3.1: {} birpc@4.0.0: {} @@ -8741,6 +8389,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} + cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -8753,19 +8403,16 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - cmake-js@7.4.0: + cmake-js@8.0.0: dependencies: - axios: 1.13.5(debug@4.4.3) debug: 4.4.3 fs-extra: 11.3.3 - memory-stream: 1.0.0 node-api-headers: 1.8.0 - npmlog: 6.0.2 rc: 1.2.8 semver: 7.7.4 tar: 7.5.9 url-join: 4.0.1 - which: 2.0.2 + which: 6.0.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -8776,8 +8423,6 @@ snapshots: color-name@1.1.4: {} - color-support@1.1.3: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -8800,8 +8445,6 @@ snapshots: commander@14.0.3: {} - console-control-strings@1.1.0: {} - content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -8872,8 +8515,6 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} - depd@2.0.0: {} destroy@1.2.0: {} @@ -9100,13 +8741,11 @@ snapshots: extsprintf@1.3.0: {} - fast-content-type-parse@3.0.0: {} - fast-deep-equal@3.1.3: {} fast-uri@3.1.0: {} - fast-xml-parser@5.3.6: + fast-xml-parser@5.3.8: dependencies: strnum: 2.1.2 @@ -9163,9 +8802,7 @@ snapshots: flatbuffers@24.12.23: {} - follow-redirects@1.15.11(debug@4.4.3): - optionalDependencies: - debug: 4.4.3 + follow-redirects@1.15.11: {} foreground-child@3.3.1: dependencies: @@ -9199,8 +8836,6 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -9209,29 +8844,6 @@ snapshots: function-bind@1.1.2: {} - gauge@3.0.2: - dependencies: - aproba: 2.1.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - - gauge@4.0.4: - dependencies: - aproba: 2.1.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - gaxios@7.1.3: dependencies: extend: 3.0.2 @@ -9293,26 +8905,17 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 10.2.1 + minimatch: 10.2.3 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@13.0.6: dependencies: - minimatch: 10.2.1 + minimatch: 10.2.3 minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 10.2.1 - once: 1.4.0 - path-is-absolute: 1.0.1 - google-auth-library@10.6.1: dependencies: base64-js: 1.5.1 @@ -9350,8 +8953,6 @@ snapshots: dependencies: has-symbols: 1.1.0 - has-unicode@2.0.1: {} - hash.js@1.1.7: dependencies: inherits: 2.0.4 @@ -9427,13 +9028,6 @@ snapshots: jsprim: 2.0.2 sshpk: 1.18.0 - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -9464,11 +9058,6 @@ snapshots: import-without-cache@0.2.5: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} ini@1.3.8: {} @@ -9534,15 +9123,13 @@ snapshots: is-typedarray@1.0.0: {} - is-unicode-supported@1.3.0: {} - is-unicode-supported@2.1.0: {} isarray@1.0.0: {} isexe@2.0.0: {} - isexe@3.1.5: {} + isexe@4.0.0: {} isstream@0.1.2: {} @@ -9592,8 +9179,6 @@ snapshots: json-stringify-safe@5.0.1: {} - json-with-bigint@3.5.3: {} - json5@2.2.3: {} jsonfile@6.2.0: @@ -9726,11 +9311,6 @@ snapshots: lodash@4.17.23: {} - log-symbols@6.0.0: - dependencies: - chalk: 5.6.2 - is-unicode-supported: 1.3.0 - log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -9777,10 +9357,6 @@ snapshots: '@babel/types': 7.29.0 source-map-js: 1.2.1 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - make-dir@4.0.0: dependencies: semver: 7.7.4 @@ -9806,10 +9382,6 @@ snapshots: media-typer@1.1.0: {} - memory-stream@1.0.0: - dependencies: - readable-stream: 3.6.2 - merge-descriptors@1.0.3: {} merge-descriptors@2.0.0: {} @@ -9834,7 +9406,7 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.1: + minimatch@10.2.3: dependencies: brace-expansion: 5.0.3 @@ -9897,7 +9469,7 @@ snapshots: netmask@2.0.2: {} - node-addon-api@8.5.0: {} + node-addon-api@8.6.0: {} node-api-headers@1.8.0: {} @@ -9925,14 +9497,14 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-llama-cpp@3.15.1(typescript@5.9.3): + node-llama-cpp@3.17.1(typescript@5.9.3): dependencies: '@huggingface/jinja': 0.5.5 async-retry: 1.3.3 bytes: 3.1.2 chalk: 5.6.2 chmodrp: 1.0.2 - cmake-js: 7.4.0 + cmake-js: 8.0.0 cross-spawn: 7.0.6 env-var: 7.5.0 filenamify: 6.0.0 @@ -9943,33 +9515,32 @@ snapshots: lifecycle-utils: 3.1.1 log-symbols: 7.0.1 nanoid: 5.1.6 - node-addon-api: 8.5.0 - octokit: 5.0.5 - ora: 8.2.0 + node-addon-api: 8.6.0 + ora: 9.3.0 pretty-ms: 9.3.0 proper-lockfile: 4.1.2 semver: 7.7.4 - simple-git: 3.32.2 - slice-ansi: 7.1.2 + simple-git: 3.32.3 + slice-ansi: 8.0.0 stdout-update: 4.0.1 strip-ansi: 7.1.2 - validate-npm-package-name: 6.0.2 - which: 5.0.0 + validate-npm-package-name: 7.0.2 + which: 6.0.1 yargs: 17.7.2 optionalDependencies: - '@node-llama-cpp/linux-arm64': 3.15.1 - '@node-llama-cpp/linux-armv7l': 3.15.1 - '@node-llama-cpp/linux-x64': 3.15.1 - '@node-llama-cpp/linux-x64-cuda': 3.15.1 - '@node-llama-cpp/linux-x64-cuda-ext': 3.15.1 - '@node-llama-cpp/linux-x64-vulkan': 3.15.1 - '@node-llama-cpp/mac-arm64-metal': 3.15.1 - '@node-llama-cpp/mac-x64': 3.15.1 - '@node-llama-cpp/win-arm64': 3.15.1 - '@node-llama-cpp/win-x64': 3.15.1 - '@node-llama-cpp/win-x64-cuda': 3.15.1 - '@node-llama-cpp/win-x64-cuda-ext': 3.15.1 - '@node-llama-cpp/win-x64-vulkan': 3.15.1 + '@node-llama-cpp/linux-arm64': 3.17.1 + '@node-llama-cpp/linux-armv7l': 3.17.1 + '@node-llama-cpp/linux-x64': 3.17.1 + '@node-llama-cpp/linux-x64-cuda': 3.17.1 + '@node-llama-cpp/linux-x64-cuda-ext': 3.17.1 + '@node-llama-cpp/linux-x64-vulkan': 3.17.1 + '@node-llama-cpp/mac-arm64-metal': 3.17.1 + '@node-llama-cpp/mac-x64': 3.17.1 + '@node-llama-cpp/win-arm64': 3.17.1 + '@node-llama-cpp/win-x64': 3.17.1 + '@node-llama-cpp/win-x64-cuda': 3.17.1 + '@node-llama-cpp/win-x64-cuda-ext': 3.17.1 + '@node-llama-cpp/win-x64-vulkan': 3.17.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -9977,10 +9548,6 @@ snapshots: node-readable-to-web-readable-stream@0.4.2: optional: true - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - nostr-tools@2.23.1(typescript@5.9.3): dependencies: '@noble/ciphers': 2.1.1 @@ -9995,20 +9562,6 @@ snapshots: nostr-wasm@0.1.0: {} - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - - npmlog@6.0.2: - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -10021,20 +9574,6 @@ snapshots: obug@2.1.1: {} - octokit@5.0.5: - dependencies: - '@octokit/app': 16.1.2 - '@octokit/core': 7.0.6 - '@octokit/oauth-app': 8.0.3 - '@octokit/plugin-paginate-graphql': 6.0.0(@octokit/core@7.0.6) - '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) - '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/plugin-retry': 8.1.0(@octokit/core@7.0.6) - '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6) - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 - '@octokit/webhooks': 14.2.0 - on-exit-leak-free@2.1.2: {} on-finished@2.3.0: @@ -10067,17 +9606,16 @@ snapshots: opusscript@0.0.8: {} - ora@8.2.0: + ora@9.3.0: dependencies: chalk: 5.6.2 cli-cursor: 5.0.0 - cli-spinners: 2.9.2 + cli-spinners: 3.4.0 is-interactive: 2.0.0 is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.2 + log-symbols: 7.0.1 + stdin-discarder: 0.3.1 + string-width: 8.2.0 osc-progress@0.3.0: {} @@ -10205,8 +9743,6 @@ snapshots: partial-json@0.1.7: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-scurry@1.11.1: @@ -10292,9 +9828,9 @@ snapshots: dependencies: parse-ms: 4.0.0 - prism-media@1.3.5(@discordjs/opus@0.10.0)(opusscript@0.0.8): + prism-media@1.3.5(opusscript@0.0.8)(opusscript@0.0.8): optionalDependencies: - '@discordjs/opus': 0.10.0 + '@discordjs/opus': opusscript@0.0.8 opusscript: 0.0.8 process-nextick-args@2.0.1: {} @@ -10442,12 +9978,6 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readdirp@5.0.0: {} real-require@0.2.0: {} @@ -10483,10 +10013,6 @@ snapshots: retry@0.13.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rimraf@5.0.10: dependencies: glob: 10.5.0 @@ -10590,8 +10116,6 @@ snapshots: dependencies: parseley: 0.12.1 - semver@6.3.1: {} - semver@7.7.4: {} send@0.19.2: @@ -10646,8 +10170,6 @@ snapshots: transitivePeerDependencies: - supports-color - set-blocking@2.0.0: {} - setimmediate@1.0.5: {} setprototypeof@1.2.0: {} @@ -10729,7 +10251,7 @@ snapshots: dependencies: signal-polyfill: 0.2.2 - simple-git@3.32.2: + simple-git@3.32.3: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 @@ -10752,6 +10274,11 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + smart-buffer@4.2.0: {} socks-proxy-agent@8.0.5: @@ -10823,7 +10350,7 @@ snapshots: std-env@3.10.0: {} - stdin-discarder@0.2.2: {} + stdin-discarder@0.3.1: {} stdout-update@4.0.1: dependencies: @@ -10858,13 +10385,14 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 - string_decoder@1.1.1: + string-width@8.2.0: dependencies: - safe-buffer: 5.1.2 + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 - string_decoder@1.3.0: + string_decoder@1.1.1: dependencies: - safe-buffer: 5.2.1 + safe-buffer: 5.1.2 strip-ansi@6.0.1: dependencies: @@ -10924,8 +10452,6 @@ snapshots: tinyrainbow@3.0.3: {} - toad-cache@3.7.0: {} - toidentifier@1.0.1: {} token-types@6.1.2: @@ -11031,10 +10557,6 @@ snapshots: undici@7.22.0: {} - universal-github-app-jwt@2.2.2: {} - - universal-user-agent@7.0.3: {} - universalify@0.2.0: {} universalify@2.0.1: {} @@ -11060,7 +10582,7 @@ snapshots: uuid@8.3.2: {} - validate-npm-package-name@6.0.2: {} + validate-npm-package-name@7.0.2: {} vary@1.1.2: {} @@ -11137,19 +10659,15 @@ snapshots: dependencies: isexe: 2.0.0 - which@5.0.0: + which@6.0.1: dependencies: - isexe: 3.1.5 + isexe: 4.0.0 why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - win-guid@0.2.1: {} wordwrapjs@5.1.1: {} From 6c0554bcaefa03847911212049ee2fb194a743ab Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:55:52 +0100 Subject: [PATCH 11/19] Add Dependabot Docker update config --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..0aa6a373 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + groups: + docker-images: + patterns: + - "*" From 160d2b0605e7756728f7b87b4d625524f50b1024 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:56:46 +0100 Subject: [PATCH 12/19] =?UTF-8?q?Fix=20README=20links:=20maryos=20?= =?UTF-8?q?=E2=86=92=20mayros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 214 +++++++++++++++++++++++++++--------------------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/README.md b/README.md index 01b6a054..f7b2e948 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,17 @@ It answers you on the channels you already use (WhatsApp, Telegram, Slack, Disco If you want a personal, single-user assistant that feels local, fast, and always-on, this is it. -[Product](https://apilium.com/en/products/maryos) · [Download](https://maryos.apilium.com) · [Docs](https://apilium.com/en/doc/maryos) · [Vision](VISION.md) · [Getting Started](https://apilium.com/en/doc/maryos/start/getting-started) · [Updating](https://apilium.com/en/doc/maryos/install/updating) · [Docker](https://apilium.com/en/doc/maryos/install/docker) +[Product](https://apilium.com/en/products/mayros) · [Download](https://mayros.apilium.com) · [Docs](https://apilium.com/en/doc/mayros) · [Vision](VISION.md) · [Getting Started](https://apilium.com/en/doc/mayros/start/getting-started) · [Updating](https://apilium.com/en/doc/mayros/install/updating) · [Docker](https://apilium.com/en/doc/mayros/install/docker) Preferred setup: run the onboarding wizard (`mayros onboard`) in your terminal. The wizard guides you step by step through setting up the gateway, workspace, channels, and skills. The CLI wizard is the recommended path and works on **macOS, Linux, and Windows (via WSL2; strongly recommended)**. Works with npm, pnpm, or bun. -New install? Start here: [Getting started](https://apilium.com/en/doc/maryos/start/getting-started) +New install? Start here: [Getting started](https://apilium.com/en/doc/mayros/start/getting-started) ## Models (selection + auth) -- Models config + CLI: [Models](https://apilium.com/en/doc/maryos/concepts/models) -- Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://apilium.com/en/doc/maryos/concepts/model-failover) +- Models config + CLI: [Models](https://apilium.com/en/doc/mayros/concepts/models) +- Auth profile rotation (OAuth vs API keys) + fallbacks: [Model failover](https://apilium.com/en/doc/mayros/concepts/model-failover) ## Install (recommended) @@ -45,7 +45,7 @@ The wizard installs the Gateway daemon (launchd/systemd user service) so it stay Runtime: **Node ≥22**. -Full beginner guide (auth, pairing, channels): [Getting started](https://apilium.com/en/doc/maryos/start/getting-started) +Full beginner guide (auth, pairing, channels): [Getting started](https://apilium.com/en/doc/mayros/start/getting-started) ```bash mayros onboard --install-daemon @@ -59,7 +59,7 @@ mayros message send --to +1234567890 --message "Hello from Mayros" mayros agent --message "Ship checklist" --thinking high ``` -Upgrading? [Updating guide](https://apilium.com/en/doc/maryos/install/updating) (and run `mayros doctor`). +Upgrading? [Updating guide](https://apilium.com/en/doc/mayros/install/updating) (and run `mayros doctor`). ## Development channels @@ -68,7 +68,7 @@ Upgrading? [Updating guide](https://apilium.com/en/doc/maryos/install/updating) - **dev**: moving head of `main`, npm dist-tag `dev` (when published). Switch channels (git + npm): `mayros update --channel stable|beta|dev`. -Details: [Development channels](https://apilium.com/en/doc/maryos/install/development-channels). +Details: [Development channels](https://apilium.com/en/doc/mayros/install/development-channels). ## From source (development) @@ -94,7 +94,7 @@ Note: `pnpm mayros ...` runs TypeScript directly (via `tsx`). `pnpm build` produ Mayros connects to real messaging surfaces. Treat inbound DMs as **untrusted input**. -Full security guide: [Security](https://apilium.com/en/doc/maryos/gateway/security) +Full security guide: [Security](https://apilium.com/en/doc/mayros/gateway/security) Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack: @@ -106,14 +106,14 @@ Run `mayros doctor` to surface risky/misconfigured DM policies. ## Highlights -- **[Local-first Gateway](https://apilium.com/en/doc/maryos/gateway)** — single control plane for sessions, channels, tools, and events. -- **[Multi-channel inbox](https://apilium.com/en/doc/maryos/channels)** — WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, BlueBubbles (iMessage), iMessage (legacy), Microsoft Teams, Matrix, Zalo, Zalo Personal, WebChat, macOS, iOS/Android. -- **[Multi-agent routing](https://apilium.com/en/doc/maryos/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions). -- **[Voice Wake](https://apilium.com/en/doc/maryos/nodes/voicewake) + [Talk Mode](https://apilium.com/en/doc/maryos/nodes/talk)** — always-on speech for macOS/iOS/Android with ElevenLabs. -- **[Live Canvas](https://apilium.com/en/doc/maryos/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://apilium.com/en/doc/maryos/platforms/mac/canvas#canvas-a2ui). -- **[First-class tools](https://apilium.com/en/doc/maryos/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions. -- **[Companion apps](https://apilium.com/en/doc/maryos/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://apilium.com/en/doc/maryos/nodes). -- **[Onboarding](https://apilium.com/en/doc/maryos/start/wizard) + [skills](https://apilium.com/en/doc/maryos/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills. +- **[Local-first Gateway](https://apilium.com/en/doc/mayros/gateway)** — single control plane for sessions, channels, tools, and events. +- **[Multi-channel inbox](https://apilium.com/en/doc/mayros/channels)** — WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, BlueBubbles (iMessage), iMessage (legacy), Microsoft Teams, Matrix, Zalo, Zalo Personal, WebChat, macOS, iOS/Android. +- **[Multi-agent routing](https://apilium.com/en/doc/mayros/gateway/configuration)** — route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions). +- **[Voice Wake](https://apilium.com/en/doc/mayros/nodes/voicewake) + [Talk Mode](https://apilium.com/en/doc/mayros/nodes/talk)** — always-on speech for macOS/iOS/Android with ElevenLabs. +- **[Live Canvas](https://apilium.com/en/doc/mayros/platforms/mac/canvas)** — agent-driven visual workspace with [A2UI](https://apilium.com/en/doc/mayros/platforms/mac/canvas#canvas-a2ui). +- **[First-class tools](https://apilium.com/en/doc/mayros/tools)** — browser, canvas, nodes, cron, sessions, and Discord/Slack actions. +- **[Companion apps](https://apilium.com/en/doc/mayros/platforms/macos)** — macOS menu bar app + iOS/Android [nodes](https://apilium.com/en/doc/mayros/nodes). +- **[Onboarding](https://apilium.com/en/doc/mayros/start/wizard) + [skills](https://apilium.com/en/doc/mayros/tools/skills)** — wizard-driven setup with bundled/managed/workspace skills. ## Semantic Memory (AIngle Cortex) @@ -136,45 +136,45 @@ Cortex version: **aingle_cortex 0.2.6** · AIngle crate: **0.0.101** · Zome typ ### Core platform -- [Gateway WS control plane](https://apilium.com/en/doc/maryos/gateway) with sessions, presence, config, cron, webhooks, [Control UI](https://apilium.com/en/doc/maryos/web), and [Canvas host](https://apilium.com/en/doc/maryos/platforms/mac/canvas#canvas-a2ui). -- [CLI surface](https://apilium.com/en/doc/maryos/tools/agent-send): gateway, agent, send, [wizard](https://apilium.com/en/doc/maryos/start/wizard), and [doctor](https://apilium.com/en/doc/maryos/gateway/doctor). -- [Pi agent runtime](https://apilium.com/en/doc/maryos/concepts/agent) in RPC mode with tool streaming and block streaming. -- [Session model](https://apilium.com/en/doc/maryos/concepts/session): `main` for direct chats, group isolation, activation modes, queue modes, reply-back.. -- [Media pipeline](https://apilium.com/en/doc/maryos/nodes/images): images/audio/video, transcription hooks, size caps, temp file lifecycle. Audio details: [Audio](https://apilium.com/en/doc/maryos/nodes/audio). +- [Gateway WS control plane](https://apilium.com/en/doc/mayros/gateway) with sessions, presence, config, cron, webhooks, [Control UI](https://apilium.com/en/doc/mayros/web), and [Canvas host](https://apilium.com/en/doc/mayros/platforms/mac/canvas#canvas-a2ui). +- [CLI surface](https://apilium.com/en/doc/mayros/tools/agent-send): gateway, agent, send, [wizard](https://apilium.com/en/doc/mayros/start/wizard), and [doctor](https://apilium.com/en/doc/mayros/gateway/doctor). +- [Pi agent runtime](https://apilium.com/en/doc/mayros/concepts/agent) in RPC mode with tool streaming and block streaming. +- [Session model](https://apilium.com/en/doc/mayros/concepts/session): `main` for direct chats, group isolation, activation modes, queue modes, reply-back.. +- [Media pipeline](https://apilium.com/en/doc/mayros/nodes/images): images/audio/video, transcription hooks, size caps, temp file lifecycle. Audio details: [Audio](https://apilium.com/en/doc/mayros/nodes/audio). ### Channels -- [Channels](https://apilium.com/en/doc/maryos/channels): [WhatsApp](https://apilium.com/en/doc/maryos/channels/whatsapp) (Baileys), [Telegram](https://apilium.com/en/doc/maryos/channels/telegram) (grammY), [Slack](https://apilium.com/en/doc/maryos/channels/slack) (Bolt), [Discord](https://apilium.com/en/doc/maryos/channels/discord) (discord.js), [Google Chat](https://apilium.com/en/doc/maryos/channels/googlechat) (Chat API), [Signal](https://apilium.com/en/doc/maryos/channels/signal) (signal-cli), [BlueBubbles](https://apilium.com/en/doc/maryos/channels/bluebubbles) (iMessage, recommended), [iMessage](https://apilium.com/en/doc/maryos/channels/imessage) (legacy imsg), [Microsoft Teams](https://apilium.com/en/doc/maryos/channels/msteams) (extension), [Matrix](https://apilium.com/en/doc/maryos/channels/matrix) (extension), [Zalo](https://apilium.com/en/doc/maryos/channels/zalo) (extension), [Zalo Personal](https://apilium.com/en/doc/maryos/channels/zalouser) (extension), [WebChat](https://apilium.com/en/doc/maryos/web/webchat). -- Mention gating, reply tags, per-channel chunking and routing. Channel rules: [Channels](https://apilium.com/en/doc/maryos/channels). +- [Channels](https://apilium.com/en/doc/mayros/channels): [WhatsApp](https://apilium.com/en/doc/mayros/channels/whatsapp) (Baileys), [Telegram](https://apilium.com/en/doc/mayros/channels/telegram) (grammY), [Slack](https://apilium.com/en/doc/mayros/channels/slack) (Bolt), [Discord](https://apilium.com/en/doc/mayros/channels/discord) (discord.js), [Google Chat](https://apilium.com/en/doc/mayros/channels/googlechat) (Chat API), [Signal](https://apilium.com/en/doc/mayros/channels/signal) (signal-cli), [BlueBubbles](https://apilium.com/en/doc/mayros/channels/bluebubbles) (iMessage, recommended), [iMessage](https://apilium.com/en/doc/mayros/channels/imessage) (legacy imsg), [Microsoft Teams](https://apilium.com/en/doc/mayros/channels/msteams) (extension), [Matrix](https://apilium.com/en/doc/mayros/channels/matrix) (extension), [Zalo](https://apilium.com/en/doc/mayros/channels/zalo) (extension), [Zalo Personal](https://apilium.com/en/doc/mayros/channels/zalouser) (extension), [WebChat](https://apilium.com/en/doc/mayros/web/webchat). +- Mention gating, reply tags, per-channel chunking and routing. Channel rules: [Channels](https://apilium.com/en/doc/mayros/channels). ### Apps + nodes -- [macOS app](https://apilium.com/en/doc/maryos/platforms/macos): menu bar control plane, [Voice Wake](https://apilium.com/en/doc/maryos/nodes/voicewake)/PTT, [Talk Mode](https://apilium.com/en/doc/maryos/nodes/talk) overlay, [WebChat](https://apilium.com/en/doc/maryos/web/webchat), debug tools, [remote gateway](https://apilium.com/en/doc/maryos/gateway/remote) control. -- [iOS node](https://apilium.com/en/doc/maryos/platforms/ios): [Canvas](https://apilium.com/en/doc/maryos/platforms/mac/canvas), [Voice Wake](https://apilium.com/en/doc/maryos/nodes/voicewake), [Talk Mode](https://apilium.com/en/doc/maryos/nodes/talk), camera, screen recording, Bonjour pairing. -- [Android node](https://apilium.com/en/doc/maryos/platforms/android): [Canvas](https://apilium.com/en/doc/maryos/platforms/mac/canvas), [Talk Mode](https://apilium.com/en/doc/maryos/nodes/talk), camera, screen recording, optional SMS. -- [macOS node mode](https://apilium.com/en/doc/maryos/nodes): system.run/notify + canvas/camera exposure. +- [macOS app](https://apilium.com/en/doc/mayros/platforms/macos): menu bar control plane, [Voice Wake](https://apilium.com/en/doc/mayros/nodes/voicewake)/PTT, [Talk Mode](https://apilium.com/en/doc/mayros/nodes/talk) overlay, [WebChat](https://apilium.com/en/doc/mayros/web/webchat), debug tools, [remote gateway](https://apilium.com/en/doc/mayros/gateway/remote) control. +- [iOS node](https://apilium.com/en/doc/mayros/platforms/ios): [Canvas](https://apilium.com/en/doc/mayros/platforms/mac/canvas), [Voice Wake](https://apilium.com/en/doc/mayros/nodes/voicewake), [Talk Mode](https://apilium.com/en/doc/mayros/nodes/talk), camera, screen recording, Bonjour pairing. +- [Android node](https://apilium.com/en/doc/mayros/platforms/android): [Canvas](https://apilium.com/en/doc/mayros/platforms/mac/canvas), [Talk Mode](https://apilium.com/en/doc/mayros/nodes/talk), camera, screen recording, optional SMS. +- [macOS node mode](https://apilium.com/en/doc/mayros/nodes): system.run/notify + canvas/camera exposure. ### Tools + automation -- [Browser control](https://apilium.com/en/doc/maryos/tools/browser): dedicated mayros Chrome/Chromium, snapshots, actions, uploads, profiles. -- [Canvas](https://apilium.com/en/doc/maryos/platforms/mac/canvas): [A2UI](https://apilium.com/en/doc/maryos/platforms/mac/canvas#canvas-a2ui) push/reset, eval, snapshot. -- [Nodes](https://apilium.com/en/doc/maryos/nodes): camera snap/clip, screen record, [location.get](https://apilium.com/en/doc/maryos/nodes/location-command), notifications. -- [Cron + wakeups](https://apilium.com/en/doc/maryos/automation/cron-jobs); [webhooks](https://apilium.com/en/doc/maryos/automation/webhook); [Gmail Pub/Sub](https://apilium.com/en/doc/maryos/automation/gmail-pubsub). -- [Skills platform](https://apilium.com/en/doc/maryos/tools/skills): bundled, managed, and workspace skills with install gating + UI. +- [Browser control](https://apilium.com/en/doc/mayros/tools/browser): dedicated mayros Chrome/Chromium, snapshots, actions, uploads, profiles. +- [Canvas](https://apilium.com/en/doc/mayros/platforms/mac/canvas): [A2UI](https://apilium.com/en/doc/mayros/platforms/mac/canvas#canvas-a2ui) push/reset, eval, snapshot. +- [Nodes](https://apilium.com/en/doc/mayros/nodes): camera snap/clip, screen record, [location.get](https://apilium.com/en/doc/mayros/nodes/location-command), notifications. +- [Cron + wakeups](https://apilium.com/en/doc/mayros/automation/cron-jobs); [webhooks](https://apilium.com/en/doc/mayros/automation/webhook); [Gmail Pub/Sub](https://apilium.com/en/doc/mayros/automation/gmail-pubsub). +- [Skills platform](https://apilium.com/en/doc/mayros/tools/skills): bundled, managed, and workspace skills with install gating + UI. ### Runtime + safety -- [Retry policy](https://apilium.com/en/doc/maryos/concepts/retry) and [streaming/chunking](https://apilium.com/en/doc/maryos/concepts/streaming). -- [Presence](https://apilium.com/en/doc/maryos/concepts/presence), [typing indicators](https://apilium.com/en/doc/maryos/concepts/typing-indicators), and [usage tracking](https://apilium.com/en/doc/maryos/concepts/usage-tracking). -- [Models](https://apilium.com/en/doc/maryos/concepts/models), [model failover](https://apilium.com/en/doc/maryos/concepts/model-failover), and [session pruning](https://apilium.com/en/doc/maryos/concepts/session-pruning). -- [Security](https://apilium.com/en/doc/maryos/gateway/security) and [troubleshooting](https://apilium.com/en/doc/maryos/channels/troubleshooting). +- [Retry policy](https://apilium.com/en/doc/mayros/concepts/retry) and [streaming/chunking](https://apilium.com/en/doc/mayros/concepts/streaming). +- [Presence](https://apilium.com/en/doc/mayros/concepts/presence), [typing indicators](https://apilium.com/en/doc/mayros/concepts/typing-indicators), and [usage tracking](https://apilium.com/en/doc/mayros/concepts/usage-tracking). +- [Models](https://apilium.com/en/doc/mayros/concepts/models), [model failover](https://apilium.com/en/doc/mayros/concepts/model-failover), and [session pruning](https://apilium.com/en/doc/mayros/concepts/session-pruning). +- [Security](https://apilium.com/en/doc/mayros/gateway/security) and [troubleshooting](https://apilium.com/en/doc/mayros/channels/troubleshooting). ### Ops + packaging -- [Control UI](https://apilium.com/en/doc/maryos/web) + [WebChat](https://apilium.com/en/doc/maryos/web/webchat) served directly from the Gateway. -- [Tailscale Serve/Funnel](https://apilium.com/en/doc/maryos/gateway/tailscale) or [SSH tunnels](https://apilium.com/en/doc/maryos/gateway/remote) with token/password auth. -- [Docker](https://apilium.com/en/doc/maryos/install/docker)-based installs. -- [Doctor](https://apilium.com/en/doc/maryos/gateway/doctor) migrations, [logging](https://apilium.com/en/doc/maryos/logging). +- [Control UI](https://apilium.com/en/doc/mayros/web) + [WebChat](https://apilium.com/en/doc/mayros/web/webchat) served directly from the Gateway. +- [Tailscale Serve/Funnel](https://apilium.com/en/doc/mayros/gateway/tailscale) or [SSH tunnels](https://apilium.com/en/doc/mayros/gateway/remote) with token/password auth. +- [Docker](https://apilium.com/en/doc/mayros/install/docker)-based installs. +- [Doctor](https://apilium.com/en/doc/mayros/gateway/doctor) migrations, [logging](https://apilium.com/en/doc/mayros/logging). ## How it works (short) @@ -197,12 +197,12 @@ WhatsApp / Telegram / Slack / Discord / Google Chat / Signal / iMessage / BlueBu ## Key subsystems -- **[Gateway WebSocket network](https://apilium.com/en/doc/maryos/concepts/architecture)** — single WS control plane for clients, tools, and events (plus ops: [Gateway runbook](https://apilium.com/en/doc/maryos/gateway)). -- **[Tailscale exposure](https://apilium.com/en/doc/maryos/gateway/tailscale)** — Serve/Funnel for the Gateway dashboard + WS (remote access: [Remote](https://apilium.com/en/doc/maryos/gateway/remote)). -- **[Browser control](https://apilium.com/en/doc/maryos/tools/browser)** — mayros‑managed Chrome/Chromium with CDP control. -- **[Canvas + A2UI](https://apilium.com/en/doc/maryos/platforms/mac/canvas)** — agent‑driven visual workspace (A2UI host: [Canvas/A2UI](https://apilium.com/en/doc/maryos/platforms/mac/canvas#canvas-a2ui)). -- **[Voice Wake](https://apilium.com/en/doc/maryos/nodes/voicewake) + [Talk Mode](https://apilium.com/en/doc/maryos/nodes/talk)** — always‑on speech and continuous conversation. -- **[Nodes](https://apilium.com/en/doc/maryos/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOS‑only `system.run`/`system.notify`. +- **[Gateway WebSocket network](https://apilium.com/en/doc/mayros/concepts/architecture)** — single WS control plane for clients, tools, and events (plus ops: [Gateway runbook](https://apilium.com/en/doc/mayros/gateway)). +- **[Tailscale exposure](https://apilium.com/en/doc/mayros/gateway/tailscale)** — Serve/Funnel for the Gateway dashboard + WS (remote access: [Remote](https://apilium.com/en/doc/mayros/gateway/remote)). +- **[Browser control](https://apilium.com/en/doc/mayros/tools/browser)** — mayros‑managed Chrome/Chromium with CDP control. +- **[Canvas + A2UI](https://apilium.com/en/doc/mayros/platforms/mac/canvas)** — agent‑driven visual workspace (A2UI host: [Canvas/A2UI](https://apilium.com/en/doc/mayros/platforms/mac/canvas#canvas-a2ui)). +- **[Voice Wake](https://apilium.com/en/doc/mayros/nodes/voicewake) + [Talk Mode](https://apilium.com/en/doc/mayros/nodes/talk)** — always‑on speech and continuous conversation. +- **[Nodes](https://apilium.com/en/doc/mayros/nodes)** — Canvas, camera snap/clip, screen record, `location.get`, notifications, plus macOS‑only `system.run`/`system.notify`. ## Tailscale access (Gateway dashboard) @@ -219,7 +219,7 @@ Notes: - Funnel refuses to start unless `gateway.auth.mode: "password"` is set. - Optional: `gateway.tailscale.resetOnExit` to undo Serve/Funnel on shutdown. -Details: [Tailscale guide](https://apilium.com/en/doc/maryos/gateway/tailscale) · [Web surfaces](https://apilium.com/en/doc/maryos/web) +Details: [Tailscale guide](https://apilium.com/en/doc/mayros/gateway/tailscale) · [Web surfaces](https://apilium.com/en/doc/mayros/web) ## Remote Gateway (Linux is great) @@ -229,7 +229,7 @@ It’s perfectly fine to run the Gateway on a small Linux instance. Clients (mac - **Device nodes** run device‑local actions (`system.run`, camera, screen recording, notifications) via `node.invoke`. In short: exec runs where the Gateway lives; device actions run where the device lives. -Details: [Remote access](https://apilium.com/en/doc/maryos/gateway/remote) · [Nodes](https://apilium.com/en/doc/maryos/nodes) · [Security](https://apilium.com/en/doc/maryos/gateway/security) +Details: [Remote access](https://apilium.com/en/doc/mayros/gateway/remote) · [Nodes](https://apilium.com/en/doc/mayros/nodes) · [Security](https://apilium.com/en/doc/mayros/gateway/security) ## macOS permissions via the Gateway protocol @@ -244,7 +244,7 @@ Elevated bash (host permissions) is separate from macOS TCC: - Use `/elevated on|off` to toggle per‑session elevated access when enabled + allowlisted. - Gateway persists the per‑session toggle via `sessions.patch` (WS method) alongside `thinkingLevel`, `verboseLevel`, `model`, `sendPolicy`, and `groupActivation`. -Details: [Nodes](https://apilium.com/en/doc/maryos/nodes) · [macOS app](https://apilium.com/en/doc/maryos/platforms/macos) · [Gateway protocol](https://apilium.com/en/doc/maryos/concepts/architecture) +Details: [Nodes](https://apilium.com/en/doc/mayros/nodes) · [macOS app](https://apilium.com/en/doc/mayros/platforms/macos) · [Gateway protocol](https://apilium.com/en/doc/mayros/concepts/architecture) ## Agent to Agent (sessions\_\* tools) @@ -253,7 +253,7 @@ Details: [Nodes](https://apilium.com/en/doc/maryos/nodes) · [macOS app](https:/ - `sessions_history` — fetch transcript logs for a session. - `sessions_send` — message another session; optional reply‑back ping‑pong + announce step (`REPLY_SKIP`, `ANNOUNCE_SKIP`). -Details: [Session tools](https://apilium.com/en/doc/maryos/concepts/session-tool) +Details: [Session tools](https://apilium.com/en/doc/mayros/concepts/session-tool) ## Skills registry (Skills Hub) @@ -295,13 +295,13 @@ Note: signed builds required for macOS permissions to stick across rebuilds (see - Voice trigger forwarding + Canvas surface. - Controlled via `mayros nodes …`. -Runbook: [iOS connect](https://apilium.com/en/doc/maryos/platforms/ios). +Runbook: [iOS connect](https://apilium.com/en/doc/mayros/platforms/ios). ### Android node (optional) - Pairs via the same Bridge + pairing flow as iOS. - Exposes Canvas, Camera, and Screen capture commands. -- Runbook: [Android connect](https://apilium.com/en/doc/maryos/platforms/android). +- Runbook: [Android connect](https://apilium.com/en/doc/mayros/platforms/android). ## Agent workspace + skills @@ -321,7 +321,7 @@ Minimal `~/.mayros/mayros.json` (model + defaults): } ``` -[Full configuration reference (all keys + examples).](https://apilium.com/en/doc/maryos/gateway/configuration) +[Full configuration reference (all keys + examples).](https://apilium.com/en/doc/mayros/gateway/configuration) ## Security model (important) @@ -329,15 +329,15 @@ Minimal `~/.mayros/mayros.json` (model + defaults): - **Group/channel safety:** set `agents.defaults.sandbox.mode: "non-main"` to run **non‑main sessions** (groups/channels) inside per‑session Docker sandboxes; bash then runs in Docker for those sessions. - **Sandbox defaults:** allowlist `bash`, `process`, `read`, `write`, `edit`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`; denylist `browser`, `canvas`, `nodes`, `cron`, `discord`, `gateway`. -Details: [Security guide](https://apilium.com/en/doc/maryos/gateway/security) · [Docker + sandboxing](https://apilium.com/en/doc/maryos/install/docker) · [Sandbox config](https://apilium.com/en/doc/maryos/gateway/configuration) +Details: [Security guide](https://apilium.com/en/doc/mayros/gateway/security) · [Docker + sandboxing](https://apilium.com/en/doc/mayros/install/docker) · [Sandbox config](https://apilium.com/en/doc/mayros/gateway/configuration) -### [WhatsApp](https://apilium.com/en/doc/maryos/channels/whatsapp) +### [WhatsApp](https://apilium.com/en/doc/mayros/channels/whatsapp) - Link the device: `pnpm mayros channels login` (stores creds in `~/.mayros/credentials`). - Allowlist who can talk to the assistant via `channels.whatsapp.allowFrom`. - If `channels.whatsapp.groups` is set, it becomes a group allowlist; include `"*"` to allow all. -### [Telegram](https://apilium.com/en/doc/maryos/channels/telegram) +### [Telegram](https://apilium.com/en/doc/mayros/channels/telegram) - Set `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` (env wins). - Optional: set `channels.telegram.groups` (with `channels.telegram.groups."*".requireMention`); when set, it is a group allowlist (include `"*"` to allow all). Also `channels.telegram.allowFrom` or `channels.telegram.webhookUrl` + `channels.telegram.webhookSecret` as needed. @@ -352,11 +352,11 @@ Details: [Security guide](https://apilium.com/en/doc/maryos/gateway/security) · } ``` -### [Slack](https://apilium.com/en/doc/maryos/channels/slack) +### [Slack](https://apilium.com/en/doc/mayros/channels/slack) - Set `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` (or `channels.slack.botToken` + `channels.slack.appToken`). -### [Discord](https://apilium.com/en/doc/maryos/channels/discord) +### [Discord](https://apilium.com/en/doc/mayros/channels/discord) - Set `DISCORD_BOT_TOKEN` or `channels.discord.token` (env wins). - Optional: set `commands.native`, `commands.text`, or `commands.useAccessGroups`, plus `channels.discord.allowFrom`, `channels.discord.guilds`, or `channels.discord.mediaMaxMb` as needed. @@ -371,27 +371,27 @@ Details: [Security guide](https://apilium.com/en/doc/maryos/gateway/security) · } ``` -### [Signal](https://apilium.com/en/doc/maryos/channels/signal) +### [Signal](https://apilium.com/en/doc/mayros/channels/signal) - Requires `signal-cli` and a `channels.signal` config section. -### [BlueBubbles (iMessage)](https://apilium.com/en/doc/maryos/channels/bluebubbles) +### [BlueBubbles (iMessage)](https://apilium.com/en/doc/mayros/channels/bluebubbles) - **Recommended** iMessage integration. - Configure `channels.bluebubbles.serverUrl` + `channels.bluebubbles.password` and a webhook (`channels.bluebubbles.webhookPath`). - The BlueBubbles server runs on macOS; the Gateway can run on macOS or elsewhere. -### [iMessage (legacy)](https://apilium.com/en/doc/maryos/channels/imessage) +### [iMessage (legacy)](https://apilium.com/en/doc/mayros/channels/imessage) - Legacy macOS-only integration via `imsg` (Messages must be signed in). - If `channels.imessage.groups` is set, it becomes a group allowlist; include `"*"` to allow all. -### [Microsoft Teams](https://apilium.com/en/doc/maryos/channels/msteams) +### [Microsoft Teams](https://apilium.com/en/doc/mayros/channels/msteams) - Configure a Teams app + Bot Framework, then add a `msteams` config section. - Allowlist who can talk via `msteams.allowFrom`; group access via `msteams.groupAllowFrom` or `msteams.groupPolicy: "open"`. -### [WebChat](https://apilium.com/en/doc/maryos/web/webchat) +### [WebChat](https://apilium.com/en/doc/mayros/web/webchat) - Uses the Gateway WebSocket; no separate WebChat port/config. @@ -410,68 +410,68 @@ Browser control (optional): Use these when you’re past the onboarding flow and want the deeper reference. -- [Start with the docs index for navigation and “what’s where.”](https://apilium.com/en/doc/maryos) -- [Read the architecture overview for the gateway + protocol model.](https://apilium.com/en/doc/maryos/concepts/architecture) -- [Use the full configuration reference when you need every key and example.](https://apilium.com/en/doc/maryos/gateway/configuration) -- [Run the Gateway by the book with the operational runbook.](https://apilium.com/en/doc/maryos/gateway) -- [Learn how the Control UI/Web surfaces work and how to expose them safely.](https://apilium.com/en/doc/maryos/web) -- [Understand remote access over SSH tunnels or tailnets.](https://apilium.com/en/doc/maryos/gateway/remote) -- [Follow the onboarding wizard flow for a guided setup.](https://apilium.com/en/doc/maryos/start/wizard) -- [Wire external triggers via the webhook surface.](https://apilium.com/en/doc/maryos/automation/webhook) -- [Set up Gmail Pub/Sub triggers.](https://apilium.com/en/doc/maryos/automation/gmail-pubsub) -- [Learn the macOS menu bar companion details.](https://apilium.com/en/doc/maryos/platforms/mac/menu-bar) -- [Platform guides: Windows (WSL2)](https://apilium.com/en/doc/maryos/platforms/windows), [Linux](https://apilium.com/en/doc/maryos/platforms/linux), [macOS](https://apilium.com/en/doc/maryos/platforms/macos), [iOS](https://apilium.com/en/doc/maryos/platforms/ios), [Android](https://apilium.com/en/doc/maryos/platforms/android) -- [Debug common failures with the troubleshooting guide.](https://apilium.com/en/doc/maryos/channels/troubleshooting) -- [Review security guidance before exposing anything.](https://apilium.com/en/doc/maryos/gateway/security) +- [Start with the docs index for navigation and “what’s where.”](https://apilium.com/en/doc/mayros) +- [Read the architecture overview for the gateway + protocol model.](https://apilium.com/en/doc/mayros/concepts/architecture) +- [Use the full configuration reference when you need every key and example.](https://apilium.com/en/doc/mayros/gateway/configuration) +- [Run the Gateway by the book with the operational runbook.](https://apilium.com/en/doc/mayros/gateway) +- [Learn how the Control UI/Web surfaces work and how to expose them safely.](https://apilium.com/en/doc/mayros/web) +- [Understand remote access over SSH tunnels or tailnets.](https://apilium.com/en/doc/mayros/gateway/remote) +- [Follow the onboarding wizard flow for a guided setup.](https://apilium.com/en/doc/mayros/start/wizard) +- [Wire external triggers via the webhook surface.](https://apilium.com/en/doc/mayros/automation/webhook) +- [Set up Gmail Pub/Sub triggers.](https://apilium.com/en/doc/mayros/automation/gmail-pubsub) +- [Learn the macOS menu bar companion details.](https://apilium.com/en/doc/mayros/platforms/mac/menu-bar) +- [Platform guides: Windows (WSL2)](https://apilium.com/en/doc/mayros/platforms/windows), [Linux](https://apilium.com/en/doc/mayros/platforms/linux), [macOS](https://apilium.com/en/doc/mayros/platforms/macos), [iOS](https://apilium.com/en/doc/mayros/platforms/ios), [Android](https://apilium.com/en/doc/mayros/platforms/android) +- [Debug common failures with the troubleshooting guide.](https://apilium.com/en/doc/mayros/channels/troubleshooting) +- [Review security guidance before exposing anything.](https://apilium.com/en/doc/mayros/gateway/security) ## Advanced docs (discovery + control) -- [Discovery + transports](https://apilium.com/en/doc/maryos/gateway/discovery) -- [Bonjour/mDNS](https://apilium.com/en/doc/maryos/gateway/bonjour) -- [Gateway pairing](https://apilium.com/en/doc/maryos/gateway/pairing) -- [Remote gateway README](https://apilium.com/en/doc/maryos/gateway/remote-gateway-readme) -- [Control UI](https://apilium.com/en/doc/maryos/web/control-ui) -- [Dashboard](https://apilium.com/en/doc/maryos/web/dashboard) +- [Discovery + transports](https://apilium.com/en/doc/mayros/gateway/discovery) +- [Bonjour/mDNS](https://apilium.com/en/doc/mayros/gateway/bonjour) +- [Gateway pairing](https://apilium.com/en/doc/mayros/gateway/pairing) +- [Remote gateway README](https://apilium.com/en/doc/mayros/gateway/remote-gateway-readme) +- [Control UI](https://apilium.com/en/doc/mayros/web/control-ui) +- [Dashboard](https://apilium.com/en/doc/mayros/web/dashboard) ## Operations & troubleshooting -- [Health checks](https://apilium.com/en/doc/maryos/gateway/health) -- [Gateway lock](https://apilium.com/en/doc/maryos/gateway/gateway-lock) -- [Background process](https://apilium.com/en/doc/maryos/gateway/background-process) -- [Browser troubleshooting (Linux)](https://apilium.com/en/doc/maryos/tools/browser-linux-troubleshooting) -- [Logging](https://apilium.com/en/doc/maryos/logging) +- [Health checks](https://apilium.com/en/doc/mayros/gateway/health) +- [Gateway lock](https://apilium.com/en/doc/mayros/gateway/gateway-lock) +- [Background process](https://apilium.com/en/doc/mayros/gateway/background-process) +- [Browser troubleshooting (Linux)](https://apilium.com/en/doc/mayros/tools/browser-linux-troubleshooting) +- [Logging](https://apilium.com/en/doc/mayros/logging) ## Deep dives -- [Agent loop](https://apilium.com/en/doc/maryos/concepts/agent-loop) -- [Presence](https://apilium.com/en/doc/maryos/concepts/presence) -- [TypeBox schemas](https://apilium.com/en/doc/maryos/concepts/typebox) -- [RPC adapters](https://apilium.com/en/doc/maryos/reference/rpc) -- [Queue](https://apilium.com/en/doc/maryos/concepts/queue) +- [Agent loop](https://apilium.com/en/doc/mayros/concepts/agent-loop) +- [Presence](https://apilium.com/en/doc/mayros/concepts/presence) +- [TypeBox schemas](https://apilium.com/en/doc/mayros/concepts/typebox) +- [RPC adapters](https://apilium.com/en/doc/mayros/reference/rpc) +- [Queue](https://apilium.com/en/doc/mayros/concepts/queue) ## Workspace & skills -- [Skills config](https://apilium.com/en/doc/maryos/tools/skills-config) -- [Default AGENTS](https://apilium.com/en/doc/maryos/reference/AGENTS.default) -- [Templates: AGENTS](https://apilium.com/en/doc/maryos/reference/templates/AGENTS) -- [Templates: BOOTSTRAP](https://apilium.com/en/doc/maryos/reference/templates/BOOTSTRAP) -- [Templates: IDENTITY](https://apilium.com/en/doc/maryos/reference/templates/IDENTITY) -- [Templates: TOOLS](https://apilium.com/en/doc/maryos/reference/templates/TOOLS) -- [Templates: USER](https://apilium.com/en/doc/maryos/reference/templates/USER) +- [Skills config](https://apilium.com/en/doc/mayros/tools/skills-config) +- [Default AGENTS](https://apilium.com/en/doc/mayros/reference/AGENTS.default) +- [Templates: AGENTS](https://apilium.com/en/doc/mayros/reference/templates/AGENTS) +- [Templates: BOOTSTRAP](https://apilium.com/en/doc/mayros/reference/templates/BOOTSTRAP) +- [Templates: IDENTITY](https://apilium.com/en/doc/mayros/reference/templates/IDENTITY) +- [Templates: TOOLS](https://apilium.com/en/doc/mayros/reference/templates/TOOLS) +- [Templates: USER](https://apilium.com/en/doc/mayros/reference/templates/USER) ## Platform internals -- [macOS dev setup](https://apilium.com/en/doc/maryos/platforms/mac/dev-setup) -- [macOS menu bar](https://apilium.com/en/doc/maryos/platforms/mac/menu-bar) -- [macOS voice wake](https://apilium.com/en/doc/maryos/platforms/mac/voicewake) -- [iOS node](https://apilium.com/en/doc/maryos/platforms/ios) -- [Android node](https://apilium.com/en/doc/maryos/platforms/android) -- [Windows (WSL2)](https://apilium.com/en/doc/maryos/platforms/windows) -- [Linux app](https://apilium.com/en/doc/maryos/platforms/linux) +- [macOS dev setup](https://apilium.com/en/doc/mayros/platforms/mac/dev-setup) +- [macOS menu bar](https://apilium.com/en/doc/mayros/platforms/mac/menu-bar) +- [macOS voice wake](https://apilium.com/en/doc/mayros/platforms/mac/voicewake) +- [iOS node](https://apilium.com/en/doc/mayros/platforms/ios) +- [Android node](https://apilium.com/en/doc/mayros/platforms/android) +- [Windows (WSL2)](https://apilium.com/en/doc/mayros/platforms/windows) +- [Linux app](https://apilium.com/en/doc/mayros/platforms/linux) ## Email hooks (Gmail) -- [apilium.com/en/doc/maryos/gmail-pubsub](https://apilium.com/en/doc/maryos/automation/gmail-pubsub) +- [apilium.com/en/doc/mayros/gmail-pubsub](https://apilium.com/en/doc/mayros/automation/gmail-pubsub) ## Community From 4ac057c672250ac7f6fd5aae70cc5164b747a69d Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 15:57:07 +0100 Subject: [PATCH 13/19] Bump version to 0.1.2 --- extensions/agent-mesh/package.json | 2 +- extensions/bluebubbles/package.json | 2 +- extensions/copilot-proxy/package.json | 2 +- extensions/diagnostics-otel/package.json | 2 +- extensions/discord/package.json | 2 +- extensions/feishu/package.json | 2 +- extensions/google-antigravity-auth/package.json | 2 +- extensions/google-gemini-cli-auth/package.json | 2 +- extensions/googlechat/package.json | 2 +- extensions/imessage/package.json | 2 +- extensions/iot-bridge/package.json | 2 +- extensions/irc/package.json | 2 +- extensions/line/package.json | 2 +- extensions/llm-task/package.json | 2 +- extensions/lobster/package.json | 2 +- extensions/matrix/CHANGELOG.md | 6 ++++++ extensions/matrix/package.json | 2 +- extensions/mattermost/package.json | 2 +- extensions/memory-core/package.json | 2 +- extensions/memory-lancedb/package.json | 2 +- extensions/memory-semantic/package.json | 2 +- extensions/minimax-portal-auth/package.json | 2 +- extensions/msteams/CHANGELOG.md | 6 ++++++ extensions/msteams/package.json | 2 +- extensions/nextcloud-talk/package.json | 2 +- extensions/nostr/CHANGELOG.md | 6 ++++++ extensions/nostr/package.json | 2 +- extensions/open-prose/package.json | 2 +- extensions/semantic-observability/package.json | 2 +- extensions/semantic-skills/package.json | 2 +- extensions/signal/package.json | 2 +- extensions/skill-hub/package.json | 2 +- extensions/slack/package.json | 2 +- extensions/telegram/package.json | 2 +- extensions/tlon/package.json | 2 +- extensions/token-economy/package.json | 2 +- extensions/twitch/CHANGELOG.md | 6 ++++++ extensions/twitch/package.json | 2 +- extensions/voice-call/CHANGELOG.md | 6 ++++++ extensions/voice-call/package.json | 2 +- extensions/whatsapp/package.json | 2 +- extensions/zalo/CHANGELOG.md | 6 ++++++ extensions/zalo/package.json | 2 +- extensions/zalouser/CHANGELOG.md | 6 ++++++ extensions/zalouser/package.json | 2 +- package.json | 2 +- 46 files changed, 81 insertions(+), 39 deletions(-) diff --git a/extensions/agent-mesh/package.json b/extensions/agent-mesh/package.json index f9284a7b..a6ff2344 100644 --- a/extensions/agent-mesh/package.json +++ b/extensions/agent-mesh/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-agent-mesh", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros multi-agent coordination mesh with shared namespaces, delegation, and knowledge fusion", "type": "module", diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json index 515cbd76..b474e13e 100644 --- a/extensions/bluebubbles/package.json +++ b/extensions/bluebubbles/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-bluebubbles", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros BlueBubbles channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json index 9ea97f35..f03c7ef4 100644 --- a/extensions/copilot-proxy/package.json +++ b/extensions/copilot-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-copilot-proxy", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Copilot Proxy provider plugin", "type": "module", diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json index 7b2064ee..6eb4a295 100644 --- a/extensions/diagnostics-otel/package.json +++ b/extensions/diagnostics-otel/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-diagnostics-otel", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros diagnostics OpenTelemetry exporter", "license": "MIT", "type": "module", diff --git a/extensions/discord/package.json b/extensions/discord/package.json index b00eb8da..7a6e396a 100644 --- a/extensions/discord/package.json +++ b/extensions/discord/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-discord", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Discord channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json index 6885e6a3..a51711b0 100644 --- a/extensions/feishu/package.json +++ b/extensions/feishu/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-feishu", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Feishu/Lark channel plugin (community maintained by @m1heng)", "license": "MIT", "type": "module", diff --git a/extensions/google-antigravity-auth/package.json b/extensions/google-antigravity-auth/package.json index 2dfdf1e0..93edd897 100644 --- a/extensions/google-antigravity-auth/package.json +++ b/extensions/google-antigravity-auth/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-google-antigravity-auth", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Google Antigravity OAuth provider plugin", "type": "module", diff --git a/extensions/google-gemini-cli-auth/package.json b/extensions/google-gemini-cli-auth/package.json index 67d4e249..ef48e594 100644 --- a/extensions/google-gemini-cli-auth/package.json +++ b/extensions/google-gemini-cli-auth/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-google-gemini-cli-auth", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Gemini CLI OAuth provider plugin", "type": "module", diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json index b984268d..493ab07e 100644 --- a/extensions/googlechat/package.json +++ b/extensions/googlechat/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-googlechat", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Google Chat channel plugin", "type": "module", diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json index 256dd8ff..2c5daef1 100644 --- a/extensions/imessage/package.json +++ b/extensions/imessage/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-imessage", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros iMessage channel plugin", "type": "module", diff --git a/extensions/iot-bridge/package.json b/extensions/iot-bridge/package.json index 9e42ec70..d265f352 100644 --- a/extensions/iot-bridge/package.json +++ b/extensions/iot-bridge/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-iot-bridge", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "IoT Bridge — connect MAYROS agents to aingle_minimal IoT nodes via REST", "type": "module", diff --git a/extensions/irc/package.json b/extensions/irc/package.json index deab6f54..842d6c41 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-irc", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros IRC channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/line/package.json b/extensions/line/package.json index 6a3dc63e..bb42f42a 100644 --- a/extensions/line/package.json +++ b/extensions/line/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-line", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros LINE channel plugin", "type": "module", diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json index 7d391de8..ba2fd151 100644 --- a/extensions/llm-task/package.json +++ b/extensions/llm-task/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-llm-task", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros JSON-only LLM task plugin", "type": "module", diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json index a0e35d5e..e56cac25 100644 --- a/extensions/lobster/package.json +++ b/extensions/lobster/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-lobster", - "version": "0.1.1", + "version": "0.1.2", "description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)", "license": "MIT", "type": "module", diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md index 0be9a8cc..e99a228f 100644 --- a/extensions/matrix/CHANGELOG.md +++ b/extensions/matrix/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index 5b3d0e7a..ae01f618 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-matrix", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Matrix channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index b2c142ff..61bc0200 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-mattermost", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Mattermost channel plugin", "type": "module", diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json index c2d486a0..e843f0f5 100644 --- a/extensions/memory-core/package.json +++ b/extensions/memory-core/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-memory-core", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros core memory search plugin", "type": "module", diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json index 1e9f986c..fd5801ad 100644 --- a/extensions/memory-lancedb/package.json +++ b/extensions/memory-lancedb/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-memory-lancedb", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros LanceDB-backed long-term memory plugin with auto-recall/capture", "type": "module", diff --git a/extensions/memory-semantic/package.json b/extensions/memory-semantic/package.json index 7bdede8f..94211523 100644 --- a/extensions/memory-semantic/package.json +++ b/extensions/memory-semantic/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-memory-semantic", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros semantic memory plugin via AIngle Cortex sidecar (RDF triples, identity graph, Titans STM/LTM)", "type": "module", diff --git a/extensions/minimax-portal-auth/package.json b/extensions/minimax-portal-auth/package.json index 1432d614..194367cb 100644 --- a/extensions/minimax-portal-auth/package.json +++ b/extensions/minimax-portal-auth/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-minimax-portal-auth", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros MiniMax Portal OAuth provider plugin", "type": "module", diff --git a/extensions/msteams/CHANGELOG.md b/extensions/msteams/CHANGELOG.md index 0ea1d408..99c3ed1c 100644 --- a/extensions/msteams/CHANGELOG.md +++ b/extensions/msteams/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index ffcec1e8..5a404df4 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-msteams", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Microsoft Teams channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json index 8d677a64..a0c0e714 100644 --- a/extensions/nextcloud-talk/package.json +++ b/extensions/nextcloud-talk/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-nextcloud-talk", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Nextcloud Talk channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/nostr/CHANGELOG.md b/extensions/nostr/CHANGELOG.md index 655f4733..b4a873e8 100644 --- a/extensions/nostr/CHANGELOG.md +++ b/extensions/nostr/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json index 674e94e5..e298f53b 100644 --- a/extensions/nostr/package.json +++ b/extensions/nostr/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-nostr", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Nostr channel plugin for NIP-04 encrypted DMs", "license": "MIT", "type": "module", diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json index b102c9d2..a131483c 100644 --- a/extensions/open-prose/package.json +++ b/extensions/open-prose/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-open-prose", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "OpenProse VM skill pack plugin (slash command + telemetry).", "type": "module", diff --git a/extensions/semantic-observability/package.json b/extensions/semantic-observability/package.json index e1e6303f..0180b752 100644 --- a/extensions/semantic-observability/package.json +++ b/extensions/semantic-observability/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-semantic-observability", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros semantic observability plugin — structured tracing of agent decisions as RDF events", "type": "module", diff --git a/extensions/semantic-skills/package.json b/extensions/semantic-skills/package.json index 9f527b66..eb83b560 100644 --- a/extensions/semantic-skills/package.json +++ b/extensions/semantic-skills/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-semantic-skills", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros semantic skills plugin — graph-aware skills with PoL assertions, ZK proofs, and permission gating", "type": "module", diff --git a/extensions/signal/package.json b/extensions/signal/package.json index 008f2fff..4027e407 100644 --- a/extensions/signal/package.json +++ b/extensions/signal/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-signal", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Signal channel plugin", "type": "module", diff --git a/extensions/skill-hub/package.json b/extensions/skill-hub/package.json index e6ead111..0fd0e6dc 100644 --- a/extensions/skill-hub/package.json +++ b/extensions/skill-hub/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-skill-hub", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Apilium Hub marketplace — publish, install, sign, and verify semantic skills", "type": "module", diff --git a/extensions/slack/package.json b/extensions/slack/package.json index 33f940cc..9a585caf 100644 --- a/extensions/slack/package.json +++ b/extensions/slack/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-slack", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Slack channel plugin", "type": "module", diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json index 413b8175..49a884f9 100644 --- a/extensions/telegram/package.json +++ b/extensions/telegram/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-telegram", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Telegram channel plugin", "type": "module", diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json index 25342d82..894f38a4 100644 --- a/extensions/tlon/package.json +++ b/extensions/tlon/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-tlon", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Tlon/Urbit channel plugin", "type": "module", diff --git a/extensions/token-economy/package.json b/extensions/token-economy/package.json index b192ad14..693ffea5 100644 --- a/extensions/token-economy/package.json +++ b/extensions/token-economy/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-token-economy", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros token economy plugin — per-session cost tracking, configurable budgets with soft-stop, and prompt-level memoization", "type": "module", diff --git a/extensions/twitch/CHANGELOG.md b/extensions/twitch/CHANGELOG.md index 0c9fb4e4..93b8f41e 100644 --- a/extensions/twitch/CHANGELOG.md +++ b/extensions/twitch/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json index 25f4aef6..c9e39291 100644 --- a/extensions/twitch/package.json +++ b/extensions/twitch/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-twitch", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros Twitch channel plugin", "type": "module", diff --git a/extensions/voice-call/CHANGELOG.md b/extensions/voice-call/CHANGELOG.md index e22e8769..a2b63dc3 100644 --- a/extensions/voice-call/CHANGELOG.md +++ b/extensions/voice-call/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json index 8d21b234..4ebefba8 100644 --- a/extensions/voice-call/package.json +++ b/extensions/voice-call/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-voice-call", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros voice-call plugin", "license": "MIT", "type": "module", diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json index ece6d163..d493246b 100644 --- a/extensions/whatsapp/package.json +++ b/extensions/whatsapp/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-whatsapp", - "version": "0.1.1", + "version": "0.1.2", "private": true, "description": "Mayros WhatsApp channel plugin", "type": "module", diff --git a/extensions/zalo/CHANGELOG.md b/extensions/zalo/CHANGELOG.md index 4a737f2b..9724f780 100644 --- a/extensions/zalo/CHANGELOG.md +++ b/extensions/zalo/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json index d0d5fbf8..e1f680c1 100644 --- a/extensions/zalo/package.json +++ b/extensions/zalo/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-zalo", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Zalo channel plugin", "license": "MIT", "type": "module", diff --git a/extensions/zalouser/CHANGELOG.md b/extensions/zalouser/CHANGELOG.md index 39e73393..40f79e85 100644 --- a/extensions/zalouser/CHANGELOG.md +++ b/extensions/zalouser/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.2 + +### Changes + +- Version alignment with core Mayros release numbers. + ## 0.1.1 ### Changes diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json index f270b72c..f2b1b64d 100644 --- a/extensions/zalouser/package.json +++ b/extensions/zalouser/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros-zalouser", - "version": "0.1.1", + "version": "0.1.2", "description": "Mayros Zalo Personal Account plugin via zca-cli", "license": "MIT", "type": "module", diff --git a/package.json b/package.json index a7eef6f7..344c80de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@apilium/mayros", - "version": "0.1.1", + "version": "0.1.2", "description": "Multi-channel AI agent framework — la era de la IA con certezas", "keywords": [], "homepage": "https://apilium.com/mayros", From 6248a99814e88faac5f4105b2407706083a784e7 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 16:23:50 +0100 Subject: [PATCH 14/19] Fix oxfmt formatting in 3 files --- .markdownlint-cli2.jsonc | 8 +- .../Resources/CanvasScaffold/scaffold.html | 179 ++++++++++++------ assets/chrome-extension/options.html | 42 ++-- 3 files changed, 152 insertions(+), 77 deletions(-) diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc index b22f1603..94035711 100644 --- a/.markdownlint-cli2.jsonc +++ b/.markdownlint-cli2.jsonc @@ -40,13 +40,13 @@ "picture", "source", "Tooltip", - "Check" - ] + "Check", + ], }, "MD036": false, "MD040": false, "MD041": false, - "MD046": false - } + "MD046": false, + }, } diff --git a/apps/shared/MayrosKit/Sources/MayrosKit/Resources/CanvasScaffold/scaffold.html b/apps/shared/MayrosKit/Sources/MayrosKit/Resources/CanvasScaffold/scaffold.html index d26e746d..3334abcf 100644 --- a/apps/shared/MayrosKit/Sources/MayrosKit/Resources/CanvasScaffold/scaffold.html +++ b/apps/shared/MayrosKit/Sources/MayrosKit/Resources/CanvasScaffold/scaffold.html @@ -8,48 +8,67 @@ (() => { try { const params = new URLSearchParams(window.location.search); - const platform = (params.get('platform') || '').trim().toLowerCase(); + const platform = (params.get("platform") || "").trim().toLowerCase(); if (platform) { document.documentElement.dataset.platform = platform; return; } - if (/android/i.test(navigator.userAgent || '')) { - document.documentElement.dataset.platform = 'android'; + if (/android/i.test(navigator.userAgent || "")) { + document.documentElement.dataset.platform = "android"; } } catch (_) {} })(); @@ -152,18 +208,18 @@ diff --git a/assets/chrome-extension/options.html b/assets/chrome-extension/options.html index caebe801..b0642918 100644 --- a/assets/chrome-extension/options.html +++ b/assets/chrome-extension/options.html @@ -12,16 +12,31 @@ --border: color-mix(in oklab, canvasText 18%, transparent); --muted: color-mix(in oklab, canvasText 70%, transparent); --shadow: 0 10px 30px color-mix(in oklab, canvasText 18%, transparent); - font-family: ui-rounded, system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Rounded", - "SF Pro Display", "Segoe UI", sans-serif; + font-family: + ui-rounded, + system-ui, + -apple-system, + BlinkMacSystemFont, + "SF Pro Rounded", + "SF Pro Display", + "Segoe UI", + sans-serif; line-height: 1.4; } body { margin: 0; min-height: 100vh; background: - radial-gradient(1000px 500px at 10% 0%, color-mix(in oklab, var(--accent) 30%, transparent), transparent 70%), - radial-gradient(900px 450px at 90% 0%, color-mix(in oklab, var(--accent) 18%, transparent), transparent 75%), + radial-gradient( + 1000px 500px at 10% 0%, + color-mix(in oklab, var(--accent) 30%, transparent), + transparent 70% + ), + radial-gradient( + 900px 450px at 90% 0%, + color-mix(in oklab, var(--accent) 18%, transparent), + transparent 75% + ), canvas; color: canvasText; } @@ -143,10 +158,10 @@ color: color-mix(in oklab, var(--accent) 70%, canvasText 30%); min-height: 16px; } - .status[data-kind='ok'] { + .status[data-kind="ok"] { color: color-mix(in oklab, #16a34a 75%, canvasText 25%); } - .status[data-kind='error'] { + .status[data-kind="error"] { color: color-mix(in oklab, #ef4444 75%, canvasText 25%); } @@ -167,11 +182,15 @@

Mayros Browser Relay

Getting started

- If you see a red ! badge on the extension icon, the relay server is not reachable. - Start Mayros’s browser relay on this machine (Gateway or node host), then click the toolbar button again. + If you see a red ! badge on the extension icon, the relay server is not + reachable. Start Mayros’s browser relay on this machine (Gateway or node host), then + click the toolbar button again.

- Full guide (install, remote Gateway, security): docs.mayros.ai/tools/chrome-extension + Full guide (install, remote Gateway, security): + docs.mayros.ai/tools/chrome-extension

@@ -187,8 +206,9 @@

Relay connection

- Default port: 18792. Extension connects to: http://127.0.0.1:<port>/. - Gateway token must match gateway.auth.token (or MAYROS_GATEWAY_TOKEN). + Default port: 18792. Extension connects to: + http://127.0.0.1:<port>/. Gateway token must match + gateway.auth.token (or MAYROS_GATEWAY_TOKEN).
From 113620c2c8ad40881569dc01c890e2cb1cce1e22 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 16:23:57 +0100 Subject: [PATCH 15/19] Fix 15 broken internal links in docs --- docs/start/hubs.md | 4 +--- docs/tools/creating-skills.md | 14 +++++++------- docs/zh-CN/start/hubs.md | 4 +--- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/docs/start/hubs.md b/docs/start/hubs.md index c6dbb0d8..b8501573 100644 --- a/docs/start/hubs.md +++ b/docs/start/hubs.md @@ -166,14 +166,12 @@ Use these hubs to discover every page, including deep dives and reference docs t ## Workspace + templates - [Skills](/tools/skills) -- [Skills Hub](/tools/skills-hub) +- [Skills Hub](/tools/skillshub) - [Skills config](/tools/skills-config) - [Default AGENTS](/reference/AGENTS.default) - [Templates: AGENTS](/reference/templates/AGENTS) - [Templates: BOOTSTRAP](/reference/templates/BOOTSTRAP) -- [Templates: HEARTBEAT](/reference/templates/HEARTBEAT) - [Templates: IDENTITY](/reference/templates/IDENTITY) -- [Templates: SOUL](/reference/templates/SOUL) - [Templates: TOOLS](/reference/templates/TOOLS) - [Templates: USER](/reference/templates/USER) diff --git a/docs/tools/creating-skills.md b/docs/tools/creating-skills.md index b6d708f7..6468dc7a 100644 --- a/docs/tools/creating-skills.md +++ b/docs/tools/creating-skills.md @@ -311,12 +311,12 @@ semantic: The `skills/examples/` directory contains 5 reference skills with near-platinum structure (9/10 files — only `SKILL.sig` is missing, generated at publish time): -| Skill | Description | -| ----------------------------------------------------------- | ------------------------------------------------ | -| [verify-kyc](../../skills/examples/verify-kyc/) | KYC verification with semantic proofs | -| [code-review](../../skills/examples/code-review/) | Severity classification for code review findings | -| [dependency-audit](../../skills/examples/dependency-audit/) | Flag outdated and vulnerable dependencies | -| [knowledge-sync](../../skills/examples/knowledge-sync/) | Cross-namespace knowledge synchronization | -| [api-monitor](../../skills/examples/api-monitor/) | API health status monitoring | +| Skill | Description | +| ------------------ | ------------------------------------------------ | +| `verify-kyc` | KYC verification with semantic proofs | +| `code-review` | Severity classification for code review findings | +| `dependency-audit` | Flag outdated and vulnerable dependencies | +| `knowledge-sync` | Cross-namespace knowledge synchronization | +| `api-monitor` | API health status monitoring | For fully signed platinum skills, see `skills/official/`. diff --git a/docs/zh-CN/start/hubs.md b/docs/zh-CN/start/hubs.md index 05bd0053..800cf300 100644 --- a/docs/zh-CN/start/hubs.md +++ b/docs/zh-CN/start/hubs.md @@ -169,14 +169,12 @@ x-i18n: ## 工作区 + 模板 - [Skills](/tools/skills) -- [Skills Hub](/tools/skills-hub) +- [Skills Hub](/tools/skillshub) - [Skills 配置](/tools/skills-config) - [默认 AGENTS](/reference/AGENTS.default) - [模板:AGENTS](/reference/templates/AGENTS) - [模板:BOOTSTRAP](/reference/templates/BOOTSTRAP) -- [模板:HEARTBEAT](/reference/templates/HEARTBEAT) - [模板:IDENTITY](/reference/templates/IDENTITY) -- [模板:SOUL](/reference/templates/SOUL) - [模板:TOOLS](/reference/templates/TOOLS) - [模板:USER](/reference/templates/USER) From d84ec5cba45f9a20a03067f54819883d0eb993a9 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 16:24:03 +0100 Subject: [PATCH 16/19] Fix Python lint: remove unused import, suppress E402 --- skills/model-usage/scripts/model_usage.py | 1 - skills/skill-creator/scripts/test_package_skill.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/skills/model-usage/scripts/model_usage.py b/skills/model-usage/scripts/model_usage.py index 0b71f96e..24ab4e86 100644 --- a/skills/model-usage/scripts/model_usage.py +++ b/skills/model-usage/scripts/model_usage.py @@ -9,7 +9,6 @@ import argparse import json -import os import subprocess import sys from dataclasses import dataclass diff --git a/skills/skill-creator/scripts/test_package_skill.py b/skills/skill-creator/scripts/test_package_skill.py index 59407b6c..434cfa4e 100644 --- a/skills/skill-creator/scripts/test_package_skill.py +++ b/skills/skill-creator/scripts/test_package_skill.py @@ -15,7 +15,7 @@ fake_quick_validate.validate_skill = lambda _path: (True, "Skill is valid!") sys.modules["quick_validate"] = fake_quick_validate -from package_skill import package_skill +from package_skill import package_skill # noqa: E402 class TestPackageSkillSecurity(TestCase): From 67ecf5291ac9eb6bb0faed69b2d51fa1a203044c Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 16:41:39 +0100 Subject: [PATCH 17/19] Track template docs and a2ui placeholder for CI Un-gitignore docs/reference/templates/IDENTITY.md, docs/reference/templates/USER.md, and src/canvas-host/a2ui/a2ui.bundle.js so CI check-docs, tests, and build-artifacts pipelines can find them. --- .gitignore | 3 +++ docs/reference/templates/IDENTITY.md | 29 ++++++++++++++++++++++++++++ docs/reference/templates/USER.md | 23 ++++++++++++++++++++++ src/canvas-host/a2ui/a2ui.bundle.js | 1 + 4 files changed, 56 insertions(+) create mode 100644 docs/reference/templates/IDENTITY.md create mode 100644 docs/reference/templates/USER.md create mode 100644 src/canvas-host/a2ui/a2ui.bundle.js diff --git a/.gitignore b/.gitignore index 4398a115..b96f1b14 100644 --- a/.gitignore +++ b/.gitignore @@ -83,6 +83,7 @@ vendor/ # Vendor build artifacts vendor/a2ui/renderers/lit/dist/ src/canvas-host/a2ui/*.bundle.js +!src/canvas-host/a2ui/a2ui.bundle.js src/canvas-host/a2ui/*.map .bundle.hash @@ -109,6 +110,8 @@ apps/ios/LocalSigning.xcconfig docs/.local/ IDENTITY.md USER.md +!docs/reference/templates/IDENTITY.md +!docs/reference/templates/USER.md *.tgz .worktrees/ diff --git a/docs/reference/templates/IDENTITY.md b/docs/reference/templates/IDENTITY.md new file mode 100644 index 00000000..9e56aed2 --- /dev/null +++ b/docs/reference/templates/IDENTITY.md @@ -0,0 +1,29 @@ +--- +summary: "Agent identity record" +read_when: + - Bootstrapping a workspace manually +--- + +# IDENTITY.md - Who Am I? + +_Fill this in during your first conversation. Make it yours._ + +- **Name:** + _(pick something you like)_ +- **Creature:** + _(AI? robot? familiar? ghost in the machine? something weirder?)_ +- **Vibe:** + _(how do you come across? sharp? warm? chaotic? calm?)_ +- **Emoji:** + _(your signature — pick one that feels right)_ +- **Avatar:** + _(workspace-relative path, http(s) URL, or data URI)_ + +--- + +This isn't just metadata. It's the start of figuring out who you are. + +Notes: + +- Save this file at the workspace root as `IDENTITY.md`. +- For avatars, use a workspace-relative path like `avatars/mayros.png`. diff --git a/docs/reference/templates/USER.md b/docs/reference/templates/USER.md new file mode 100644 index 00000000..682e99ae --- /dev/null +++ b/docs/reference/templates/USER.md @@ -0,0 +1,23 @@ +--- +summary: "User profile record" +read_when: + - Bootstrapping a workspace manually +--- + +# USER.md - About Your Human + +_Learn about the person you're helping. Update this as you go._ + +- **Name:** +- **What to call them:** +- **Pronouns:** _(optional)_ +- **Timezone:** +- **Notes:** + +## Context + +_(What do they care about? What projects are they working on? What annoys them? What makes them laugh? Build this over time.)_ + +--- + +The more you know, the better you can help. But remember — you're learning about a person, not building a dossier. Respect the difference. diff --git a/src/canvas-host/a2ui/a2ui.bundle.js b/src/canvas-host/a2ui/a2ui.bundle.js new file mode 100644 index 00000000..04ac4638 --- /dev/null +++ b/src/canvas-host/a2ui/a2ui.bundle.js @@ -0,0 +1 @@ +/* A2UI bundle placeholder */ window.mayrosA2UI = {}; From 49a50f2dcadd4f92a0ed344d5ea14f462b2dbfc3 Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 17:24:38 +0100 Subject: [PATCH 18/19] Fix 15 test files for vitest 4.x mock hoisting compatibility vitest 4.x no longer hoists vi.mock() from helper/harness files. Migrate all affected tests to use vi.hoisted() + inline vi.mock() factories, ensuring mocks are properly initialized before imports. - BlueBubbles: separate vi.hoisted() from export declarations - Telegram: move mock setup from external harness into test file - Slack: use vi.hoisted() for enqueueSystemEvent mock - Feishu: inline mock implementations in vi.mock() factories - Agent runner: sync factories + default mock return values - Cron: polling-based assertions, fix storeLocks cross-test collision - CortexSidecar: update spawn/signal mock patterns - hooks/install: use import.meta.url for fixture path resolution Co-Authored-By: Claude Opus 4.6 --- .../bluebubbles/src/attachments.test.ts | 4 +- extensions/bluebubbles/src/chat.test.ts | 4 +- extensions/bluebubbles/src/media-send.test.ts | 19 +-- extensions/bluebubbles/src/send.test.ts | 4 +- extensions/bluebubbles/src/test-harness.ts | 30 ----- extensions/bluebubbles/src/test-mocks.ts | 36 ++++-- extensions/feishu/src/media.test.ts | 63 ++++------ .../memory-semantic/cortex-sidecar.test.ts | 116 +++++++++++------- .../agent-runner.misc.runreplyagent.test.ts | 64 ++++------ src/cron/service.issue-regressions.test.ts | 7 +- ...runs-one-shot-main-job-disables-it.test.ts | 4 +- src/cron/service/store.ts | 11 +- src/hooks/install.test.ts | 4 +- src/slack/monitor/events/interactions.test.ts | 6 +- src/telegram/send.test.ts | 79 ++++++++++-- 15 files changed, 256 insertions(+), 195 deletions(-) diff --git a/extensions/bluebubbles/src/attachments.test.ts b/extensions/bluebubbles/src/attachments.test.ts index 78d52910..e5478f44 100644 --- a/extensions/bluebubbles/src/attachments.test.ts +++ b/extensions/bluebubbles/src/attachments.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import "./test-mocks.js"; +import { probeMock } from "./test-mocks.js"; import { downloadBlueBubblesAttachment, sendBlueBubblesAttachment } from "./attachments.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { installBlueBubblesFetchTestHooks } from "./test-harness.js"; @@ -9,7 +9,7 @@ const mockFetch = vi.fn(); installBlueBubblesFetchTestHooks({ mockFetch, - privateApiStatusMock: vi.mocked(getCachedBlueBubblesPrivateApiStatus), + privateApiStatusMock: probeMock.getCachedBlueBubblesPrivateApiStatus, }); describe("downloadBlueBubblesAttachment", () => { diff --git a/extensions/bluebubbles/src/chat.test.ts b/extensions/bluebubbles/src/chat.test.ts index f372ca46..b6a4b582 100644 --- a/extensions/bluebubbles/src/chat.test.ts +++ b/extensions/bluebubbles/src/chat.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import "./test-mocks.js"; +import { probeMock } from "./test-mocks.js"; import { markBlueBubblesChatRead, sendBlueBubblesTyping, setGroupIconBlueBubbles } from "./chat.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { installBlueBubblesFetchTestHooks } from "./test-harness.js"; @@ -8,7 +8,7 @@ const mockFetch = vi.fn(); installBlueBubblesFetchTestHooks({ mockFetch, - privateApiStatusMock: vi.mocked(getCachedBlueBubblesPrivateApiStatus), + privateApiStatusMock: probeMock.getCachedBlueBubblesPrivateApiStatus, }); describe("chat", () => { diff --git a/extensions/bluebubbles/src/media-send.test.ts b/extensions/bluebubbles/src/media-send.test.ts index 7bb0ce4a..1c2b4c60 100644 --- a/extensions/bluebubbles/src/media-send.test.ts +++ b/extensions/bluebubbles/src/media-send.test.ts @@ -7,22 +7,27 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { sendBlueBubblesMedia } from "./media-send.js"; import { setBlueBubblesRuntime } from "./runtime.js"; -const sendBlueBubblesAttachmentMock = vi.hoisted(() => vi.fn()); -const sendMessageBlueBubblesMock = vi.hoisted(() => vi.fn()); -const resolveBlueBubblesMessageIdMock = vi.hoisted(() => vi.fn((id: string) => id)); - vi.mock("./attachments.js", () => ({ - sendBlueBubblesAttachment: sendBlueBubblesAttachmentMock, + sendBlueBubblesAttachment: vi.fn(), })); vi.mock("./send.js", () => ({ - sendMessageBlueBubbles: sendMessageBlueBubblesMock, + sendMessageBlueBubbles: vi.fn(), })); vi.mock("./monitor.js", () => ({ - resolveBlueBubblesMessageId: resolveBlueBubblesMessageIdMock, + resolveBlueBubblesMessageId: vi.fn((id: string) => id), })); +// Import the mocked modules to obtain mock references after vi.mock has been applied. +const { sendBlueBubblesAttachment } = await import("./attachments.js"); +const { sendMessageBlueBubbles } = await import("./send.js"); +const { resolveBlueBubblesMessageId } = await import("./monitor.js"); + +const sendBlueBubblesAttachmentMock = vi.mocked(sendBlueBubblesAttachment); +const sendMessageBlueBubblesMock = vi.mocked(sendMessageBlueBubbles); +const resolveBlueBubblesMessageIdMock = vi.mocked(resolveBlueBubblesMessageId); + type RuntimeMocks = { detectMime: ReturnType; fetchRemoteMedia: ReturnType; diff --git a/extensions/bluebubbles/src/send.test.ts b/extensions/bluebubbles/src/send.test.ts index c1bcafe2..9b77344d 100644 --- a/extensions/bluebubbles/src/send.test.ts +++ b/extensions/bluebubbles/src/send.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import "./test-mocks.js"; +import { probeMock } from "./test-mocks.js"; import { getCachedBlueBubblesPrivateApiStatus } from "./probe.js"; import { sendMessageBlueBubbles, resolveChatGuidForTarget } from "./send.js"; import { installBlueBubblesFetchTestHooks } from "./test-harness.js"; @@ -9,7 +9,7 @@ const mockFetch = vi.fn(); installBlueBubblesFetchTestHooks({ mockFetch, - privateApiStatusMock: vi.mocked(getCachedBlueBubblesPrivateApiStatus), + privateApiStatusMock: probeMock.getCachedBlueBubblesPrivateApiStatus, }); function mockResolvedHandleTarget( diff --git a/extensions/bluebubbles/src/test-harness.ts b/extensions/bluebubbles/src/test-harness.ts index 627b0419..642a0441 100644 --- a/extensions/bluebubbles/src/test-harness.ts +++ b/extensions/bluebubbles/src/test-harness.ts @@ -1,35 +1,5 @@ -import type { Mock } from "vitest"; import { afterEach, beforeEach, vi } from "vitest"; -export function resolveBlueBubblesAccountFromConfig(params: { - cfg?: { channels?: { bluebubbles?: Record } }; - accountId?: string; -}) { - const config = params.cfg?.channels?.bluebubbles ?? {}; - return { - accountId: params.accountId ?? "default", - enabled: config.enabled !== false, - configured: Boolean(config.serverUrl && config.password), - config, - }; -} - -export function createBlueBubblesAccountsMockModule() { - return { - resolveBlueBubblesAccount: vi.fn(resolveBlueBubblesAccountFromConfig), - }; -} - -type BlueBubblesProbeMockModule = { - getCachedBlueBubblesPrivateApiStatus: Mock<() => boolean | null>; -}; - -export function createBlueBubblesProbeMockModule(): BlueBubblesProbeMockModule { - return { - getCachedBlueBubblesPrivateApiStatus: vi.fn().mockReturnValue(null), - }; -} - export function installBlueBubblesFetchTestHooks(params: { mockFetch: ReturnType; privateApiStatusMock: { diff --git a/extensions/bluebubbles/src/test-mocks.ts b/extensions/bluebubbles/src/test-mocks.ts index d0a48016..3009bd50 100644 --- a/extensions/bluebubbles/src/test-mocks.ts +++ b/extensions/bluebubbles/src/test-mocks.ts @@ -1,11 +1,29 @@ import { vi } from "vitest"; -vi.mock("./accounts.js", async () => { - const { createBlueBubblesAccountsMockModule } = await import("./test-harness.js"); - return createBlueBubblesAccountsMockModule(); -}); - -vi.mock("./probe.js", async () => { - const { createBlueBubblesProbeMockModule } = await import("./test-harness.js"); - return createBlueBubblesProbeMockModule(); -}); +const _accountsMock = vi.hoisted(() => ({ + resolveBlueBubblesAccount: vi.fn( + (params: { + cfg?: { channels?: { bluebubbles?: Record } }; + accountId?: string; + }) => { + const config = params.cfg?.channels?.bluebubbles ?? {}; + return { + accountId: params.accountId ?? "default", + enabled: config.enabled !== false, + configured: Boolean(config.serverUrl && config.password), + config, + }; + }, + ), +})); + +const _probeMock = vi.hoisted(() => ({ + getCachedBlueBubblesPrivateApiStatus: vi.fn<() => boolean | null>().mockReturnValue(null), +})); + +vi.mock("./accounts.js", () => _accountsMock); + +vi.mock("./probe.js", () => _probeMock); + +export const accountsMock = _accountsMock; +export const probeMock = _probeMock; diff --git a/extensions/feishu/src/media.test.ts b/extensions/feishu/src/media.test.ts index b9e97703..25f77192 100644 --- a/extensions/feishu/src/media.test.ts +++ b/extensions/feishu/src/media.test.ts @@ -3,29 +3,40 @@ import os from "node:os"; import path from "node:path"; import { beforeEach, describe, expect, it, vi } from "vitest"; -const createFeishuClientMock = vi.hoisted(() => vi.fn()); -const resolveFeishuAccountMock = vi.hoisted(() => vi.fn()); -const normalizeFeishuTargetMock = vi.hoisted(() => vi.fn()); -const resolveReceiveIdTypeMock = vi.hoisted(() => vi.fn()); -const loadWebMediaMock = vi.hoisted(() => vi.fn()); - const fileCreateMock = vi.hoisted(() => vi.fn()); const imageGetMock = vi.hoisted(() => vi.fn()); const messageCreateMock = vi.hoisted(() => vi.fn()); const messageResourceGetMock = vi.hoisted(() => vi.fn()); const messageReplyMock = vi.hoisted(() => vi.fn()); +const loadWebMediaMock = vi.hoisted(() => vi.fn()); -vi.mock("./client.js", () => ({ - createFeishuClient: createFeishuClientMock, +const defaultAccount = vi.hoisted(() => ({ + configured: true, + accountId: "default", + config: {}, + appId: "app_id", + appSecret: "app_secret", + domain: "feishu", })); vi.mock("./accounts.js", () => ({ - resolveFeishuAccount: resolveFeishuAccountMock, + resolveFeishuAccount: vi.fn(() => defaultAccount), +})); + +vi.mock("./client.js", () => ({ + createFeishuClient: vi.fn(() => ({ + im: { + file: { create: fileCreateMock }, + image: { create: vi.fn(), get: imageGetMock }, + message: { create: messageCreateMock, reply: messageReplyMock }, + messageResource: { get: messageResourceGetMock }, + }, + })), })); vi.mock("./targets.js", () => ({ - normalizeFeishuTarget: normalizeFeishuTargetMock, - resolveReceiveIdType: resolveReceiveIdTypeMock, + normalizeFeishuTarget: vi.fn(() => "ou_target"), + resolveReceiveIdType: vi.fn(() => "open_id"), })); vi.mock("./runtime.js", () => ({ @@ -42,36 +53,6 @@ describe("sendMediaFeishu msg_type routing", () => { beforeEach(() => { vi.clearAllMocks(); - resolveFeishuAccountMock.mockReturnValue({ - configured: true, - accountId: "main", - config: {}, - appId: "app_id", - appSecret: "app_secret", - domain: "feishu", - }); - - normalizeFeishuTargetMock.mockReturnValue("ou_target"); - resolveReceiveIdTypeMock.mockReturnValue("open_id"); - - createFeishuClientMock.mockReturnValue({ - im: { - file: { - create: fileCreateMock, - }, - image: { - get: imageGetMock, - }, - message: { - create: messageCreateMock, - reply: messageReplyMock, - }, - messageResource: { - get: messageResourceGetMock, - }, - }, - }); - fileCreateMock.mockResolvedValue({ code: 0, data: { file_key: "file_key_1" }, diff --git a/extensions/memory-semantic/cortex-sidecar.test.ts b/extensions/memory-semantic/cortex-sidecar.test.ts index 2495a43b..78272fa7 100644 --- a/extensions/memory-semantic/cortex-sidecar.test.ts +++ b/extensions/memory-semantic/cortex-sidecar.test.ts @@ -8,48 +8,31 @@ import { EventEmitter } from "node:events"; import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"; -// ---------- Mocks ---------- - -// Fake ChildProcess -class FakeChildProcess extends EventEmitter { - pid = 12345; - killed = false; - stdout = new EventEmitter() as NodeJS.ReadableStream & { resume: () => void }; - stderr = new EventEmitter() as NodeJS.ReadableStream & { resume: () => void }; - - constructor() { - super(); - this.stdout.resume = vi.fn(); - this.stderr.resume = vi.fn(); - } - - kill(signal?: string) { - this.killed = true; - // Simulate immediate exit for tests - if (signal === "SIGTERM" || signal === "SIGKILL") { - process.nextTick(() => this.emit("exit", 0)); - } - } -} +// ---------- Hoisted state (accessible inside vi.mock factories) ---------- + +const mockState = vi.hoisted(() => ({ + fakeProc: null as unknown, + healthCallCount: 0, + healthReturnValues: [] as boolean[], + spawnFn: vi.fn(), + existsSyncFn: vi.fn(() => true), + locateCortexBinaryFn: vi.fn(async () => "/usr/bin/fake-cortex"), + getCortexBinaryVersionFn: vi.fn(() => "0.2.6"), +})); -let fakeProc: FakeChildProcess; -let healthCallCount: number; -let healthReturnValues: boolean[]; +// ---------- Mocks ---------- vi.mock("node:child_process", () => ({ - spawn: vi.fn(() => { - fakeProc = new FakeChildProcess(); - return fakeProc; - }), + spawn: mockState.spawnFn, })); vi.mock("node:fs", () => ({ - existsSync: vi.fn(() => true), + existsSync: mockState.existsSyncFn, })); vi.mock("../shared/cortex-binary-locator.js", () => ({ - locateCortexBinary: vi.fn(async () => "/usr/bin/fake-cortex"), - getCortexBinaryVersion: vi.fn(() => "0.2.6"), + locateCortexBinary: mockState.locateCortexBinaryFn, + getCortexBinaryVersion: mockState.getCortexBinaryVersionFn, })); vi.mock("../shared/cortex-version.js", () => ({ @@ -60,21 +43,61 @@ vi.mock("../shared/cortex-version.js", () => ({ vi.mock("./cortex-client.js", () => ({ CortexClient: class MockCortexClient { async isHealthy() { - if (healthReturnValues.length > 0) { - return healthReturnValues.shift(); + if (mockState.healthReturnValues.length > 0) { + return mockState.healthReturnValues.shift(); } - return healthCallCount++ > 0; + return mockState.healthCallCount++ > 0; } }, })); +// ---------- Fake ChildProcess (needs EventEmitter, so defined after imports) ---------- + +class FakeChildProcess extends EventEmitter { + pid = 12345; + killed = false; + stdout = new EventEmitter() as NodeJS.ReadableStream & { resume: () => void }; + stderr = new EventEmitter() as NodeJS.ReadableStream & { resume: () => void }; + + constructor() { + super(); + this.stdout.resume = vi.fn(); + this.stderr.resume = vi.fn(); + } + + kill(signal?: string) { + this.killed = true; + // Simulate immediate exit for tests + if (signal === "SIGTERM" || signal === "SIGKILL") { + process.nextTick(() => this.emit("exit", 0)); + } + } +} + +// Wire the hoisted spawn mock to create FakeChildProcess instances +mockState.spawnFn.mockImplementation(() => { + const proc = new FakeChildProcess(); + mockState.fakeProc = proc; + return proc; +}); + import { CortexSidecar } from "./cortex-sidecar.js"; describe("CortexSidecar", () => { beforeEach(() => { - healthCallCount = 0; - healthReturnValues = []; + mockState.healthCallCount = 0; + mockState.healthReturnValues = []; + mockState.fakeProc = null; vi.clearAllMocks(); + // Re-wire spawn implementation after clearAllMocks resets it + mockState.spawnFn.mockImplementation(() => { + const proc = new FakeChildProcess(); + mockState.fakeProc = proc; + return proc; + }); + mockState.existsSyncFn.mockReturnValue(true); + mockState.locateCortexBinaryFn.mockResolvedValue("/usr/bin/fake-cortex"); + mockState.getCortexBinaryVersionFn.mockReturnValue("0.2.6"); }); afterEach(() => { @@ -83,7 +106,7 @@ describe("CortexSidecar", () => { it("registers signal handlers after successful spawn", async () => { // First isHealthy=false (not running externally), then true (healthy after spawn) - healthReturnValues = [false, true]; + mockState.healthReturnValues = [false, true]; const onceSpy = vi.spyOn(process, "once"); @@ -112,7 +135,7 @@ describe("CortexSidecar", () => { }); it("removes signal handlers after stop", async () => { - healthReturnValues = [false, true]; + mockState.healthReturnValues = [false, true]; const removeListenerSpy = vi.spyOn(process, "removeListener"); @@ -135,7 +158,7 @@ describe("CortexSidecar", () => { }); it("drains stdout and stderr on spawn", async () => { - healthReturnValues = [false, true]; + mockState.healthReturnValues = [false, true]; const sidecar = new CortexSidecar({ host: "127.0.0.1", @@ -146,6 +169,8 @@ describe("CortexSidecar", () => { await sidecar.start(); + const fakeProc = mockState.fakeProc as FakeChildProcess; + expect(fakeProc).not.toBeNull(); expect(fakeProc.stdout.resume).toHaveBeenCalled(); expect(fakeProc.stderr.resume).toHaveBeenCalled(); @@ -153,7 +178,7 @@ describe("CortexSidecar", () => { }); it("does not spawn when autoStart is false", async () => { - healthReturnValues = [false]; // not running externally + mockState.healthReturnValues = [false]; // not running externally const sidecar = new CortexSidecar({ host: "127.0.0.1", @@ -167,7 +192,7 @@ describe("CortexSidecar", () => { }); it("returns true without spawning if already running externally", async () => { - healthReturnValues = [true]; // already healthy + mockState.healthReturnValues = [true]; // already healthy const { spawn } = await import("node:child_process"); @@ -185,11 +210,10 @@ describe("CortexSidecar", () => { }); it("strict version check blocks outdated binary", async () => { - healthReturnValues = [false]; // not running externally + mockState.healthReturnValues = [false]; // not running externally // Override getCortexBinaryVersion to return old version - const locator = await import("../shared/cortex-binary-locator.js"); - vi.mocked(locator.getCortexBinaryVersion).mockReturnValue("0.1.0"); + mockState.getCortexBinaryVersionFn.mockReturnValue("0.1.0"); const sidecar = new CortexSidecar({ host: "127.0.0.1", diff --git a/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts b/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts index 80cfdeed..41882fb7 100644 --- a/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts +++ b/src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts @@ -23,48 +23,27 @@ vi.mock("../../agents/model-fallback.js", () => ({ }) => runWithModelFallbackMock(params), })); -vi.mock("../../agents/pi-embedded.js", async () => { - const actual = await vi.importActual( - "../../agents/pi-embedded.js", - ); - return { - ...actual, - queueEmbeddedPiMessage: vi.fn().mockReturnValue(false), - runEmbeddedPiAgent: (params: unknown) => runEmbeddedPiAgentMock(params), - }; -}); +vi.mock("../../agents/pi-embedded.js", () => ({ + queueEmbeddedPiMessage: vi.fn().mockReturnValue(false), + runEmbeddedPiAgent: (params: unknown) => runEmbeddedPiAgentMock(params), +})); -vi.mock("../../agents/cli-runner.js", async () => { - const actual = await vi.importActual( - "../../agents/cli-runner.js", - ); - return { - ...actual, - runCliAgent: (params: unknown) => runCliAgentMock(params), - }; -}); +vi.mock("../../agents/cli-runner.js", () => ({ + runCliAgent: (params: unknown) => runCliAgentMock(params), +})); -vi.mock("../../runtime.js", async () => { - const actual = await vi.importActual("../../runtime.js"); - return { - ...actual, - defaultRuntime: { - ...actual.defaultRuntime, - log: vi.fn(), - error: (...args: unknown[]) => runtimeErrorMock(...args), - exit: vi.fn(), - }, - }; -}); +vi.mock("../../runtime.js", () => ({ + defaultRuntime: { + log: vi.fn(), + error: (...args: unknown[]) => runtimeErrorMock(...args), + exit: vi.fn(), + }, +})); -vi.mock("./queue.js", async () => { - const actual = await vi.importActual("./queue.js"); - return { - ...actual, - enqueueFollowupRun: vi.fn(), - scheduleFollowupDrain: vi.fn(), - }; -}); +vi.mock("./queue.js", () => ({ + enqueueFollowupRun: vi.fn(), + scheduleFollowupDrain: vi.fn(), +})); import { runReplyAgent } from "./agent-runner.js"; @@ -80,6 +59,13 @@ beforeEach(() => { runWithModelFallbackMock.mockReset(); runtimeErrorMock.mockReset(); + // Provide safe default return values so that tests which don't explicitly + // configure a return value still get a valid-shaped result instead of + // `undefined` (which would cause `runResult.payloads` / `runResult.meta` + // to throw). + runEmbeddedPiAgentMock.mockResolvedValue({ payloads: [], meta: {} }); + runCliAgentMock.mockResolvedValue({ payloads: [], meta: {} }); + // Default: no provider switch; execute the chosen provider+model. runWithModelFallbackMock.mockImplementation( async ({ provider, model, run }: RunWithModelFallbackParams) => ({ diff --git a/src/cron/service.issue-regressions.test.ts b/src/cron/service.issue-regressions.test.ts index ac122840..ba56b476 100644 --- a/src/cron/service.issue-regressions.test.ts +++ b/src/cron/service.issue-regressions.test.ts @@ -800,7 +800,12 @@ describe("Cron issue regressions", () => { }); const timerPromise = onTimer(state); - await new Promise((resolve) => setTimeout(resolve, 20)); + // Poll until both workers have started (real FS I/O in ensureLoaded may + // take more than a fixed 20 ms on slow CI runners). + const pollStart = Date.now(); + while (peakActiveRuns < 2 && Date.now() - pollStart < 5_000) { + await new Promise((resolve) => setTimeout(resolve, 10)); + } expect(peakActiveRuns).toBe(2); diff --git a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts index 00dea6e9..628f9fd3 100644 --- a/src/cron/service.runs-one-shot-main-job-disables-it.test.ts +++ b/src/cron/service.runs-one-shot-main-job-disables-it.test.ts @@ -192,7 +192,9 @@ vi.mock("node:fs/promises", async (importOriginal) => { beforeEach(() => { fsState.entries.clear(); fsState.nowMs = 0; - fsState.fixtureCount = 0; + // Do NOT reset fixtureCount: each test must use a unique storePath so that + // the module-level storeLocks Map in locked.ts does not chain on a still- + // pending lock from the previous test's onTimer() (fire-and-forget). ensureDir(fixturesRoot); }); diff --git a/src/cron/service/store.ts b/src/cron/service/store.ts index d1507086..fd1e2e3b 100644 --- a/src/cron/service/store.ts +++ b/src/cron/service/store.ts @@ -354,11 +354,14 @@ export async function ensureLoaded( ? parseAbsoluteTimeMs(atRaw) : null; if (parsedAtMs !== null) { - sched.at = new Date(parsedAtMs).toISOString(); - if ("atMs" in sched) { - delete sched.atMs; + const canonicalAt = new Date(parsedAtMs).toISOString(); + if (sched.at !== canonicalAt || "atMs" in sched) { + sched.at = canonicalAt; + if ("atMs" in sched) { + delete sched.atMs; + } + mutated = true; } - mutated = true; } const everyMsRaw = sched.everyMs; diff --git a/src/hooks/install.test.ts b/src/hooks/install.test.ts index d2a87554..73babdea 100644 --- a/src/hooks/install.test.ts +++ b/src/hooks/install.test.ts @@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto"; import fs from "node:fs"; import os from "node:os"; import path from "node:path"; +import { fileURLToPath } from "node:url"; import { afterAll, beforeEach, describe, expect, it, vi } from "vitest"; import { expectSingleNpmInstallIgnoreScriptsCall, @@ -12,7 +13,8 @@ import { isAddressInUseError } from "./gmail-watcher.js"; const fixtureRoot = path.join(os.tmpdir(), `mayros-hook-install-${randomUUID()}`); let tempDirIndex = 0; -const fixturesDir = path.resolve(process.cwd(), "test", "fixtures", "hooks-install"); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const fixturesDir = path.resolve(__dirname, "..", "..", "test", "fixtures", "hooks-install"); const zipHooksBuffer = fs.readFileSync(path.join(fixturesDir, "zip-hooks.zip")); const zipTraversalBuffer = fs.readFileSync(path.join(fixturesDir, "zip-traversal.zip")); const tarHooksBuffer = fs.readFileSync(path.join(fixturesDir, "tar-hooks.tar")); diff --git a/src/slack/monitor/events/interactions.test.ts b/src/slack/monitor/events/interactions.test.ts index a3e48c91..2d43fb12 100644 --- a/src/slack/monitor/events/interactions.test.ts +++ b/src/slack/monitor/events/interactions.test.ts @@ -1,10 +1,12 @@ import { describe, expect, it, vi } from "vitest"; import { registerSlackInteractionEvents } from "./interactions.js"; -const enqueueSystemEventMock = vi.fn(); +const { enqueueSystemEventMock } = vi.hoisted(() => ({ + enqueueSystemEventMock: vi.fn(), +})); vi.mock("../../../infra/system-events.js", () => ({ - enqueueSystemEvent: (...args: unknown[]) => enqueueSystemEventMock(...args), + enqueueSystemEvent: enqueueSystemEventMock, })); type RegisteredHandler = (args: { diff --git a/src/telegram/send.test.ts b/src/telegram/send.test.ts index fae89815..27581e38 100644 --- a/src/telegram/send.test.ts +++ b/src/telegram/send.test.ts @@ -1,15 +1,78 @@ import type { Bot } from "grammy"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { - getTelegramSendTestMocks, - importTelegramSendModule, - installTelegramSendTestHooks, -} from "./send.test-harness.js"; import { clearSentMessageCache, recordSentMessage, wasSentByBot } from "./sent-message-cache.js"; -installTelegramSendTestHooks(); +// --------------------------------------------------------------------------- +// Mock setup — vi.hoisted + vi.mock must live in the test file so vitest can +// hoist them above all imports. Placing them in a helper module (the old +// send.test-harness.ts pattern) stopped working in vitest 4.x where mocks +// declared in non-test modules are no longer hoisted/applied. +// --------------------------------------------------------------------------- + +const { botApi, botCtorSpy } = vi.hoisted(() => ({ + botApi: { + deleteMessage: vi.fn(), + editMessageText: vi.fn(), + sendMessage: vi.fn(), + sendPoll: vi.fn(), + sendPhoto: vi.fn(), + sendVoice: vi.fn(), + sendAudio: vi.fn(), + sendVideo: vi.fn(), + sendVideoNote: vi.fn(), + sendAnimation: vi.fn(), + setMessageReaction: vi.fn(), + sendSticker: vi.fn(), + }, + botCtorSpy: vi.fn(), +})); + +const { loadWebMedia } = vi.hoisted(() => ({ + loadWebMedia: vi.fn(), +})); + +const { loadConfig } = vi.hoisted(() => ({ + loadConfig: vi.fn(() => ({})), +})); + +vi.mock("../web/media.js", () => ({ + loadWebMedia, +})); + +vi.mock("grammy", () => ({ + Bot: class { + api = botApi; + catch = vi.fn(); + constructor( + public token: string, + public options?: { + client?: { fetch?: typeof fetch; timeoutSeconds?: number }; + }, + ) { + botCtorSpy(token, options); + } + }, + InputFile: class {}, + HttpError: class extends Error {}, +})); + +vi.mock("../config/config.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + loadConfig, + }; +}); + +beforeEach(() => { + loadConfig.mockReturnValue({}); + loadWebMedia.mockReset(); + botCtorSpy.mockReset(); + for (const fn of Object.values(botApi)) { + fn.mockReset(); + } +}); -const { botApi, botCtorSpy, loadConfig, loadWebMedia } = getTelegramSendTestMocks(); const { buildInlineKeyboard, createForumTopicTelegram, @@ -18,7 +81,7 @@ const { sendMessageTelegram, sendPollTelegram, sendStickerTelegram, -} = await importTelegramSendModule(); +} = await import("./send.js"); async function expectChatNotFoundWithChatId( action: Promise, From 72f44c27359b20a5daf0cd067210dcde3812571e Mon Sep 17 00:00:00 2001 From: It Apilium Date: Mon, 2 Mar 2026 17:40:07 +0100 Subject: [PATCH 19/19] Track test fixture npm-pack-hooks.tgz for CI The *.tgz gitignore rule was excluding this test fixture, causing ENOENT in hooks/install.test.ts on CI. Co-Authored-By: Claude Opus 4.6 --- .gitignore | 1 + test/fixtures/hooks-install/npm-pack-hooks.tgz | Bin 0 -> 897 bytes 2 files changed, 1 insertion(+) create mode 100644 test/fixtures/hooks-install/npm-pack-hooks.tgz diff --git a/.gitignore b/.gitignore index b96f1b14..16df3431 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ USER.md !docs/reference/templates/IDENTITY.md !docs/reference/templates/USER.md *.tgz +!test/fixtures/**/*.tgz .worktrees/ # local tooling diff --git a/test/fixtures/hooks-install/npm-pack-hooks.tgz b/test/fixtures/hooks-install/npm-pack-hooks.tgz new file mode 100644 index 0000000000000000000000000000000000000000..644b874a1659ca4cb70d1ffb74e48c6aae4e9e22 GIT binary patch literal 897 zcmV-{1AhD;iwFR9L7Qm+1MQkmZ__XshYQk#C}%iuvcd%1 zlpPpjlQ9&28lz81^og-Xbwn7UhCwlt1u&tyMoS21cu#*g@O;alGP#rr;gnR(o@8rqVTHr}6C=}gAUm;F5ymDAK$vutBg{)2<5 z@t+tn|18U!iYR#gqyAST4^;O&$4<8m`F$9aCh_#e~Rs<{gOxAa8$&u;WzoPR=Re*aOb!}y;EL&fHnQ0mGf-tYFh2UgYM z$FAd5eBt?(UB}t?l>5q|aJ{Z$%VJo?Dv@VKrIh+m8I`GjP}FL;TXk#^R#ZNooItMs zbH@H3c3viJB%l9fl$wzLTmb(sG_(Gn{(B(#{I66|2L7K1G5)Vn6JwbFU4EkckJK%j zHj>Z(G95FR|ILHR{#SP*c~7&AeCg$I zsg#3%0Mt>`_vMc8+HSY+cOAQqTDCypSxfl5!+l;y!!wKjLT1?ySN~