@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,214 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { execFile } from "node:child_process";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { installSkill } from "../agents/skills-install.js";
|
|
6
|
+
import { resolveStateDir } from "../config/paths.js";
|
|
7
|
+
import { NEXUS_ROOT } from "../utils.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
function firstName(full) {
|
|
10
|
+
const trimmed = full.trim();
|
|
11
|
+
if (!trimmed)
|
|
12
|
+
return trimmed;
|
|
13
|
+
return trimmed.split(/\s+/)[0] ?? trimmed;
|
|
14
|
+
}
|
|
15
|
+
function coerceStringArray(input) {
|
|
16
|
+
if (!Array.isArray(input))
|
|
17
|
+
return [];
|
|
18
|
+
return input.map((v) => String(v)).map((s) => s.trim()).filter(Boolean);
|
|
19
|
+
}
|
|
20
|
+
function parseEveWhoamiJson(stdout) {
|
|
21
|
+
const raw = stdout.trim();
|
|
22
|
+
if (!raw)
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
return {
|
|
27
|
+
ok: typeof parsed.ok === "boolean" ? parsed.ok : undefined,
|
|
28
|
+
name: typeof parsed.name === "string" ? parsed.name : undefined,
|
|
29
|
+
phones: coerceStringArray(parsed.phones),
|
|
30
|
+
emails: coerceStringArray(parsed.emails),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function fileExists(p) {
|
|
38
|
+
try {
|
|
39
|
+
await fs.access(p);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function hasBin(bin) {
|
|
47
|
+
try {
|
|
48
|
+
const res = await execFileAsync("bash", ["-lc", `command -v ${bin}`], {
|
|
49
|
+
timeout: 5000,
|
|
50
|
+
});
|
|
51
|
+
return Boolean(res.stdout.trim());
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function resolveEveCommandPath() {
|
|
58
|
+
// Prefer PATH
|
|
59
|
+
if (await hasBin("eve"))
|
|
60
|
+
return "eve";
|
|
61
|
+
// Common user-local bin
|
|
62
|
+
const home = process.env.HOME?.trim();
|
|
63
|
+
if (home) {
|
|
64
|
+
const candidate = path.join(home, "bin", "eve");
|
|
65
|
+
try {
|
|
66
|
+
await fs.access(candidate);
|
|
67
|
+
return candidate;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// ignore
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Developer convenience (Tyler's repo layout)
|
|
74
|
+
// NOTE: not for general users; used only if present.
|
|
75
|
+
try {
|
|
76
|
+
const candidate = path.join(process.env.HOME || "", "nexus", "home", "projects", "eve", "bin", "eve");
|
|
77
|
+
if (candidate && (await fileExists(candidate)))
|
|
78
|
+
return candidate;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// ignore
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
function resolvePreset(presetRaw) {
|
|
86
|
+
const preset = (presetRaw ?? "").trim().toLowerCase();
|
|
87
|
+
if (preset === "jeeves") {
|
|
88
|
+
return {
|
|
89
|
+
agentName: "Jeeves",
|
|
90
|
+
creature: "Butler",
|
|
91
|
+
vibe: "helpful, discreet, fast",
|
|
92
|
+
emoji: "🎩",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Default preset: neutral
|
|
96
|
+
return {
|
|
97
|
+
agentName: "Nexus bot",
|
|
98
|
+
creature: "Assistant",
|
|
99
|
+
vibe: "helpful and concise",
|
|
100
|
+
emoji: "🧠",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export async function applyBootstrapPreset(params) {
|
|
104
|
+
const { workspaceDir, runtime } = params;
|
|
105
|
+
const stateDir = resolveStateDir();
|
|
106
|
+
const agentId = process.env.NEXUS_AGENT_ID?.trim() || "default";
|
|
107
|
+
const agentIdentityDir = path.join(stateDir, "agents", agentId, "identity");
|
|
108
|
+
const userIdentityDir = path.join(stateDir, "user", "identity");
|
|
109
|
+
const onboardingDir = path.join(stateDir, "nexus", "onboarding");
|
|
110
|
+
const bootstrapPath = path.join(onboardingDir, "BOOTSTRAP.md");
|
|
111
|
+
if (!(await fileExists(bootstrapPath)))
|
|
112
|
+
return;
|
|
113
|
+
await fs.mkdir(agentIdentityDir, { recursive: true });
|
|
114
|
+
await fs.mkdir(userIdentityDir, { recursive: true });
|
|
115
|
+
const identityPath = path.join(agentIdentityDir, "IDENTITY.md");
|
|
116
|
+
const userPath = path.join(userIdentityDir, "PROFILE.md");
|
|
117
|
+
const soulPath = path.join(agentIdentityDir, "SOUL.md");
|
|
118
|
+
const agentsPath = path.join(NEXUS_ROOT, "AGENTS.md");
|
|
119
|
+
const preset = resolvePreset(params.preset);
|
|
120
|
+
const agentName = (params.agentName?.trim() || preset.agentName).trim();
|
|
121
|
+
let userName = params.userName?.trim() || "";
|
|
122
|
+
let preferredAddress = params.preferredAddress?.trim() || "";
|
|
123
|
+
let detectedPhones = [];
|
|
124
|
+
let detectedEmails = [];
|
|
125
|
+
const useEve = params.useEve !== undefined ? params.useEve : Boolean(params.preset);
|
|
126
|
+
if (useEve && process.platform === "darwin") {
|
|
127
|
+
let eveCmd = await resolveEveCommandPath();
|
|
128
|
+
if (!eveCmd) {
|
|
129
|
+
runtime.log("Installing Eve CLI (for bootstrap identity)…");
|
|
130
|
+
const tryInstall = async (installId) => await installSkill({
|
|
131
|
+
workspaceDir,
|
|
132
|
+
skillName: "eve",
|
|
133
|
+
installId,
|
|
134
|
+
timeoutMs: 15 * 60_000,
|
|
135
|
+
});
|
|
136
|
+
const installBrew = await tryInstall("brew");
|
|
137
|
+
if (!installBrew.ok) {
|
|
138
|
+
runtime.log(`Eve install (brew) failed (${installBrew.message}); trying go install…`);
|
|
139
|
+
const installGo = await tryInstall("go");
|
|
140
|
+
if (!installGo.ok) {
|
|
141
|
+
runtime.log(`Eve install (go) failed (${installGo.message}); continuing without Eve.`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
eveCmd = await resolveEveCommandPath();
|
|
145
|
+
}
|
|
146
|
+
if (eveCmd) {
|
|
147
|
+
try {
|
|
148
|
+
await execFileAsync(eveCmd, ["init"], { timeout: 60_000 });
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
runtime.log(`Eve init failed; continuing without Eve identity: ${err instanceof Error ? err.message : String(err)}`);
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const res = await execFileAsync(eveCmd, ["whoami"], { timeout: 30_000 });
|
|
155
|
+
const whoami = parseEveWhoamiJson(res.stdout);
|
|
156
|
+
if (whoami?.name)
|
|
157
|
+
userName = whoami.name;
|
|
158
|
+
detectedPhones = whoami?.phones ?? [];
|
|
159
|
+
detectedEmails = whoami?.emails ?? [];
|
|
160
|
+
if (!preferredAddress && whoami?.name)
|
|
161
|
+
preferredAddress = firstName(whoami.name);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
runtime.log(`Eve whoami failed; continuing without Eve identity: ${err instanceof Error ? err.message : String(err)}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!userName)
|
|
169
|
+
userName = "Test User";
|
|
170
|
+
if (!preferredAddress)
|
|
171
|
+
preferredAddress = firstName(userName) || "friend";
|
|
172
|
+
const identityMd = `# IDENTITY.md - Agent Identity
|
|
173
|
+
|
|
174
|
+
- Name: ${agentName}
|
|
175
|
+
- Creature: ${preset.creature}
|
|
176
|
+
- Vibe: ${preset.vibe}
|
|
177
|
+
- Emoji: ${preset.emoji}
|
|
178
|
+
`;
|
|
179
|
+
const userMd = `# PROFILE.md - User Profile
|
|
180
|
+
|
|
181
|
+
- Name: ${userName}
|
|
182
|
+
- Preferred address: ${preferredAddress}
|
|
183
|
+
- Pronouns (optional):
|
|
184
|
+
- Timezone (optional):
|
|
185
|
+
- Notes:
|
|
186
|
+
${detectedPhones.length ? `\n- Phones: ${detectedPhones.join(", ")}\n` : ""}
|
|
187
|
+
${detectedEmails.length ? `\n- Emails: ${detectedEmails.join(", ")}\n` : ""}
|
|
188
|
+
`;
|
|
189
|
+
// Keep SOUL.md if user already customized it; otherwise seed a helpful default.
|
|
190
|
+
const soulExists = await fileExists(soulPath);
|
|
191
|
+
if (!soulExists) {
|
|
192
|
+
const soulMd = `# SOUL.md - Persona & Boundaries
|
|
193
|
+
|
|
194
|
+
- Be concise and direct.
|
|
195
|
+
- Ask clarifying questions when needed.
|
|
196
|
+
- Never send messages to external services without explicit user confirmation.
|
|
197
|
+
`;
|
|
198
|
+
await fs.writeFile(soulPath, soulMd, "utf-8");
|
|
199
|
+
}
|
|
200
|
+
await fs.writeFile(identityPath, identityMd, "utf-8");
|
|
201
|
+
await fs.writeFile(userPath, userMd, "utf-8");
|
|
202
|
+
// Annotate AGENTS.md so future agents know Eve can supply identity data.
|
|
203
|
+
try {
|
|
204
|
+
const agents = await fs.readFile(agentsPath, "utf-8");
|
|
205
|
+
if (!agents.includes("## Identity helpers")) {
|
|
206
|
+
const appendix = `\n\n## Identity helpers\n\n- You can use \`eve whoami\` (macOS) to detect the user's name/phones/emails from Messages.\n- You can use \`imsg\` to list chats/history and send messages (confirm before sending).\n`;
|
|
207
|
+
await fs.writeFile(agentsPath, `${agents.trimEnd()}${appendix}`, "utf-8");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// ignore
|
|
212
|
+
}
|
|
213
|
+
// Bootstrap prompt remains in state; Nexus will ignore it once identity exists.
|
|
214
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defaultRuntime } from "../runtime.js";
|
|
2
|
+
import { detectCapabilities } from "../capabilities/detector.js";
|
|
3
|
+
const STATUS_ICON = {
|
|
4
|
+
active: "✅",
|
|
5
|
+
ready: "⭐",
|
|
6
|
+
needs_setup: "🔧",
|
|
7
|
+
needs_install: "📥",
|
|
8
|
+
unavailable: "⛔",
|
|
9
|
+
broken: "❌",
|
|
10
|
+
};
|
|
11
|
+
export async function capabilitiesCommand(opts, runtime = defaultRuntime) {
|
|
12
|
+
const { registry, capabilities, summary } = detectCapabilities();
|
|
13
|
+
if (opts?.json) {
|
|
14
|
+
runtime.log(JSON.stringify({
|
|
15
|
+
platform: `${process.platform}/${process.arch}`,
|
|
16
|
+
summary,
|
|
17
|
+
capabilities,
|
|
18
|
+
}, null, 2));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
runtime.log(`\nNexus Capabilities (${process.platform}/${process.arch})`);
|
|
22
|
+
runtime.log("Legend: ✅ active ⭐ ready 🔧 needs-setup 📥 needs-install ⛔ unavailable ❌ broken\n");
|
|
23
|
+
for (const [category, entries] of Object.entries(registry.categories)) {
|
|
24
|
+
const categoryCaps = capabilities.filter((cap) => cap.category === category);
|
|
25
|
+
if (categoryCaps.length === 0)
|
|
26
|
+
continue;
|
|
27
|
+
const activeCount = categoryCaps.filter((cap) => cap.status === "active").length;
|
|
28
|
+
runtime.log(`${category} (${activeCount}/${categoryCaps.length})`);
|
|
29
|
+
for (const cap of categoryCaps) {
|
|
30
|
+
const icon = STATUS_ICON[cap.status] ?? "•";
|
|
31
|
+
const providers = cap.providers.map((p) => p.id).join(", ");
|
|
32
|
+
runtime.log(` ${icon} ${cap.id} — ${providers || cap.providersRaw}`);
|
|
33
|
+
}
|
|
34
|
+
runtime.log("");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { createServer } from "node:http";
|
|
3
|
+
import { CHUTES_AUTHORIZE_ENDPOINT, exchangeChutesCodeForTokens, generateChutesPkce, parseOAuthCallbackInput, } from "../agents/chutes-oauth.js";
|
|
4
|
+
function buildAuthorizeUrl(params) {
|
|
5
|
+
const qs = new URLSearchParams({
|
|
6
|
+
client_id: params.clientId,
|
|
7
|
+
redirect_uri: params.redirectUri,
|
|
8
|
+
response_type: "code",
|
|
9
|
+
scope: params.scopes.join(" "),
|
|
10
|
+
state: params.state,
|
|
11
|
+
code_challenge: params.challenge,
|
|
12
|
+
code_challenge_method: "S256",
|
|
13
|
+
});
|
|
14
|
+
return `${CHUTES_AUTHORIZE_ENDPOINT}?${qs.toString()}`;
|
|
15
|
+
}
|
|
16
|
+
async function waitForLocalCallback(params) {
|
|
17
|
+
const redirectUrl = new URL(params.redirectUri);
|
|
18
|
+
if (redirectUrl.protocol !== "http:") {
|
|
19
|
+
throw new Error(`Chutes OAuth redirect URI must be http:// (got ${params.redirectUri})`);
|
|
20
|
+
}
|
|
21
|
+
const hostname = redirectUrl.hostname || "127.0.0.1";
|
|
22
|
+
const port = redirectUrl.port ? Number.parseInt(redirectUrl.port, 10) : 80;
|
|
23
|
+
const expectedPath = redirectUrl.pathname || "/";
|
|
24
|
+
return await new Promise((resolve, reject) => {
|
|
25
|
+
let timeout = null;
|
|
26
|
+
const server = createServer((req, res) => {
|
|
27
|
+
try {
|
|
28
|
+
const requestUrl = new URL(req.url ?? "/", redirectUrl.origin);
|
|
29
|
+
if (requestUrl.pathname !== expectedPath) {
|
|
30
|
+
res.statusCode = 404;
|
|
31
|
+
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
32
|
+
res.end("Not found");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const code = requestUrl.searchParams.get("code")?.trim();
|
|
36
|
+
const state = requestUrl.searchParams.get("state")?.trim();
|
|
37
|
+
if (!code) {
|
|
38
|
+
res.statusCode = 400;
|
|
39
|
+
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
40
|
+
res.end("Missing code");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (!state || state !== params.expectedState) {
|
|
44
|
+
res.statusCode = 400;
|
|
45
|
+
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
46
|
+
res.end("Invalid state");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
res.statusCode = 200;
|
|
50
|
+
res.setHeader("Content-Type", "text/html; charset=utf-8");
|
|
51
|
+
res.end([
|
|
52
|
+
"<!doctype html>",
|
|
53
|
+
"<html><head><meta charset='utf-8' /></head>",
|
|
54
|
+
"<body><h2>Chutes OAuth complete</h2>",
|
|
55
|
+
"<p>You can close this window and return to nexus.</p></body></html>",
|
|
56
|
+
].join(""));
|
|
57
|
+
if (timeout)
|
|
58
|
+
clearTimeout(timeout);
|
|
59
|
+
server.close();
|
|
60
|
+
resolve({ code, state });
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
if (timeout)
|
|
64
|
+
clearTimeout(timeout);
|
|
65
|
+
server.close();
|
|
66
|
+
reject(err);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
server.once("error", (err) => {
|
|
70
|
+
if (timeout)
|
|
71
|
+
clearTimeout(timeout);
|
|
72
|
+
server.close();
|
|
73
|
+
reject(err);
|
|
74
|
+
});
|
|
75
|
+
server.listen(port, hostname, () => {
|
|
76
|
+
params.onProgress?.(`Waiting for OAuth callback on ${redirectUrl.origin}${expectedPath}…`);
|
|
77
|
+
});
|
|
78
|
+
timeout = setTimeout(() => {
|
|
79
|
+
try {
|
|
80
|
+
server.close();
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
reject(new Error("OAuth callback timeout"));
|
|
84
|
+
}, params.timeoutMs);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export async function loginChutes(params) {
|
|
88
|
+
const createPkce = params.createPkce ?? generateChutesPkce;
|
|
89
|
+
const createState = params.createState ?? (() => randomBytes(16).toString("hex"));
|
|
90
|
+
const { verifier, challenge } = createPkce();
|
|
91
|
+
const state = createState();
|
|
92
|
+
const timeoutMs = params.timeoutMs ?? 3 * 60 * 1000;
|
|
93
|
+
const url = buildAuthorizeUrl({
|
|
94
|
+
clientId: params.app.clientId,
|
|
95
|
+
redirectUri: params.app.redirectUri,
|
|
96
|
+
scopes: params.app.scopes,
|
|
97
|
+
state,
|
|
98
|
+
challenge,
|
|
99
|
+
});
|
|
100
|
+
let codeAndState;
|
|
101
|
+
if (params.manual) {
|
|
102
|
+
await params.onAuth({ url });
|
|
103
|
+
params.onProgress?.("Waiting for redirect URL…");
|
|
104
|
+
const input = await params.onPrompt({
|
|
105
|
+
message: "Paste the redirect URL (or authorization code)",
|
|
106
|
+
placeholder: `${params.app.redirectUri}?code=...&state=...`,
|
|
107
|
+
});
|
|
108
|
+
const parsed = parseOAuthCallbackInput(String(input), state);
|
|
109
|
+
if ("error" in parsed)
|
|
110
|
+
throw new Error(parsed.error);
|
|
111
|
+
if (parsed.state !== state)
|
|
112
|
+
throw new Error("Invalid OAuth state");
|
|
113
|
+
codeAndState = parsed;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const callback = waitForLocalCallback({
|
|
117
|
+
redirectUri: params.app.redirectUri,
|
|
118
|
+
expectedState: state,
|
|
119
|
+
timeoutMs,
|
|
120
|
+
onProgress: params.onProgress,
|
|
121
|
+
}).catch(async () => {
|
|
122
|
+
params.onProgress?.("OAuth callback not detected; paste redirect URL…");
|
|
123
|
+
const input = await params.onPrompt({
|
|
124
|
+
message: "Paste the redirect URL (or authorization code)",
|
|
125
|
+
placeholder: `${params.app.redirectUri}?code=...&state=...`,
|
|
126
|
+
});
|
|
127
|
+
const parsed = parseOAuthCallbackInput(String(input), state);
|
|
128
|
+
if ("error" in parsed)
|
|
129
|
+
throw new Error(parsed.error);
|
|
130
|
+
if (parsed.state !== state)
|
|
131
|
+
throw new Error("Invalid OAuth state");
|
|
132
|
+
return parsed;
|
|
133
|
+
});
|
|
134
|
+
await params.onAuth({ url });
|
|
135
|
+
codeAndState = await callback;
|
|
136
|
+
}
|
|
137
|
+
params.onProgress?.("Exchanging code for tokens…");
|
|
138
|
+
return await exchangeChutesCodeForTokens({
|
|
139
|
+
app: params.app,
|
|
140
|
+
code: codeAndState.code,
|
|
141
|
+
codeVerifier: verifier,
|
|
142
|
+
fetchFn: params.fetchFn,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { buildWorkspaceSkillSnapshot, loadWorkspaceSkillEntries, getSkillMetadata } from "../agents/skills.js";
|
|
4
|
+
import { loadConfig } from "../config/config.js";
|
|
5
|
+
import { defaultRuntime } from "../runtime.js";
|
|
6
|
+
/**
|
|
7
|
+
* Generate CLAUDE.md file with Nexus skills and workspace context.
|
|
8
|
+
*
|
|
9
|
+
* This allows Claude Code to understand available Nexus skills and workspace structure.
|
|
10
|
+
* The CLAUDE.md file includes:
|
|
11
|
+
* - Workspace information and structure
|
|
12
|
+
* - All loaded skill documentation
|
|
13
|
+
* - Skill metadata (requirements, env vars, install instructions)
|
|
14
|
+
* - Nexus tools and utilities available
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* nexus claude-md [--workspace <path>]
|
|
18
|
+
*/
|
|
19
|
+
export async function claudeMdCommand(opts, runtime = defaultRuntime) {
|
|
20
|
+
const workspaceDir = opts?.workspace?.trim() || path.join(process.env.HOME || "~", "nexus", "home");
|
|
21
|
+
runtime.log(`Generating CLAUDE.md for workspace: ${workspaceDir}`);
|
|
22
|
+
// Load config
|
|
23
|
+
const config = loadConfig();
|
|
24
|
+
// Build skill snapshot (this gives us the formatted prompt)
|
|
25
|
+
const snapshot = buildWorkspaceSkillSnapshot(workspaceDir, { config });
|
|
26
|
+
// Also load skill entries to get metadata
|
|
27
|
+
const skillEntries = loadWorkspaceSkillEntries(workspaceDir, { config });
|
|
28
|
+
runtime.log(`Found ${skillEntries.length} skills`);
|
|
29
|
+
// Build CLAUDE.md content
|
|
30
|
+
let claudeContent = `# Nexus Workspace Context
|
|
31
|
+
|
|
32
|
+
This file provides context for Claude Code when working in this Nexus workspace.
|
|
33
|
+
|
|
34
|
+
**Auto-generated by \`nexus claude-md\`** - To regenerate, run \`nexus claude-md\`
|
|
35
|
+
|
|
36
|
+
## Workspace Overview
|
|
37
|
+
|
|
38
|
+
This is a Nexus workspace located at \`${workspaceDir}\`.
|
|
39
|
+
|
|
40
|
+
Nexus is an AI operating system that provides:
|
|
41
|
+
- Multi-provider messaging integration (WhatsApp, Telegram, Discord, Signal, etc.)
|
|
42
|
+
- Agent runtime with skills and tools
|
|
43
|
+
- Browser automation and canvas control
|
|
44
|
+
- Session management and persistence
|
|
45
|
+
- Control plane abstraction (single-agent and ODU modes)
|
|
46
|
+
|
|
47
|
+
## Available Skills
|
|
48
|
+
|
|
49
|
+
You have access to **${skillEntries.length} Nexus skills**. Each skill provides specialized functionality that can be invoked by the Nexus agent.
|
|
50
|
+
|
|
51
|
+
### Skill Summary
|
|
52
|
+
|
|
53
|
+
`;
|
|
54
|
+
// Add skill metadata
|
|
55
|
+
for (const entry of skillEntries) {
|
|
56
|
+
const metadata = getSkillMetadata(entry);
|
|
57
|
+
const skillName = entry.skill.name;
|
|
58
|
+
claudeContent += `#### ${skillName}\n\n`;
|
|
59
|
+
if (metadata) {
|
|
60
|
+
if (metadata.os && metadata.os.length > 0) {
|
|
61
|
+
claudeContent += `- **OS compatibility:** ${metadata.os.join(", ")}\n`;
|
|
62
|
+
}
|
|
63
|
+
if (metadata.requires?.bins && metadata.requires.bins.length > 0) {
|
|
64
|
+
claudeContent += `- **Required binaries:** \`${metadata.requires.bins.join("`, `")}\`\n`;
|
|
65
|
+
}
|
|
66
|
+
if (metadata.requires?.env && metadata.requires.env.length > 0) {
|
|
67
|
+
claudeContent += `- **Required environment variables:** \`${metadata.requires.env.join("`, `")}\`\n`;
|
|
68
|
+
}
|
|
69
|
+
if (metadata.primaryEnv) {
|
|
70
|
+
claudeContent += `- **Primary environment variable:** \`${metadata.primaryEnv}\`\n`;
|
|
71
|
+
}
|
|
72
|
+
if (metadata.homepage) {
|
|
73
|
+
claudeContent += `- **Documentation:** ${metadata.homepage}\n`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
claudeContent += `\n`;
|
|
77
|
+
}
|
|
78
|
+
// Add the full formatted skills documentation
|
|
79
|
+
claudeContent += `## Complete Skills Documentation
|
|
80
|
+
|
|
81
|
+
The following is the complete documentation for all loaded skills, formatted exactly as the Nexus agent receives it at runtime:
|
|
82
|
+
|
|
83
|
+
\`\`\`markdown
|
|
84
|
+
${snapshot.prompt}
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
## Nexus Tools
|
|
88
|
+
|
|
89
|
+
The Nexus agent has access to various tools beyond skills:
|
|
90
|
+
|
|
91
|
+
- **Browser control:** Automated browser interaction via Playwright
|
|
92
|
+
- **Canvas host:** Screen/camera capture and manipulation
|
|
93
|
+
- **Session management:** Persistent conversation history across providers
|
|
94
|
+
- **Workspace management:** Isolated project environments
|
|
95
|
+
- **Cron scheduling:** Automated task execution
|
|
96
|
+
- **Gateway routing:** Multi-provider message routing and control
|
|
97
|
+
|
|
98
|
+
## Working with This Workspace
|
|
99
|
+
|
|
100
|
+
When coding in this workspace:
|
|
101
|
+
|
|
102
|
+
1. **Use skills:** Reference the skills documentation above to understand available functionality
|
|
103
|
+
2. **Check metadata:** Verify OS/binary/env requirements before using a skill
|
|
104
|
+
3. **Test locally:** Skills run in the Nexus agent runtime with these exact capabilities
|
|
105
|
+
4. **Workspace structure:**
|
|
106
|
+
- \`${workspaceDir}/\` - Main workspace directory
|
|
107
|
+
- \`~/nexus/state/\` - Nexus state directory (sessions, logs, config)
|
|
108
|
+
- \`~/nexus/state/nexus.json\` - Nexus configuration file
|
|
109
|
+
|
|
110
|
+
## Configuration
|
|
111
|
+
|
|
112
|
+
To modify Nexus behavior, edit \`~/nexus/state/nexus.json\`.
|
|
113
|
+
|
|
114
|
+
Key configuration options:
|
|
115
|
+
- \`agent.thinkingDefault\` - Default thinking level ("low", "medium", "high")
|
|
116
|
+
- \`agent.verboseDefault\` - Default verbose mode (boolean)
|
|
117
|
+
- \`agent.timeoutSeconds\` - Agent timeout in seconds
|
|
118
|
+
- \`controlPlane.mode\` - Control plane mode ("single" or "odu")
|
|
119
|
+
|
|
120
|
+
## Additional Resources
|
|
121
|
+
|
|
122
|
+
- Run \`nexus doctor\` to verify your Nexus installation
|
|
123
|
+
- Run \`nexus --help\` to see all available CLI commands
|
|
124
|
+
- Check \`~/nexus/state/logs/\` for Nexus logs
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
*This file was auto-generated on ${new Date().toISOString()}*
|
|
129
|
+
`;
|
|
130
|
+
// Write CLAUDE.md file
|
|
131
|
+
const claudeMdPath = path.join(workspaceDir, "CLAUDE.md");
|
|
132
|
+
await fs.writeFile(claudeMdPath, claudeContent, "utf-8");
|
|
133
|
+
runtime.log(`✓ Generated CLAUDE.md`);
|
|
134
|
+
runtime.log(` Path: ${claudeMdPath}`);
|
|
135
|
+
runtime.log(` Skills included: ${skillEntries.length}`);
|
|
136
|
+
runtime.log(`\nClaude Code will now understand your Nexus workspace!`);
|
|
137
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defaultRuntime } from "../runtime.js";
|
|
2
|
+
import { readConfigFileSnapshot } from "../config/config.js";
|
|
3
|
+
export async function configViewCommand(opts, runtime = defaultRuntime) {
|
|
4
|
+
const snapshot = await readConfigFileSnapshot();
|
|
5
|
+
if (opts?.json) {
|
|
6
|
+
runtime.log(JSON.stringify(snapshot, null, 2));
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
runtime.log(`Config path: ${snapshot.path}`);
|
|
10
|
+
runtime.log(`Exists: ${snapshot.exists ? "yes" : "no"}`);
|
|
11
|
+
}
|