@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cancel, confirm, isCancel } from "@clack/prompts";
|
|
2
|
-
import { addCredential, flagCredential, getCredential, getCredentialPaths, listCredentials, removeCredential, scanCredentialEnv, } from "../commands/credential.js";
|
|
2
|
+
import { addCredential, flagCredential, getCredential, getCredentialPaths, getCredentialValue, importCliCredential, listCredentials, removeCredential, scanCredentialEnv, verifyCredentials, } from "../commands/credential.js";
|
|
3
|
+
import { listCredentialEntries } from "../credentials/store.js";
|
|
3
4
|
function parseFields(raw, fieldsArgs) {
|
|
4
5
|
const out = {};
|
|
5
6
|
if (raw) {
|
|
@@ -25,7 +26,9 @@ function parseFields(raw, fieldsArgs) {
|
|
|
25
26
|
return out;
|
|
26
27
|
}
|
|
27
28
|
export function registerCredentialCli(program) {
|
|
28
|
-
const credential = program
|
|
29
|
+
const credential = program
|
|
30
|
+
.command("credential")
|
|
31
|
+
.description("Manage credentials");
|
|
29
32
|
credential
|
|
30
33
|
.command("list")
|
|
31
34
|
.description("List credentials from the index")
|
|
@@ -55,28 +58,100 @@ export function registerCredentialCli(program) {
|
|
|
55
58
|
console.log(`\nIndex: ${paths.indexPath}`);
|
|
56
59
|
});
|
|
57
60
|
credential
|
|
58
|
-
.command("
|
|
59
|
-
.description("
|
|
60
|
-
.requiredOption("--service <id>", "Service id")
|
|
61
|
-
.requiredOption("--account <id>", "Account id")
|
|
62
|
-
.requiredOption("--auth <id>", "Auth id")
|
|
61
|
+
.command("verify <service>")
|
|
62
|
+
.description("Verify credential status for a service")
|
|
63
63
|
.option("--json", "Output as JSON")
|
|
64
|
-
.action(async (opts) => {
|
|
65
|
-
const result = await
|
|
66
|
-
service: opts.service,
|
|
67
|
-
account: opts.account,
|
|
68
|
-
authId: opts.auth,
|
|
69
|
-
});
|
|
64
|
+
.action(async (service, opts) => {
|
|
65
|
+
const result = await verifyCredentials({ service });
|
|
70
66
|
if (!result) {
|
|
71
|
-
console.error("Credential not found.");
|
|
67
|
+
console.error("Credential service not found.");
|
|
72
68
|
process.exit(1);
|
|
73
69
|
}
|
|
74
70
|
if (opts.json) {
|
|
75
71
|
console.log(JSON.stringify(result, null, 2));
|
|
76
72
|
return;
|
|
77
73
|
}
|
|
78
|
-
|
|
79
|
-
console.log(
|
|
74
|
+
const iconFor = (status) => status === "ok" ? "✅" : status === "skipped" ? "⚠️" : "❌";
|
|
75
|
+
console.log(`${result.ok ? "✅" : "❌"} ${result.service}: ${result.accounts} account(s) checked`);
|
|
76
|
+
for (const entry of result.checked) {
|
|
77
|
+
const err = entry.error ? ` - ${entry.error}` : "";
|
|
78
|
+
console.log(` ${iconFor(entry.status)} ${entry.account} (${entry.authId})${err}`);
|
|
79
|
+
}
|
|
80
|
+
if (!result.ok) {
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
credential
|
|
85
|
+
.command("get [serviceAccount]")
|
|
86
|
+
.description("Get a credential value")
|
|
87
|
+
.option("--service <id>", "Service id")
|
|
88
|
+
.option("--account <id>", "Account id")
|
|
89
|
+
.option("--auth <id>", "Auth id")
|
|
90
|
+
.option("--json", "Output as JSON")
|
|
91
|
+
.option("--record", "Show credential record instead of value")
|
|
92
|
+
.action(async (serviceAccount, opts) => {
|
|
93
|
+
let service = opts.service;
|
|
94
|
+
let account = opts.account;
|
|
95
|
+
let authId = opts.auth;
|
|
96
|
+
if (serviceAccount && typeof serviceAccount === "string") {
|
|
97
|
+
const parts = serviceAccount.split("/").filter(Boolean);
|
|
98
|
+
if (parts.length >= 2) {
|
|
99
|
+
service = service ?? parts[0];
|
|
100
|
+
account = account ?? parts[1];
|
|
101
|
+
if (parts.length >= 3) {
|
|
102
|
+
authId = authId ?? parts.slice(2).join("/");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (!service || !account) {
|
|
107
|
+
console.error("Missing service/account. Use service/account or flags.");
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
if (!authId) {
|
|
111
|
+
const entries = await listCredentialEntries();
|
|
112
|
+
const matches = entries.filter((entry) => entry.service === service && entry.account === account);
|
|
113
|
+
const auths = Array.from(new Set(matches.map((entry) => entry.authId)));
|
|
114
|
+
if (auths.length === 1) {
|
|
115
|
+
authId = auths[0];
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.error(`Missing --auth. Available auth ids: ${auths.join(", ") || "none"}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const params = {
|
|
123
|
+
service,
|
|
124
|
+
account,
|
|
125
|
+
authId,
|
|
126
|
+
};
|
|
127
|
+
if (opts.record) {
|
|
128
|
+
const result = await getCredential(params);
|
|
129
|
+
if (!result) {
|
|
130
|
+
console.error("Credential not found.");
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
if (opts.json) {
|
|
134
|
+
console.log(JSON.stringify(result, null, 2));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
console.log(`\n${result.filePath}`);
|
|
138
|
+
console.log(JSON.stringify(result.record, null, 2));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const valueResult = await getCredentialValue(params);
|
|
142
|
+
if (!valueResult) {
|
|
143
|
+
console.error("Credential value not found.");
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
if (opts.json) {
|
|
147
|
+
console.log(JSON.stringify({
|
|
148
|
+
filePath: valueResult.filePath,
|
|
149
|
+
field: valueResult.field,
|
|
150
|
+
value: valueResult.value,
|
|
151
|
+
}, null, 2));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
console.log(valueResult.value);
|
|
80
155
|
});
|
|
81
156
|
credential
|
|
82
157
|
.command("add")
|
|
@@ -86,23 +161,55 @@ export function registerCredentialCli(program) {
|
|
|
86
161
|
.requiredOption("--type <type>", "api_key | token | oauth | config")
|
|
87
162
|
.option("--auth <id>", "Auth id (defaults to type)")
|
|
88
163
|
.option("--owner <owner>", "shared | user | agent:<id>", "user")
|
|
89
|
-
.option("--storage <provider>", "
|
|
90
|
-
.option("--value <value>", "Secret value for
|
|
164
|
+
.option("--storage <provider>", "keychain | 1password | env | external")
|
|
165
|
+
.option("--value <value>", "Secret value for keychain")
|
|
91
166
|
.option("--refresh-token <token>", "OAuth refresh token")
|
|
92
167
|
.option("--expires-at <ts>", "Expiration (unix ms or ISO string)")
|
|
93
168
|
.option("--vault <name>", "1Password vault")
|
|
94
169
|
.option("--item <name>", "1Password item")
|
|
95
170
|
.option("--fields <json>", "1Password field map as JSON")
|
|
96
171
|
.option("--field <pair...>", "1Password field map: key=value")
|
|
97
|
-
.option("--
|
|
172
|
+
.option("--env-var <name>", "Env var name for env storage")
|
|
173
|
+
.option("--command <cmd>", "External command to fetch secret")
|
|
174
|
+
.option("--sync-command <cmd>", "External sync command (deprecated)")
|
|
175
|
+
.option("--format <format>", "External command output format: raw|json")
|
|
176
|
+
.option("--json-path <path>", "JSON path for external output")
|
|
98
177
|
.action(async (opts) => {
|
|
99
178
|
const type = String(opts.type).trim();
|
|
100
179
|
if (!["api_key", "token", "oauth", "config"].includes(type)) {
|
|
101
180
|
console.error("Invalid --type");
|
|
102
181
|
process.exit(1);
|
|
103
182
|
}
|
|
104
|
-
const
|
|
183
|
+
const storageRaw = opts.storage ? String(opts.storage).trim() : "";
|
|
184
|
+
const storage = storageRaw || (process.platform === "darwin" ? "keychain" : "");
|
|
185
|
+
if (!storage) {
|
|
186
|
+
console.error("Missing --storage. Use keychain (macOS), 1password, env, or external.");
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
if (storage === "keychain" && !opts.value) {
|
|
190
|
+
console.error("Missing --value for keychain storage.");
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
if (storage === "env" && !opts.envVar) {
|
|
194
|
+
console.error("Missing --env-var for env storage.");
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
if (storage === "external" && !opts.command && !opts.syncCommand) {
|
|
198
|
+
console.error("Missing --command for external storage.");
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
if (opts.format && !["raw", "json"].includes(String(opts.format))) {
|
|
202
|
+
console.error("Invalid --format. Use raw or json.");
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
if (!["keychain", "1password", "env", "external"].includes(storage)) {
|
|
206
|
+
console.error("Invalid --storage. Use keychain, 1password, env, external.");
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
105
209
|
const fields = parseFields(opts.fields, opts.field);
|
|
210
|
+
const format = opts.format === "raw" || opts.format === "json"
|
|
211
|
+
? opts.format
|
|
212
|
+
: undefined;
|
|
106
213
|
const expiresAt = opts.expiresAt && /^\d+$/.test(String(opts.expiresAt).trim())
|
|
107
214
|
? Number.parseInt(String(opts.expiresAt).trim(), 10)
|
|
108
215
|
: opts.expiresAt;
|
|
@@ -121,14 +228,59 @@ export function registerCredentialCli(program) {
|
|
|
121
228
|
item: String(opts.item ?? ""),
|
|
122
229
|
fields,
|
|
123
230
|
}
|
|
124
|
-
: storage === "
|
|
125
|
-
? { provider: "
|
|
126
|
-
:
|
|
231
|
+
: storage === "env"
|
|
232
|
+
? { provider: "env", var: String(opts.envVar ?? "") }
|
|
233
|
+
: storage === "external"
|
|
234
|
+
? {
|
|
235
|
+
provider: "external",
|
|
236
|
+
command: opts.command ? String(opts.command) : undefined,
|
|
237
|
+
syncCommand: opts.syncCommand
|
|
238
|
+
? String(opts.syncCommand)
|
|
239
|
+
: undefined,
|
|
240
|
+
...(format ? { format } : {}),
|
|
241
|
+
jsonPath: opts.jsonPath
|
|
242
|
+
? String(opts.jsonPath)
|
|
243
|
+
: undefined,
|
|
244
|
+
}
|
|
245
|
+
: { provider: "env", var: String(opts.envVar ?? "") },
|
|
127
246
|
refreshToken: opts.refreshToken,
|
|
128
247
|
expiresAt,
|
|
129
248
|
});
|
|
130
249
|
console.log(`Added credential at ${record.filePath}`);
|
|
131
250
|
});
|
|
251
|
+
credential
|
|
252
|
+
.command("import <source>")
|
|
253
|
+
.description("Import external CLI credentials")
|
|
254
|
+
.option("--account <id>", "Account id override")
|
|
255
|
+
.option("--owner <owner>", "shared | user | agent:<id>", "user")
|
|
256
|
+
.option("--force", "Overwrite existing record")
|
|
257
|
+
.option("--json", "Output as JSON")
|
|
258
|
+
.option("--no-keychain-prompt", "Skip keychain prompts")
|
|
259
|
+
.action(async (source, opts) => {
|
|
260
|
+
const normalized = String(source ?? "").trim();
|
|
261
|
+
if (!["claude-cli", "codex-cli"].includes(normalized)) {
|
|
262
|
+
console.error("Invalid source. Use claude-cli or codex-cli.");
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const result = await importCliCredential({
|
|
267
|
+
source: normalized,
|
|
268
|
+
account: opts.account,
|
|
269
|
+
owner: opts.owner,
|
|
270
|
+
force: Boolean(opts.force),
|
|
271
|
+
allowKeychainPrompt: opts.keychainPrompt !== false,
|
|
272
|
+
});
|
|
273
|
+
if (opts.json) {
|
|
274
|
+
console.log(JSON.stringify(result, null, 2));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
console.log(`Imported ${result.source} credentials into ${result.profileId} (${result.filePath})`);
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
132
284
|
credential
|
|
133
285
|
.command("remove")
|
|
134
286
|
.description("Remove a credential record")
|
|
@@ -147,6 +299,8 @@ export function registerCredentialCli(program) {
|
|
|
147
299
|
.command("scan")
|
|
148
300
|
.description("Scan environment variables for credentials")
|
|
149
301
|
.option("--deep", "Scan all environment variables for credential patterns")
|
|
302
|
+
.option("--import", "Import detected credentials into the store")
|
|
303
|
+
.option("--account <id>", "Account id for imported credentials")
|
|
150
304
|
.option("--yes", "Skip confirmation prompts")
|
|
151
305
|
.option("--json", "Output as JSON")
|
|
152
306
|
.action(async (opts) => {
|
|
@@ -161,6 +315,43 @@ export function registerCredentialCli(program) {
|
|
|
161
315
|
}
|
|
162
316
|
}
|
|
163
317
|
const result = scanCredentialEnv({ deep: Boolean(opts.deep) });
|
|
318
|
+
if (opts.import) {
|
|
319
|
+
const accountOverride = typeof opts.account === "string" && opts.account.trim()
|
|
320
|
+
? opts.account.trim()
|
|
321
|
+
: null;
|
|
322
|
+
const importable = [
|
|
323
|
+
...result.known,
|
|
324
|
+
...(result.deep ? result.discovered : []),
|
|
325
|
+
].filter((entry) => entry.service && entry.type);
|
|
326
|
+
const existing = await listCredentialEntries();
|
|
327
|
+
const existingKeys = new Set(existing.map((entry) => `${entry.service}::${entry.account}::${entry.authId}`));
|
|
328
|
+
const imported = [];
|
|
329
|
+
const skipped = [];
|
|
330
|
+
for (const entry of importable) {
|
|
331
|
+
const account = accountOverride ?? `env:${entry.env}`;
|
|
332
|
+
const authId = entry.type ?? "token";
|
|
333
|
+
const key = `${entry.service}::${account}::${authId}`;
|
|
334
|
+
if (existingKeys.has(key)) {
|
|
335
|
+
skipped.push(`${entry.service}/${account}/${authId}`);
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
await addCredential({
|
|
339
|
+
service: entry.service ?? "unknown",
|
|
340
|
+
account,
|
|
341
|
+
type: authId,
|
|
342
|
+
storage: { provider: "env", var: entry.env },
|
|
343
|
+
});
|
|
344
|
+
imported.push(`${entry.service}/${account}/${authId}`);
|
|
345
|
+
}
|
|
346
|
+
if (opts.json) {
|
|
347
|
+
console.log(JSON.stringify({ imported, skipped, total: importable.length }, null, 2));
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
console.log(`Imported: ${imported.length}`);
|
|
351
|
+
if (skipped.length > 0) {
|
|
352
|
+
console.log(`Skipped (already exists): ${skipped.length}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
164
355
|
if (opts.json) {
|
|
165
356
|
console.log(JSON.stringify(result, null, 2));
|
|
166
357
|
return;
|
package/dist/cli/gateway-cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
-
import { CONFIG_PATH_NEXUS, loadConfig, resolveGatewayPort } from "../config/config.js";
|
|
2
|
+
import { CONFIG_PATH_NEXUS, loadConfig, resolveGatewayPort, } from "../config/config.js";
|
|
3
3
|
import { GATEWAY_LAUNCH_AGENT_LABEL, GATEWAY_SYSTEMD_SERVICE_NAME, GATEWAY_WINDOWS_TASK_NAME, } from "../daemon/constants.js";
|
|
4
4
|
import { resolveGatewayService } from "../daemon/service.js";
|
|
5
5
|
import { callGateway, randomIdempotencyKey } from "../gateway/call.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { logCommand } from "../commands/log.js";
|
|
2
|
+
import { defaultRuntime } from "../runtime.js";
|
|
3
|
+
export function registerLogCli(program) {
|
|
4
|
+
program
|
|
5
|
+
.command("log")
|
|
6
|
+
.description("Show Nexus event or skill usage logs")
|
|
7
|
+
.option("--json", "Output as JSON")
|
|
8
|
+
.option("--errors", "Only include error events")
|
|
9
|
+
.option("--since <time>", "Only include events after time (e.g. 24h)")
|
|
10
|
+
.option("--limit <n>", "Limit entries", (value) => Number.parseInt(value, 10))
|
|
11
|
+
.option("--skill <name>", "Show usage log for a skill")
|
|
12
|
+
.option("--source <source>", "Filter by event source")
|
|
13
|
+
.option("--command <path>", "Filter by command path")
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
await logCommand({
|
|
16
|
+
json: Boolean(opts.json),
|
|
17
|
+
errors: Boolean(opts.errors),
|
|
18
|
+
since: typeof opts.since === "string" ? opts.since : undefined,
|
|
19
|
+
limit: Number.isFinite(opts.limit) ? opts.limit : undefined,
|
|
20
|
+
skill: typeof opts.skill === "string" ? opts.skill : undefined,
|
|
21
|
+
source: typeof opts.source === "string" ? opts.source : undefined,
|
|
22
|
+
command: typeof opts.command === "string" ? opts.command : undefined,
|
|
23
|
+
}, defaultRuntime);
|
|
24
|
+
});
|
|
25
|
+
}
|
package/dist/cli/pairing-cli.js
CHANGED
|
@@ -15,7 +15,7 @@ const PROVIDERS = [
|
|
|
15
15
|
"whatsapp",
|
|
16
16
|
];
|
|
17
17
|
function parseProvider(raw) {
|
|
18
|
-
const value = String(raw
|
|
18
|
+
const value = (typeof raw === "string" || typeof raw === "number" ? String(raw) : "")
|
|
19
19
|
.trim()
|
|
20
20
|
.toLowerCase();
|
|
21
21
|
if (PROVIDERS.includes(value))
|
package/dist/cli/program.js
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { capabilitiesCommand } from "../commands/capabilities.js";
|
|
3
|
+
import { configGetCommand, configListCommand, configSetCommand, } from "../commands/config.js";
|
|
3
4
|
import { configViewCommand } from "../commands/config-view.js";
|
|
4
5
|
import { identityCommand } from "../commands/identity.js";
|
|
5
6
|
import { initCommand } from "../commands/init.js";
|
|
6
7
|
import { questCommand } from "../commands/quest.js";
|
|
7
|
-
import { suggestionsCommand } from "../commands/suggestions.js";
|
|
8
8
|
import { statusCommand } from "../commands/status.js";
|
|
9
|
+
import { suggestionsCommand } from "../commands/suggestions.js";
|
|
9
10
|
import { updateCommand } from "../commands/update.js";
|
|
10
11
|
import { isNixMode, migrateLegacyConfig, readConfigFileSnapshot, writeConfigFile, } from "../config/config.js";
|
|
11
12
|
import { danger } from "../globals.js";
|
|
13
|
+
import { recordCliCommandFinish, recordCliCommandStart, } from "../infra/event-log.js";
|
|
12
14
|
import { defaultRuntime } from "../runtime.js";
|
|
13
15
|
import { VERSION } from "../version.js";
|
|
14
|
-
import { recordCliCommandFinish, recordCliCommandStart } from "../infra/event-log.js";
|
|
15
16
|
import { registerCloudCommand } from "./cloud-cli.js";
|
|
16
17
|
import { registerCredentialCli } from "./credential-cli.js";
|
|
17
18
|
import { registerDnsCli } from "./dns-cli.js";
|
|
18
19
|
import { registerGatewayCli } from "./gateway-cli.js";
|
|
20
|
+
import { registerLogCli } from "./log-cli.js";
|
|
19
21
|
import { registerSkillsCommand } from "./skills-cli.js";
|
|
20
22
|
import { registerSkillsHubCommand } from "./skills-hub-cli.js";
|
|
21
23
|
import { registerToolConnectorCli } from "./tool-connector-cli.js";
|
|
22
24
|
import { registerUsageCli } from "./usage-cli.js";
|
|
25
|
+
import { resolveIdentitySnapshot } from "../agents/identity-state.js";
|
|
23
26
|
function buildCommandPath(cmd) {
|
|
24
27
|
const parts = [];
|
|
25
28
|
let current = cmd;
|
|
@@ -51,6 +54,19 @@ export function buildProgram() {
|
|
|
51
54
|
});
|
|
52
55
|
if (actionCommand.name() === "init")
|
|
53
56
|
return;
|
|
57
|
+
const skipIdentityCheck = process.env.NODE_ENV === "test" || Boolean(process.env.VITEST);
|
|
58
|
+
if (!skipIdentityCheck && actionCommand.name() !== "status") {
|
|
59
|
+
const identity = resolveIdentitySnapshot();
|
|
60
|
+
if (!identity.ok) {
|
|
61
|
+
defaultRuntime.error("Multiple agents detected in state/agents.");
|
|
62
|
+
defaultRuntime.error(`Set NEXUS_AGENT_ID to one of: ${identity.agentOptions.join(", ")}`);
|
|
63
|
+
process.exit(2);
|
|
64
|
+
}
|
|
65
|
+
if (!identity.snapshot.hasIdentity) {
|
|
66
|
+
await statusCommand({ brief: true }, defaultRuntime);
|
|
67
|
+
process.exit(2);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
54
70
|
const snapshot = await readConfigFileSnapshot();
|
|
55
71
|
if (snapshot.legacyIssues.length === 0)
|
|
56
72
|
return;
|
|
@@ -79,50 +95,107 @@ export function buildProgram() {
|
|
|
79
95
|
.option("--brief", "Compact output")
|
|
80
96
|
.option("--capabilities", "Focus on capabilities")
|
|
81
97
|
.option("--credentials", "Focus on credentials")
|
|
98
|
+
.option("--usage", "Focus on usage statistics")
|
|
99
|
+
.option("--quiet", "Minimal output, exit codes only")
|
|
82
100
|
.action(async (opts) => {
|
|
83
101
|
await statusCommand({
|
|
84
102
|
json: Boolean(opts.json),
|
|
85
103
|
brief: Boolean(opts.brief),
|
|
86
104
|
capabilities: Boolean(opts.capabilities),
|
|
87
105
|
credentials: Boolean(opts.credentials),
|
|
106
|
+
usage: Boolean(opts.usage),
|
|
107
|
+
quiet: Boolean(opts.quiet),
|
|
88
108
|
}, defaultRuntime);
|
|
89
109
|
});
|
|
90
110
|
program
|
|
91
111
|
.command("capabilities")
|
|
92
112
|
.description("Show full capabilities map")
|
|
93
113
|
.option("--json", "Output as JSON")
|
|
114
|
+
.option("--category <name>", "Filter to a category")
|
|
115
|
+
.option("--status <status>", "Filter by status")
|
|
116
|
+
.option("--compact", "Compact output")
|
|
94
117
|
.action(async (opts) => {
|
|
95
|
-
await capabilitiesCommand({
|
|
118
|
+
await capabilitiesCommand({
|
|
119
|
+
json: Boolean(opts.json),
|
|
120
|
+
category: opts.category ? String(opts.category) : undefined,
|
|
121
|
+
status: opts.status ? String(opts.status) : undefined,
|
|
122
|
+
compact: Boolean(opts.compact),
|
|
123
|
+
}, defaultRuntime);
|
|
96
124
|
});
|
|
97
125
|
program
|
|
98
126
|
.command("map")
|
|
99
127
|
.description("Alias for capabilities")
|
|
100
128
|
.option("--json", "Output as JSON")
|
|
129
|
+
.option("--category <name>", "Filter to a category")
|
|
130
|
+
.option("--status <status>", "Filter by status")
|
|
131
|
+
.option("--compact", "Compact output")
|
|
101
132
|
.action(async (opts) => {
|
|
102
|
-
await capabilitiesCommand({
|
|
133
|
+
await capabilitiesCommand({
|
|
134
|
+
json: Boolean(opts.json),
|
|
135
|
+
category: opts.category ? String(opts.category) : undefined,
|
|
136
|
+
status: opts.status ? String(opts.status) : undefined,
|
|
137
|
+
compact: Boolean(opts.compact),
|
|
138
|
+
}, defaultRuntime);
|
|
103
139
|
});
|
|
104
140
|
program
|
|
105
141
|
.command("quest")
|
|
106
142
|
.description("Show onboarding quests")
|
|
107
143
|
.option("--json", "Output as JSON")
|
|
144
|
+
.option("--list", "List all quests")
|
|
145
|
+
.option("--progress", "Show quest progress summary")
|
|
146
|
+
.option("--start <quest>", "Mark a quest as started")
|
|
147
|
+
.option("--secrets", "Include secret quests")
|
|
148
|
+
.option("--power-path", "Only show power-path quests")
|
|
149
|
+
.option("--quick-wins", "Only show quick wins")
|
|
108
150
|
.action(async (opts) => {
|
|
109
|
-
await questCommand({
|
|
151
|
+
await questCommand({
|
|
152
|
+
json: Boolean(opts.json),
|
|
153
|
+
list: Boolean(opts.list),
|
|
154
|
+
progress: Boolean(opts.progress),
|
|
155
|
+
start: opts.start ? String(opts.start) : undefined,
|
|
156
|
+
secrets: Boolean(opts.secrets),
|
|
157
|
+
powerPath: Boolean(opts.powerPath),
|
|
158
|
+
quickWins: Boolean(opts.quickWins),
|
|
159
|
+
}, defaultRuntime);
|
|
110
160
|
});
|
|
111
161
|
program
|
|
112
162
|
.command("identity [target]")
|
|
113
163
|
.description("Show identity files")
|
|
114
164
|
.option("--json", "Output as JSON")
|
|
115
165
|
.action(async (target, opts) => {
|
|
116
|
-
const normalized = target && (target === "user" || target === "agent")
|
|
166
|
+
const normalized = target && (target === "user" || target === "agent")
|
|
167
|
+
? target
|
|
168
|
+
: undefined;
|
|
117
169
|
await identityCommand({ target: normalized, json: Boolean(opts.json) }, defaultRuntime);
|
|
118
170
|
});
|
|
119
|
-
program
|
|
120
|
-
|
|
171
|
+
const config = program.command("config").description("Manage config");
|
|
172
|
+
config
|
|
121
173
|
.description("Show config path and status")
|
|
122
174
|
.option("--json", "Output as JSON")
|
|
123
175
|
.action(async (opts) => {
|
|
124
176
|
await configViewCommand({ json: Boolean(opts.json) }, defaultRuntime);
|
|
125
177
|
});
|
|
178
|
+
config
|
|
179
|
+
.command("list")
|
|
180
|
+
.description("List config values")
|
|
181
|
+
.option("--json", "Output as JSON")
|
|
182
|
+
.action(async (opts) => {
|
|
183
|
+
await configListCommand({ json: Boolean(opts.json) }, defaultRuntime);
|
|
184
|
+
});
|
|
185
|
+
config
|
|
186
|
+
.command("get <key>")
|
|
187
|
+
.description("Get a config value")
|
|
188
|
+
.option("--json", "Output as JSON")
|
|
189
|
+
.action(async (key, opts) => {
|
|
190
|
+
await configGetCommand({ key, json: Boolean(opts.json) }, defaultRuntime);
|
|
191
|
+
});
|
|
192
|
+
config
|
|
193
|
+
.command("set <key> <value>")
|
|
194
|
+
.description("Set a config value")
|
|
195
|
+
.option("--json", "Output as JSON")
|
|
196
|
+
.action(async (key, value, opts) => {
|
|
197
|
+
await configSetCommand({ key, value, json: Boolean(opts.json) }, defaultRuntime);
|
|
198
|
+
});
|
|
126
199
|
program
|
|
127
200
|
.command("update")
|
|
128
201
|
.description("Update nexus CLI")
|
|
@@ -156,6 +229,7 @@ export function buildProgram() {
|
|
|
156
229
|
registerCredentialCli(program);
|
|
157
230
|
registerDnsCli(program);
|
|
158
231
|
registerGatewayCli(program);
|
|
232
|
+
registerLogCli(program);
|
|
159
233
|
registerToolConnectorCli(program);
|
|
160
234
|
registerUsageCli(program);
|
|
161
235
|
return program;
|
package/dist/cli/run-main.js
CHANGED
|
@@ -2,10 +2,10 @@ import process from "node:process";
|
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
import { loadDotEnv } from "../infra/dotenv.js";
|
|
4
4
|
import { normalizeEnv } from "../infra/env.js";
|
|
5
|
+
import { initCliEventLogSession, recordCliCommandFailure, recordCliSessionEnd, registerAgentEventLogListener, } from "../infra/event-log.js";
|
|
5
6
|
import { isMainModule } from "../infra/is-main.js";
|
|
6
7
|
import { ensureNexusCliOnPath } from "../infra/path-env.js";
|
|
7
8
|
import { assertSupportedRuntime } from "../infra/runtime-guard.js";
|
|
8
|
-
import { initCliEventLogSession, recordCliCommandFailure, recordCliSessionEnd, registerAgentEventLogListener, } from "../infra/event-log.js";
|
|
9
9
|
import { enableConsoleCapture } from "../logging.js";
|
|
10
10
|
export async function runCli(argv = process.argv) {
|
|
11
11
|
loadDotEnv({ quiet: true });
|