@intent-systems/nexus 2026.1.5-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +222 -0
- package/LICENSE +21 -0
- package/README-header.png +0 -0
- package/README.md +462 -0
- package/dist/agents/agent-paths.js +16 -0
- package/dist/agents/agent-scope.js +44 -0
- package/dist/agents/auth-profiles.js +626 -0
- package/dist/agents/bash-process-registry.js +126 -0
- package/dist/agents/bash-tools.js +838 -0
- package/dist/agents/chutes-oauth.js +47 -0
- package/dist/agents/clawdbot-tools.js +62 -0
- package/dist/agents/context.js +34 -0
- package/dist/agents/defaults.js +6 -0
- package/dist/agents/memory-search.js +80 -0
- package/dist/agents/model-auth.js +115 -0
- package/dist/agents/model-catalog.js +55 -0
- package/dist/agents/model-fallback.js +210 -0
- package/dist/agents/model-scan.js +263 -0
- package/dist/agents/model-selection.js +152 -0
- package/dist/agents/models-config.js +171 -0
- package/dist/agents/nexus-tools.js +46 -0
- package/dist/agents/pi-embedded-block-chunker.js +188 -0
- package/dist/agents/pi-embedded-helpers.js +139 -0
- package/dist/agents/pi-embedded-runner.js +932 -0
- package/dist/agents/pi-embedded-subscribe.js +541 -0
- package/dist/agents/pi-embedded-utils.js +20 -0
- package/dist/agents/pi-embedded.js +1 -0
- package/dist/agents/pi-extensions/compaction-safeguard.js +140 -0
- package/dist/agents/pi-tool-definition-adapter.js +17 -0
- package/dist/agents/pi-tools.js +510 -0
- package/dist/agents/pi-tools.schema.js +358 -0
- package/dist/agents/sandbox-paths.js +68 -0
- package/dist/agents/sandbox.js +667 -0
- package/dist/agents/shell-utils.js +53 -0
- package/dist/agents/skill-runner.js +224 -0
- package/dist/agents/skill-state.js +164 -0
- package/dist/agents/skill-tools.js +191 -0
- package/dist/agents/skill-usage.js +43 -0
- package/dist/agents/skills-install.js +244 -0
- package/dist/agents/skills-status.js +157 -0
- package/dist/agents/skills.js +472 -0
- package/dist/agents/subagent-registry.js +321 -0
- package/dist/agents/subagent-registry.store.js +47 -0
- package/dist/agents/system-prompt.js +179 -0
- package/dist/agents/timeout.js +26 -0
- package/dist/agents/tool-display.js +155 -0
- package/dist/agents/tool-display.json +236 -0
- package/dist/agents/tool-images.js +138 -0
- package/dist/agents/tool-policy.js +87 -0
- package/dist/agents/tools/agent-step.js +41 -0
- package/dist/agents/tools/browser-tool.js +295 -0
- package/dist/agents/tools/canvas-tool.js +193 -0
- package/dist/agents/tools/common.js +88 -0
- package/dist/agents/tools/cron-tool.js +141 -0
- package/dist/agents/tools/discord-actions-guild.js +186 -0
- package/dist/agents/tools/discord-actions-messaging.js +313 -0
- package/dist/agents/tools/discord-actions-moderation.js +70 -0
- package/dist/agents/tools/discord-actions.js +56 -0
- package/dist/agents/tools/discord-schema.js +199 -0
- package/dist/agents/tools/discord-tool.js +16 -0
- package/dist/agents/tools/gateway-tool.js +46 -0
- package/dist/agents/tools/gateway.js +28 -0
- package/dist/agents/tools/image-tool.js +140 -0
- package/dist/agents/tools/memory-tool.js +92 -0
- package/dist/agents/tools/nodes-tool.js +413 -0
- package/dist/agents/tools/nodes-utils.js +92 -0
- package/dist/agents/tools/sessions-announce-target.js +35 -0
- package/dist/agents/tools/sessions-helpers.js +88 -0
- package/dist/agents/tools/sessions-history-tool.js +137 -0
- package/dist/agents/tools/sessions-list-tool.js +196 -0
- package/dist/agents/tools/sessions-send-helpers.js +103 -0
- package/dist/agents/tools/sessions-send-tool.js +371 -0
- package/dist/agents/tools/sessions-spawn-tool.js +319 -0
- package/dist/agents/tools/slack-actions.js +129 -0
- package/dist/agents/tools/slack-schema.js +59 -0
- package/dist/agents/tools/slack-tool.js +16 -0
- package/dist/agents/tools/telegram-actions.js +159 -0
- package/dist/agents/tools/telegram-schema.js +28 -0
- package/dist/agents/tools/telegram-tool.js +16 -0
- package/dist/agents/tools/whatsapp-login-tool.js +63 -0
- package/dist/agents/usage.js +58 -0
- package/dist/agents/workspace.js +264 -0
- package/dist/auto-reply/chunk.js +177 -0
- package/dist/auto-reply/command-auth.js +44 -0
- package/dist/auto-reply/command-detection.js +22 -0
- package/dist/auto-reply/envelope.js +30 -0
- package/dist/auto-reply/group-activation.js +20 -0
- package/dist/auto-reply/heartbeat.js +58 -0
- package/dist/auto-reply/model.js +22 -0
- package/dist/auto-reply/reply/abort.js +14 -0
- package/dist/auto-reply/reply/agent-runner.js +426 -0
- package/dist/auto-reply/reply/bash-command.js +314 -0
- package/dist/auto-reply/reply/block-streaming.js +34 -0
- package/dist/auto-reply/reply/body.js +29 -0
- package/dist/auto-reply/reply/commands.js +332 -0
- package/dist/auto-reply/reply/directive-handling.js +626 -0
- package/dist/auto-reply/reply/directives.js +59 -0
- package/dist/auto-reply/reply/dispatch-from-config.js +23 -0
- package/dist/auto-reply/reply/followup-runner.js +181 -0
- package/dist/auto-reply/reply/groups.js +152 -0
- package/dist/auto-reply/reply/mentions.js +64 -0
- package/dist/auto-reply/reply/model-selection.js +209 -0
- package/dist/auto-reply/reply/queue.js +399 -0
- package/dist/auto-reply/reply/reply-dispatcher.js +68 -0
- package/dist/auto-reply/reply/reply-tags.js +26 -0
- package/dist/auto-reply/reply/session-updates.js +103 -0
- package/dist/auto-reply/reply/session.js +169 -0
- package/dist/auto-reply/reply/typing.js +125 -0
- package/dist/auto-reply/reply.js +655 -0
- package/dist/auto-reply/send-policy.js +28 -0
- package/dist/auto-reply/status.js +197 -0
- package/dist/auto-reply/templating.js +9 -0
- package/dist/auto-reply/thinking.js +49 -0
- package/dist/auto-reply/tokens.js +2 -0
- package/dist/auto-reply/tool-meta.js +74 -0
- package/dist/auto-reply/transcription.js +57 -0
- package/dist/auto-reply/types.js +1 -0
- package/dist/browser/bridge-server.js +37 -0
- package/dist/browser/cdp.js +382 -0
- package/dist/browser/chrome.js +432 -0
- package/dist/browser/client-actions-core.js +67 -0
- package/dist/browser/client-actions-observe.js +24 -0
- package/dist/browser/client-actions-types.js +1 -0
- package/dist/browser/client-actions.js +3 -0
- package/dist/browser/client-fetch.js +43 -0
- package/dist/browser/client.js +105 -0
- package/dist/browser/config.js +155 -0
- package/dist/browser/constants.js +5 -0
- package/dist/browser/profiles-service.js +124 -0
- package/dist/browser/profiles.js +96 -0
- package/dist/browser/pw-ai.js +2 -0
- package/dist/browser/pw-session.js +144 -0
- package/dist/browser/pw-tools-core.js +363 -0
- package/dist/browser/routes/agent.js +535 -0
- package/dist/browser/routes/basic.js +155 -0
- package/dist/browser/routes/index.js +8 -0
- package/dist/browser/routes/tabs.js +105 -0
- package/dist/browser/routes/utils.js +62 -0
- package/dist/browser/screenshot.js +40 -0
- package/dist/browser/server-context.js +377 -0
- package/dist/browser/server.js +81 -0
- package/dist/browser/target-id.js +18 -0
- package/dist/browser/trash.js +21 -0
- package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
- package/dist/canvas-host/a2ui/index.html +246 -0
- package/dist/canvas-host/a2ui.js +187 -0
- package/dist/canvas-host/server.js +382 -0
- package/dist/channel-web.js +8 -0
- package/dist/cli/browser-cli-actions-input.js +459 -0
- package/dist/cli/browser-cli-actions-observe.js +56 -0
- package/dist/cli/browser-cli-examples.js +31 -0
- package/dist/cli/browser-cli-inspect.js +97 -0
- package/dist/cli/browser-cli-manage.js +286 -0
- package/dist/cli/browser-cli-shared.js +1 -0
- package/dist/cli/browser-cli.js +26 -0
- package/dist/cli/canvas-cli.js +416 -0
- package/dist/cli/cloud-cli.js +336 -0
- package/dist/cli/credential-cli.js +227 -0
- package/dist/cli/cron-cli.js +454 -0
- package/dist/cli/deps.js +17 -0
- package/dist/cli/dns-cli.js +180 -0
- package/dist/cli/gateway-cli.js +665 -0
- package/dist/cli/gateway-rpc.js +20 -0
- package/dist/cli/hooks-cli.js +135 -0
- package/dist/cli/memory-cli.js +101 -0
- package/dist/cli/models-cli.js +248 -0
- package/dist/cli/nodes-camera.js +57 -0
- package/dist/cli/nodes-canvas.js +26 -0
- package/dist/cli/nodes-cli.js +946 -0
- package/dist/cli/nodes-screen.js +37 -0
- package/dist/cli/pairing-cli.js +100 -0
- package/dist/cli/parse-duration.js +20 -0
- package/dist/cli/plugins-cli.js +158 -0
- package/dist/cli/ports.js +97 -0
- package/dist/cli/profile.js +81 -0
- package/dist/cli/program.js +162 -0
- package/dist/cli/prompt.js +19 -0
- package/dist/cli/run-main.js +48 -0
- package/dist/cli/skills-cli.js +132 -0
- package/dist/cli/skills-hub-cli.js +1093 -0
- package/dist/cli/telegram-cli.js +56 -0
- package/dist/cli/tool-connector-cli.js +118 -0
- package/dist/cli/tui-cli.js +35 -0
- package/dist/cli/upstream-sync-cli.js +2833 -0
- package/dist/cli/usage-cli.js +24 -0
- package/dist/cli/wait.js +8 -0
- package/dist/commands/agent-via-gateway.js +115 -0
- package/dist/commands/agent.js +665 -0
- package/dist/commands/antigravity-oauth.js +327 -0
- package/dist/commands/auth-choice-options.js +80 -0
- package/dist/commands/auth-choice.js +134 -0
- package/dist/commands/auth-token.js +31 -0
- package/dist/commands/bootstrap-preset.js +214 -0
- package/dist/commands/capabilities.js +36 -0
- package/dist/commands/chutes-oauth.js +144 -0
- package/dist/commands/claude-md.js +137 -0
- package/dist/commands/config-view.js +11 -0
- package/dist/commands/configure.js +648 -0
- package/dist/commands/credential.js +236 -0
- package/dist/commands/cursor-rules.js +230 -0
- package/dist/commands/doctor-state-migrations.js +358 -0
- package/dist/commands/doctor-ui.js +113 -0
- package/dist/commands/doctor.js +673 -0
- package/dist/commands/health.js +112 -0
- package/dist/commands/identity.js +54 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/models/aliases.js +85 -0
- package/dist/commands/models/fallbacks.js +123 -0
- package/dist/commands/models/image-fallbacks.js +123 -0
- package/dist/commands/models/list.js +347 -0
- package/dist/commands/models/scan.js +271 -0
- package/dist/commands/models/set-image.js +27 -0
- package/dist/commands/models/set.js +27 -0
- package/dist/commands/models/shared.js +73 -0
- package/dist/commands/models.js +7 -0
- package/dist/commands/onboard-auth.js +101 -0
- package/dist/commands/onboard-channels.js +814 -0
- package/dist/commands/onboard-eve-identity.js +98 -0
- package/dist/commands/onboard-github.js +153 -0
- package/dist/commands/onboard-helpers.js +303 -0
- package/dist/commands/onboard-interactive.js +17 -0
- package/dist/commands/onboard-non-interactive.js +228 -0
- package/dist/commands/onboard-providers.js +829 -0
- package/dist/commands/onboard-quickstart.js +185 -0
- package/dist/commands/onboard-remote.js +120 -0
- package/dist/commands/onboard-skills.js +148 -0
- package/dist/commands/onboard-types.js +1 -0
- package/dist/commands/onboard.js +19 -0
- package/dist/commands/openai-codex-model-default.js +38 -0
- package/dist/commands/poll.js +64 -0
- package/dist/commands/quest.js +27 -0
- package/dist/commands/reset.js +61 -0
- package/dist/commands/send.js +124 -0
- package/dist/commands/sessions-ingest.js +359 -0
- package/dist/commands/sessions.js +212 -0
- package/dist/commands/setup.js +59 -0
- package/dist/commands/signal-install.js +135 -0
- package/dist/commands/skills-manifest.js +235 -0
- package/dist/commands/status.js +139 -0
- package/dist/commands/suggestions.js +54 -0
- package/dist/commands/systemd-linger.js +71 -0
- package/dist/commands/update.js +16 -0
- package/dist/commands/usage-upload.js +27 -0
- package/dist/config/config.js +6 -0
- package/dist/config/defaults.js +140 -0
- package/dist/config/group-policy.js +49 -0
- package/dist/config/includes.js +183 -0
- package/dist/config/io.js +188 -0
- package/dist/config/legacy-migrate.js +13 -0
- package/dist/config/legacy.js +425 -0
- package/dist/config/paths.js +82 -0
- package/dist/config/port-defaults.js +32 -0
- package/dist/config/schema.js +173 -0
- package/dist/config/sessions.js +611 -0
- package/dist/config/talk.js +31 -0
- package/dist/config/types.js +1 -0
- package/dist/config/validation.js +29 -0
- package/dist/config/zod-schema.js +1110 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js +2393 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js.map +1 -0
- package/dist/control-ui/assets/index-g06q5Xc3.css +1 -0
- package/dist/control-ui/favicon.ico +0 -0
- package/dist/control-ui/index.html +16 -0
- package/dist/cron/isolated-agent.js +529 -0
- package/dist/cron/normalize.js +73 -0
- package/dist/cron/parse.js +24 -0
- package/dist/cron/run-log.js +72 -0
- package/dist/cron/schedule.js +24 -0
- package/dist/cron/service.js +471 -0
- package/dist/cron/store.js +43 -0
- package/dist/cron/types.js +1 -0
- package/dist/daemon/constants.js +10 -0
- package/dist/daemon/launchd.js +295 -0
- package/dist/daemon/legacy.js +63 -0
- package/dist/daemon/program-args.js +141 -0
- package/dist/daemon/schtasks.js +269 -0
- package/dist/daemon/service.js +69 -0
- package/dist/daemon/systemd.js +332 -0
- package/dist/discord/index.js +2 -0
- package/dist/discord/monitor.js +1089 -0
- package/dist/discord/probe.js +54 -0
- package/dist/discord/send.js +652 -0
- package/dist/discord/token.js +8 -0
- package/dist/entry.js +16 -0
- package/dist/gateway/auth.js +121 -0
- package/dist/gateway/call.js +103 -0
- package/dist/gateway/chat-attachments.js +41 -0
- package/dist/gateway/client.js +180 -0
- package/dist/gateway/config-reload.js +274 -0
- package/dist/gateway/control-ui.js +184 -0
- package/dist/gateway/hooks-mapping.js +282 -0
- package/dist/gateway/hooks.js +168 -0
- package/dist/gateway/net.js +29 -0
- package/dist/gateway/protocol/index.js +62 -0
- package/dist/gateway/protocol/schema.js +577 -0
- package/dist/gateway/server-bridge-subscriptions.js +93 -0
- package/dist/gateway/server-bridge.js +1066 -0
- package/dist/gateway/server-browser.js +11 -0
- package/dist/gateway/server-channels.js +680 -0
- package/dist/gateway/server-chat.js +159 -0
- package/dist/gateway/server-constants.js +8 -0
- package/dist/gateway/server-discovery.js +62 -0
- package/dist/gateway/server-http.js +165 -0
- package/dist/gateway/server-methods/agent-job.js +114 -0
- package/dist/gateway/server-methods/agent.js +254 -0
- package/dist/gateway/server-methods/channels.js +239 -0
- package/dist/gateway/server-methods/chat.js +207 -0
- package/dist/gateway/server-methods/config.js +50 -0
- package/dist/gateway/server-methods/connect.js +6 -0
- package/dist/gateway/server-methods/cron.js +89 -0
- package/dist/gateway/server-methods/health.js +28 -0
- package/dist/gateway/server-methods/models.js +16 -0
- package/dist/gateway/server-methods/nodes.js +294 -0
- package/dist/gateway/server-methods/providers.js +257 -0
- package/dist/gateway/server-methods/send.js +254 -0
- package/dist/gateway/server-methods/sessions.js +382 -0
- package/dist/gateway/server-methods/skills.js +83 -0
- package/dist/gateway/server-methods/system.js +118 -0
- package/dist/gateway/server-methods/talk.js +22 -0
- package/dist/gateway/server-methods/types.js +1 -0
- package/dist/gateway/server-methods/voicewake.js +30 -0
- package/dist/gateway/server-methods/web.js +81 -0
- package/dist/gateway/server-methods/wizard.js +100 -0
- package/dist/gateway/server-methods.js +53 -0
- package/dist/gateway/server-providers.js +687 -0
- package/dist/gateway/server-shared.js +1 -0
- package/dist/gateway/server-utils.js +35 -0
- package/dist/gateway/server.js +1478 -0
- package/dist/gateway/session-utils.js +355 -0
- package/dist/gateway/ws-log.js +343 -0
- package/dist/gateway/ws-logging.js +8 -0
- package/dist/globals.js +41 -0
- package/dist/hooks/gmail-ops.js +236 -0
- package/dist/hooks/gmail-setup-utils.js +278 -0
- package/dist/hooks/gmail-watcher.js +190 -0
- package/dist/hooks/gmail.js +177 -0
- package/dist/imessage/client.js +165 -0
- package/dist/imessage/index.js +3 -0
- package/dist/imessage/monitor.js +365 -0
- package/dist/imessage/probe.js +26 -0
- package/dist/imessage/send.js +83 -0
- package/dist/imessage/targets.js +176 -0
- package/dist/index.js +55 -0
- package/dist/infra/agent-events.js +46 -0
- package/dist/infra/binaries.js +9 -0
- package/dist/infra/bonjour-discovery.js +163 -0
- package/dist/infra/bonjour.js +200 -0
- package/dist/infra/bridge/server.js +564 -0
- package/dist/infra/canvas-host-url.js +54 -0
- package/dist/infra/channel-summary.js +78 -0
- package/dist/infra/control-ui-assets.js +112 -0
- package/dist/infra/dotenv.js +15 -0
- package/dist/infra/env.js +8 -0
- package/dist/infra/errors.js +28 -0
- package/dist/infra/event-log.js +251 -0
- package/dist/infra/gateway-lock.js +8 -0
- package/dist/infra/git-commit.js +91 -0
- package/dist/infra/heartbeat-events.js +21 -0
- package/dist/infra/heartbeat-runner.js +458 -0
- package/dist/infra/heartbeat-wake.js +61 -0
- package/dist/infra/is-main.js +37 -0
- package/dist/infra/json-file.js +21 -0
- package/dist/infra/machine-name.js +40 -0
- package/dist/infra/nexus-root.js +56 -0
- package/dist/infra/node-pairing.js +212 -0
- package/dist/infra/path-env.js +93 -0
- package/dist/infra/ports.js +87 -0
- package/dist/infra/provider-summary.js +80 -0
- package/dist/infra/provider-usage.auth.js +189 -0
- package/dist/infra/provider-usage.fetch.claude.js +129 -0
- package/dist/infra/provider-usage.fetch.codex.js +62 -0
- package/dist/infra/provider-usage.fetch.copilot.js +42 -0
- package/dist/infra/provider-usage.fetch.gemini.js +57 -0
- package/dist/infra/provider-usage.fetch.js +6 -0
- package/dist/infra/provider-usage.fetch.minimax.js +214 -0
- package/dist/infra/provider-usage.fetch.shared.js +11 -0
- package/dist/infra/provider-usage.fetch.zai.js +62 -0
- package/dist/infra/provider-usage.format.js +77 -0
- package/dist/infra/provider-usage.js +145 -0
- package/dist/infra/provider-usage.load.js +54 -0
- package/dist/infra/provider-usage.shared.js +19 -0
- package/dist/infra/provider-usage.types.js +1 -0
- package/dist/infra/restart.js +29 -0
- package/dist/infra/retry.js +16 -0
- package/dist/infra/runtime-guard.js +59 -0
- package/dist/infra/shell-env.js +88 -0
- package/dist/infra/system-events.js +71 -0
- package/dist/infra/system-presence.js +217 -0
- package/dist/infra/tailnet.js +46 -0
- package/dist/infra/tailscale.js +149 -0
- package/dist/infra/unhandled-rejections.js +19 -0
- package/dist/infra/usage-suggestions.js +241 -0
- package/dist/infra/usage-upload.js +290 -0
- package/dist/infra/voicewake.js +78 -0
- package/dist/infra/widearea-dns.js +123 -0
- package/dist/infra/ws.js +13 -0
- package/dist/logger.js +52 -0
- package/dist/logging.js +506 -0
- package/dist/macos/gateway-daemon.js +145 -0
- package/dist/macos/relay.js +49 -0
- package/dist/media/constants.js +33 -0
- package/dist/media/host.js +42 -0
- package/dist/media/image-ops.js +119 -0
- package/dist/media/mime.js +123 -0
- package/dist/media/parse.js +83 -0
- package/dist/media/server.js +64 -0
- package/dist/media/store.js +139 -0
- package/dist/polls.js +43 -0
- package/dist/process/command-queue.js +97 -0
- package/dist/process/exec.js +75 -0
- package/dist/provider-web.js +8 -0
- package/dist/providers/github-copilot-auth.js +123 -0
- package/dist/providers/github-copilot-models.js +35 -0
- package/dist/providers/github-copilot-token.js +11 -0
- package/dist/providers/location.js +48 -0
- package/dist/providers/web/index.js +2 -0
- package/dist/runtime.js +8 -0
- package/dist/sessions/level-overrides.js +9 -0
- package/dist/sessions/send-policy.js +68 -0
- package/dist/signal/client.js +134 -0
- package/dist/signal/daemon.js +69 -0
- package/dist/signal/index.js +3 -0
- package/dist/signal/monitor.js +411 -0
- package/dist/signal/probe.js +46 -0
- package/dist/signal/send.js +91 -0
- package/dist/slack/actions.js +97 -0
- package/dist/slack/index.js +5 -0
- package/dist/slack/monitor.js +1270 -0
- package/dist/slack/probe.js +47 -0
- package/dist/slack/send.js +131 -0
- package/dist/slack/token.js +10 -0
- package/dist/telegram/allowed-updates.js +8 -0
- package/dist/telegram/bot.js +724 -0
- package/dist/telegram/download.js +34 -0
- package/dist/telegram/index.js +4 -0
- package/dist/telegram/monitor.js +47 -0
- package/dist/telegram/pairing-store.js +77 -0
- package/dist/telegram/probe.js +63 -0
- package/dist/telegram/proxy.js +9 -0
- package/dist/telegram/reaction-level.js +45 -0
- package/dist/telegram/send.js +151 -0
- package/dist/telegram/sent-message-cache.js +65 -0
- package/dist/telegram/token.js +30 -0
- package/dist/telegram/update-offset-store.js +61 -0
- package/dist/telegram/webhook-set.js +12 -0
- package/dist/telegram/webhook.js +56 -0
- package/dist/tui/commands.js +87 -0
- package/dist/tui/components/assistant-message.js +16 -0
- package/dist/tui/components/chat-log.js +92 -0
- package/dist/tui/components/custom-editor.js +55 -0
- package/dist/tui/components/selectors.js +8 -0
- package/dist/tui/components/tool-execution.js +111 -0
- package/dist/tui/components/user-message.js +17 -0
- package/dist/tui/gateway-chat.js +140 -0
- package/dist/tui/theme/theme.js +80 -0
- package/dist/tui/tui.js +708 -0
- package/dist/utils.js +153 -0
- package/dist/version.js +18 -0
- package/dist/web/accounts.js +86 -0
- package/dist/web/active-listener.js +25 -0
- package/dist/web/auto-reply.js +1256 -0
- package/dist/web/inbound.js +649 -0
- package/dist/web/login-qr.js +230 -0
- package/dist/web/login.js +71 -0
- package/dist/web/media.js +175 -0
- package/dist/web/outbound.js +102 -0
- package/dist/web/qr-image.js +97 -0
- package/dist/web/reconnect.js +60 -0
- package/dist/web/session.js +370 -0
- package/dist/wizard/clack-prompter.js +56 -0
- package/dist/wizard/onboarding.js +620 -0
- package/dist/wizard/prompts.js +6 -0
- package/dist/wizard/session.js +203 -0
- package/docs/AGENTS.default.md +116 -0
- package/docs/CAPABILITIES.md +444 -0
- package/docs/CNAME +1 -0
- package/docs/NEXUS_CORE_REWRITE_SPEC.md +226 -0
- package/docs/RELEASING.md +69 -0
- package/docs/_config.yml +53 -0
- package/docs/_layouts/default.html +145 -0
- package/docs/agent-assisted-install.md +95 -0
- package/docs/agent-loop.md +61 -0
- package/docs/agent-send.md +21 -0
- package/docs/agent.md +108 -0
- package/docs/android.md +133 -0
- package/docs/architecture.md +114 -0
- package/docs/assets/markdown.css +133 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/terminal.css +470 -0
- package/docs/assets/theme.js +55 -0
- package/docs/audio.md +48 -0
- package/docs/automation/nexus-sync.md +371 -0
- package/docs/background-process.md +74 -0
- package/docs/bash.md +32 -0
- package/docs/bedrock.md +71 -0
- package/docs/bonjour.md +159 -0
- package/docs/browser-linux-troubleshooting.md +114 -0
- package/docs/browser.md +293 -0
- package/docs/bun.md +56 -0
- package/docs/camera.md +152 -0
- package/docs/clawd.md +212 -0
- package/docs/concepts/usage-tracking.md +29 -0
- package/docs/configuration.md +1666 -0
- package/docs/control-ui.md +83 -0
- package/docs/cron.md +385 -0
- package/docs/dashboard.md +17 -0
- package/docs/device-models.md +46 -0
- package/docs/discord.md +308 -0
- package/docs/discovery.md +112 -0
- package/docs/docker.md +258 -0
- package/docs/docs.json +105 -0
- package/docs/doctor.md +68 -0
- package/docs/elevated.md +31 -0
- package/docs/faq.md +736 -0
- package/docs/feature-inventory/overview.md +141 -0
- package/docs/feature-inventory/rollout-checklist.md +53 -0
- package/docs/feature-inventory/test-matrix.md +87 -0
- package/docs/feature-inventory.md +9 -0
- package/docs/gateway/configuration-examples.md +221 -0
- package/docs/gateway/configuration.md +172 -0
- package/docs/gateway/cron.md +61 -0
- package/docs/gateway/heartbeat.md +207 -0
- package/docs/gateway/pairing.md +109 -0
- package/docs/gateway-lock.md +28 -0
- package/docs/gateway.md +227 -0
- package/docs/gmail-pubsub.md +191 -0
- package/docs/grammy.md +27 -0
- package/docs/group-messages.md +73 -0
- package/docs/groups.md +130 -0
- package/docs/health.md +28 -0
- package/docs/heartbeat.md +73 -0
- package/docs/home-userspace.md +277 -0
- package/docs/hubs.md +148 -0
- package/docs/images.md +51 -0
- package/docs/imessage.md +94 -0
- package/docs/index.md +196 -0
- package/docs/ios.md +372 -0
- package/docs/linux.md +11 -0
- package/docs/location-command.md +95 -0
- package/docs/location.md +46 -0
- package/docs/logging.md +110 -0
- package/docs/lore.md +131 -0
- package/docs/mac/bun.md +133 -0
- package/docs/mac/canvas.md +161 -0
- package/docs/mac/child-process.md +72 -0
- package/docs/mac/dev-setup.md +81 -0
- package/docs/mac/health.md +28 -0
- package/docs/mac/icon.md +26 -0
- package/docs/mac/logging.md +51 -0
- package/docs/mac/menu-bar.md +69 -0
- package/docs/mac/peekaboo.md +170 -0
- package/docs/mac/permissions.md +40 -0
- package/docs/mac/release.md +76 -0
- package/docs/mac/remote.md +57 -0
- package/docs/mac/signing.md +41 -0
- package/docs/mac/skills.md +27 -0
- package/docs/mac/voice-overlay.md +52 -0
- package/docs/mac/voicewake.md +56 -0
- package/docs/mac/webchat.md +27 -0
- package/docs/mac/xpc.md +40 -0
- package/docs/macos.md +104 -0
- package/docs/model-failover.md +75 -0
- package/docs/models.md +91 -0
- package/docs/multi-agent.md +74 -0
- package/docs/nix.md +95 -0
- package/docs/nodes.md +157 -0
- package/docs/onboarding-config-protocol.md +34 -0
- package/docs/onboarding.md +189 -0
- package/docs/pairing.md +85 -0
- package/docs/plans/cron-add-hardening.md +72 -0
- package/docs/plans/group-policy-hardening.md +121 -0
- package/docs/poll.md +52 -0
- package/docs/prereqs.md +67 -0
- package/docs/presence.md +133 -0
- package/docs/proposals/model-config.md +147 -0
- package/docs/provider-routing.md +25 -0
- package/docs/queue.md +78 -0
- package/docs/reference/templates/AGENTS.md +164 -0
- package/docs/remote-gateway-readme.md +153 -0
- package/docs/remote.md +61 -0
- package/docs/research/memory.md +227 -0
- package/docs/rpc.md +35 -0
- package/docs/security.md +200 -0
- package/docs/session-ingestion.md +119 -0
- package/docs/session-tool.md +154 -0
- package/docs/session.md +85 -0
- package/docs/sessions.md +8 -0
- package/docs/setup.md +131 -0
- package/docs/showcase.md +37 -0
- package/docs/signal.md +122 -0
- package/docs/skills-config.md +58 -0
- package/docs/skills.md +153 -0
- package/docs/slack.md +221 -0
- package/docs/subagents.md +72 -0
- package/docs/tailscale.md +71 -0
- package/docs/talk.md +79 -0
- package/docs/telegram.md +96 -0
- package/docs/templates/AGENTS.md +286 -0
- package/docs/templates/BOOTSTRAP.md +35 -0
- package/docs/templates/IDENTITY.md +17 -0
- package/docs/templates/PROFILE.md +14 -0
- package/docs/templates/SOUL.md +41 -0
- package/docs/templates/TOOLS.md +41 -0
- package/docs/templates/USER.md +8 -0
- package/docs/test.md +43 -0
- package/docs/testing-onboarding-quickstart.md +76 -0
- package/docs/testing-philosophy.md +211 -0
- package/docs/thinking.md +46 -0
- package/docs/timezone.md +40 -0
- package/docs/tools.md +346 -0
- package/docs/troubleshooting.md +257 -0
- package/docs/tui.md +71 -0
- package/docs/typebox.md +42 -0
- package/docs/updating.md +138 -0
- package/docs/usage-cloud-aggregation-spec.md +133 -0
- package/docs/usage-suggestions-pipeline.md +126 -0
- package/docs/voicewake.md +61 -0
- package/docs/web.md +115 -0
- package/docs/webchat.md +34 -0
- package/docs/webhook.md +132 -0
- package/docs/whatsapp-clawd.jpg +0 -0
- package/docs/whatsapp.md +170 -0
- package/docs/windows.md +11 -0
- package/docs/wizard.md +167 -0
- package/package.json +209 -0
- package/skills/1password/SKILL.md +54 -0
- package/skills/1password/docs/setup.md +85 -0
- package/skills/1password/docs/troubleshooting.md +63 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/agent-browser/SKILL.md +450 -0
- package/skills/agent-browser/docs/browser-use-eval.md +95 -0
- package/skills/agent-browser/docs/first-tests.md +261 -0
- package/skills/agent-browser/docs/wordle-nyt-eval.js +32 -0
- package/skills/aix/SKILL.md +93 -0
- package/skills/aix/docs/embeddings.md +40 -0
- package/skills/aix/docs/setup.md +58 -0
- package/skills/aix/docs/troubleshooting.md +41 -0
- package/skills/aix/references/sql.md +48 -0
- package/skills/apple-notes/SKILL.md +50 -0
- package/skills/apple-reminders/SKILL.md +67 -0
- package/skills/bear-notes/SKILL.md +79 -0
- package/skills/bird/SKILL.md +32 -0
- package/skills/bird/docs/auth.md +31 -0
- package/skills/bird/docs/troubleshooting.md +31 -0
- package/skills/blogwatcher/SKILL.md +46 -0
- package/skills/blucli/SKILL.md +27 -0
- package/skills/brave-search/SKILL.md +36 -0
- package/skills/brave-search/docs/setup.md +40 -0
- package/skills/brave-search/docs/troubleshooting.md +37 -0
- package/skills/brave-search/docs/usage.md +28 -0
- package/skills/brave-search/scripts/content.mjs +53 -0
- package/skills/brave-search/scripts/search.mjs +79 -0
- package/skills/browser-use-agent-sdk/SKILL.md +90 -0
- package/skills/camsnap/SKILL.md +25 -0
- package/skills/clawdhub/SKILL.md +53 -0
- package/skills/coding-agent/SKILL.md +274 -0
- package/skills/comms/SKILL.md +249 -0
- package/skills/comms/docs/adapters.md +54 -0
- package/skills/comms/docs/setup.md +56 -0
- package/skills/comms/docs/troubleshooting.md +44 -0
- package/skills/comms/references/schema.md +49 -0
- package/skills/computer-use/SKILL.md +204 -0
- package/skills/computer-use/docs/open-interpreter.md +26 -0
- package/skills/computer-use/docs/peekaboo.md +26 -0
- package/skills/computer-use/docs/setup.md +47 -0
- package/skills/computer-use/docs/troubleshooting.md +33 -0
- package/skills/discord/SKILL.md +370 -0
- package/skills/eightctl/SKILL.md +29 -0
- package/skills/eve/SKILL.md +215 -0
- package/skills/eve/docs/dual-account.md +84 -0
- package/skills/eve/docs/intelligence.md +58 -0
- package/skills/eve/docs/setup.md +60 -0
- package/skills/eve/docs/troubleshooting.md +54 -0
- package/skills/eve/scripts/setup-dual-account.sh +125 -0
- package/skills/filesystem/SKILL.md +217 -0
- package/skills/food-order/SKILL.md +41 -0
- package/skills/gemini/SKILL.md +23 -0
- package/skills/gh/SKILL.md +22 -0
- package/skills/gh/docs/usage.md +41 -0
- package/skills/gifgrep/SKILL.md +47 -0
- package/skills/github/SKILL.md +26 -0
- package/skills/github/docs/setup.md +21 -0
- package/skills/github/docs/troubleshooting.md +24 -0
- package/skills/gog/SKILL.md +104 -0
- package/skills/gog/docs/portability.md +94 -0
- package/skills/gog/docs/setup.md +76 -0
- package/skills/gog/docs/troubleshooting.md +94 -0
- package/skills/gog/scripts/cdp/README.md +90 -0
- package/skills/gog/scripts/cdp/add_test_users.py +69 -0
- package/skills/gog/scripts/cdp/auth_add_accounts.py +209 -0
- package/skills/gog/scripts/cdp/auth_add_accounts_manual.py +206 -0
- package/skills/gog/scripts/cdp/create_oauth_client.py +165 -0
- package/skills/gog/scripts/cdp/launch_cdp_chrome.sh +58 -0
- package/skills/google-oauth/SKILL.md +94 -0
- package/skills/goplaces/SKILL.md +30 -0
- package/skills/imsg/SKILL.md +25 -0
- package/skills/json-render/SKILL.md +154 -0
- package/skills/json-render/assets/components/README.md +21 -0
- package/skills/json-render/assets/components/catalog.ts +78 -0
- package/skills/json-render/assets/components/registry.tsx +172 -0
- package/skills/json-render/assets/demo/App.css +397 -0
- package/skills/json-render/assets/demo/App.tsx +897 -0
- package/skills/json-render/assets/demo/README.md +22 -0
- package/skills/json-render/assets/demo/catalog.ts +78 -0
- package/skills/json-render/assets/demo/data/nexus-core.json +31 -0
- package/skills/json-render/assets/demo/index.css +27 -0
- package/skills/json-render/assets/demo/registry.tsx +150 -0
- package/skills/json-render/docs/nexus-state-demo.md +84 -0
- package/skills/json-render/docs/shadcn-preset.md +33 -0
- package/skills/json-render/scripts/create-vite-demo.sh +45 -0
- package/skills/json-render/scripts/llm-server/README.md +33 -0
- package/skills/json-render/scripts/llm-server/catalog.ts +78 -0
- package/skills/json-render/scripts/llm-server/package-lock.json +702 -0
- package/skills/json-render/scripts/llm-server/package.json +18 -0
- package/skills/json-render/scripts/llm-server/server.ts +285 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +91 -0
- package/skills/local-places/pyproject.toml +27 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +38 -0
- package/skills/model-usage/SKILL.md +45 -0
- package/skills/model-usage/references/codexbar-cli.md +28 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +30 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +169 -0
- package/skills/nano-pdf/SKILL.md +20 -0
- package/skills/nexus-cloud/SKILL.md +53 -0
- package/skills/nexus-cloud/docs/security.md +24 -0
- package/skills/nexus-cloud/docs/setup.md +51 -0
- package/skills/nexus-cloud/docs/troubleshooting.md +28 -0
- package/skills/notion/SKILL.md +156 -0
- package/skills/obsidian/SKILL.md +55 -0
- package/skills/onboarding/SKILL.md +515 -0
- package/skills/onboarding/docs/CAPABILITIES.md +444 -0
- package/skills/onboarding/docs/CAPABILITY_TAXONOMY.md +608 -0
- package/skills/onboarding/docs/CLI_GRAMMAR.md +797 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_CREDENTIALS.md +632 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_ONBOARDING.md +815 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_SKILLS.md +449 -0
- package/skills/onboarding/docs/DOCUMENTATION_OVERVIEW.md +290 -0
- package/skills/onboarding/docs/ENTITY_MODEL.md +582 -0
- package/skills/onboarding/docs/GOAL_STATE_ARCHITECTURE.md +395 -0
- package/skills/onboarding/docs/NEXUS_SYSTEM_OVERVIEW.md +476 -0
- package/skills/onboarding/docs/SKILLS_HUB_SPEC.md +477 -0
- package/skills/onboarding/docs/SKILLS_SPECIFICATION.md +947 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_DESIGN.md +702 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_PRD.md +278 -0
- package/skills/onboarding/docs/SKILL_INVENTORY.md +266 -0
- package/skills/onboarding/docs/STATE_ARCHITECTURE.md +547 -0
- package/skills/onboarding/docs/TROUBLESHOOTING.md +363 -0
- package/skills/onboarding/docs/USER_JOURNEY.md +797 -0
- package/skills/onboarding/docs/WOW_MOMENTS.md +232 -0
- package/skills/onboarding/docs/agent-apple-id.md +289 -0
- package/skills/onboarding/docs/skill-deep-dives/1password.md +367 -0
- package/skills/onboarding/docs/skill-deep-dives/TEMPLATE.md +197 -0
- package/skills/onboarding/docs/skill-deep-dives/aix.md +498 -0
- package/skills/onboarding/docs/skill-deep-dives/bird.md +357 -0
- package/skills/onboarding/docs/skill-deep-dives/brave-search.md +601 -0
- package/skills/onboarding/docs/skill-deep-dives/comms.md +607 -0
- package/skills/onboarding/docs/skill-deep-dives/computer-use.md +599 -0
- package/skills/onboarding/docs/skill-deep-dives/cron-and-heartbeat.md +576 -0
- package/skills/onboarding/docs/skill-deep-dives/eve.md +711 -0
- package/skills/onboarding/docs/skill-deep-dives/github.md +333 -0
- package/skills/onboarding/docs/skill-deep-dives/gog.md +640 -0
- package/skills/onboarding/docs/skill-deep-dives/homebrew-prereqs.md +785 -0
- package/skills/onboarding/docs/skill-deep-dives/nexus-cloud.md +689 -0
- package/skills/onboarding/docs/skill-deep-dives/qmd.md +742 -0
- package/skills/onboarding/docs/skill-deep-dives/telegram.md +379 -0
- package/skills/onboarding/docs/skill-deep-dives/wacli.md +399 -0
- package/skills/onboarding/docs/skill-deep-dives/weather.md +513 -0
- package/skills/onboarding/scripts/ralph/prd.json +215 -0
- package/skills/onboarding/scripts/ralph/progress.txt +99 -0
- package/skills/onboarding/scripts/ralph/prompt.md +87 -0
- package/skills/onboarding/scripts/ralph/ralph.log +84 -0
- package/skills/onboarding/scripts/ralph/ralph.sh +45 -0
- package/skills/onboarding/scripts/setup-cursor-skills.sh +40 -0
- package/skills/openai-image-gen/SKILL.md +31 -0
- package/skills/openai-image-gen/scripts/gen.py +173 -0
- package/skills/openai-whisper/SKILL.md +19 -0
- package/skills/openai-whisper-api/SKILL.md +43 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +30 -0
- package/skills/oracle/SKILL.md +105 -0
- package/skills/ordercli/SKILL.md +47 -0
- package/skills/peekaboo/SKILL.md +153 -0
- package/skills/qmd/SKILL.md +32 -0
- package/skills/qmd/docs/mcp.md +30 -0
- package/skills/qmd/docs/ollama.md +42 -0
- package/skills/qmd/docs/setup.md +44 -0
- package/skills/sag/SKILL.md +62 -0
- package/skills/skill-cli-template/SKILL.md +109 -0
- package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +29 -0
- package/skills/sonoscli/SKILL.md +26 -0
- package/skills/spotify-player/SKILL.md +34 -0
- package/skills/summarize/SKILL.md +49 -0
- package/skills/telegram/SKILL.md +20 -0
- package/skills/telegram/docs/pairing.md +30 -0
- package/skills/telegram/docs/setup.md +41 -0
- package/skills/telegram/docs/webhook.md +17 -0
- package/skills/things-mac/SKILL.md +61 -0
- package/skills/tmux/SKILL.md +121 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +84 -0
- package/skills/upstream-sync/SKILL.md +151 -0
- package/skills/upstream-sync/scripts/auto-port.sh +227 -0
- package/skills/upstream-sync/scripts/check-all.sh +88 -0
- package/skills/upstream-sync/scripts/check-nexus.sh +146 -0
- package/skills/upstream-sync/scripts/check-pi-ai.sh +129 -0
- package/skills/video-frames/SKILL.md +29 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/wacli/SKILL.md +48 -0
- package/skills/wacli/docs/auth.md +21 -0
- package/skills/wacli/docs/backup.md +9 -0
- package/skills/wacli/docs/troubleshooting.md +21 -0
- package/skills/weather/SKILL.md +53 -0
- package/skills/weather/docs/usage.md +40 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Fix Chrome/Chromium CDP startup issues for Nexus browser control on Linux"
|
|
3
|
+
read_when: "Browser control fails on Linux, especially with snap Chromium"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser Troubleshooting (Linux)
|
|
7
|
+
|
|
8
|
+
## Problem: "Failed to start Chrome CDP on port 18800"
|
|
9
|
+
|
|
10
|
+
Nexus's browser control server fails to launch Chrome/Chromium with the error:
|
|
11
|
+
```
|
|
12
|
+
{"error":"Error: Failed to start Chrome CDP on port 18800 for profile \"nexus\"."}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Root Cause
|
|
16
|
+
|
|
17
|
+
On Ubuntu (and many Linux distros), the default Chromium installation is a **snap package**. Snap's AppArmor confinement interferes with how Nexus spawns and monitors the browser process.
|
|
18
|
+
|
|
19
|
+
The `apt install chromium` command installs a stub package that redirects to snap:
|
|
20
|
+
```
|
|
21
|
+
Note, selecting 'chromium-browser' instead of 'chromium'
|
|
22
|
+
chromium-browser is already the newest version (2:1snap1-0ubuntu2).
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This is NOT a real browser — it's just a wrapper.
|
|
26
|
+
|
|
27
|
+
### Solution 1: Install Google Chrome (Recommended)
|
|
28
|
+
|
|
29
|
+
Install the official Google Chrome `.deb` package, which is not sandboxed by snap:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
|
33
|
+
sudo dpkg -i google-chrome-stable_current_amd64.deb
|
|
34
|
+
sudo apt --fix-broken install -y # if there are dependency errors
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then update your Nexus config (`~/nexus/state/nexus.json`):
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"browser": {
|
|
42
|
+
"enabled": true,
|
|
43
|
+
"executablePath": "/usr/bin/google-chrome-stable",
|
|
44
|
+
"headless": true,
|
|
45
|
+
"noSandbox": true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Solution 2: Use Snap Chromium with Attach-Only Mode
|
|
51
|
+
|
|
52
|
+
If you must use snap Chromium, configure Nexus to attach to a manually-started browser:
|
|
53
|
+
|
|
54
|
+
1. Update config:
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"browser": {
|
|
58
|
+
"enabled": true,
|
|
59
|
+
"attachOnly": true,
|
|
60
|
+
"headless": true,
|
|
61
|
+
"noSandbox": true
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. Start Chromium manually:
|
|
67
|
+
```bash
|
|
68
|
+
chromium-browser --headless --no-sandbox --disable-gpu \
|
|
69
|
+
--remote-debugging-port=18800 \
|
|
70
|
+
--user-data-dir=$HOME/.nexus/browser/nexus/user-data \
|
|
71
|
+
about:blank &
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
3. Optionally create a systemd user service to auto-start Chrome:
|
|
75
|
+
```ini
|
|
76
|
+
# ~/.config/systemd/user/nexus-browser.service
|
|
77
|
+
[Unit]
|
|
78
|
+
Description=Nexus Browser (Chrome CDP)
|
|
79
|
+
After=network.target
|
|
80
|
+
|
|
81
|
+
[Service]
|
|
82
|
+
ExecStart=/snap/bin/chromium --headless --no-sandbox --disable-gpu --remote-debugging-port=18800 --user-data-dir=%h/.nexus/browser/nexus/user-data about:blank
|
|
83
|
+
Restart=on-failure
|
|
84
|
+
RestartSec=5
|
|
85
|
+
|
|
86
|
+
[Install]
|
|
87
|
+
WantedBy=default.target
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Enable with: `systemctl --user enable --now nexus-browser.service`
|
|
91
|
+
|
|
92
|
+
### Verifying the Browser Works
|
|
93
|
+
|
|
94
|
+
Check status:
|
|
95
|
+
```bash
|
|
96
|
+
curl -s http://127.0.0.1:18791/ | jq '{running, pid, chosenBrowser}'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Test browsing:
|
|
100
|
+
```bash
|
|
101
|
+
curl -s -X POST http://127.0.0.1:18791/start
|
|
102
|
+
curl -s http://127.0.0.1:18791/tabs
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Config Reference
|
|
106
|
+
|
|
107
|
+
| Option | Description | Default |
|
|
108
|
+
|--------|-------------|---------|
|
|
109
|
+
| `browser.enabled` | Enable browser control | `true` |
|
|
110
|
+
| `browser.executablePath` | Path to Chrome/Chromium binary | auto-detected |
|
|
111
|
+
| `browser.headless` | Run without GUI | `false` |
|
|
112
|
+
| `browser.noSandbox` | Add `--no-sandbox` flag (needed for some Linux setups) | `false` |
|
|
113
|
+
| `browser.attachOnly` | Don't launch browser, only attach to existing | `false` |
|
|
114
|
+
| `browser.cdpPort` | Chrome DevTools Protocol port | `18800` |
|
package/docs/browser.md
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Spec: integrated browser control server + action commands"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding agent-controlled browser automation
|
|
5
|
+
- Debugging why nexus is interfering with your own Chrome
|
|
6
|
+
- Implementing browser settings + lifecycle in the macOS app
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Browser (integrated) — nexus-managed Chrome
|
|
10
|
+
|
|
11
|
+
Status: draft spec · Date: 2025-12-20
|
|
12
|
+
|
|
13
|
+
Goal: give the **nexus** persona its own browser that is:
|
|
14
|
+
- Visually distinct (lobster-orange, profile labeled "nexus").
|
|
15
|
+
- Fully agent-manageable (start/stop, list tabs, focus/close tabs, open URLs, screenshot).
|
|
16
|
+
- Non-interfering with the user's own browser (separate profile + dedicated ports).
|
|
17
|
+
|
|
18
|
+
This doc covers the macOS app/gateway side. It intentionally does not mandate
|
|
19
|
+
Playwright vs Puppeteer; the key is the **contract** and the **separation guarantees**.
|
|
20
|
+
|
|
21
|
+
## User-facing settings
|
|
22
|
+
|
|
23
|
+
Add a dedicated settings section (preferably under **Skills** or its own "Browser" tab):
|
|
24
|
+
|
|
25
|
+
- **Enable nexus browser** (`default: on`)
|
|
26
|
+
- When off: no browser is launched, and browser tools return "disabled".
|
|
27
|
+
- **Browser control URL** (`default: http://127.0.0.1:18791`)
|
|
28
|
+
- Interpreted as the base URL of the local/remote browser-control server.
|
|
29
|
+
- If the URL host is not loopback, Nexus must **not** attempt to launch a local
|
|
30
|
+
browser; it only connects.
|
|
31
|
+
- **CDP URL** (`default: controlUrl + 1`)
|
|
32
|
+
- Base URL for Chrome DevTools Protocol (e.g. `http://127.0.0.1:18792`).
|
|
33
|
+
- Set this to a non-loopback host to attach the local control server to a remote
|
|
34
|
+
Chrome/Chromium CDP endpoint (SSH/Tailscale tunnel recommended).
|
|
35
|
+
- If the CDP URL host is non-loopback, nexus does **not** auto-launch a local browser.
|
|
36
|
+
- If you tunnel a remote CDP to `localhost`, set **Attach to existing only** to
|
|
37
|
+
avoid accidentally launching a local browser.
|
|
38
|
+
- **Accent color** (`default: #FF4500`, "lobster-orange")
|
|
39
|
+
- Used to theme the nexus browser profile (best-effort) and to tint UI indicators
|
|
40
|
+
in Nexus.
|
|
41
|
+
|
|
42
|
+
Optional (advanced, can be hidden behind Debug initially):
|
|
43
|
+
- **Use headless browser** (`default: off`)
|
|
44
|
+
- **Attach to existing only** (`default: off`) — if on, never launch; only connect if
|
|
45
|
+
already running.
|
|
46
|
+
- **Browser executable path** (override, optional)
|
|
47
|
+
- **No sandbox** (`default: off`) — adds `--no-sandbox` + `--disable-setuid-sandbox`
|
|
48
|
+
|
|
49
|
+
### Port convention
|
|
50
|
+
|
|
51
|
+
Nexus already uses:
|
|
52
|
+
- Gateway WebSocket: `18789`
|
|
53
|
+
- Bridge (voice/node): `18790`
|
|
54
|
+
|
|
55
|
+
For the nexus browser-control server, use "family" ports:
|
|
56
|
+
- Browser control HTTP API: `18791` (bridge + 1)
|
|
57
|
+
- Browser CDP/debugging port: `18792` (control + 1)
|
|
58
|
+
- Canvas host HTTP: `18793` by default, mounted at `/__nexus__/canvas/`
|
|
59
|
+
|
|
60
|
+
The user usually only configures the **control URL** (port `18791`). CDP is an
|
|
61
|
+
internal detail.
|
|
62
|
+
|
|
63
|
+
## Browser isolation guarantees (non-negotiable)
|
|
64
|
+
|
|
65
|
+
1) **Dedicated user data dir**
|
|
66
|
+
- Never attach to or reuse the user's default Chrome profile.
|
|
67
|
+
- Store nexus browser state under an app-owned directory, e.g.:
|
|
68
|
+
- `~/Library/Application Support/Nexus/browser/nexus/` (mac app)
|
|
69
|
+
- or `~/nexus/state/browser/nexus/` (gateway/CLI)
|
|
70
|
+
|
|
71
|
+
2) **Dedicated ports**
|
|
72
|
+
- Never use `9222` (reserved for ad-hoc dev workflows; avoids colliding with
|
|
73
|
+
`agent-tools/browser-tools`).
|
|
74
|
+
- Default ports are `18791/18792` unless overridden.
|
|
75
|
+
|
|
76
|
+
3) **Named tab/page management**
|
|
77
|
+
- The agent must be able to enumerate and target tabs deterministically (by
|
|
78
|
+
stable `targetId` or equivalent), not "last tab".
|
|
79
|
+
|
|
80
|
+
## Browser selection (macOS + Linux)
|
|
81
|
+
|
|
82
|
+
On startup (when enabled + local URL), Nexus chooses the browser executable
|
|
83
|
+
in this order:
|
|
84
|
+
1) **Google Chrome Canary** (if installed)
|
|
85
|
+
2) **Chromium** (if installed)
|
|
86
|
+
3) **Google Chrome** (fallback)
|
|
87
|
+
|
|
88
|
+
Linux:
|
|
89
|
+
- Looks for `google-chrome` / `chromium` in common system paths.
|
|
90
|
+
- Use **Browser executable path** to force a specific binary.
|
|
91
|
+
|
|
92
|
+
Implementation detail:
|
|
93
|
+
- macOS: detection is by existence of the `.app` bundle under `/Applications`
|
|
94
|
+
(and optionally `~/Applications`), then using the resolved executable path.
|
|
95
|
+
- Linux: common `/usr/bin`/`/snap/bin` paths.
|
|
96
|
+
|
|
97
|
+
Rationale:
|
|
98
|
+
- Canary/Chromium are easy to visually distinguish from the user's daily driver.
|
|
99
|
+
- Chrome fallback ensures the feature works on a stock machine.
|
|
100
|
+
|
|
101
|
+
## Visual differentiation ("lobster-orange")
|
|
102
|
+
|
|
103
|
+
The nexus browser should be obviously different at a glance:
|
|
104
|
+
- Profile name: **nexus**
|
|
105
|
+
- Profile color: **#FF4500**
|
|
106
|
+
|
|
107
|
+
Preferred behavior:
|
|
108
|
+
- Seed/patch the profile's preferences on first launch so the color + name persist.
|
|
109
|
+
|
|
110
|
+
Fallback behavior:
|
|
111
|
+
- If preferences patching is not reliable, open with the dedicated profile and let
|
|
112
|
+
the user set the profile color/name once via Chrome UI; it must persist because
|
|
113
|
+
the `userDataDir` is persistent.
|
|
114
|
+
|
|
115
|
+
## Control server contract (vNext)
|
|
116
|
+
|
|
117
|
+
Expose a small local HTTP API (and/or gateway RPC surface) so the agent can manage
|
|
118
|
+
state without touching the user's Chrome.
|
|
119
|
+
|
|
120
|
+
Basics:
|
|
121
|
+
- `GET /` status payload (enabled/running/pid/cdpPort/etc)
|
|
122
|
+
- `POST /start` start browser
|
|
123
|
+
- `POST /stop` stop browser
|
|
124
|
+
- `GET /tabs` list tabs
|
|
125
|
+
- `POST /tabs/open` open a new tab
|
|
126
|
+
- `POST /tabs/focus` focus a tab by id/prefix
|
|
127
|
+
- `DELETE /tabs/:targetId` close a tab by id/prefix
|
|
128
|
+
|
|
129
|
+
Inspection:
|
|
130
|
+
- `POST /screenshot` `{ targetId?, fullPage?, ref?, element?, type? }`
|
|
131
|
+
- `GET /snapshot` `?format=aria|ai&targetId?&limit?`
|
|
132
|
+
- `GET /console` `?level?&targetId?`
|
|
133
|
+
- `POST /pdf` `{ targetId? }`
|
|
134
|
+
|
|
135
|
+
Actions:
|
|
136
|
+
- `POST /navigate`
|
|
137
|
+
- `POST /act` `{ kind, targetId?, ... }` where `kind` is one of:
|
|
138
|
+
- `click`, `type`, `press`, `hover`, `drag`, `select`, `fill`, `wait`, `resize`, `close`, `evaluate`
|
|
139
|
+
|
|
140
|
+
Hooks (arming):
|
|
141
|
+
- `POST /hooks/file-chooser` `{ targetId?, paths, timeoutMs? }`
|
|
142
|
+
- `POST /hooks/dialog` `{ targetId?, accept, promptText?, timeoutMs? }`
|
|
143
|
+
|
|
144
|
+
### "Is it open or closed?"
|
|
145
|
+
|
|
146
|
+
"Open" means:
|
|
147
|
+
- the control server is reachable at the configured URL **and**
|
|
148
|
+
- it reports a live browser connection.
|
|
149
|
+
|
|
150
|
+
"Closed" means:
|
|
151
|
+
- control server not reachable, or server reports no browser.
|
|
152
|
+
|
|
153
|
+
Nexus should treat "open/closed" as a health check (fast path), not by scanning
|
|
154
|
+
global Chrome processes (avoid false positives).
|
|
155
|
+
|
|
156
|
+
## Multi-profile support
|
|
157
|
+
|
|
158
|
+
Nexus supports multiple named browser profiles, each with:
|
|
159
|
+
- Dedicated CDP port (auto-allocated from 18800-18899) **or** a per-profile CDP URL
|
|
160
|
+
- Persistent user data directory (`~/nexus/state/browser/<name>/user-data/`)
|
|
161
|
+
- Unique color for visual distinction
|
|
162
|
+
|
|
163
|
+
### Configuration
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"browser": {
|
|
168
|
+
"enabled": true,
|
|
169
|
+
"defaultProfile": "nexus",
|
|
170
|
+
"profiles": {
|
|
171
|
+
"nexus": { "cdpPort": 18800, "color": "#FF4500" },
|
|
172
|
+
"work": { "cdpPort": 18801, "color": "#0066CC" },
|
|
173
|
+
"remote": { "cdpUrl": "http://10.0.0.42:9222", "color": "#00AA00" }
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Profile actions
|
|
180
|
+
|
|
181
|
+
- `GET /profiles` — list all profiles with status
|
|
182
|
+
- `POST /profiles/create` `{ name, color?, cdpUrl? }` — create new profile (auto-allocates port if no `cdpUrl`)
|
|
183
|
+
- `DELETE /profiles/:name` — delete profile (stops browser + removes user data for local profiles)
|
|
184
|
+
- `POST /reset-profile?profile=<name>` — kill orphan process on profile's port (local profiles only)
|
|
185
|
+
|
|
186
|
+
### Profile parameter
|
|
187
|
+
|
|
188
|
+
All existing endpoints accept optional `?profile=<name>` query parameter:
|
|
189
|
+
- `GET /?profile=work` — status for work profile
|
|
190
|
+
- `POST /start?profile=work` — start work profile browser
|
|
191
|
+
- `GET /tabs?profile=work` — list tabs for work profile
|
|
192
|
+
- etc.
|
|
193
|
+
|
|
194
|
+
When `profile` is omitted, uses `browser.defaultProfile` (defaults to "nexus").
|
|
195
|
+
|
|
196
|
+
### Profile naming rules
|
|
197
|
+
|
|
198
|
+
- Lowercase alphanumeric characters and hyphens only
|
|
199
|
+
- Must start with a letter or number (not a hyphen)
|
|
200
|
+
- Maximum 64 characters
|
|
201
|
+
- Examples: `nexus`, `work`, `my-project-1`
|
|
202
|
+
|
|
203
|
+
### Port allocation
|
|
204
|
+
|
|
205
|
+
Ports are allocated from range 18800-18899 (~100 profiles max). This is far more
|
|
206
|
+
than practical use — memory and CPU exhaustion occur well before port exhaustion.
|
|
207
|
+
Ports are allocated once at profile creation and persisted permanently.
|
|
208
|
+
Remote profiles are attach-only and do **not** use the local port range.
|
|
209
|
+
## Interaction with the agent (nexus)
|
|
210
|
+
|
|
211
|
+
The agent should use browser tools only when:
|
|
212
|
+
- enabled in settings
|
|
213
|
+
- control URL is configured
|
|
214
|
+
|
|
215
|
+
If disabled, tools must fail fast with a friendly error ("Browser disabled in settings").
|
|
216
|
+
|
|
217
|
+
The agent should not assume tabs are ephemeral. It should:
|
|
218
|
+
- call `browser.tabs.list` to discover existing tabs first
|
|
219
|
+
- reuse an existing tab when appropriate (e.g. a persistent "main" tab)
|
|
220
|
+
- avoid opening duplicate tabs unless asked
|
|
221
|
+
|
|
222
|
+
## CLI quick reference (one example each)
|
|
223
|
+
|
|
224
|
+
All commands accept `--profile <name>` to target a specific profile (default: `nexus`).
|
|
225
|
+
|
|
226
|
+
Profile management:
|
|
227
|
+
- `nexus browser profiles`
|
|
228
|
+
- `nexus browser create-profile --name work`
|
|
229
|
+
- `nexus browser create-profile --name remote --cdp-url http://10.0.0.42:9222`
|
|
230
|
+
- `nexus browser delete-profile --name work`
|
|
231
|
+
Basics:
|
|
232
|
+
- `nexus browser status`
|
|
233
|
+
- `nexus browser start`
|
|
234
|
+
- `nexus browser stop`
|
|
235
|
+
- `nexus browser reset-profile`
|
|
236
|
+
- `nexus browser tabs`
|
|
237
|
+
- `nexus browser open https://example.com`
|
|
238
|
+
- `nexus browser focus abcd1234`
|
|
239
|
+
- `nexus browser close abcd1234`
|
|
240
|
+
|
|
241
|
+
Inspection:
|
|
242
|
+
- `nexus browser screenshot`
|
|
243
|
+
- `nexus browser screenshot --full-page`
|
|
244
|
+
- `nexus browser screenshot --ref 12`
|
|
245
|
+
- `nexus browser snapshot`
|
|
246
|
+
- `nexus browser snapshot --format aria --limit 200`
|
|
247
|
+
|
|
248
|
+
Actions:
|
|
249
|
+
- `nexus browser navigate https://example.com`
|
|
250
|
+
- `nexus browser resize 1280 720`
|
|
251
|
+
- `nexus browser click 12 --double`
|
|
252
|
+
- `nexus browser type 23 "hello" --submit`
|
|
253
|
+
- `nexus browser press Enter`
|
|
254
|
+
- `nexus browser hover 44`
|
|
255
|
+
- `nexus browser drag 10 11`
|
|
256
|
+
- `nexus browser select 9 OptionA OptionB`
|
|
257
|
+
- `nexus browser upload /tmp/file.pdf`
|
|
258
|
+
- `nexus browser fill --fields '[{\"ref\":\"1\",\"value\":\"Ada\"}]'`
|
|
259
|
+
- `nexus browser dialog --accept`
|
|
260
|
+
- `nexus browser wait --text "Done"`
|
|
261
|
+
- `nexus browser evaluate --fn '(el) => el.textContent' --ref 7`
|
|
262
|
+
- `nexus browser evaluate --fn "document.querySelector('.my-class').click()"`
|
|
263
|
+
- `nexus browser console --level error`
|
|
264
|
+
- `nexus browser pdf`
|
|
265
|
+
|
|
266
|
+
Notes:
|
|
267
|
+
- `upload` and `dialog` are **arming** calls; run them before the click/press that triggers the chooser/dialog.
|
|
268
|
+
- `upload` can take a `ref` to auto-click after arming (useful for single-step file uploads).
|
|
269
|
+
- `upload` can also take `inputRef` (aria ref) or `element` (CSS selector) to set `<input type="file">` directly without waiting for a file chooser.
|
|
270
|
+
- The arm default timeout is **2 minutes** (clamped to max 2 minutes); pass `timeoutMs` if you need shorter.
|
|
271
|
+
- `snapshot` defaults to `ai`; `aria` returns an accessibility tree for debugging.
|
|
272
|
+
- `click`/`type` require `ref` from `snapshot --format ai`; use `evaluate` for rare CSS selector one-offs.
|
|
273
|
+
- Avoid `wait` by default; use it only in exceptional cases when there is no reliable UI state to wait on.
|
|
274
|
+
|
|
275
|
+
## Security & privacy notes
|
|
276
|
+
|
|
277
|
+
- The nexus browser profile is app-owned; it may contain logged-in sessions.
|
|
278
|
+
Treat it as sensitive data.
|
|
279
|
+
- The control server must bind to loopback only by default (`127.0.0.1`) unless the
|
|
280
|
+
user explicitly configures a non-loopback URL.
|
|
281
|
+
- Never reuse or copy the user's default Chrome profile.
|
|
282
|
+
- Remote CDP endpoints should be tunneled or protected; CDP is highly privileged.
|
|
283
|
+
|
|
284
|
+
## Non-goals (for the first cut)
|
|
285
|
+
|
|
286
|
+
- Cross-device "sync" of tabs between Mac and Pi.
|
|
287
|
+
- Sharing the user's logged-in Chrome sessions automatically.
|
|
288
|
+
- General-purpose web scraping; this is primarily for "close-the-loop" verification
|
|
289
|
+
and interaction.
|
|
290
|
+
|
|
291
|
+
## Troubleshooting
|
|
292
|
+
|
|
293
|
+
For Linux-specific issues (especially Ubuntu with snap Chromium), see [browser-linux-troubleshooting](https://docs.nexus.bot/browser-linux-troubleshooting).
|
package/docs/bun.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Bun (optional)
|
|
2
|
+
|
|
3
|
+
Goal: allow running this repo with Bun without maintaining a Bun lockfile or losing pnpm patch behavior.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
- pnpm remains the primary package manager/runtime for this repo.
|
|
8
|
+
- Bun can be used for local installs/builds/tests, but Bun currently **cannot use** `pnpm-lock.yaml` and will ignore it.
|
|
9
|
+
|
|
10
|
+
## Install (no Bun lockfile)
|
|
11
|
+
|
|
12
|
+
Use Bun without writing `bun.lock`/`bun.lockb`:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
bun install --no-save
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This avoids maintaining two lockfiles. (`bun.lock`/`bun.lockb` are gitignored.)
|
|
19
|
+
|
|
20
|
+
## Build / Test (Bun)
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
bun run build
|
|
24
|
+
bun run vitest run
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## pnpm patchedDependencies under Bun
|
|
28
|
+
|
|
29
|
+
pnpm supports `package.json#pnpm.patchedDependencies` and records it in `pnpm-lock.yaml`.
|
|
30
|
+
Bun does not support pnpm patches, so we apply them in `postinstall` when Bun is detected:
|
|
31
|
+
|
|
32
|
+
- `scripts/postinstall.js` runs only for Bun installs and applies every entry from `package.json#pnpm.patchedDependencies` into `node_modules/...` using `git apply` (idempotent).
|
|
33
|
+
|
|
34
|
+
To add a new patch that works in both pnpm + Bun:
|
|
35
|
+
|
|
36
|
+
1. Add an entry to `package.json#pnpm.patchedDependencies`
|
|
37
|
+
2. Add the patch file under `patches/`
|
|
38
|
+
3. Run `pnpm install` (updates `pnpm-lock.yaml` patch hash)
|
|
39
|
+
|
|
40
|
+
## Bun lifecycle scripts (blocked by default)
|
|
41
|
+
|
|
42
|
+
Bun may block dependency lifecycle scripts unless explicitly trusted (`bun pm untrusted` / `bun pm trust`).
|
|
43
|
+
For this repo, the commonly blocked scripts are not required:
|
|
44
|
+
|
|
45
|
+
- `@whiskeysockets/baileys` `preinstall`: checks Node major >= 20 (we run Node 22+).
|
|
46
|
+
- `protobufjs` `postinstall`: emits warnings about incompatible version schemes (no build artifacts).
|
|
47
|
+
|
|
48
|
+
If you hit a real runtime issue that requires these scripts, trust them explicitly:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
bun pm trust @whiskeysockets/baileys protobufjs
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Caveats
|
|
55
|
+
|
|
56
|
+
- Some scripts still hardcode pnpm (e.g. `docs:build`, `ui:*`, `protocol:check`). Run those via pnpm for now.
|
package/docs/camera.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Camera capture (iOS node + macOS app) for agent use: photos (jpg) and short video clips (mp4)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying camera capture on iOS nodes or macOS
|
|
5
|
+
- Extending agent-accessible MEDIA temp-file workflows
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Camera capture (agent)
|
|
9
|
+
|
|
10
|
+
Nexus supports **camera capture** for agent workflows:
|
|
11
|
+
|
|
12
|
+
- **iOS node** (paired via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
|
|
13
|
+
- **Android node** (paired via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
|
|
14
|
+
- **macOS app** (node via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
|
|
15
|
+
|
|
16
|
+
All camera access is gated behind **user-controlled settings**.
|
|
17
|
+
|
|
18
|
+
## iOS node
|
|
19
|
+
|
|
20
|
+
### User setting (default on)
|
|
21
|
+
|
|
22
|
+
- iOS Settings tab → **Camera** → **Allow Camera** (`camera.enabled`)
|
|
23
|
+
- Default: **on** (missing key is treated as enabled).
|
|
24
|
+
- When off: `camera.*` commands return `CAMERA_DISABLED`.
|
|
25
|
+
|
|
26
|
+
### Commands (via Gateway `node.invoke`)
|
|
27
|
+
|
|
28
|
+
- `camera.list`
|
|
29
|
+
- Response payload:
|
|
30
|
+
- `devices`: array of `{ id, name, position, deviceType }`
|
|
31
|
+
|
|
32
|
+
- `camera.snap`
|
|
33
|
+
- Params:
|
|
34
|
+
- `facing`: `front|back` (default: `front`)
|
|
35
|
+
- `maxWidth`: number (optional; default `1600` on the iOS node)
|
|
36
|
+
- `quality`: `0..1` (optional; default `0.9`)
|
|
37
|
+
- `format`: currently `jpg`
|
|
38
|
+
- `delayMs`: number (optional; default `0`)
|
|
39
|
+
- `deviceId`: string (optional; from `camera.list`)
|
|
40
|
+
- Response payload:
|
|
41
|
+
- `format: "jpg"`
|
|
42
|
+
- `base64: "<...>"`
|
|
43
|
+
- `width`, `height`
|
|
44
|
+
- Payload guard: photos are recompressed to keep the base64 payload under 5 MB.
|
|
45
|
+
|
|
46
|
+
- `camera.clip`
|
|
47
|
+
- Params:
|
|
48
|
+
- `facing`: `front|back` (default: `front`)
|
|
49
|
+
- `durationMs`: number (default `3000`, clamped to a max of `60000`)
|
|
50
|
+
- `includeAudio`: boolean (default `true`)
|
|
51
|
+
- `format`: currently `mp4`
|
|
52
|
+
- `deviceId`: string (optional; from `camera.list`)
|
|
53
|
+
- Response payload:
|
|
54
|
+
- `format: "mp4"`
|
|
55
|
+
- `base64: "<...>"`
|
|
56
|
+
- `durationMs`
|
|
57
|
+
- `hasAudio`
|
|
58
|
+
|
|
59
|
+
### Foreground requirement
|
|
60
|
+
|
|
61
|
+
Like `canvas.*`, the iOS node only allows `camera.*` commands in the **foreground**. Background invocations return `NODE_BACKGROUND_UNAVAILABLE`.
|
|
62
|
+
|
|
63
|
+
### CLI helper (temp files + MEDIA)
|
|
64
|
+
|
|
65
|
+
The easiest way to get attachments is via the CLI helper, which writes decoded media to a temp file and prints `MEDIA:<path>`.
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
nexus nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
|
|
71
|
+
nexus nodes camera snap --node <id> --facing front
|
|
72
|
+
nexus nodes camera clip --node <id> --duration 3000
|
|
73
|
+
nexus nodes camera clip --node <id> --no-audio
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Notes:
|
|
77
|
+
- `nodes camera snap` defaults to **both** facings to give the agent both views.
|
|
78
|
+
- Output files are temporary (in the OS temp directory) unless you build your own wrapper.
|
|
79
|
+
|
|
80
|
+
## Android node
|
|
81
|
+
|
|
82
|
+
### User setting (default on)
|
|
83
|
+
|
|
84
|
+
- Android Settings sheet → **Camera** → **Allow Camera** (`camera.enabled`)
|
|
85
|
+
- Default: **on** (missing key is treated as enabled).
|
|
86
|
+
- When off: `camera.*` commands return `CAMERA_DISABLED`.
|
|
87
|
+
|
|
88
|
+
### Permissions
|
|
89
|
+
|
|
90
|
+
- Android requires runtime permissions:
|
|
91
|
+
- `CAMERA` for both `camera.snap` and `camera.clip`.
|
|
92
|
+
- `RECORD_AUDIO` for `camera.clip` when `includeAudio=true`.
|
|
93
|
+
|
|
94
|
+
If permissions are missing, the app will prompt when possible; if denied, `camera.*` requests fail with a
|
|
95
|
+
`*_PERMISSION_REQUIRED` error.
|
|
96
|
+
|
|
97
|
+
### Foreground requirement
|
|
98
|
+
|
|
99
|
+
Like `canvas.*`, the Android node only allows `camera.*` commands in the **foreground**. Background invocations return `NODE_BACKGROUND_UNAVAILABLE`.
|
|
100
|
+
|
|
101
|
+
### Payload guard
|
|
102
|
+
|
|
103
|
+
Photos are recompressed to keep the base64 payload under 5 MB.
|
|
104
|
+
|
|
105
|
+
## macOS app
|
|
106
|
+
|
|
107
|
+
### User setting (default off)
|
|
108
|
+
|
|
109
|
+
The macOS companion app exposes a checkbox:
|
|
110
|
+
|
|
111
|
+
- **Settings → General → Allow Camera** (`nexus.cameraEnabled`)
|
|
112
|
+
- Default: **off**
|
|
113
|
+
- When off: camera requests return “Camera disabled by user”.
|
|
114
|
+
|
|
115
|
+
### CLI helper (node invoke)
|
|
116
|
+
|
|
117
|
+
Use the main `nexus` CLI to invoke camera commands on the macOS node.
|
|
118
|
+
|
|
119
|
+
Examples:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
nexus nodes camera list --node <id> # list camera ids
|
|
123
|
+
nexus nodes camera snap --node <id> # prints MEDIA:<path>
|
|
124
|
+
nexus nodes camera snap --node <id> --max-width 1280
|
|
125
|
+
nexus nodes camera snap --node <id> --delay-ms 2000
|
|
126
|
+
nexus nodes camera snap --node <id> --device-id <id>
|
|
127
|
+
nexus nodes camera clip --node <id> --duration 10s # prints MEDIA:<path>
|
|
128
|
+
nexus nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<path> (legacy flag)
|
|
129
|
+
nexus nodes camera clip --node <id> --device-id <id>
|
|
130
|
+
nexus nodes camera clip --node <id> --no-audio
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Notes:
|
|
134
|
+
- `nexus nodes camera snap` defaults to `maxWidth=1600` unless overridden.
|
|
135
|
+
- On macOS, `camera.snap` waits `delayMs` (default 2000ms) after warm-up/exposure settle before capturing.
|
|
136
|
+
- Photo payloads are recompressed to keep base64 under 5 MB.
|
|
137
|
+
|
|
138
|
+
## Safety + practical limits
|
|
139
|
+
|
|
140
|
+
- Camera and microphone access trigger the usual OS permission prompts (and require usage strings in Info.plist).
|
|
141
|
+
- Video clips are capped (currently `<= 60s`) to avoid oversized bridge payloads (base64 overhead + message limits).
|
|
142
|
+
|
|
143
|
+
## macOS screen video (OS-level)
|
|
144
|
+
|
|
145
|
+
For *screen* video (not camera), use the macOS companion:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
nexus nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Notes:
|
|
152
|
+
- Requires macOS **Screen Recording** permission (TCC).
|