@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,126 @@
|
|
|
1
|
+
# Nexus Usage Event Log + Suggestions (Local Spec)
|
|
2
|
+
|
|
3
|
+
This document captures the local ingestion, analysis, and suggestion pipeline
|
|
4
|
+
for Nexus CLI usage. The goal is to make the system concrete and testable
|
|
5
|
+
locally before any cloud aggregation.
|
|
6
|
+
|
|
7
|
+
## Goals
|
|
8
|
+
|
|
9
|
+
- Persist ordered usage events for every Nexus CLI invocation.
|
|
10
|
+
- Track tool and skill usage from agent event streams.
|
|
11
|
+
- Provide deterministic, local suggestions based on real sequences.
|
|
12
|
+
- Keep the system simple to backfill and audit.
|
|
13
|
+
|
|
14
|
+
## Non-Goals (for now)
|
|
15
|
+
|
|
16
|
+
- Cloud aggregation or anonymization.
|
|
17
|
+
- ML-driven recommendation models.
|
|
18
|
+
- Cross-device sync of usage data.
|
|
19
|
+
|
|
20
|
+
## Data Sources
|
|
21
|
+
|
|
22
|
+
### CLI Events (Nexus Core)
|
|
23
|
+
|
|
24
|
+
Captured by the CLI entrypoint and command hooks:
|
|
25
|
+
- `cli_session_start`
|
|
26
|
+
- `command_started`
|
|
27
|
+
- `command_finished`
|
|
28
|
+
- `command_failed`
|
|
29
|
+
- `cli_session_end`
|
|
30
|
+
|
|
31
|
+
### Agent Tool/Skill Events
|
|
32
|
+
|
|
33
|
+
Agent tool lifecycle events are persisted via the existing `emitAgentEvent`
|
|
34
|
+
stream and a log listener.
|
|
35
|
+
|
|
36
|
+
## Storage (Local)
|
|
37
|
+
|
|
38
|
+
Events are written as JSONL in the Nexus state directory:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
~/nexus/state/events/events-YYYY-MM-DD.jsonl
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Configuration:
|
|
45
|
+
- `NEXUS_EVENT_LOG=0|false|off` disables event logging
|
|
46
|
+
- `NEXUS_EVENT_LOG_DIR=/custom/path` overrides the event log directory
|
|
47
|
+
|
|
48
|
+
## Event Schema (JSONL)
|
|
49
|
+
|
|
50
|
+
Each line is a single JSON object. Minimal shape:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"id": "uuid",
|
|
55
|
+
"ts": 1712345678901,
|
|
56
|
+
"seq": 12,
|
|
57
|
+
"session_id": "uuid",
|
|
58
|
+
"source": "nexus_cli",
|
|
59
|
+
"event_type": "command_finished",
|
|
60
|
+
"command_path": "status",
|
|
61
|
+
"argv": ["nexus", "status", "--json"],
|
|
62
|
+
"cwd": "/Users/tyler/nexus",
|
|
63
|
+
"status": "ok",
|
|
64
|
+
"data": { "version": "2026.1.5-3" },
|
|
65
|
+
"schema_version": 1
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Notes:
|
|
70
|
+
- `seq` is monotonic per session.
|
|
71
|
+
- `session_id` groups all events for a single CLI run.
|
|
72
|
+
- `argv` is sanitized (sensitive flags are redacted).
|
|
73
|
+
|
|
74
|
+
## Analysis Pipeline (Local)
|
|
75
|
+
|
|
76
|
+
We use an n-gram style transition table built from ordered events.
|
|
77
|
+
|
|
78
|
+
### Key Extraction
|
|
79
|
+
|
|
80
|
+
- CLI usage key: `source:cli:<command_path>`
|
|
81
|
+
- Tool usage key: `source:tool:<tool_name>` from agent tool stream
|
|
82
|
+
|
|
83
|
+
### Transition Table
|
|
84
|
+
|
|
85
|
+
For each session sequence:
|
|
86
|
+
```
|
|
87
|
+
key[i] -> key[i+1] (count)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Ranking
|
|
91
|
+
|
|
92
|
+
Scores are proportional to transition frequency:
|
|
93
|
+
```
|
|
94
|
+
score = count / total_transitions_from_last_key
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Fallbacks
|
|
98
|
+
|
|
99
|
+
If no transitions exist for the last key, fall back to global top keys
|
|
100
|
+
by frequency.
|
|
101
|
+
|
|
102
|
+
## Suggestion Scope
|
|
103
|
+
|
|
104
|
+
- **global**: use all local sessions (default)
|
|
105
|
+
- **session**: restrict to a specific session
|
|
106
|
+
|
|
107
|
+
## Surfaces (Current)
|
|
108
|
+
|
|
109
|
+
- `nexus suggestions` CLI command with JSON output
|
|
110
|
+
|
|
111
|
+
Potential future surfaces:
|
|
112
|
+
- Inline suggestion after command completion
|
|
113
|
+
- Suggestions in `nexus status`
|
|
114
|
+
|
|
115
|
+
## Comms Import (Optional Consumer)
|
|
116
|
+
|
|
117
|
+
The Comms adapter can import `~/nexus/state/events/*.jsonl` into
|
|
118
|
+
`comms.events` for analysis or cross-source correlation.
|
|
119
|
+
|
|
120
|
+
## Next Steps
|
|
121
|
+
|
|
122
|
+
- Add `invocation_kind` (direct vs wrapper vs cargo) if needed.
|
|
123
|
+
- Add richer tool/skill metadata in `data` for better ranking.
|
|
124
|
+
- Add optional gating on `status` (only successful commands).
|
|
125
|
+
|
|
126
|
+
See `docs/usage-cloud-aggregation-spec.md` for the cloud schema and upload plan.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Global voice wake words (Gateway-owned) and how they sync across nodes"
|
|
3
|
+
read_when:
|
|
4
|
+
- Changing voice wake words behavior or defaults
|
|
5
|
+
- Adding new node platforms that need wake word sync
|
|
6
|
+
---
|
|
7
|
+
# Voice Wake (Global Wake Words)
|
|
8
|
+
|
|
9
|
+
Nexus treats **wake words as a single global list** owned by the **Gateway**.
|
|
10
|
+
|
|
11
|
+
- There are **no per-node custom wake words**.
|
|
12
|
+
- **Any node/app UI may edit** the list; changes are persisted by the Gateway and broadcast to everyone.
|
|
13
|
+
- Each device still keeps its own **Voice Wake enabled/disabled** toggle (local UX + permissions differ).
|
|
14
|
+
|
|
15
|
+
## Storage (Gateway host)
|
|
16
|
+
|
|
17
|
+
Wake words are stored on the gateway machine at:
|
|
18
|
+
|
|
19
|
+
- `~/nexus/state/settings/voicewake.json`
|
|
20
|
+
|
|
21
|
+
Shape:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{ "triggers": ["nexus", "claude", "computer"], "updatedAtMs": 1730000000000 }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Protocol
|
|
28
|
+
|
|
29
|
+
### Methods
|
|
30
|
+
|
|
31
|
+
- `voicewake.get` → `{ triggers: string[] }`
|
|
32
|
+
- `voicewake.set` with params `{ triggers: string[] }` → `{ triggers: string[] }`
|
|
33
|
+
|
|
34
|
+
Notes:
|
|
35
|
+
- Triggers are normalized (trimmed, empties dropped). Empty lists fall back to defaults.
|
|
36
|
+
- Limits are enforced for safety (count/length caps).
|
|
37
|
+
|
|
38
|
+
### Events
|
|
39
|
+
|
|
40
|
+
- `voicewake.changed` payload `{ triggers: string[] }`
|
|
41
|
+
|
|
42
|
+
Who receives it:
|
|
43
|
+
- All WebSocket clients (macOS app, WebChat, etc.)
|
|
44
|
+
- All connected bridge nodes (iOS/Android), and also on node connect as an initial “current state” push.
|
|
45
|
+
|
|
46
|
+
## Client behavior
|
|
47
|
+
|
|
48
|
+
### macOS app
|
|
49
|
+
|
|
50
|
+
- Uses the global list to gate `VoiceWakeRuntime` triggers.
|
|
51
|
+
- Editing “Trigger words” in Voice Wake settings calls `voicewake.set` and then relies on the broadcast to keep other clients in sync.
|
|
52
|
+
|
|
53
|
+
### iOS node
|
|
54
|
+
|
|
55
|
+
- Uses the global list for `VoiceWakeManager` trigger detection.
|
|
56
|
+
- Editing Wake Words in Settings calls `voicewake.set` (over the bridge) and also keeps local wake-word detection responsive.
|
|
57
|
+
|
|
58
|
+
### Android node
|
|
59
|
+
|
|
60
|
+
- Exposes a Wake Words editor in Settings.
|
|
61
|
+
- Calls `voicewake.set` over the bridge so edits sync everywhere.
|
package/docs/web.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Gateway web surfaces: Control UI, bind modes, and security"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to access the Gateway over Tailscale
|
|
5
|
+
- You want the browser Control UI and config editing
|
|
6
|
+
---
|
|
7
|
+
# Web (Gateway)
|
|
8
|
+
|
|
9
|
+
The Gateway serves a small **browser Control UI** (Vite + Lit) from the same port as the Gateway WebSocket:
|
|
10
|
+
|
|
11
|
+
- default: `http://<host>:18789/`
|
|
12
|
+
- optional prefix: set `gateway.controlUi.basePath` (e.g. `/nexus`)
|
|
13
|
+
|
|
14
|
+
The UI talks directly to the Gateway WS and supports:
|
|
15
|
+
- Chat (`chat.history`, `chat.send`, `chat.abort`)
|
|
16
|
+
- Chat tool cards (agent tool events)
|
|
17
|
+
- Connections (provider status, WhatsApp QR, Telegram config)
|
|
18
|
+
- Instances (`system-presence`)
|
|
19
|
+
- Sessions (`sessions.list`, `sessions.patch`)
|
|
20
|
+
- Cron (`cron.*`)
|
|
21
|
+
- Skills (`skills.status`, `skills.update`, `skills.install`)
|
|
22
|
+
- Nodes (`node.list`, `node.describe`, `node.invoke`)
|
|
23
|
+
- Config (`config.get`, `config.set`) for `~/nexus/state/nexus.json`
|
|
24
|
+
- Debug (status/health/models snapshots + manual calls)
|
|
25
|
+
|
|
26
|
+
## Webhooks
|
|
27
|
+
|
|
28
|
+
When `hooks.enabled=true`, the Gateway also exposes a small webhook endpoint on the same HTTP server.
|
|
29
|
+
See [`docs/configuration.md`](https://docs.nexus.bot/configuration) → `hooks` for auth + payloads.
|
|
30
|
+
|
|
31
|
+
## Config (default-on)
|
|
32
|
+
|
|
33
|
+
The Control UI is **enabled by default** when assets are present (`dist/control-ui`).
|
|
34
|
+
You can control it via config:
|
|
35
|
+
|
|
36
|
+
```json5
|
|
37
|
+
{
|
|
38
|
+
gateway: {
|
|
39
|
+
controlUi: { enabled: true, basePath: "/nexus" } // basePath optional
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Tailscale access
|
|
45
|
+
|
|
46
|
+
### Integrated Serve (recommended)
|
|
47
|
+
|
|
48
|
+
Keep the Gateway on loopback and let Tailscale Serve proxy it:
|
|
49
|
+
|
|
50
|
+
```json5
|
|
51
|
+
{
|
|
52
|
+
gateway: {
|
|
53
|
+
bind: "loopback",
|
|
54
|
+
tailscale: { mode: "serve" }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then start the gateway:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
nexus gateway
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Open:
|
|
66
|
+
- `https://<magicdns>/` (or your configured `gateway.controlUi.basePath`)
|
|
67
|
+
|
|
68
|
+
### Tailnet bind + token (legacy)
|
|
69
|
+
|
|
70
|
+
```json5
|
|
71
|
+
{
|
|
72
|
+
gateway: {
|
|
73
|
+
bind: "tailnet",
|
|
74
|
+
controlUi: { enabled: true }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Then start the gateway (token required for non-loopback binds):
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
export NEXUS_GATEWAY_TOKEN="…your token…"
|
|
83
|
+
nexus gateway
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Open:
|
|
87
|
+
- `http://<tailscale-ip>:18789/` (or your configured `gateway.controlUi.basePath`)
|
|
88
|
+
|
|
89
|
+
### Public internet (Funnel)
|
|
90
|
+
|
|
91
|
+
```json5
|
|
92
|
+
{
|
|
93
|
+
gateway: {
|
|
94
|
+
bind: "loopback",
|
|
95
|
+
tailscale: { mode: "funnel" },
|
|
96
|
+
auth: { mode: "password" } // or NEXUS_GATEWAY_PASSWORD
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Security notes
|
|
102
|
+
|
|
103
|
+
- Binding the Gateway to a non-loopback address **requires** auth (`NEXUS_GATEWAY_TOKEN` or `gateway.auth`).
|
|
104
|
+
- The UI sends `connect.params.auth.token` or `connect.params.auth.password`.
|
|
105
|
+
- Use `gateway.auth.allowTailscale: false` to require explicit credentials even in Serve mode.
|
|
106
|
+
- `gateway.tailscale.mode: "funnel"` requires `gateway.auth.mode: "password"` (shared password).
|
|
107
|
+
|
|
108
|
+
## Building the UI
|
|
109
|
+
|
|
110
|
+
The Gateway serves static files from `dist/control-ui`. Build them with:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
bun run ui:install
|
|
114
|
+
bun run ui:build
|
|
115
|
+
```
|
package/docs/webchat.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Loopback WebChat static host and Gateway WS usage for chat UI"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging or configuring WebChat access
|
|
5
|
+
---
|
|
6
|
+
# WebChat (SwiftUI + Gateway WS)
|
|
7
|
+
|
|
8
|
+
Updated: 2025-12-17
|
|
9
|
+
|
|
10
|
+
## What it is
|
|
11
|
+
- A native SwiftUI chat UI (macOS app / iOS) that talks directly to the Gateway WebSocket.
|
|
12
|
+
- No embedded browser/WKWebView and no bundled static WebChat HTTP server.
|
|
13
|
+
- Data plane is entirely Gateway WS: methods `chat.history`, `chat.send`, `chat.abort`; events `chat`, `agent`, `presence`, `tick`, `health`.
|
|
14
|
+
|
|
15
|
+
## How it connects
|
|
16
|
+
- The UI performs Gateway WS `connect`, then calls `chat.history` for bootstrap and `chat.send` for sends; it listens to `chat/agent/presence/tick/health` events.
|
|
17
|
+
- History comes from the Gateway via `chat.history` (no local session file watching).
|
|
18
|
+
- If Gateway WS is unavailable, the UI surfaces the error and blocks send.
|
|
19
|
+
|
|
20
|
+
## Remote use
|
|
21
|
+
- In remote mode, the macOS app forwards the Gateway WebSocket control port via SSH and uses that for the SwiftUI chat UI.
|
|
22
|
+
- You generally should not need to manage tunnels manually; see `RemoteTunnelManager` in the app.
|
|
23
|
+
|
|
24
|
+
## Config
|
|
25
|
+
- WebChat does not have a separate HTTP port/config anymore.
|
|
26
|
+
- Gateway WS is configured via the app’s gateway endpoint settings (`GatewayEndpointStore`) or `nexus gateway --port` when running locally.
|
|
27
|
+
|
|
28
|
+
## Failure handling
|
|
29
|
+
- UI errors when the Gateway handshake fails or the WS drops.
|
|
30
|
+
- No fallback transport; the Gateway WS is required.
|
|
31
|
+
|
|
32
|
+
## Dev notes
|
|
33
|
+
- macOS glue: `apps/macos/Sources/Nexus/WebChatSwiftUI.swift` + `apps/macos/Sources/Nexus/WebChatManager.swift`.
|
|
34
|
+
- Remote tunnel helper: `apps/macos/Sources/Nexus/RemotePortTunnel.swift`.
|
package/docs/webhook.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Webhook ingress for wake and isolated agent runs"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or changing webhook endpoints
|
|
5
|
+
- Wiring external systems into Nexus
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Webhooks
|
|
9
|
+
|
|
10
|
+
Gateway can expose a small HTTP webhook endpoint for external triggers.
|
|
11
|
+
|
|
12
|
+
## Enable
|
|
13
|
+
|
|
14
|
+
```json5
|
|
15
|
+
{
|
|
16
|
+
hooks: {
|
|
17
|
+
enabled: true,
|
|
18
|
+
token: "shared-secret",
|
|
19
|
+
path: "/hooks"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Notes:
|
|
25
|
+
- `hooks.token` is required when `hooks.enabled=true`.
|
|
26
|
+
- `hooks.path` defaults to `/hooks`.
|
|
27
|
+
|
|
28
|
+
## Auth
|
|
29
|
+
|
|
30
|
+
Every request must include the hook token:
|
|
31
|
+
- `Authorization: Bearer <token>`
|
|
32
|
+
- or `x-nexus-token: <token>`
|
|
33
|
+
- or `?token=<token>`
|
|
34
|
+
|
|
35
|
+
## Endpoints
|
|
36
|
+
|
|
37
|
+
### `POST /hooks/wake`
|
|
38
|
+
|
|
39
|
+
Payload:
|
|
40
|
+
```json
|
|
41
|
+
{ "text": "System line", "mode": "now" }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- `text` required (string)
|
|
45
|
+
- `mode` optional: `now` | `next-heartbeat` (default `now`)
|
|
46
|
+
|
|
47
|
+
Effect:
|
|
48
|
+
- Enqueues a system event for the **main** session
|
|
49
|
+
- If `mode=now`, triggers an immediate heartbeat
|
|
50
|
+
|
|
51
|
+
### `POST /hooks/agent`
|
|
52
|
+
|
|
53
|
+
Payload:
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"message": "Run this",
|
|
57
|
+
"name": "Email",
|
|
58
|
+
"sessionKey": "hook:email:msg-123",
|
|
59
|
+
"wakeMode": "now",
|
|
60
|
+
"deliver": false,
|
|
61
|
+
"provider": "last",
|
|
62
|
+
"to": "+15551234567",
|
|
63
|
+
"thinking": "low",
|
|
64
|
+
"timeoutSeconds": 120
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- `message` required (string)
|
|
69
|
+
- `name` optional (used in the summary prefix)
|
|
70
|
+
- `sessionKey` optional (default random `hook:<uuid>`)
|
|
71
|
+
- `wakeMode` optional: `now` | `next-heartbeat` (default `now`)
|
|
72
|
+
- `deliver` optional (default `false`)
|
|
73
|
+
- `provider` optional: `last` | `whatsapp` | `telegram`
|
|
74
|
+
- `to` optional (provider-specific target)
|
|
75
|
+
- `thinking` optional (override)
|
|
76
|
+
- `timeoutSeconds` optional
|
|
77
|
+
|
|
78
|
+
Effect:
|
|
79
|
+
- Runs an **isolated** agent turn (own session key)
|
|
80
|
+
- Always posts a summary into the **main** session
|
|
81
|
+
- If `wakeMode=now`, triggers an immediate heartbeat
|
|
82
|
+
|
|
83
|
+
### `POST /hooks/<name>` (mapped)
|
|
84
|
+
|
|
85
|
+
Custom hook names are resolved via `hooks.mappings` (see configuration). A mapping can
|
|
86
|
+
turn arbitrary payloads into `wake` or `agent` actions, with optional templates or
|
|
87
|
+
code transforms.
|
|
88
|
+
|
|
89
|
+
Mapping options (summary):
|
|
90
|
+
- `hooks.presets: ["gmail"]` enables the built-in Gmail mapping.
|
|
91
|
+
- `hooks.mappings` lets you define `match`, `action`, and templates in config.
|
|
92
|
+
- `hooks.transformsDir` + `transform.module` loads a JS/TS module for custom logic.
|
|
93
|
+
- Use `match.source` to keep a generic ingest endpoint (payload-driven routing).
|
|
94
|
+
- TS transforms require a TS loader (e.g. `bun`) or precompiled `.js` at runtime.
|
|
95
|
+
- `nexus hooks gmail setup` writes `hooks.gmail` config for `nexus hooks gmail run`.
|
|
96
|
+
|
|
97
|
+
## Responses
|
|
98
|
+
|
|
99
|
+
- `200` for `/hooks/wake`
|
|
100
|
+
- `202` for `/hooks/agent` (async run started)
|
|
101
|
+
- `401` on auth failure
|
|
102
|
+
- `400` on invalid payload
|
|
103
|
+
- `413` on oversized payloads
|
|
104
|
+
|
|
105
|
+
## Examples
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
curl -X POST http://127.0.0.1:18789/hooks/wake \
|
|
109
|
+
-H 'Authorization: Bearer SECRET' \
|
|
110
|
+
-H 'Content-Type: application/json' \
|
|
111
|
+
-d '{"text":"New email received","mode":"now"}'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
curl -X POST http://127.0.0.1:18789/hooks/agent \
|
|
116
|
+
-H 'x-nexus-token: SECRET' \
|
|
117
|
+
-H 'Content-Type: application/json' \
|
|
118
|
+
-d '{"message":"Summarize inbox","name":"Email","wakeMode":"next-heartbeat"}'
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
curl -X POST http://127.0.0.1:18789/hooks/gmail \
|
|
123
|
+
-H 'Authorization: Bearer SECRET' \
|
|
124
|
+
-H 'Content-Type: application/json' \
|
|
125
|
+
-d '{"source":"gmail","messages":[{"from":"Ada","subject":"Hello","snippet":"Hi"}]}'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Security
|
|
129
|
+
|
|
130
|
+
- Keep hook endpoints behind loopback, tailnet, or trusted reverse proxy.
|
|
131
|
+
- Use a dedicated hook token; do not reuse gateway auth tokens.
|
|
132
|
+
- Avoid including sensitive raw payloads in webhook logs.
|
|
Binary file
|
package/docs/whatsapp.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "WhatsApp (web provider) integration: login, inbox, replies, media, and ops"
|
|
3
|
+
read_when:
|
|
4
|
+
- Working on WhatsApp/web provider behavior or inbox routing
|
|
5
|
+
---
|
|
6
|
+
# WhatsApp (web provider)
|
|
7
|
+
|
|
8
|
+
Updated: 2025-12-23
|
|
9
|
+
|
|
10
|
+
Status: WhatsApp Web via Baileys only. Gateway owns the session(s).
|
|
11
|
+
|
|
12
|
+
## Goals
|
|
13
|
+
- Multiple WhatsApp accounts (multi-account) in one Gateway process.
|
|
14
|
+
- Deterministic routing: replies return to WhatsApp, no model routing.
|
|
15
|
+
- Model sees enough context to understand quoted replies.
|
|
16
|
+
|
|
17
|
+
## Architecture (who owns what)
|
|
18
|
+
- **Gateway** owns the Baileys socket and inbox loop.
|
|
19
|
+
- **CLI / macOS app** talk to the gateway; no direct Baileys use.
|
|
20
|
+
- **Active listener** is required for outbound sends; otherwise send fails fast.
|
|
21
|
+
|
|
22
|
+
## Getting a phone number
|
|
23
|
+
|
|
24
|
+
WhatsApp requires a real mobile number for verification. VoIP and virtual numbers are usually blocked.
|
|
25
|
+
|
|
26
|
+
**Recommended approaches:**
|
|
27
|
+
- **Local eSIM** from your country's mobile carrier (most reliable)
|
|
28
|
+
- Austria: [hot.at](https://www.hot.at)
|
|
29
|
+
- UK: [giffgaff](https://www.giffgaff.com) — free SIM, no contract
|
|
30
|
+
- **Prepaid SIM** — cheap, just needs to receive one SMS for verification
|
|
31
|
+
|
|
32
|
+
**Avoid:** TextNow, Google Voice, most "free SMS" services — WhatsApp blocks these aggressively.
|
|
33
|
+
|
|
34
|
+
**Tip:** The number only needs to receive one verification SMS. After that, WhatsApp Web sessions persist via `creds.json`.
|
|
35
|
+
|
|
36
|
+
**WhatsApp Business:** You can use WhatsApp Business on the same phone with a different number. This is a great option if you want to keep your personal WhatsApp separate — just install WhatsApp Business and register it with Nexus's dedicated number.
|
|
37
|
+
|
|
38
|
+
## Login + credentials
|
|
39
|
+
- Login command: `nexus login` (QR via Linked Devices).
|
|
40
|
+
- Multi-account login: `nexus login --account <id>` (`<id>` = `accountId`).
|
|
41
|
+
- Default account (when `--account` is omitted): `default` if present, otherwise the first configured account id (sorted).
|
|
42
|
+
- Credentials stored in `~/nexus/state/credentials/whatsapp/<accountId>/creds.json`.
|
|
43
|
+
- Backup copy at `creds.json.bak` (restored on corruption).
|
|
44
|
+
- Legacy compatibility: older installs stored Baileys files directly in `~/nexus/state/credentials/`.
|
|
45
|
+
- Logout: `nexus logout` (or `--account <id>`) deletes WhatsApp auth state (but keeps shared `oauth.json`).
|
|
46
|
+
- Logged-out socket => error instructs re-link.
|
|
47
|
+
|
|
48
|
+
## Inbound flow (DM + group)
|
|
49
|
+
- WhatsApp events come from `messages.upsert` (Baileys).
|
|
50
|
+
- Inbox listeners are detached on shutdown to avoid accumulating event handlers in tests/restarts.
|
|
51
|
+
- Status/broadcast chats are ignored.
|
|
52
|
+
- Direct chats use E.164; groups use group JID.
|
|
53
|
+
- **DM policy**: `whatsapp.dmPolicy` controls direct chat access (default: `pairing`).
|
|
54
|
+
- Pairing: unknown senders get a pairing code (approve via `nexus pairing approve --provider whatsapp <code>`).
|
|
55
|
+
- Open: requires `whatsapp.allowFrom` to include `"*"`.
|
|
56
|
+
- Self messages are always allowed; “self-chat mode” still requires `whatsapp.allowFrom` to include your own number.
|
|
57
|
+
- **Group policy**: `whatsapp.groupPolicy` controls group handling (`open|disabled|allowlist`).
|
|
58
|
+
- `allowlist` uses `whatsapp.groupAllowFrom` (fallback: explicit `whatsapp.allowFrom`).
|
|
59
|
+
- **Self-chat mode**: avoids auto read receipts and ignores mention JIDs.
|
|
60
|
+
- Read receipts sent for non-self-chat DMs.
|
|
61
|
+
|
|
62
|
+
## WhatsApp FAQ: sending messages + pairing
|
|
63
|
+
|
|
64
|
+
**Will Nexus message random contacts when I link WhatsApp?**
|
|
65
|
+
No. Default DM policy is **pairing**, so unknown senders only get a pairing code and their message is **not processed**. Nexus only replies to chats it receives, or to sends you explicitly trigger (agent/CLI).
|
|
66
|
+
|
|
67
|
+
**How does pairing work on WhatsApp?**
|
|
68
|
+
Pairing is a DM gate for unknown senders:
|
|
69
|
+
- First DM from a new sender returns a short code (message is not processed).
|
|
70
|
+
- Approve with: `nexus pairing approve --channel whatsapp <code>` (list with `nexus pairing list --channel whatsapp`).
|
|
71
|
+
- Codes expire after 1 hour; pending requests are capped at 3 per provider.
|
|
72
|
+
|
|
73
|
+
**Why do you ask for my phone number in the wizard?**
|
|
74
|
+
The wizard uses it to set your **allowlist/owner** so your own DMs are permitted. It’s not used for auto-sending. If you run on your personal WhatsApp number, use that same number and enable `whatsapp.selfChatMode`.
|
|
75
|
+
|
|
76
|
+
## Message normalization (what the model sees)
|
|
77
|
+
- `Body` is the current message body with envelope.
|
|
78
|
+
- Quoted reply context is **always appended**:
|
|
79
|
+
```
|
|
80
|
+
[Replying to +1555 id:ABC123]
|
|
81
|
+
<quoted text or <media:...>>
|
|
82
|
+
[/Replying]
|
|
83
|
+
```
|
|
84
|
+
- Reply metadata also set:
|
|
85
|
+
- `ReplyToId` = stanzaId
|
|
86
|
+
- `ReplyToBody` = quoted body or media placeholder
|
|
87
|
+
- `ReplyToSender` = E.164 when known
|
|
88
|
+
- Media-only inbound messages use placeholders:
|
|
89
|
+
- `<media:image|video|audio|document|sticker>`
|
|
90
|
+
|
|
91
|
+
## Groups
|
|
92
|
+
- Groups map to `agent:<agentId>:whatsapp:group:<jid>` sessions.
|
|
93
|
+
- Group policy: `whatsapp.groupPolicy = open|disabled|allowlist` (default `open`).
|
|
94
|
+
- Activation modes:
|
|
95
|
+
- `mention` (default): requires @mention or regex match.
|
|
96
|
+
- `always`: always triggers.
|
|
97
|
+
- `/activation mention|always` is owner-only.
|
|
98
|
+
- Owner = `whatsapp.allowFrom` (or self E.164 if unset).
|
|
99
|
+
- **History injection**:
|
|
100
|
+
- Recent messages (default 50) inserted under:
|
|
101
|
+
`[Chat messages since your last reply - for context]`
|
|
102
|
+
- Current message under:
|
|
103
|
+
`[Current message - respond to this]`
|
|
104
|
+
- Sender suffix appended: `[from: Name (+E164)]`
|
|
105
|
+
- Group metadata cached 5 min (subject + participants).
|
|
106
|
+
|
|
107
|
+
## Reply delivery (threading)
|
|
108
|
+
- WhatsApp Web sends standard messages (no quoted reply threading in the current gateway).
|
|
109
|
+
- Reply tags are ignored on this provider.
|
|
110
|
+
|
|
111
|
+
## Outbound send (text + media)
|
|
112
|
+
- Uses active web listener; error if gateway not running.
|
|
113
|
+
- Text chunking: 4k max per message.
|
|
114
|
+
- Media:
|
|
115
|
+
- Image/video/audio/document supported.
|
|
116
|
+
- Audio sent as PTT; `audio/ogg` => `audio/ogg; codecs=opus`.
|
|
117
|
+
- Caption only on first media item.
|
|
118
|
+
- Media fetch supports HTTP(S) and local paths.
|
|
119
|
+
- Animated GIFs: WhatsApp expects MP4 with `gifPlayback: true` for inline looping.
|
|
120
|
+
- CLI: `nexus send --media <mp4> --gif-playback`
|
|
121
|
+
- Gateway: `send` params include `gifPlayback: true`
|
|
122
|
+
|
|
123
|
+
## Media limits + optimization
|
|
124
|
+
- Default cap: 5 MB (per media item).
|
|
125
|
+
- Override: `agent.mediaMaxMb`.
|
|
126
|
+
- Images are auto-optimized to JPEG under cap (resize + quality sweep).
|
|
127
|
+
- Oversize media => error; media reply falls back to text warning.
|
|
128
|
+
|
|
129
|
+
## Heartbeats
|
|
130
|
+
- **Gateway heartbeat** logs connection health (`web.heartbeatSeconds`, default 60s).
|
|
131
|
+
- **Agent heartbeat** is global (`agent.heartbeat.*`) and runs in the main session.
|
|
132
|
+
- Uses `HEARTBEAT` prompt + `HEARTBEAT_OK` skip behavior.
|
|
133
|
+
- Delivery defaults to the last used provider (or configured target).
|
|
134
|
+
|
|
135
|
+
## Reconnect behavior
|
|
136
|
+
- Backoff policy: `web.reconnect`:
|
|
137
|
+
- `initialMs`, `maxMs`, `factor`, `jitter`, `maxAttempts`.
|
|
138
|
+
- If maxAttempts reached, web monitoring stops (degraded).
|
|
139
|
+
- Logged-out => stop and require re-link.
|
|
140
|
+
|
|
141
|
+
## Config quick map
|
|
142
|
+
- `whatsapp.dmPolicy` (DM policy: pairing/allowlist/open/disabled).
|
|
143
|
+
- `whatsapp.allowFrom` (DM allowlist).
|
|
144
|
+
- `whatsapp.accounts.<accountId>.*` (per-account settings + optional `authDir`).
|
|
145
|
+
- `whatsapp.groupAllowFrom` (group sender allowlist).
|
|
146
|
+
- `whatsapp.groupPolicy` (group policy).
|
|
147
|
+
- `whatsapp.groups` (group allowlist + mention gating defaults; use `"*"` to allow all)
|
|
148
|
+
- `routing.groupChat.mentionPatterns`
|
|
149
|
+
- `routing.groupChat.historyLimit`
|
|
150
|
+
- `messages.messagePrefix` (inbound prefix)
|
|
151
|
+
- `messages.responsePrefix` (outbound prefix)
|
|
152
|
+
- `agent.mediaMaxMb`
|
|
153
|
+
- `agent.heartbeat.every`
|
|
154
|
+
- `agent.heartbeat.model` (optional override)
|
|
155
|
+
- `agent.heartbeat.target`
|
|
156
|
+
- `agent.heartbeat.to`
|
|
157
|
+
- `session.*` (scope, idle, store, mainKey)
|
|
158
|
+
- `web.enabled` (disable provider startup when false)
|
|
159
|
+
- `web.heartbeatSeconds`
|
|
160
|
+
- `web.reconnect.*`
|
|
161
|
+
|
|
162
|
+
## Logs + troubleshooting
|
|
163
|
+
- Subsystems: `whatsapp/inbound`, `whatsapp/outbound`, `web-heartbeat`, `web-reconnect`.
|
|
164
|
+
- Log file: `~/nexus/state/logs/nexus-YYYY-MM-DD.log` (configurable).
|
|
165
|
+
- Troubleshooting guide: [`docs/troubleshooting.md`](https://docs.nexus.bot/troubleshooting).
|
|
166
|
+
|
|
167
|
+
## Tests
|
|
168
|
+
- `src/web/auto-reply.test.ts` (mention gating, history injection, reply flow)
|
|
169
|
+
- `src/web/monitor-inbox.test.ts` (inbound parsing + reply context)
|
|
170
|
+
- `src/web/outbound.test.ts` (send mapping + media)
|
package/docs/windows.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Windows app status + contribution call"
|
|
3
|
+
read_when:
|
|
4
|
+
- Looking for Windows companion app status
|
|
5
|
+
- Planning platform coverage or contributions
|
|
6
|
+
---
|
|
7
|
+
# Windows App
|
|
8
|
+
|
|
9
|
+
Nexus core is fully supported on Windows. The core is written in TypeScript, so it runs anywhere Node runs.
|
|
10
|
+
|
|
11
|
+
We do not have a Windows companion app yet. It is planned, and we would love contributions to make it happen.
|