@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,211 @@
|
|
|
1
|
+
# Nexus Testing Philosophy
|
|
2
|
+
|
|
3
|
+
> **No mocks. Real integration tests. Agent-driven verification.**
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
### 1. Mocks Are Technical Debt
|
|
8
|
+
|
|
9
|
+
Mocks diverge from reality. They test your assumptions, not actual behavior. They require maintenance when APIs change. **We don't use mocks in Nexus.**
|
|
10
|
+
|
|
11
|
+
Instead:
|
|
12
|
+
- **Unit tests** test pure functions with real inputs/outputs
|
|
13
|
+
- **Integration tests** hit real APIs (gated behind env vars)
|
|
14
|
+
- **Agent tests** use actual agents to verify behavior
|
|
15
|
+
|
|
16
|
+
### 2. Real API Calls > Mock Responses
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// ❌ BAD - Mock that will drift from reality
|
|
20
|
+
vi.mock("@anthropic-ai/sdk", () => ({
|
|
21
|
+
Anthropic: vi.fn().mockImplementation(() => ({
|
|
22
|
+
messages: { create: vi.fn().mockResolvedValue({ /* fake response */ }) }
|
|
23
|
+
}))
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
// ✅ GOOD - Real API call, gated for CI
|
|
27
|
+
describe.skipIf(!process.env.ANTHROPIC_API_KEY)("ODU Integration", () => {
|
|
28
|
+
it("should delegate from IA to EA", async () => {
|
|
29
|
+
const controlPlane = new ODUControlPlane({ /* real config */ });
|
|
30
|
+
const result = await controlPlane.sendMessage({
|
|
31
|
+
sessionKey: "test:integration",
|
|
32
|
+
message: "Analyze this codebase",
|
|
33
|
+
});
|
|
34
|
+
expect(result.success).toBe(true);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 3. Agent-Driven Verification
|
|
40
|
+
|
|
41
|
+
For complex behavior, define tests in markdown that an agent executes:
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
# Test: ODU Delegation Flow
|
|
45
|
+
|
|
46
|
+
## Setup
|
|
47
|
+
1. Initialize ODUControlPlane with test config
|
|
48
|
+
2. Ensure ~/nexus/home workspace exists
|
|
49
|
+
|
|
50
|
+
## Steps
|
|
51
|
+
1. Send message: "Create a file called test.txt with 'hello world'"
|
|
52
|
+
2. Wait for EA to complete
|
|
53
|
+
3. Verify file exists at ~/nexus/home/test.txt
|
|
54
|
+
4. Verify file contents equal "hello world"
|
|
55
|
+
|
|
56
|
+
## Cleanup
|
|
57
|
+
1. Delete test.txt
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
These markdown test specs can be executed by Ralph or any agent with file system access.
|
|
61
|
+
|
|
62
|
+
### 4. Test Categories
|
|
63
|
+
|
|
64
|
+
| Category | What | When to Run | API Calls |
|
|
65
|
+
|----------|------|-------------|-----------|
|
|
66
|
+
| **Unit** | Pure functions, utilities | Always (CI) | None |
|
|
67
|
+
| **Integration** | Real API calls | When `ANTHROPIC_API_KEY` set | Yes |
|
|
68
|
+
| **Agent** | Full agent flows | Manual / nightly | Yes |
|
|
69
|
+
| **E2E** | Complete user journeys | Pre-release | Yes |
|
|
70
|
+
|
|
71
|
+
### 5. Environment Gating
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// Skip if no API key (CI-safe)
|
|
75
|
+
describe.skipIf(!process.env.ANTHROPIC_API_KEY)("Real API Tests", () => {
|
|
76
|
+
// These only run when you have credentials
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Run always (pure logic)
|
|
80
|
+
describe("Session Path Resolution", () => {
|
|
81
|
+
// No external dependencies
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 6. Test Commands
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Unit tests only (CI)
|
|
89
|
+
pnpm test
|
|
90
|
+
|
|
91
|
+
# Integration tests (requires API keys)
|
|
92
|
+
ANTHROPIC_API_KEY=sk-... pnpm test:integration
|
|
93
|
+
|
|
94
|
+
# Agent verification (runs Ralph)
|
|
95
|
+
pnpm test:agent
|
|
96
|
+
|
|
97
|
+
# Full E2E suite
|
|
98
|
+
pnpm test:e2e
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## What We Test
|
|
102
|
+
|
|
103
|
+
### ✅ Test These
|
|
104
|
+
|
|
105
|
+
- **Path resolution** - `resolveStateDir()`, `resolveSessionDir()`
|
|
106
|
+
- **Config parsing** - Loading and validating `nexus.json`
|
|
107
|
+
- **Session storage** - Writing/reading JSONL history
|
|
108
|
+
- **Compaction** - Archiving and summarization
|
|
109
|
+
- **Skill loading** - Parsing SKILL.md, gating logic
|
|
110
|
+
- **Queue semantics** - steer/followup/collect modes
|
|
111
|
+
- **ODU delegation** - IA → EA message routing
|
|
112
|
+
|
|
113
|
+
### ❌ Don't Test These (With Mocks)
|
|
114
|
+
|
|
115
|
+
- Claude API responses (use real API or skip)
|
|
116
|
+
- OAuth flows (use real auth or skip)
|
|
117
|
+
- File system operations (use real temp dirs)
|
|
118
|
+
- Network requests (use real endpoints or skip)
|
|
119
|
+
|
|
120
|
+
## Writing New Tests
|
|
121
|
+
|
|
122
|
+
### 1. Start with the real thing
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
it("should compact session and preserve recent messages", async () => {
|
|
126
|
+
// Create real session with real history
|
|
127
|
+
const agentId = "test-agent";
|
|
128
|
+
const sessionId = `test-${Date.now()}`;
|
|
129
|
+
|
|
130
|
+
// Write real history
|
|
131
|
+
for (let i = 0; i < 20; i++) {
|
|
132
|
+
await appendToHistory(agentId, sessionId, {
|
|
133
|
+
turn_id: `turn-${i}`,
|
|
134
|
+
role: i % 2 === 0 ? "user" : "assistant",
|
|
135
|
+
content: `Message ${i}`,
|
|
136
|
+
timestamp: new Date().toISOString(),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Real compaction (may call Claude API if ANTHROPIC_API_KEY set)
|
|
141
|
+
const result = await compactSession(agentId, sessionId, {
|
|
142
|
+
keepRecentMessages: 5,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Verify real results
|
|
146
|
+
expect(result.turnsArchived).toBe(15);
|
|
147
|
+
expect(result.turnsKept).toBe(5);
|
|
148
|
+
|
|
149
|
+
// Cleanup
|
|
150
|
+
await fs.rm(resolveSessionDir(agentId, sessionId), { recursive: true });
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 2. Gate expensive operations
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
it.skipIf(!process.env.ANTHROPIC_API_KEY)(
|
|
158
|
+
"should generate summary using Claude",
|
|
159
|
+
async () => {
|
|
160
|
+
// This test actually calls Claude
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 3. Use temp directories
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
let tempDir: string;
|
|
169
|
+
|
|
170
|
+
beforeEach(async () => {
|
|
171
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "nexus-test-"));
|
|
172
|
+
process.env.NEXUS_STATE_DIR = tempDir;
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
afterEach(async () => {
|
|
176
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
177
|
+
delete process.env.NEXUS_STATE_DIR;
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Agent Test Specs
|
|
182
|
+
|
|
183
|
+
For complex flows, write markdown specs in `test/specs/`:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
test/
|
|
187
|
+
├── specs/
|
|
188
|
+
│ ├── odu-delegation.md
|
|
189
|
+
│ ├── session-compaction.md
|
|
190
|
+
│ └── skill-loading.md
|
|
191
|
+
└── agent-runner.ts # Executes specs
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The agent runner parses these specs and executes them, reporting pass/fail.
|
|
195
|
+
|
|
196
|
+
## Migration from Mocks
|
|
197
|
+
|
|
198
|
+
If you find existing mock-based tests:
|
|
199
|
+
|
|
200
|
+
1. **Identify what's being mocked** - Is it an API? File system? Network?
|
|
201
|
+
2. **Replace with real calls** - Gate behind env vars if needed
|
|
202
|
+
3. **Use temp directories** - For file system tests
|
|
203
|
+
4. **Delete the mock** - No mock should survive
|
|
204
|
+
|
|
205
|
+
## Summary
|
|
206
|
+
|
|
207
|
+
- **No mocks** - They lie
|
|
208
|
+
- **Real APIs** - Gated behind env vars
|
|
209
|
+
- **Agent verification** - For complex flows
|
|
210
|
+
- **Temp directories** - For file system tests
|
|
211
|
+
- **Markdown specs** - Human-readable test definitions
|
package/docs/thinking.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Directive syntax for /think + /verbose and how they affect model reasoning"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adjusting thinking or verbose directive parsing or defaults
|
|
5
|
+
---
|
|
6
|
+
# Thinking Levels (/think directives)
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
- Inline directive in any inbound body: `/t <level>`, `/think:<level>`, or `/thinking <level>`.
|
|
10
|
+
- Levels (aliases): `off | minimal | low | medium | high`
|
|
11
|
+
- minimal → “think”
|
|
12
|
+
- low → “think hard”
|
|
13
|
+
- medium → “think harder”
|
|
14
|
+
- high → “ultrathink” (max budget)
|
|
15
|
+
- `highest`, `max` map to `high`.
|
|
16
|
+
|
|
17
|
+
## Resolution order
|
|
18
|
+
1. Inline directive on the message (applies only to that message).
|
|
19
|
+
2. Session override (set by sending a directive-only message).
|
|
20
|
+
3. Global default (`agent.thinkingDefault` in config).
|
|
21
|
+
4. Fallback: low for reasoning-capable models; off otherwise.
|
|
22
|
+
|
|
23
|
+
## Setting a session default
|
|
24
|
+
- Send a message that is **only** the directive (whitespace allowed), e.g. `/think:medium` or `/t high`.
|
|
25
|
+
- That sticks for the current session (per-sender by default); cleared by `/think:off` or session idle reset.
|
|
26
|
+
- Confirmation reply is sent (`Thinking level set to high.` / `Thinking disabled.`). If the level is invalid (e.g. `/thinking big`), the command is rejected with a hint and the session state is left unchanged.
|
|
27
|
+
|
|
28
|
+
## Application by agent
|
|
29
|
+
- **Embedded Pi**: the resolved level is passed to the in-process Pi agent runtime.
|
|
30
|
+
|
|
31
|
+
## Verbose directives (/verbose or /v)
|
|
32
|
+
- Levels: `on|full` or `off` (default).
|
|
33
|
+
- Directive-only message toggles session verbose and replies `Verbose logging enabled.` / `Verbose logging disabled.`; invalid levels return a hint without changing state.
|
|
34
|
+
- Inline directive affects only that message; session/global defaults apply otherwise.
|
|
35
|
+
- When verbose is on, agents that emit structured tool results (Pi, other JSON agents) send each tool result back as its own metadata-only message, prefixed with `<emoji> <tool-name>: <arg>` when available (path/command); the tool output itself is not forwarded. These tool summaries are sent as soon as each tool finishes (separate bubbles), not as streaming deltas. If you toggle `/verbose on|off` while a run is in-flight, subsequent tool bubbles honor the new setting.
|
|
36
|
+
|
|
37
|
+
## Related
|
|
38
|
+
- Elevated mode docs live in [`docs/elevated.md`](https://docs.nexus.bot/elevated).
|
|
39
|
+
|
|
40
|
+
## Heartbeats
|
|
41
|
+
- Heartbeat probe body is `HEARTBEAT`. Inline directives in a heartbeat message apply as usual (but avoid changing session defaults from heartbeats).
|
|
42
|
+
|
|
43
|
+
## Web chat UI
|
|
44
|
+
- The web chat thinking selector mirrors the session's stored level from the inbound session store/config when the page loads.
|
|
45
|
+
- Picking another level applies only to the next message (`thinkingOnce`); after sending, the selector snaps back to the stored session level.
|
|
46
|
+
- To change the session default, send a `/think:<level>` directive (as before); the selector will reflect it after the next reload.
|
package/docs/timezone.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Timezone handling for agents, envelopes, and prompts"
|
|
3
|
+
read_when:
|
|
4
|
+
- You need to understand how timestamps are normalized for the model
|
|
5
|
+
- Configuring the user timezone for system prompts
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Timezones
|
|
9
|
+
|
|
10
|
+
Nexus standardizes timestamps so the model sees a **single reference time**.
|
|
11
|
+
|
|
12
|
+
## Message envelopes (UTC)
|
|
13
|
+
|
|
14
|
+
Inbound messages are wrapped in an envelope like:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[Provider ... 2026-01-05T21:26Z] message text
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The timestamp in the envelope is **always UTC**, with minutes precision.
|
|
21
|
+
|
|
22
|
+
## Tool payloads (raw provider data)
|
|
23
|
+
|
|
24
|
+
Tool calls (`discord.readMessages`, `slack.readMessages`, etc.) return **raw provider timestamps**.
|
|
25
|
+
These are typically UTC ISO strings (Discord) or UTC epoch strings (Slack). We do not rewrite them.
|
|
26
|
+
|
|
27
|
+
## User timezone for the system prompt
|
|
28
|
+
|
|
29
|
+
Set `agent.userTimezone` to tell the model the user's local time zone. If it is
|
|
30
|
+
unset, Nexus resolves the **host timezone at runtime** (no config write).
|
|
31
|
+
|
|
32
|
+
```json5
|
|
33
|
+
{
|
|
34
|
+
agent: { userTimezone: "America/Chicago" }
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The system prompt includes:
|
|
39
|
+
- `User timezone: America/Chicago`
|
|
40
|
+
- `Current user time: 2026-01-05 15:26`
|
package/docs/tools.md
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Agent tool surface for Nexus (browser, canvas, nodes, cron) replacing nexus-* skills"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying agent tools
|
|
5
|
+
- Retiring or changing nexus-* skills
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Tools (Nexus)
|
|
9
|
+
|
|
10
|
+
Nexus exposes **first-class agent tools** for browser, canvas, nodes, and cron.
|
|
11
|
+
These replace the old `nexus-*` skills: the tools are typed, no shelling,
|
|
12
|
+
and the agent should rely on them directly.
|
|
13
|
+
|
|
14
|
+
## Disabling tools
|
|
15
|
+
|
|
16
|
+
You can globally allow/deny tools via `agent.tools` in `nexus.json`
|
|
17
|
+
(deny wins). This prevents disallowed tools from being sent to providers.
|
|
18
|
+
|
|
19
|
+
```json5
|
|
20
|
+
{
|
|
21
|
+
agent: {
|
|
22
|
+
tools: {
|
|
23
|
+
deny: ["browser"]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Tool profiles (base allowlist)
|
|
30
|
+
|
|
31
|
+
`agent.tools.profile` sets a **base tool allowlist** before `agent.tools.allow`/`agent.tools.deny`.
|
|
32
|
+
Per-agent override: `routing.agents.<agentId>.tools.profile`.
|
|
33
|
+
|
|
34
|
+
Profiles:
|
|
35
|
+
- `minimal`: `sessions_list` only
|
|
36
|
+
- `coding`: `group:fs`, `group:runtime`, `group:sessions`, `group:memory`, `image`
|
|
37
|
+
- `messaging`: `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`
|
|
38
|
+
- `full`: no restriction (same as unset)
|
|
39
|
+
|
|
40
|
+
Example (messaging-only by default, allow Slack + Discord tools too):
|
|
41
|
+
```json5
|
|
42
|
+
{
|
|
43
|
+
agent: {
|
|
44
|
+
tools: {
|
|
45
|
+
profile: "messaging",
|
|
46
|
+
allow: ["slack", "discord"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Example (coding profile, but deny exec/process everywhere):
|
|
53
|
+
```json5
|
|
54
|
+
{
|
|
55
|
+
agent: {
|
|
56
|
+
tools: {
|
|
57
|
+
profile: "coding",
|
|
58
|
+
deny: ["group:runtime"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Example (global coding profile, messaging-only support agent):
|
|
65
|
+
```json5
|
|
66
|
+
{
|
|
67
|
+
agent: { tools: { profile: "coding" } },
|
|
68
|
+
routing: {
|
|
69
|
+
agents: {
|
|
70
|
+
support: {
|
|
71
|
+
tools: { profile: "messaging", allow: ["slack"] }
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Tool groups (shorthands)
|
|
79
|
+
|
|
80
|
+
Tool policies (global, per-agent, sandbox) support `group:*` entries that expand
|
|
81
|
+
to multiple tools. Use these in `agent.tools.allow` / `agent.tools.deny`.
|
|
82
|
+
|
|
83
|
+
Available groups:
|
|
84
|
+
- `group:runtime`: `exec`, `process`
|
|
85
|
+
- `group:fs`: `read`, `write`, `edit`, `apply_patch`
|
|
86
|
+
- `group:sessions`: `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`
|
|
87
|
+
- `group:memory`: `memory_search`, `memory_get`
|
|
88
|
+
- `group:ui`: `browser`, `canvas`
|
|
89
|
+
- `group:automation`: `cron`, `gateway`
|
|
90
|
+
- `group:messaging`: `discord`, `slack`
|
|
91
|
+
- `group:nodes`: `nodes`
|
|
92
|
+
- `group:nexus`: all built-in Nexus tools (excludes provider plugins)
|
|
93
|
+
|
|
94
|
+
Example (allow only file tools + browser):
|
|
95
|
+
```json5
|
|
96
|
+
{
|
|
97
|
+
agent: {
|
|
98
|
+
tools: {
|
|
99
|
+
allow: ["group:fs", "browser"]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Tool inventory
|
|
106
|
+
|
|
107
|
+
### `bash`
|
|
108
|
+
Run shell commands in the workspace.
|
|
109
|
+
|
|
110
|
+
Core parameters:
|
|
111
|
+
- `command` (required)
|
|
112
|
+
- `yieldMs` (auto-background after timeout, default 10000)
|
|
113
|
+
- `background` (immediate background)
|
|
114
|
+
- `timeout` (seconds; kills the process if exceeded, default 1800)
|
|
115
|
+
- `elevated` (bool; run on host if elevated mode is enabled/allowed)
|
|
116
|
+
- Need a real TTY? Use the tmux skill.
|
|
117
|
+
|
|
118
|
+
Notes:
|
|
119
|
+
- Returns `status: "running"` with a `sessionId` when backgrounded.
|
|
120
|
+
- Use `process` to poll/log/write/kill/clear background sessions.
|
|
121
|
+
|
|
122
|
+
### `process`
|
|
123
|
+
Manage background bash sessions.
|
|
124
|
+
|
|
125
|
+
Core actions:
|
|
126
|
+
- `list`, `poll`, `log`, `write`, `kill`, `clear`, `remove`
|
|
127
|
+
|
|
128
|
+
Notes:
|
|
129
|
+
- `poll` returns new output and exit status when complete.
|
|
130
|
+
- `log` supports line-based `offset`/`limit` (omit `offset` to grab the last N lines).
|
|
131
|
+
|
|
132
|
+
### `browser`
|
|
133
|
+
Control the dedicated nexus browser.
|
|
134
|
+
|
|
135
|
+
Core actions:
|
|
136
|
+
- `status`, `start`, `stop`, `tabs`, `open`, `focus`, `close`
|
|
137
|
+
- `snapshot` (aria/ai)
|
|
138
|
+
- `screenshot` (returns image block + `MEDIA:<path>`)
|
|
139
|
+
- `act` (UI actions: click/type/press/hover/drag/select/fill/resize/wait/evaluate)
|
|
140
|
+
- `navigate`, `console`, `pdf`, `upload`, `dialog`
|
|
141
|
+
|
|
142
|
+
Profile management:
|
|
143
|
+
- `profiles` — list all browser profiles with status
|
|
144
|
+
- `create-profile` — create new profile with auto-allocated port (or `cdpUrl`)
|
|
145
|
+
- `delete-profile` — stop browser, delete user data, remove from config (local only)
|
|
146
|
+
- `reset-profile` — kill orphan process on profile's port (local only)
|
|
147
|
+
|
|
148
|
+
Common parameters:
|
|
149
|
+
- `controlUrl` (defaults from config)
|
|
150
|
+
- `profile` (optional; defaults to `browser.defaultProfile`)
|
|
151
|
+
Notes:
|
|
152
|
+
- Requires `browser.enabled=true` (default is `true`; set `false` to disable).
|
|
153
|
+
- Uses `browser.controlUrl` unless `controlUrl` is passed explicitly.
|
|
154
|
+
- All actions accept optional `profile` parameter for multi-instance support.
|
|
155
|
+
- When `profile` is omitted, uses `browser.defaultProfile` (defaults to "nexus").
|
|
156
|
+
- Profile names: lowercase alphanumeric + hyphens only (max 64 chars).
|
|
157
|
+
- Port range: 18800-18899 (~100 profiles max).
|
|
158
|
+
- Remote profiles are attach-only (no start/stop/reset).
|
|
159
|
+
- `snapshot` defaults to `ai`; use `aria` for the accessibility tree.
|
|
160
|
+
- `act` requires `ref` from `snapshot --format ai`; use `evaluate` for rare CSS selector needs.
|
|
161
|
+
- Avoid `act` → `wait` by default; use it only in exceptional cases (no reliable UI state to wait on).
|
|
162
|
+
- `upload` can optionally pass a `ref` to auto-click after arming.
|
|
163
|
+
- `upload` also supports `inputRef` (aria ref) or `element` (CSS selector) to set `<input type="file">` directly.
|
|
164
|
+
|
|
165
|
+
### `canvas`
|
|
166
|
+
Drive the node Canvas (present, eval, snapshot, A2UI).
|
|
167
|
+
|
|
168
|
+
Core actions:
|
|
169
|
+
- `present`, `hide`, `navigate`, `eval`
|
|
170
|
+
- `snapshot` (returns image block + `MEDIA:<path>`)
|
|
171
|
+
- `a2ui_push`, `a2ui_reset`
|
|
172
|
+
|
|
173
|
+
Notes:
|
|
174
|
+
- Uses gateway `node.invoke` under the hood.
|
|
175
|
+
- If no `node` is provided, the tool picks a default (single connected node or local mac node).
|
|
176
|
+
- A2UI is v0.8 only (no `createSurface`); the CLI rejects v0.9 JSONL with line errors.
|
|
177
|
+
- Quick smoke: `nexus canvas a2ui push --text "Hello from A2UI"`.
|
|
178
|
+
|
|
179
|
+
### `nodes`
|
|
180
|
+
Discover and target paired nodes; send notifications; capture camera/screen.
|
|
181
|
+
|
|
182
|
+
Core actions:
|
|
183
|
+
- `status`, `describe`
|
|
184
|
+
- `pending`, `approve`, `reject` (pairing)
|
|
185
|
+
- `notify` (macOS `system.notify`)
|
|
186
|
+
- `camera_snap`, `camera_clip`, `screen_record`
|
|
187
|
+
- `location_get`
|
|
188
|
+
|
|
189
|
+
Notes:
|
|
190
|
+
- Camera/screen commands require the node app to be foregrounded.
|
|
191
|
+
- Images return image blocks + `MEDIA:<path>`.
|
|
192
|
+
- Videos return `FILE:<path>` (mp4).
|
|
193
|
+
- Location returns a JSON payload (lat/lon/accuracy/timestamp).
|
|
194
|
+
|
|
195
|
+
### `image`
|
|
196
|
+
Analyze an image with the configured image model.
|
|
197
|
+
|
|
198
|
+
Core parameters:
|
|
199
|
+
- `image` (required path or URL)
|
|
200
|
+
- `prompt` (optional; defaults to "Describe the image.")
|
|
201
|
+
- `model` (optional override)
|
|
202
|
+
- `maxBytesMb` (optional size cap)
|
|
203
|
+
|
|
204
|
+
Notes:
|
|
205
|
+
- Only available when `agent.imageModel` is configured (primary or fallbacks).
|
|
206
|
+
- Uses the image model directly (independent of the main chat model).
|
|
207
|
+
|
|
208
|
+
### `cron`
|
|
209
|
+
Manage Gateway cron jobs and wakeups.
|
|
210
|
+
|
|
211
|
+
Core actions:
|
|
212
|
+
- `status`, `list`
|
|
213
|
+
- `add`, `update`, `remove`, `run`, `runs`
|
|
214
|
+
- `wake` (enqueue system event + optional immediate heartbeat)
|
|
215
|
+
|
|
216
|
+
Notes:
|
|
217
|
+
- `add` expects a full cron job object (same schema as `cron.add` RPC).
|
|
218
|
+
- `update` uses `{ id, patch }`.
|
|
219
|
+
|
|
220
|
+
### `gateway`
|
|
221
|
+
Restart the running Gateway process (in-place).
|
|
222
|
+
|
|
223
|
+
Core actions:
|
|
224
|
+
- `restart` (sends `SIGUSR1` to the current process; `nexus gateway`/`gateway-daemon` restart in-place)
|
|
225
|
+
|
|
226
|
+
Notes:
|
|
227
|
+
- Use `delayMs` (defaults to 2000) to avoid interrupting an in-flight reply.
|
|
228
|
+
|
|
229
|
+
### `sessions_list` / `sessions_history` / `sessions_send`
|
|
230
|
+
List sessions, inspect transcript history, or send to another session.
|
|
231
|
+
|
|
232
|
+
Core parameters:
|
|
233
|
+
- `sessions_list`: `kinds?`, `limit?`, `activeMinutes?`, `messageLimit?` (0 = none)
|
|
234
|
+
- `sessions_history`: `sessionKey`, `limit?`, `includeTools?`
|
|
235
|
+
- `sessions_send`: `sessionKey`, `message`, `timeoutSeconds?` (0 = fire-and-forget)
|
|
236
|
+
|
|
237
|
+
Notes:
|
|
238
|
+
- `main` is the canonical direct-chat key; global/unknown are hidden.
|
|
239
|
+
- `messageLimit > 0` fetches last N messages per session (tool messages filtered).
|
|
240
|
+
- `sessions_send` waits for final completion when `timeoutSeconds > 0`.
|
|
241
|
+
- `sessions_send` runs a reply‑back ping‑pong (reply `REPLY_SKIP` to stop; max turns via `session.agentToAgent.maxPingPongTurns`, 0–5).
|
|
242
|
+
- After the ping‑pong, the target agent runs an **announce step**; reply `ANNOUNCE_SKIP` to suppress the announcement.
|
|
243
|
+
|
|
244
|
+
### `discord`
|
|
245
|
+
Send Discord reactions, stickers, or polls.
|
|
246
|
+
|
|
247
|
+
Core actions:
|
|
248
|
+
- `react` (`channelId`, `messageId`, `emoji`)
|
|
249
|
+
- `reactions` (`channelId`, `messageId`, optional `limit`)
|
|
250
|
+
- `sticker` (`to`, `stickerIds`, optional `content`)
|
|
251
|
+
- `poll` (`to`, `question`, `answers`, optional `allowMultiselect`, `durationHours`, `content`)
|
|
252
|
+
- `permissions` (`channelId`)
|
|
253
|
+
- `readMessages` (`channelId`, optional `limit`/`before`/`after`/`around`)
|
|
254
|
+
- `sendMessage` (`to`, `content`, optional `mediaUrl`, `replyTo`)
|
|
255
|
+
- `editMessage` (`channelId`, `messageId`, `content`)
|
|
256
|
+
- `deleteMessage` (`channelId`, `messageId`)
|
|
257
|
+
- `threadCreate` (`channelId`, `name`, optional `messageId`, `autoArchiveMinutes`)
|
|
258
|
+
- `threadList` (`guildId`, optional `channelId`, `includeArchived`, `before`, `limit`)
|
|
259
|
+
- `threadReply` (`channelId`, `content`, optional `mediaUrl`, `replyTo`)
|
|
260
|
+
- `pinMessage`/`unpinMessage` (`channelId`, `messageId`)
|
|
261
|
+
- `listPins` (`channelId`)
|
|
262
|
+
- `searchMessages` (`guildId`, `content`, optional `channelId`/`channelIds`, `authorId`/`authorIds`, `limit`)
|
|
263
|
+
- `memberInfo` (`guildId`, `userId`)
|
|
264
|
+
- `roleInfo` (`guildId`)
|
|
265
|
+
- `emojiList` (`guildId`)
|
|
266
|
+
- `roleAdd`/`roleRemove` (`guildId`, `userId`, `roleId`)
|
|
267
|
+
- `channelInfo` (`channelId`)
|
|
268
|
+
- `channelList` (`guildId`)
|
|
269
|
+
- `channelCreate` (`guildId`, `name`, optional `type`, `parentId`, `topic`, `position`, `nsfw`)
|
|
270
|
+
- `channelEdit` (`channelId`, optional `name`, `topic`, `position`, `parentId`, `nsfw`, `rateLimitPerUser`)
|
|
271
|
+
- `channelDelete` (`channelId`)
|
|
272
|
+
- `channelMove` (`guildId`, `channelId`, optional `parentId`, `position`)
|
|
273
|
+
- `categoryCreate` (`guildId`, `name`, optional `position`)
|
|
274
|
+
- `categoryEdit` (`categoryId`, optional `name`, `position`)
|
|
275
|
+
- `categoryDelete` (`categoryId`)
|
|
276
|
+
- `voiceStatus` (`guildId`, `userId`)
|
|
277
|
+
- `eventList` (`guildId`)
|
|
278
|
+
- `eventCreate` (`guildId`, `name`, `startTime`, optional `endTime`, `description`, `channelId`, `entityType`, `location`)
|
|
279
|
+
- `timeout` (`guildId`, `userId`, optional `durationMinutes`, `until`, `reason`)
|
|
280
|
+
- `kick` (`guildId`, `userId`, optional `reason`)
|
|
281
|
+
- `ban` (`guildId`, `userId`, optional `reason`, `deleteMessageDays`)
|
|
282
|
+
|
|
283
|
+
Notes:
|
|
284
|
+
- `to` accepts `channel:<id>` or `user:<id>`.
|
|
285
|
+
- Polls require 2–10 answers and default to 24 hours.
|
|
286
|
+
- `reactions` returns per-emoji user lists (limited to 100 per reaction).
|
|
287
|
+
- `discord.actions.*` gates Discord tool actions; `roles`, `channels`, and `moderation` default to `false`.
|
|
288
|
+
- `searchMessages` follows the Discord preview spec (limit max 25, channel/author filters accept arrays).
|
|
289
|
+
- The tool is only exposed when the current provider is Discord.
|
|
290
|
+
|
|
291
|
+
## Parameters (common)
|
|
292
|
+
|
|
293
|
+
Gateway-backed tools (`canvas`, `nodes`, `cron`):
|
|
294
|
+
- `gatewayUrl` (default `ws://127.0.0.1:18789`)
|
|
295
|
+
- `gatewayToken` (if auth enabled)
|
|
296
|
+
- `timeoutMs`
|
|
297
|
+
|
|
298
|
+
Browser tool:
|
|
299
|
+
- `controlUrl` (defaults from config)
|
|
300
|
+
|
|
301
|
+
## Recommended agent flows
|
|
302
|
+
|
|
303
|
+
Browser automation:
|
|
304
|
+
1) `browser` → `status` / `start`
|
|
305
|
+
2) `snapshot` (ai or aria)
|
|
306
|
+
3) `act` (click/type/press)
|
|
307
|
+
4) `screenshot` if you need visual confirmation
|
|
308
|
+
|
|
309
|
+
Canvas render:
|
|
310
|
+
1) `canvas` → `present`
|
|
311
|
+
2) `a2ui_push` (optional)
|
|
312
|
+
3) `snapshot`
|
|
313
|
+
|
|
314
|
+
Node targeting:
|
|
315
|
+
1) `nodes` → `status`
|
|
316
|
+
2) `describe` on the chosen node
|
|
317
|
+
3) `notify` / `camera_snap` / `screen_record`
|
|
318
|
+
|
|
319
|
+
## Safety
|
|
320
|
+
|
|
321
|
+
- Avoid `system.run` (not exposed as a tool).
|
|
322
|
+
- Respect user consent for camera/screen capture.
|
|
323
|
+
- Use `status/describe` to ensure permissions before invoking media commands.
|
|
324
|
+
|
|
325
|
+
## How the model sees tools (pi-mono internals)
|
|
326
|
+
|
|
327
|
+
Tools are exposed to the model in **two parallel channels**:
|
|
328
|
+
|
|
329
|
+
1) **System prompt text**: a human-readable list + guidelines.
|
|
330
|
+
2) **Provider tool schema**: the actual function/tool declarations sent to the model API.
|
|
331
|
+
|
|
332
|
+
In pi-mono:
|
|
333
|
+
- System prompt builder: `packages/coding-agent/src/core/system-prompt.ts`
|
|
334
|
+
- Builds the `Available tools:` list from `toolDescriptions`.
|
|
335
|
+
- Appends skills and project context.
|
|
336
|
+
- Tool schemas passed to providers:
|
|
337
|
+
- OpenAI: `packages/ai/src/providers/openai-responses.ts` (`convertTools`)
|
|
338
|
+
- Anthropic: `packages/ai/src/providers/anthropic.ts` (`convertTools`)
|
|
339
|
+
- Gemini: `packages/ai/src/providers/google-shared.ts` (`convertTools`)
|
|
340
|
+
- Tool execution loop:
|
|
341
|
+
- Agent loop: `packages/ai/src/agent/agent-loop.ts`
|
|
342
|
+
- Validates tool arguments and executes tools, then appends `toolResult` messages.
|
|
343
|
+
|
|
344
|
+
In Nexus:
|
|
345
|
+
- System prompt append: `src/agents/system-prompt.ts`
|
|
346
|
+
- Tool list injected via `createNexusCodingTools()` in `src/agents/pi-tools.ts`
|