@intent-systems/nexus 2026.1.5-4 → 2026.1.5-8
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/dist/agents/agent-id.js +41 -0
- package/dist/agents/auth-profiles.js +114 -25
- package/dist/agents/identity-state.js +101 -0
- package/dist/agents/model-auth.js +1 -0
- package/dist/agents/model-fallback.js +15 -9
- package/dist/agents/model-selection.js +1 -1
- package/dist/agents/models-config.js +17 -11
- package/dist/agents/pi-embedded-runner.js +101 -9
- package/dist/agents/sandbox.js +12 -3
- package/dist/agents/skill-runner.js +41 -6
- package/dist/agents/skill-usage.js +117 -17
- package/dist/agents/skills-status.js +4 -3
- package/dist/agents/skills.js +38 -30
- package/dist/agents/subagent-registry.js +25 -11
- package/dist/agents/system-prompt.js +16 -0
- package/dist/agents/tool-policy.js +19 -3
- package/dist/agents/tools/browser-tool.js +5 -2
- package/dist/agents/tools/image-tool.js +93 -8
- package/dist/agents/tools/sessions-announce-target.js +5 -1
- package/dist/agents/workspace.js +81 -59
- package/dist/auto-reply/command-detection.js +2 -1
- package/dist/auto-reply/reply/directive-handling.js +153 -28
- package/dist/auto-reply/reply/directives.js +17 -2
- package/dist/auto-reply/reply/model-selection.js +8 -3
- package/dist/auto-reply/reply/queue.js +2 -2
- package/dist/auto-reply/reply.js +1 -1
- package/dist/auto-reply/thinking.js +15 -0
- package/dist/browser/chrome.js +1 -1
- package/dist/browser/client.js +2 -0
- package/dist/browser/config.js +6 -2
- package/dist/browser/pw-tools-core.js +3 -0
- package/dist/browser/routes/agent.js +14 -0
- package/dist/canvas-host/server.js +1 -1
- package/dist/capabilities/detector.js +46 -15
- package/dist/capabilities/registry.js +2 -1
- package/dist/cli/cloud-cli.js +70 -7
- package/dist/cli/credential-cli.js +214 -23
- package/dist/cli/gateway-cli.js +1 -1
- package/dist/cli/log-cli.js +25 -0
- package/dist/cli/pairing-cli.js +1 -1
- package/dist/cli/program.js +82 -8
- package/dist/cli/run-main.js +1 -1
- package/dist/cli/skills-cli.js +165 -30
- package/dist/cli/skills-hub-cli.js +68 -36
- package/dist/cli/tool-connector-cli.js +99 -24
- package/dist/cli/upstream-sync-cli.js +253 -96
- package/dist/cli/usage-cli.js +14 -0
- package/dist/commands/auth-choice-options.js +6 -1
- package/dist/commands/auth-choice.js +157 -5
- package/dist/commands/bootstrap-preset.js +26 -12
- package/dist/commands/capabilities.js +33 -6
- package/dist/commands/claude-md.js +3 -2
- package/dist/commands/config-view.js +1 -1
- package/dist/commands/config.js +85 -0
- package/dist/commands/configure.js +4 -4
- package/dist/commands/credential.js +497 -36
- package/dist/commands/cursor-hooks.js +240 -0
- package/dist/commands/cursor-rules.js +14 -188
- package/dist/commands/doctor.js +5 -4
- package/dist/commands/identity.js +29 -32
- package/dist/commands/init.js +304 -20
- package/dist/commands/log.js +134 -0
- package/dist/commands/models/fallbacks.js +1 -1
- package/dist/commands/models/image-fallbacks.js +1 -1
- package/dist/commands/models/list.js +1 -1
- package/dist/commands/models/scan.js +1 -1
- package/dist/commands/onboard-auth.js +27 -2
- package/dist/commands/onboard-eve-identity.js +8 -9
- package/dist/commands/onboard-non-interactive.js +4 -2
- package/dist/commands/onboard-quickstart.js +18 -11
- package/dist/commands/quest-state.js +271 -0
- package/dist/commands/quest.js +53 -13
- package/dist/commands/reset.js +1 -1
- package/dist/commands/sessions-ingest.js +5 -4
- package/dist/commands/setup.js +4 -2
- package/dist/commands/skills-manifest.js +89 -29
- package/dist/commands/status.js +193 -73
- package/dist/commands/suggestions.js +1 -1
- package/dist/commands/usage-tracking.js +32 -0
- package/dist/commands/usage-upload.js +6 -1
- package/dist/config/defaults.js +1 -3
- package/dist/config/includes.js +5 -7
- package/dist/config/io.js +88 -16
- package/dist/config/legacy.js +4 -2
- package/dist/config/paths.js +16 -0
- package/dist/config/sessions.js +9 -5
- package/dist/config/zod-schema.js +4 -3
- package/dist/control-plane/broker/broker.js +131 -78
- package/dist/control-plane/compaction.js +3 -5
- package/dist/control-plane/factory.js +2 -2
- package/dist/control-plane/index.js +2 -2
- package/dist/control-plane/odu/agents.js +28 -23
- package/dist/control-plane/odu/interaction-tools.js +62 -50
- package/dist/control-plane/odu/prompt-loader.js +8 -8
- package/dist/control-plane/odu/runtime.js +87 -75
- package/dist/control-plane/odu-control-plane.js +14 -12
- package/dist/control-plane/single-agent.js +13 -13
- package/dist/credentials/store.js +133 -7
- package/dist/daemon/launchd.js +14 -0
- package/dist/entry.js +0 -0
- package/dist/gateway/server-browser.js +5 -4
- package/dist/gateway/server-methods/cron.js +11 -1
- package/dist/gateway/server.js +14 -7
- package/dist/infra/bonjour.js +1 -1
- package/dist/infra/event-log.js +8 -2
- package/dist/infra/path-env.js +1 -2
- package/dist/infra/provider-usage.auth.js +5 -3
- package/dist/infra/provider-usage.fetch.claude.js +16 -6
- package/dist/infra/provider-usage.fetch.minimax.js +8 -3
- package/dist/infra/provider-usage.js +9 -5
- package/dist/infra/restart.js +2 -2
- package/dist/infra/usage-settings.js +78 -0
- package/dist/infra/usage-suggestions.js +17 -5
- package/dist/infra/usage-upload.js +38 -1
- package/dist/infra/voicewake.js +2 -2
- package/dist/media/image-ops.js +3 -1
- package/dist/memory/index.js +2 -381
- package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud +0 -0
- package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud-rs +0 -0
- package/dist/pairing/pairing-store.js +24 -0
- package/dist/providers/github-copilot-auth.js +1 -1
- package/dist/routing/resolve-route.js +6 -6
- package/dist/routing/session-key.js +3 -1
- package/dist/sessions/send-policy.js +5 -5
- package/dist/slack/monitor.js +22 -1
- package/dist/telegram/reaction-level.js +2 -1
- package/dist/utils.js +8 -3
- package/dist/wizard/onboarding.js +29 -7
- package/docs/AGENTS.default.md +1 -1
- package/docs/configuration.md +1 -1
- package/docs/feature-inventory/overview.md +2 -2
- package/docs/reference/templates/AGENTS.md +172 -109
- package/docs/templates/AGENTS.md +140 -199
- package/docs/templates/BOOTSTRAP.md +40 -20
- package/docs/templates/IDENTITY.md +6 -0
- package/docs/templates/USER.md +22 -2
- package/package.json +3 -1
- package/skills/{notion → connectors/notion}/SKILL.md +1 -1
- package/skills/{filesystem → guides/filesystem}/SKILL.md +1 -1
- package/skills/{onboarding → guides/onboarding}/SKILL.md +1 -1
- package/skills/{onboarding → guides/onboarding}/docs/CAPABILITY_TAXONOMY.md +5 -5
- package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR.md +8 -8
- package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_ONBOARDING.md +2 -2
- package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_SKILLS.md +26 -20
- package/skills/{onboarding → guides/onboarding}/docs/GOAL_STATE_ARCHITECTURE.md +38 -43
- package/skills/{onboarding → guides/onboarding}/docs/NEXUS_SYSTEM_OVERVIEW.md +4 -4
- package/skills/{onboarding → guides/onboarding}/docs/SKILLS_HUB_SPEC.md +1 -1
- package/skills/{onboarding → guides/onboarding}/docs/SKILLS_SPECIFICATION.md +8 -7
- package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_DESIGN.md +16 -16
- package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_PRD.md +10 -12
- package/skills/guides/onboarding/docs/canonical/00_CONFLICT_ANALYSIS.md +463 -0
- package/skills/guides/onboarding/docs/canonical/01_NEXUS_OVERVIEW.md +167 -0
- package/skills/guides/onboarding/docs/canonical/02_CLI_REFERENCE.md +404 -0
- package/skills/guides/onboarding/docs/canonical/03_STATE_ARCHITECTURE.md +357 -0
- package/skills/guides/onboarding/docs/canonical/04_SKILL_SPECIFICATION.md +393 -0
- package/skills/guides/onboarding/docs/canonical/05_CAPABILITY_TAXONOMY.md +298 -0
- package/skills/guides/onboarding/docs/canonical/06_CAPABILITIES_REFERENCE.md +207 -0
- package/skills/guides/onboarding/docs/canonical/07_AGENT_BINDINGS.md +85 -0
- package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/nexus-cloud.md +2 -2
- package/skills/{onboarding → guides/onboarding}/scripts/ralph/progress.txt +1 -1
- package/skills/{nexus-cloud → tools/nexus-cloud}/SKILL.md +2 -1
- package/skills/{nexus-cloud → tools/nexus-cloud}/docs/setup.md +1 -1
- package/docs/templates/PROFILE.md +0 -14
- /package/skills/{brave-search → connectors/brave-search}/SKILL.md +0 -0
- /package/skills/{brave-search → connectors/brave-search}/docs/setup.md +0 -0
- /package/skills/{brave-search → connectors/brave-search}/docs/troubleshooting.md +0 -0
- /package/skills/{brave-search → connectors/brave-search}/docs/usage.md +0 -0
- /package/skills/{brave-search → connectors/brave-search}/scripts/content.mjs +0 -0
- /package/skills/{brave-search → connectors/brave-search}/scripts/search.mjs +0 -0
- /package/skills/{discord → connectors/discord}/SKILL.md +0 -0
- /package/skills/{gemini → connectors/gemini}/SKILL.md +0 -0
- /package/skills/{github → connectors/github}/SKILL.md +0 -0
- /package/skills/{github → connectors/github}/docs/setup.md +0 -0
- /package/skills/{github → connectors/github}/docs/troubleshooting.md +0 -0
- /package/skills/{google-oauth → connectors/google-oauth}/SKILL.md +0 -0
- /package/skills/{slack → connectors/slack}/SKILL.md +0 -0
- /package/skills/{telegram → connectors/telegram}/SKILL.md +0 -0
- /package/skills/{telegram → connectors/telegram}/docs/pairing.md +0 -0
- /package/skills/{telegram → connectors/telegram}/docs/setup.md +0 -0
- /package/skills/{telegram → connectors/telegram}/docs/webhook.md +0 -0
- /package/skills/{wacli → connectors/wacli}/SKILL.md +0 -0
- /package/skills/{wacli → connectors/wacli}/docs/auth.md +0 -0
- /package/skills/{wacli → connectors/wacli}/docs/backup.md +0 -0
- /package/skills/{wacli → connectors/wacli}/docs/troubleshooting.md +0 -0
- /package/skills/{browser-use-agent-sdk → guides/browser-use-agent-sdk}/SKILL.md +0 -0
- /package/skills/{json-render → guides/json-render}/SKILL.md +0 -0
- /package/skills/{json-render → guides/json-render}/assets/components/README.md +0 -0
- /package/skills/{json-render → guides/json-render}/assets/components/catalog.ts +0 -0
- /package/skills/{json-render → guides/json-render}/assets/components/registry.tsx +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/App.css +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/App.tsx +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/README.md +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/catalog.ts +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/data/nexus-core.json +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/index.css +0 -0
- /package/skills/{json-render → guides/json-render}/assets/demo/registry.tsx +0 -0
- /package/skills/{json-render → guides/json-render}/docs/nexus-state-demo.md +0 -0
- /package/skills/{json-render → guides/json-render}/docs/shadcn-preset.md +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/create-vite-demo.sh +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/llm-server/README.md +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/llm-server/catalog.ts +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/llm-server/package-lock.json +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/llm-server/package.json +0 -0
- /package/skills/{json-render → guides/json-render}/scripts/llm-server/server.ts +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/CAPABILITIES.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_CREDENTIALS.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/DOCUMENTATION_OVERVIEW.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/ENTITY_MODEL.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/SKILL_INVENTORY.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/STATE_ARCHITECTURE.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/TROUBLESHOOTING.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/USER_JOURNEY.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/WOW_MOMENTS.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/agent-apple-id.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/1password.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/TEMPLATE.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/aix.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/bird.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/brave-search.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/comms.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/computer-use.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/cron-and-heartbeat.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/eve.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/github.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/gog.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/homebrew-prereqs.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/qmd.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/telegram.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/wacli.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/weather.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prd.json +0 -0
- /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prompt.md +0 -0
- /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.log +0 -0
- /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.sh +0 -0
- /package/skills/{onboarding → guides/onboarding}/scripts/setup-cursor-skills.sh +0 -0
- /package/skills/{1password → tools/1password}/SKILL.md +0 -0
- /package/skills/{1password → tools/1password}/docs/setup.md +0 -0
- /package/skills/{1password → tools/1password}/docs/troubleshooting.md +0 -0
- /package/skills/{1password → tools/1password}/references/cli-examples.md +0 -0
- /package/skills/{1password → tools/1password}/references/get-started.md +0 -0
- /package/skills/{agent-browser → tools/agent-browser}/SKILL.md +0 -0
- /package/skills/{agent-browser → tools/agent-browser}/docs/browser-use-eval.md +0 -0
- /package/skills/{agent-browser → tools/agent-browser}/docs/first-tests.md +0 -0
- /package/skills/{agent-browser → tools/agent-browser}/docs/wordle-nyt-eval.js +0 -0
- /package/skills/{aix → tools/aix}/SKILL.md +0 -0
- /package/skills/{aix → tools/aix}/docs/embeddings.md +0 -0
- /package/skills/{aix → tools/aix}/docs/setup.md +0 -0
- /package/skills/{aix → tools/aix}/docs/troubleshooting.md +0 -0
- /package/skills/{aix → tools/aix}/references/sql.md +0 -0
- /package/skills/{apple-notes → tools/apple-notes}/SKILL.md +0 -0
- /package/skills/{apple-reminders → tools/apple-reminders}/SKILL.md +0 -0
- /package/skills/{bear-notes → tools/bear-notes}/SKILL.md +0 -0
- /package/skills/{bird → tools/bird}/SKILL.md +0 -0
- /package/skills/{bird → tools/bird}/docs/auth.md +0 -0
- /package/skills/{bird → tools/bird}/docs/troubleshooting.md +0 -0
- /package/skills/{blogwatcher → tools/blogwatcher}/SKILL.md +0 -0
- /package/skills/{blucli → tools/blucli}/SKILL.md +0 -0
- /package/skills/{camsnap → tools/camsnap}/SKILL.md +0 -0
- /package/skills/{clawdhub → tools/clawdhub}/SKILL.md +0 -0
- /package/skills/{coding-agent → tools/coding-agent}/SKILL.md +0 -0
- /package/skills/{comms → tools/comms}/SKILL.md +0 -0
- /package/skills/{comms → tools/comms}/docs/adapters.md +0 -0
- /package/skills/{comms → tools/comms}/docs/setup.md +0 -0
- /package/skills/{comms → tools/comms}/docs/troubleshooting.md +0 -0
- /package/skills/{comms → tools/comms}/references/schema.md +0 -0
- /package/skills/{computer-use → tools/computer-use}/SKILL.md +0 -0
- /package/skills/{computer-use → tools/computer-use}/docs/open-interpreter.md +0 -0
- /package/skills/{computer-use → tools/computer-use}/docs/peekaboo.md +0 -0
- /package/skills/{computer-use → tools/computer-use}/docs/setup.md +0 -0
- /package/skills/{computer-use → tools/computer-use}/docs/troubleshooting.md +0 -0
- /package/skills/{eightctl → tools/eightctl}/SKILL.md +0 -0
- /package/skills/{eve → tools/eve}/SKILL.md +0 -0
- /package/skills/{eve → tools/eve}/docs/dual-account.md +0 -0
- /package/skills/{eve → tools/eve}/docs/intelligence.md +0 -0
- /package/skills/{eve → tools/eve}/docs/setup.md +0 -0
- /package/skills/{eve → tools/eve}/docs/troubleshooting.md +0 -0
- /package/skills/{eve → tools/eve}/scripts/setup-dual-account.sh +0 -0
- /package/skills/{food-order → tools/food-order}/SKILL.md +0 -0
- /package/skills/{gh → tools/gh}/SKILL.md +0 -0
- /package/skills/{gh → tools/gh}/docs/usage.md +0 -0
- /package/skills/{gifgrep → tools/gifgrep}/SKILL.md +0 -0
- /package/skills/{gog → tools/gog}/SKILL.md +0 -0
- /package/skills/{gog → tools/gog}/docs/portability.md +0 -0
- /package/skills/{gog → tools/gog}/docs/setup.md +0 -0
- /package/skills/{gog → tools/gog}/docs/troubleshooting.md +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/README.md +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/add_test_users.py +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts.py +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts_manual.py +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/create_oauth_client.py +0 -0
- /package/skills/{gog → tools/gog}/scripts/cdp/launch_cdp_chrome.sh +0 -0
- /package/skills/{goplaces → tools/goplaces}/SKILL.md +0 -0
- /package/skills/{imsg → tools/imsg}/SKILL.md +0 -0
- /package/skills/{local-places → tools/local-places}/SERVER_README.md +0 -0
- /package/skills/{local-places → tools/local-places}/SKILL.md +0 -0
- /package/skills/{local-places → tools/local-places}/pyproject.toml +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/__init__.py +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/google_places.py +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/main.py +0 -0
- /package/skills/{local-places → tools/local-places}/src/local_places/schemas.py +0 -0
- /package/skills/{mcporter → tools/mcporter}/SKILL.md +0 -0
- /package/skills/{model-usage → tools/model-usage}/SKILL.md +0 -0
- /package/skills/{model-usage → tools/model-usage}/references/codexbar-cli.md +0 -0
- /package/skills/{model-usage → tools/model-usage}/scripts/model_usage.py +0 -0
- /package/skills/{nano-banana-pro → tools/nano-banana-pro}/SKILL.md +0 -0
- /package/skills/{nano-banana-pro → tools/nano-banana-pro}/scripts/generate_image.py +0 -0
- /package/skills/{nano-pdf → tools/nano-pdf}/SKILL.md +0 -0
- /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/security.md +0 -0
- /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/troubleshooting.md +0 -0
- /package/skills/{obsidian → tools/obsidian}/SKILL.md +0 -0
- /package/skills/{openai-image-gen → tools/openai-image-gen}/SKILL.md +0 -0
- /package/skills/{openai-image-gen → tools/openai-image-gen}/scripts/gen.py +0 -0
- /package/skills/{openai-whisper → tools/openai-whisper}/SKILL.md +0 -0
- /package/skills/{openai-whisper-api → tools/openai-whisper-api}/SKILL.md +0 -0
- /package/skills/{openai-whisper-api → tools/openai-whisper-api}/scripts/transcribe.sh +0 -0
- /package/skills/{openhue → tools/openhue}/SKILL.md +0 -0
- /package/skills/{oracle → tools/oracle}/SKILL.md +0 -0
- /package/skills/{ordercli → tools/ordercli}/SKILL.md +0 -0
- /package/skills/{peekaboo → tools/peekaboo}/SKILL.md +0 -0
- /package/skills/{qmd → tools/qmd}/SKILL.md +0 -0
- /package/skills/{qmd → tools/qmd}/docs/mcp.md +0 -0
- /package/skills/{qmd → tools/qmd}/docs/ollama.md +0 -0
- /package/skills/{qmd → tools/qmd}/docs/setup.md +0 -0
- /package/skills/{sag → tools/sag}/SKILL.md +0 -0
- /package/skills/{skill-cli-template → tools/skill-cli-template}/SKILL.md +0 -0
- /package/skills/{songsee → tools/songsee}/SKILL.md +0 -0
- /package/skills/{sonoscli → tools/sonoscli}/SKILL.md +0 -0
- /package/skills/{spotify-player → tools/spotify-player}/SKILL.md +0 -0
- /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
- /package/skills/{things-mac → tools/things-mac}/SKILL.md +0 -0
- /package/skills/{tmux → tools/tmux}/SKILL.md +0 -0
- /package/skills/{tmux → tools/tmux}/scripts/find-sessions.sh +0 -0
- /package/skills/{tmux → tools/tmux}/scripts/wait-for-text.sh +0 -0
- /package/skills/{trello → tools/trello}/SKILL.md +0 -0
- /package/skills/{upstream-sync → tools/upstream-sync}/SKILL.md +0 -0
- /package/skills/{upstream-sync → tools/upstream-sync}/scripts/auto-port.sh +0 -0
- /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-all.sh +0 -0
- /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-nexus.sh +0 -0
- /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-pi-ai.sh +0 -0
- /package/skills/{video-frames → tools/video-frames}/SKILL.md +0 -0
- /package/skills/{video-frames → tools/video-frames}/scripts/frame.sh +0 -0
- /package/skills/{weather → tools/weather}/SKILL.md +0 -0
- /package/skills/{weather → tools/weather}/docs/usage.md +0 -0
|
@@ -21,6 +21,8 @@ export function normalizeThinkLevel(raw) {
|
|
|
21
21
|
"max",
|
|
22
22
|
].includes(key))
|
|
23
23
|
return "high";
|
|
24
|
+
if (["xhigh", "x-high", "extra-high"].includes(key))
|
|
25
|
+
return "xhigh";
|
|
24
26
|
if (["think"].includes(key))
|
|
25
27
|
return "minimal";
|
|
26
28
|
return undefined;
|
|
@@ -47,3 +49,16 @@ export function normalizeElevatedLevel(raw) {
|
|
|
47
49
|
return "on";
|
|
48
50
|
return undefined;
|
|
49
51
|
}
|
|
52
|
+
// Normalize reasoning visibility flags used to control <think> output.
|
|
53
|
+
export function normalizeReasoningLevel(raw) {
|
|
54
|
+
if (!raw)
|
|
55
|
+
return undefined;
|
|
56
|
+
const key = raw.toLowerCase();
|
|
57
|
+
if (["off", "false", "no", "0"].includes(key))
|
|
58
|
+
return "off";
|
|
59
|
+
if (["on", "true", "yes", "1"].includes(key))
|
|
60
|
+
return "on";
|
|
61
|
+
if (["stream", "live"].includes(key))
|
|
62
|
+
return "stream";
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
package/dist/browser/chrome.js
CHANGED
|
@@ -7,7 +7,7 @@ import { ensurePortAvailable } from "../infra/ports.js";
|
|
|
7
7
|
import { createSubsystemLogger } from "../logging.js";
|
|
8
8
|
import { CONFIG_DIR } from "../utils.js";
|
|
9
9
|
import { normalizeCdpWsUrl } from "./cdp.js";
|
|
10
|
-
import { DEFAULT_NEXUS_BROWSER_COLOR, DEFAULT_NEXUS_BROWSER_PROFILE_NAME } from "./constants.js";
|
|
10
|
+
import { DEFAULT_NEXUS_BROWSER_COLOR, DEFAULT_NEXUS_BROWSER_PROFILE_NAME, } from "./constants.js";
|
|
11
11
|
const log = createSubsystemLogger("browser").child("chrome");
|
|
12
12
|
function exists(filePath) {
|
|
13
13
|
try {
|
package/dist/browser/client.js
CHANGED
|
@@ -96,6 +96,8 @@ export async function browserSnapshot(baseUrl, opts) {
|
|
|
96
96
|
q.set("targetId", opts.targetId);
|
|
97
97
|
if (typeof opts.limit === "number")
|
|
98
98
|
q.set("limit", String(opts.limit));
|
|
99
|
+
if (typeof opts.maxChars === "number")
|
|
100
|
+
q.set("maxChars", String(opts.maxChars));
|
|
99
101
|
if (opts.profile)
|
|
100
102
|
q.set("profile", opts.profile);
|
|
101
103
|
return await fetchBrowserJson(`${baseUrl}/snapshot?${q.toString()}`, {
|
package/dist/browser/config.js
CHANGED
|
@@ -56,7 +56,8 @@ function ensureDefaultProfile(profiles, defaultColor, legacyCdpPort, derivedDefa
|
|
|
56
56
|
}
|
|
57
57
|
export function resolveBrowserConfig(cfg) {
|
|
58
58
|
const enabled = cfg?.enabled ?? DEFAULT_NEXUS_BROWSER_ENABLED;
|
|
59
|
-
const envControlUrl = (process.env.NEXUS_BROWSER_CONTROL_URL ??
|
|
59
|
+
const envControlUrl = (process.env.NEXUS_BROWSER_CONTROL_URL ??
|
|
60
|
+
process.env.NEXUS_BROWSER_CONTROL_URL)?.trim();
|
|
60
61
|
const derivedControlPort = (() => {
|
|
61
62
|
const raw = (process.env.NEXUS_GATEWAY_PORT ?? process.env.NEXUS_GATEWAY_PORT)?.trim();
|
|
62
63
|
if (!raw)
|
|
@@ -69,7 +70,10 @@ export function resolveBrowserConfig(cfg) {
|
|
|
69
70
|
const derivedControlUrl = derivedControlPort
|
|
70
71
|
? `http://127.0.0.1:${derivedControlPort}`
|
|
71
72
|
: null;
|
|
72
|
-
const controlInfo = parseHttpUrl(cfg?.controlUrl ??
|
|
73
|
+
const controlInfo = parseHttpUrl(cfg?.controlUrl ??
|
|
74
|
+
envControlUrl ??
|
|
75
|
+
derivedControlUrl ??
|
|
76
|
+
DEFAULT_NEXUS_BROWSER_CONTROL_URL, "browser.controlUrl");
|
|
73
77
|
const controlPort = controlInfo.port;
|
|
74
78
|
const defaultColor = normalizeHexColor(cfg?.color);
|
|
75
79
|
const derivedCdpRange = deriveDefaultBrowserCdpPortRange(controlPort);
|
|
@@ -20,6 +20,9 @@ export async function snapshotAiViaPlaywright(opts) {
|
|
|
20
20
|
const result = await maybe._snapshotForAI({
|
|
21
21
|
timeout: Math.max(500, Math.min(60_000, Math.floor(opts.timeoutMs ?? 5000))),
|
|
22
22
|
track: "response",
|
|
23
|
+
...(typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars)
|
|
24
|
+
? { maxChars: Math.max(1, Math.floor(opts.maxChars)) }
|
|
25
|
+
: {}),
|
|
23
26
|
});
|
|
24
27
|
return { snapshot: String(result?.full ?? "") };
|
|
25
28
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { ensureMediaDir, saveMediaBuffer } from "../../media/store.js";
|
|
3
3
|
import { captureScreenshot, snapshotAria } from "../cdp.js";
|
|
4
|
+
import { DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "../constants.js";
|
|
4
5
|
import { DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES, DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE, normalizeBrowserScreenshot, } from "../screenshot.js";
|
|
5
6
|
import { getProfileContext, jsonError, toBoolean, toNumber, toStringArray, toStringOrEmpty, } from "./utils.js";
|
|
6
7
|
const SELECTOR_UNSUPPORTED_MESSAGE = [
|
|
@@ -498,6 +499,18 @@ export function registerBrowserAgentRoutes(app, ctx) {
|
|
|
498
499
|
? "ai"
|
|
499
500
|
: "aria";
|
|
500
501
|
const limit = typeof req.query.limit === "string" ? Number(req.query.limit) : undefined;
|
|
502
|
+
const maxCharsRaw = typeof req.query.maxChars === "string" ||
|
|
503
|
+
typeof req.query.maxChars === "number"
|
|
504
|
+
? Number(req.query.maxChars)
|
|
505
|
+
: undefined;
|
|
506
|
+
const maxChars = format === "ai" &&
|
|
507
|
+
typeof maxCharsRaw === "number" &&
|
|
508
|
+
Number.isFinite(maxCharsRaw) &&
|
|
509
|
+
maxCharsRaw > 0
|
|
510
|
+
? Math.floor(maxCharsRaw)
|
|
511
|
+
: format === "ai"
|
|
512
|
+
? DEFAULT_AI_SNAPSHOT_MAX_CHARS
|
|
513
|
+
: undefined;
|
|
501
514
|
try {
|
|
502
515
|
const tab = await profileCtx.ensureTabAvailable(targetId || undefined);
|
|
503
516
|
if (format === "ai") {
|
|
@@ -507,6 +520,7 @@ export function registerBrowserAgentRoutes(app, ctx) {
|
|
|
507
520
|
const snap = await pw.snapshotAiViaPlaywright({
|
|
508
521
|
cdpUrl: profileCtx.profile.cdpUrl,
|
|
509
522
|
targetId: tab.targetId,
|
|
523
|
+
maxChars,
|
|
510
524
|
});
|
|
511
525
|
return res.json({
|
|
512
526
|
ok: true,
|
|
@@ -126,7 +126,7 @@ async function resolveFilePath(rootReal, urlPath) {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
function isDisabledByEnv() {
|
|
129
|
-
if (process.env.NEXUS_SKIP_CANVAS_HOST === "1"
|
|
129
|
+
if (process.env.NEXUS_SKIP_CANVAS_HOST === "1")
|
|
130
130
|
return true;
|
|
131
131
|
if (process.env.NODE_ENV === "test")
|
|
132
132
|
return true;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { getSkillMetadata, isConfigPathTruthy, loadWorkspaceSkillEntries, resolveRuntimePlatform, resolveSkillConfig, } from "../agents/skills.js";
|
|
3
4
|
import { loadConfig } from "../config/config.js";
|
|
4
|
-
import { resolveStateDir } from "../config/paths.js";
|
|
5
|
-
import { getSkillMetadata, isConfigPathTruthy, loadWorkspaceSkillEntries, resolveSkillConfig, resolveRuntimePlatform, } from "../agents/skills.js";
|
|
6
5
|
import { ensureCredentialIndexSync } from "../credentials/store.js";
|
|
7
|
-
import { NEXUS_ROOT } from "../utils.js";
|
|
6
|
+
import { NEXUS_ROOT, SKILLS_STATE_DIR } from "../utils.js";
|
|
8
7
|
import { loadCapabilityRegistry } from "./registry.js";
|
|
9
8
|
const STATUS_PRIORITY = [
|
|
10
9
|
"active",
|
|
@@ -58,7 +57,7 @@ function setupLooksCredentialed(raw) {
|
|
|
58
57
|
lowered.includes("key"));
|
|
59
58
|
}
|
|
60
59
|
function detectSkillUsageActive(skillName) {
|
|
61
|
-
const usageLog = path.join(
|
|
60
|
+
const usageLog = path.join(SKILLS_STATE_DIR, skillName, "usage.log");
|
|
62
61
|
try {
|
|
63
62
|
const stat = fs.statSync(usageLog);
|
|
64
63
|
return stat.isFile() && stat.size > 0;
|
|
@@ -67,7 +66,7 @@ function detectSkillUsageActive(skillName) {
|
|
|
67
66
|
return false;
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
|
-
function resolveSkillType(
|
|
69
|
+
function resolveSkillType(_skillName, metadata) {
|
|
71
70
|
if (metadata?.type)
|
|
72
71
|
return metadata.type;
|
|
73
72
|
const requires = metadata?.requires;
|
|
@@ -78,11 +77,16 @@ function resolveSkillType(skillName, metadata) {
|
|
|
78
77
|
return "guide";
|
|
79
78
|
}
|
|
80
79
|
function resolveSkillProviderStatus(params) {
|
|
81
|
-
const { skillName, providerId, config, credentialServices, metadata, setupHint } = params;
|
|
80
|
+
const { skillName, providerId, config, credentialServices, metadata, setupHint, } = params;
|
|
82
81
|
const platform = resolveRuntimePlatform();
|
|
83
82
|
const skillType = resolveSkillType(skillName, metadata);
|
|
84
83
|
if (metadata?.os?.length && !metadata.os.includes(platform)) {
|
|
85
|
-
return {
|
|
84
|
+
return {
|
|
85
|
+
id: providerId,
|
|
86
|
+
kind: "skill",
|
|
87
|
+
status: "unavailable",
|
|
88
|
+
reason: "os",
|
|
89
|
+
};
|
|
86
90
|
}
|
|
87
91
|
const skillKey = metadata?.skillKey ?? skillName;
|
|
88
92
|
const skillConfig = resolveSkillConfig(config, skillKey);
|
|
@@ -108,15 +112,27 @@ function resolveSkillProviderStatus(params) {
|
|
|
108
112
|
return true;
|
|
109
113
|
});
|
|
110
114
|
if (missingEnv.length > 0) {
|
|
111
|
-
return {
|
|
115
|
+
return {
|
|
116
|
+
id: providerId,
|
|
117
|
+
kind: "skill",
|
|
118
|
+
status: "needs_setup",
|
|
119
|
+
reason: "missing_env",
|
|
120
|
+
};
|
|
112
121
|
}
|
|
113
122
|
const missingConfig = (requires?.config ?? []).filter((configPath) => !isConfigPathTruthy(config, configPath));
|
|
114
123
|
if (missingConfig.length > 0) {
|
|
115
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
id: providerId,
|
|
126
|
+
kind: "skill",
|
|
127
|
+
status: "needs_setup",
|
|
128
|
+
reason: "missing_config",
|
|
129
|
+
};
|
|
116
130
|
}
|
|
117
131
|
const credentialHints = requires?.credentials ?? [];
|
|
118
132
|
const requiresCredential = setupLooksCredentialed(setupHint ?? "");
|
|
119
|
-
if (skillType === "connector" ||
|
|
133
|
+
if (skillType === "connector" ||
|
|
134
|
+
credentialHints.length > 0 ||
|
|
135
|
+
requiresCredential) {
|
|
120
136
|
const aliases = new Set();
|
|
121
137
|
for (const entry of [providerId, ...credentialHints]) {
|
|
122
138
|
for (const alias of resolveCredentialAliases(entry))
|
|
@@ -124,7 +140,12 @@ function resolveSkillProviderStatus(params) {
|
|
|
124
140
|
}
|
|
125
141
|
const hasCred = Array.from(aliases).some((alias) => credentialServices.has(alias));
|
|
126
142
|
if (!hasCred) {
|
|
127
|
-
return {
|
|
143
|
+
return {
|
|
144
|
+
id: providerId,
|
|
145
|
+
kind: "skill",
|
|
146
|
+
status: "needs_setup",
|
|
147
|
+
reason: "missing_credentials",
|
|
148
|
+
};
|
|
128
149
|
}
|
|
129
150
|
}
|
|
130
151
|
if (detectSkillUsageActive(skillName)) {
|
|
@@ -162,7 +183,9 @@ export function detectCapabilities(params) {
|
|
|
162
183
|
const metadata = getSkillMetadata(entry);
|
|
163
184
|
const key = normalizeProviderId(metadata?.skillKey ?? entry.skill.name);
|
|
164
185
|
skillMap.set(key, { name: entry.skill.name, metadata });
|
|
165
|
-
const provides = (metadata?.provides ?? [])
|
|
186
|
+
const provides = (metadata?.provides ?? [])
|
|
187
|
+
.map((cap) => cap.trim())
|
|
188
|
+
.filter(Boolean);
|
|
166
189
|
for (const capId of provides) {
|
|
167
190
|
const normalizedCap = capId.trim();
|
|
168
191
|
if (!normalizedCap)
|
|
@@ -176,7 +199,10 @@ export function detectCapabilities(params) {
|
|
|
176
199
|
const capabilities = [];
|
|
177
200
|
for (const capability of registry.all) {
|
|
178
201
|
const extraProviders = providesMap.get(capability.id) ?? [];
|
|
179
|
-
const providerList = Array.from(new Set([
|
|
202
|
+
const providerList = Array.from(new Set([
|
|
203
|
+
...capability.providers.map(normalizeProviderId),
|
|
204
|
+
...extraProviders,
|
|
205
|
+
]));
|
|
180
206
|
const providerStatuses = [];
|
|
181
207
|
for (const provider of providerList) {
|
|
182
208
|
const normalized = normalizeProviderId(provider);
|
|
@@ -195,7 +221,11 @@ export function detectCapabilities(params) {
|
|
|
195
221
|
providerStatuses.push(resolveCredentialProviderStatus(normalized, credentialServices));
|
|
196
222
|
}
|
|
197
223
|
else {
|
|
198
|
-
providerStatuses.push({
|
|
224
|
+
providerStatuses.push({
|
|
225
|
+
id: normalized,
|
|
226
|
+
kind: "unknown",
|
|
227
|
+
status: "unavailable",
|
|
228
|
+
});
|
|
199
229
|
}
|
|
200
230
|
}
|
|
201
231
|
const status = pickBestStatus(providerStatuses.map((p) => p.status));
|
|
@@ -206,7 +236,8 @@ export function detectCapabilities(params) {
|
|
|
206
236
|
active: capabilities.filter((c) => c.status === "active").length,
|
|
207
237
|
ready: capabilities.filter((c) => c.status === "ready").length,
|
|
208
238
|
needs_setup: capabilities.filter((c) => c.status === "needs_setup").length,
|
|
209
|
-
needs_install: capabilities.filter((c) => c.status === "needs_install")
|
|
239
|
+
needs_install: capabilities.filter((c) => c.status === "needs_install")
|
|
240
|
+
.length,
|
|
210
241
|
unavailable: capabilities.filter((c) => c.status === "unavailable").length,
|
|
211
242
|
broken: capabilities.filter((c) => c.status === "broken").length,
|
|
212
243
|
};
|
|
@@ -70,7 +70,8 @@ export function loadCapabilityRegistry() {
|
|
|
70
70
|
for (const line of lines) {
|
|
71
71
|
const headingMatch = line.match(/^###\s+(.+)$/);
|
|
72
72
|
if (headingMatch) {
|
|
73
|
-
currentCategory =
|
|
73
|
+
currentCategory =
|
|
74
|
+
headingMatch[1]?.replace(/^[-–]\s*/, "").trim() || currentCategory;
|
|
74
75
|
continue;
|
|
75
76
|
}
|
|
76
77
|
const tableMatch = line.match(/^\|\s*`([^`]+)`\s*\|\s*([^|]+)\|\s*([^|]+)\|\s*([^|]+)\|/);
|
package/dist/cli/cloud-cli.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import crypto from "node:crypto";
|
|
1
3
|
import fs from "node:fs";
|
|
2
4
|
import path from "node:path";
|
|
3
|
-
import
|
|
4
|
-
import { spawn } from "node:child_process";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
5
6
|
import { scanCredentials } from "../commands/credential.js";
|
|
6
7
|
import { openUrl } from "../commands/onboard-helpers.js";
|
|
7
|
-
import { storeKeychainSecret, writeCredentialRecord, } from "../credentials/store.js";
|
|
8
|
+
import { resolveDefaultEnvVar, storeKeychainSecret, writeCredentialRecord, } from "../credentials/store.js";
|
|
8
9
|
import { NEXUS_ROOT, sleep } from "../utils.js";
|
|
9
10
|
const DEFAULT_CLOUD_TIMEOUT_MS = 120_000;
|
|
10
11
|
const DEFAULT_CLOUD_POLL_MS = 2_000;
|
|
@@ -77,6 +78,7 @@ async function storeHubToken(params) {
|
|
|
77
78
|
value: params.token,
|
|
78
79
|
});
|
|
79
80
|
}
|
|
81
|
+
let envVar;
|
|
80
82
|
if (storedInKeychain) {
|
|
81
83
|
record = {
|
|
82
84
|
owner: "user",
|
|
@@ -86,17 +88,18 @@ async function storeHubToken(params) {
|
|
|
86
88
|
};
|
|
87
89
|
}
|
|
88
90
|
else {
|
|
91
|
+
envVar = resolveDefaultEnvVar({ service, type: "token" });
|
|
92
|
+
process.env[envVar] = params.token;
|
|
89
93
|
record = {
|
|
90
94
|
owner: "user",
|
|
91
95
|
type: "token",
|
|
92
96
|
configuredAt: now,
|
|
93
|
-
storage: { provider: "
|
|
94
|
-
token: params.token,
|
|
97
|
+
storage: { provider: "env", var: envVar },
|
|
95
98
|
};
|
|
96
99
|
}
|
|
97
100
|
await writeCredentialRecord(service, account, authId, record);
|
|
98
101
|
await scanCredentials();
|
|
99
|
-
return { storedInKeychain, account };
|
|
102
|
+
return { storedInKeychain, account, envVar };
|
|
100
103
|
}
|
|
101
104
|
function parseCloudLoginArgs(args) {
|
|
102
105
|
let baseUrl = getHubBaseUrl();
|
|
@@ -206,6 +209,56 @@ function resolveRepoRoot(argv1 = process.argv[1]) {
|
|
|
206
209
|
}
|
|
207
210
|
return null;
|
|
208
211
|
}
|
|
212
|
+
function resolveModuleRoot() {
|
|
213
|
+
try {
|
|
214
|
+
let dir = path.dirname(fileURLToPath(import.meta.url));
|
|
215
|
+
for (let i = 0; i < 6; i += 1) {
|
|
216
|
+
if (fs.existsSync(path.join(dir, "package.json")))
|
|
217
|
+
return dir;
|
|
218
|
+
const parent = path.dirname(dir);
|
|
219
|
+
if (parent === dir)
|
|
220
|
+
break;
|
|
221
|
+
dir = parent;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
function resolvePackageRoot(argv1 = process.argv[1]) {
|
|
230
|
+
const moduleRoot = resolveModuleRoot();
|
|
231
|
+
if (moduleRoot)
|
|
232
|
+
return moduleRoot;
|
|
233
|
+
if (!argv1)
|
|
234
|
+
return null;
|
|
235
|
+
let normalized = path.resolve(argv1);
|
|
236
|
+
try {
|
|
237
|
+
normalized = fs.realpathSync(normalized);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// ignore
|
|
241
|
+
}
|
|
242
|
+
const parts = normalized.split(path.sep);
|
|
243
|
+
const distIndex = parts.lastIndexOf("dist");
|
|
244
|
+
if (distIndex !== -1) {
|
|
245
|
+
return parts.slice(0, distIndex).join(path.sep);
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
function resolveBundledCloudBinary(packageRoot) {
|
|
250
|
+
const ext = process.platform === "win32" ? ".exe" : "";
|
|
251
|
+
const platformId = `${process.platform}-${process.arch}`;
|
|
252
|
+
const candidates = [
|
|
253
|
+
path.join(packageRoot, "dist", "native", "nexus-cloud", platformId, `nexus-cloud-rs${ext}`),
|
|
254
|
+
path.join(packageRoot, "dist", "native", "nexus-cloud", `nexus-cloud-rs${ext}`),
|
|
255
|
+
];
|
|
256
|
+
for (const candidate of candidates) {
|
|
257
|
+
if (fs.existsSync(candidate))
|
|
258
|
+
return candidate;
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
209
262
|
function resolveCloudRunner(args) {
|
|
210
263
|
const env = { ...process.env };
|
|
211
264
|
if (!env.NEXUS_HOME && NEXUS_ROOT) {
|
|
@@ -215,6 +268,13 @@ function resolveCloudRunner(args) {
|
|
|
215
268
|
if (override) {
|
|
216
269
|
return { command: override, args, env };
|
|
217
270
|
}
|
|
271
|
+
const packageRoot = resolvePackageRoot();
|
|
272
|
+
if (packageRoot) {
|
|
273
|
+
const bundled = resolveBundledCloudBinary(packageRoot);
|
|
274
|
+
if (bundled) {
|
|
275
|
+
return { command: bundled, args, env };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
218
278
|
const repoRoot = resolveRepoRoot();
|
|
219
279
|
if (repoRoot) {
|
|
220
280
|
const nativeRoot = path.join(repoRoot, "native", "nexus-cloud");
|
|
@@ -296,7 +356,10 @@ async function handleCloudLogin(rawArgs) {
|
|
|
296
356
|
}
|
|
297
357
|
console.log(stored.storedInKeychain
|
|
298
358
|
? " Token stored in keychain"
|
|
299
|
-
:
|
|
359
|
+
: ` Token stored in env var ${stored.envVar ?? ""}`.trim());
|
|
360
|
+
if (!stored.storedInKeychain && stored.envVar) {
|
|
361
|
+
console.log(` Persist it in your shell: export ${stored.envVar}=...`);
|
|
362
|
+
}
|
|
300
363
|
if (cloudUrl) {
|
|
301
364
|
console.log(` Cloud URL: ${cloudUrl}`);
|
|
302
365
|
}
|