@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.
Files changed (347) hide show
  1. package/dist/agents/agent-id.js +41 -0
  2. package/dist/agents/auth-profiles.js +114 -25
  3. package/dist/agents/identity-state.js +101 -0
  4. package/dist/agents/model-auth.js +1 -0
  5. package/dist/agents/model-fallback.js +15 -9
  6. package/dist/agents/model-selection.js +1 -1
  7. package/dist/agents/models-config.js +17 -11
  8. package/dist/agents/pi-embedded-runner.js +101 -9
  9. package/dist/agents/sandbox.js +12 -3
  10. package/dist/agents/skill-runner.js +41 -6
  11. package/dist/agents/skill-usage.js +117 -17
  12. package/dist/agents/skills-status.js +4 -3
  13. package/dist/agents/skills.js +38 -30
  14. package/dist/agents/subagent-registry.js +25 -11
  15. package/dist/agents/system-prompt.js +16 -0
  16. package/dist/agents/tool-policy.js +19 -3
  17. package/dist/agents/tools/browser-tool.js +5 -2
  18. package/dist/agents/tools/image-tool.js +93 -8
  19. package/dist/agents/tools/sessions-announce-target.js +5 -1
  20. package/dist/agents/workspace.js +81 -59
  21. package/dist/auto-reply/command-detection.js +2 -1
  22. package/dist/auto-reply/reply/directive-handling.js +153 -28
  23. package/dist/auto-reply/reply/directives.js +17 -2
  24. package/dist/auto-reply/reply/model-selection.js +8 -3
  25. package/dist/auto-reply/reply/queue.js +2 -2
  26. package/dist/auto-reply/reply.js +1 -1
  27. package/dist/auto-reply/thinking.js +15 -0
  28. package/dist/browser/chrome.js +1 -1
  29. package/dist/browser/client.js +2 -0
  30. package/dist/browser/config.js +6 -2
  31. package/dist/browser/pw-tools-core.js +3 -0
  32. package/dist/browser/routes/agent.js +14 -0
  33. package/dist/canvas-host/server.js +1 -1
  34. package/dist/capabilities/detector.js +46 -15
  35. package/dist/capabilities/registry.js +2 -1
  36. package/dist/cli/cloud-cli.js +70 -7
  37. package/dist/cli/credential-cli.js +214 -23
  38. package/dist/cli/gateway-cli.js +1 -1
  39. package/dist/cli/log-cli.js +25 -0
  40. package/dist/cli/pairing-cli.js +1 -1
  41. package/dist/cli/program.js +82 -8
  42. package/dist/cli/run-main.js +1 -1
  43. package/dist/cli/skills-cli.js +165 -30
  44. package/dist/cli/skills-hub-cli.js +68 -36
  45. package/dist/cli/tool-connector-cli.js +99 -24
  46. package/dist/cli/upstream-sync-cli.js +253 -96
  47. package/dist/cli/usage-cli.js +14 -0
  48. package/dist/commands/auth-choice-options.js +6 -1
  49. package/dist/commands/auth-choice.js +157 -5
  50. package/dist/commands/bootstrap-preset.js +26 -12
  51. package/dist/commands/capabilities.js +33 -6
  52. package/dist/commands/claude-md.js +3 -2
  53. package/dist/commands/config-view.js +1 -1
  54. package/dist/commands/config.js +85 -0
  55. package/dist/commands/configure.js +4 -4
  56. package/dist/commands/credential.js +497 -36
  57. package/dist/commands/cursor-hooks.js +240 -0
  58. package/dist/commands/cursor-rules.js +14 -188
  59. package/dist/commands/doctor.js +5 -4
  60. package/dist/commands/identity.js +29 -32
  61. package/dist/commands/init.js +304 -20
  62. package/dist/commands/log.js +134 -0
  63. package/dist/commands/models/fallbacks.js +1 -1
  64. package/dist/commands/models/image-fallbacks.js +1 -1
  65. package/dist/commands/models/list.js +1 -1
  66. package/dist/commands/models/scan.js +1 -1
  67. package/dist/commands/onboard-auth.js +27 -2
  68. package/dist/commands/onboard-eve-identity.js +8 -9
  69. package/dist/commands/onboard-non-interactive.js +4 -2
  70. package/dist/commands/onboard-quickstart.js +18 -11
  71. package/dist/commands/quest-state.js +271 -0
  72. package/dist/commands/quest.js +53 -13
  73. package/dist/commands/reset.js +1 -1
  74. package/dist/commands/sessions-ingest.js +5 -4
  75. package/dist/commands/setup.js +4 -2
  76. package/dist/commands/skills-manifest.js +89 -29
  77. package/dist/commands/status.js +193 -73
  78. package/dist/commands/suggestions.js +1 -1
  79. package/dist/commands/usage-tracking.js +32 -0
  80. package/dist/commands/usage-upload.js +6 -1
  81. package/dist/config/defaults.js +1 -3
  82. package/dist/config/includes.js +5 -7
  83. package/dist/config/io.js +88 -16
  84. package/dist/config/legacy.js +4 -2
  85. package/dist/config/paths.js +16 -0
  86. package/dist/config/sessions.js +9 -5
  87. package/dist/config/zod-schema.js +4 -3
  88. package/dist/control-plane/broker/broker.js +131 -78
  89. package/dist/control-plane/compaction.js +3 -5
  90. package/dist/control-plane/factory.js +2 -2
  91. package/dist/control-plane/index.js +2 -2
  92. package/dist/control-plane/odu/agents.js +28 -23
  93. package/dist/control-plane/odu/interaction-tools.js +62 -50
  94. package/dist/control-plane/odu/prompt-loader.js +8 -8
  95. package/dist/control-plane/odu/runtime.js +87 -75
  96. package/dist/control-plane/odu-control-plane.js +14 -12
  97. package/dist/control-plane/single-agent.js +13 -13
  98. package/dist/credentials/store.js +133 -7
  99. package/dist/daemon/launchd.js +14 -0
  100. package/dist/entry.js +0 -0
  101. package/dist/gateway/server-browser.js +5 -4
  102. package/dist/gateway/server-methods/cron.js +11 -1
  103. package/dist/gateway/server.js +14 -7
  104. package/dist/infra/bonjour.js +1 -1
  105. package/dist/infra/event-log.js +8 -2
  106. package/dist/infra/path-env.js +1 -2
  107. package/dist/infra/provider-usage.auth.js +5 -3
  108. package/dist/infra/provider-usage.fetch.claude.js +16 -6
  109. package/dist/infra/provider-usage.fetch.minimax.js +8 -3
  110. package/dist/infra/provider-usage.js +9 -5
  111. package/dist/infra/restart.js +2 -2
  112. package/dist/infra/usage-settings.js +78 -0
  113. package/dist/infra/usage-suggestions.js +17 -5
  114. package/dist/infra/usage-upload.js +38 -1
  115. package/dist/infra/voicewake.js +2 -2
  116. package/dist/media/image-ops.js +3 -1
  117. package/dist/memory/index.js +2 -381
  118. package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud +0 -0
  119. package/dist/native/nexus-cloud/darwin-arm64/nexus-cloud-rs +0 -0
  120. package/dist/pairing/pairing-store.js +24 -0
  121. package/dist/providers/github-copilot-auth.js +1 -1
  122. package/dist/routing/resolve-route.js +6 -6
  123. package/dist/routing/session-key.js +3 -1
  124. package/dist/sessions/send-policy.js +5 -5
  125. package/dist/slack/monitor.js +22 -1
  126. package/dist/telegram/reaction-level.js +2 -1
  127. package/dist/utils.js +8 -3
  128. package/dist/wizard/onboarding.js +29 -7
  129. package/docs/AGENTS.default.md +1 -1
  130. package/docs/configuration.md +1 -1
  131. package/docs/feature-inventory/overview.md +2 -2
  132. package/docs/reference/templates/AGENTS.md +172 -109
  133. package/docs/templates/AGENTS.md +140 -199
  134. package/docs/templates/BOOTSTRAP.md +40 -20
  135. package/docs/templates/IDENTITY.md +6 -0
  136. package/docs/templates/USER.md +22 -2
  137. package/package.json +3 -1
  138. package/skills/{notion → connectors/notion}/SKILL.md +1 -1
  139. package/skills/{filesystem → guides/filesystem}/SKILL.md +1 -1
  140. package/skills/{onboarding → guides/onboarding}/SKILL.md +1 -1
  141. package/skills/{onboarding → guides/onboarding}/docs/CAPABILITY_TAXONOMY.md +5 -5
  142. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR.md +8 -8
  143. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_ONBOARDING.md +2 -2
  144. package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_SKILLS.md +26 -20
  145. package/skills/{onboarding → guides/onboarding}/docs/GOAL_STATE_ARCHITECTURE.md +38 -43
  146. package/skills/{onboarding → guides/onboarding}/docs/NEXUS_SYSTEM_OVERVIEW.md +4 -4
  147. package/skills/{onboarding → guides/onboarding}/docs/SKILLS_HUB_SPEC.md +1 -1
  148. package/skills/{onboarding → guides/onboarding}/docs/SKILLS_SPECIFICATION.md +8 -7
  149. package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_DESIGN.md +16 -16
  150. package/skills/{onboarding → guides/onboarding}/docs/SKILL_GATEWAY_PRD.md +10 -12
  151. package/skills/guides/onboarding/docs/canonical/00_CONFLICT_ANALYSIS.md +463 -0
  152. package/skills/guides/onboarding/docs/canonical/01_NEXUS_OVERVIEW.md +167 -0
  153. package/skills/guides/onboarding/docs/canonical/02_CLI_REFERENCE.md +404 -0
  154. package/skills/guides/onboarding/docs/canonical/03_STATE_ARCHITECTURE.md +357 -0
  155. package/skills/guides/onboarding/docs/canonical/04_SKILL_SPECIFICATION.md +393 -0
  156. package/skills/guides/onboarding/docs/canonical/05_CAPABILITY_TAXONOMY.md +298 -0
  157. package/skills/guides/onboarding/docs/canonical/06_CAPABILITIES_REFERENCE.md +207 -0
  158. package/skills/guides/onboarding/docs/canonical/07_AGENT_BINDINGS.md +85 -0
  159. package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/nexus-cloud.md +2 -2
  160. package/skills/{onboarding → guides/onboarding}/scripts/ralph/progress.txt +1 -1
  161. package/skills/{nexus-cloud → tools/nexus-cloud}/SKILL.md +2 -1
  162. package/skills/{nexus-cloud → tools/nexus-cloud}/docs/setup.md +1 -1
  163. package/docs/templates/PROFILE.md +0 -14
  164. /package/skills/{brave-search → connectors/brave-search}/SKILL.md +0 -0
  165. /package/skills/{brave-search → connectors/brave-search}/docs/setup.md +0 -0
  166. /package/skills/{brave-search → connectors/brave-search}/docs/troubleshooting.md +0 -0
  167. /package/skills/{brave-search → connectors/brave-search}/docs/usage.md +0 -0
  168. /package/skills/{brave-search → connectors/brave-search}/scripts/content.mjs +0 -0
  169. /package/skills/{brave-search → connectors/brave-search}/scripts/search.mjs +0 -0
  170. /package/skills/{discord → connectors/discord}/SKILL.md +0 -0
  171. /package/skills/{gemini → connectors/gemini}/SKILL.md +0 -0
  172. /package/skills/{github → connectors/github}/SKILL.md +0 -0
  173. /package/skills/{github → connectors/github}/docs/setup.md +0 -0
  174. /package/skills/{github → connectors/github}/docs/troubleshooting.md +0 -0
  175. /package/skills/{google-oauth → connectors/google-oauth}/SKILL.md +0 -0
  176. /package/skills/{slack → connectors/slack}/SKILL.md +0 -0
  177. /package/skills/{telegram → connectors/telegram}/SKILL.md +0 -0
  178. /package/skills/{telegram → connectors/telegram}/docs/pairing.md +0 -0
  179. /package/skills/{telegram → connectors/telegram}/docs/setup.md +0 -0
  180. /package/skills/{telegram → connectors/telegram}/docs/webhook.md +0 -0
  181. /package/skills/{wacli → connectors/wacli}/SKILL.md +0 -0
  182. /package/skills/{wacli → connectors/wacli}/docs/auth.md +0 -0
  183. /package/skills/{wacli → connectors/wacli}/docs/backup.md +0 -0
  184. /package/skills/{wacli → connectors/wacli}/docs/troubleshooting.md +0 -0
  185. /package/skills/{browser-use-agent-sdk → guides/browser-use-agent-sdk}/SKILL.md +0 -0
  186. /package/skills/{json-render → guides/json-render}/SKILL.md +0 -0
  187. /package/skills/{json-render → guides/json-render}/assets/components/README.md +0 -0
  188. /package/skills/{json-render → guides/json-render}/assets/components/catalog.ts +0 -0
  189. /package/skills/{json-render → guides/json-render}/assets/components/registry.tsx +0 -0
  190. /package/skills/{json-render → guides/json-render}/assets/demo/App.css +0 -0
  191. /package/skills/{json-render → guides/json-render}/assets/demo/App.tsx +0 -0
  192. /package/skills/{json-render → guides/json-render}/assets/demo/README.md +0 -0
  193. /package/skills/{json-render → guides/json-render}/assets/demo/catalog.ts +0 -0
  194. /package/skills/{json-render → guides/json-render}/assets/demo/data/nexus-core.json +0 -0
  195. /package/skills/{json-render → guides/json-render}/assets/demo/index.css +0 -0
  196. /package/skills/{json-render → guides/json-render}/assets/demo/registry.tsx +0 -0
  197. /package/skills/{json-render → guides/json-render}/docs/nexus-state-demo.md +0 -0
  198. /package/skills/{json-render → guides/json-render}/docs/shadcn-preset.md +0 -0
  199. /package/skills/{json-render → guides/json-render}/scripts/create-vite-demo.sh +0 -0
  200. /package/skills/{json-render → guides/json-render}/scripts/llm-server/README.md +0 -0
  201. /package/skills/{json-render → guides/json-render}/scripts/llm-server/catalog.ts +0 -0
  202. /package/skills/{json-render → guides/json-render}/scripts/llm-server/package-lock.json +0 -0
  203. /package/skills/{json-render → guides/json-render}/scripts/llm-server/package.json +0 -0
  204. /package/skills/{json-render → guides/json-render}/scripts/llm-server/server.ts +0 -0
  205. /package/skills/{onboarding → guides/onboarding}/docs/CAPABILITIES.md +0 -0
  206. /package/skills/{onboarding → guides/onboarding}/docs/CLI_GRAMMAR_CREDENTIALS.md +0 -0
  207. /package/skills/{onboarding → guides/onboarding}/docs/DOCUMENTATION_OVERVIEW.md +0 -0
  208. /package/skills/{onboarding → guides/onboarding}/docs/ENTITY_MODEL.md +0 -0
  209. /package/skills/{onboarding → guides/onboarding}/docs/SKILL_INVENTORY.md +0 -0
  210. /package/skills/{onboarding → guides/onboarding}/docs/STATE_ARCHITECTURE.md +0 -0
  211. /package/skills/{onboarding → guides/onboarding}/docs/TROUBLESHOOTING.md +0 -0
  212. /package/skills/{onboarding → guides/onboarding}/docs/USER_JOURNEY.md +0 -0
  213. /package/skills/{onboarding → guides/onboarding}/docs/WOW_MOMENTS.md +0 -0
  214. /package/skills/{onboarding → guides/onboarding}/docs/agent-apple-id.md +0 -0
  215. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/1password.md +0 -0
  216. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/TEMPLATE.md +0 -0
  217. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/aix.md +0 -0
  218. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/bird.md +0 -0
  219. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/brave-search.md +0 -0
  220. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/comms.md +0 -0
  221. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/computer-use.md +0 -0
  222. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/cron-and-heartbeat.md +0 -0
  223. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/eve.md +0 -0
  224. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/github.md +0 -0
  225. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/gog.md +0 -0
  226. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/homebrew-prereqs.md +0 -0
  227. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/qmd.md +0 -0
  228. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/telegram.md +0 -0
  229. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/wacli.md +0 -0
  230. /package/skills/{onboarding → guides/onboarding}/docs/skill-deep-dives/weather.md +0 -0
  231. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prd.json +0 -0
  232. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/prompt.md +0 -0
  233. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.log +0 -0
  234. /package/skills/{onboarding → guides/onboarding}/scripts/ralph/ralph.sh +0 -0
  235. /package/skills/{onboarding → guides/onboarding}/scripts/setup-cursor-skills.sh +0 -0
  236. /package/skills/{1password → tools/1password}/SKILL.md +0 -0
  237. /package/skills/{1password → tools/1password}/docs/setup.md +0 -0
  238. /package/skills/{1password → tools/1password}/docs/troubleshooting.md +0 -0
  239. /package/skills/{1password → tools/1password}/references/cli-examples.md +0 -0
  240. /package/skills/{1password → tools/1password}/references/get-started.md +0 -0
  241. /package/skills/{agent-browser → tools/agent-browser}/SKILL.md +0 -0
  242. /package/skills/{agent-browser → tools/agent-browser}/docs/browser-use-eval.md +0 -0
  243. /package/skills/{agent-browser → tools/agent-browser}/docs/first-tests.md +0 -0
  244. /package/skills/{agent-browser → tools/agent-browser}/docs/wordle-nyt-eval.js +0 -0
  245. /package/skills/{aix → tools/aix}/SKILL.md +0 -0
  246. /package/skills/{aix → tools/aix}/docs/embeddings.md +0 -0
  247. /package/skills/{aix → tools/aix}/docs/setup.md +0 -0
  248. /package/skills/{aix → tools/aix}/docs/troubleshooting.md +0 -0
  249. /package/skills/{aix → tools/aix}/references/sql.md +0 -0
  250. /package/skills/{apple-notes → tools/apple-notes}/SKILL.md +0 -0
  251. /package/skills/{apple-reminders → tools/apple-reminders}/SKILL.md +0 -0
  252. /package/skills/{bear-notes → tools/bear-notes}/SKILL.md +0 -0
  253. /package/skills/{bird → tools/bird}/SKILL.md +0 -0
  254. /package/skills/{bird → tools/bird}/docs/auth.md +0 -0
  255. /package/skills/{bird → tools/bird}/docs/troubleshooting.md +0 -0
  256. /package/skills/{blogwatcher → tools/blogwatcher}/SKILL.md +0 -0
  257. /package/skills/{blucli → tools/blucli}/SKILL.md +0 -0
  258. /package/skills/{camsnap → tools/camsnap}/SKILL.md +0 -0
  259. /package/skills/{clawdhub → tools/clawdhub}/SKILL.md +0 -0
  260. /package/skills/{coding-agent → tools/coding-agent}/SKILL.md +0 -0
  261. /package/skills/{comms → tools/comms}/SKILL.md +0 -0
  262. /package/skills/{comms → tools/comms}/docs/adapters.md +0 -0
  263. /package/skills/{comms → tools/comms}/docs/setup.md +0 -0
  264. /package/skills/{comms → tools/comms}/docs/troubleshooting.md +0 -0
  265. /package/skills/{comms → tools/comms}/references/schema.md +0 -0
  266. /package/skills/{computer-use → tools/computer-use}/SKILL.md +0 -0
  267. /package/skills/{computer-use → tools/computer-use}/docs/open-interpreter.md +0 -0
  268. /package/skills/{computer-use → tools/computer-use}/docs/peekaboo.md +0 -0
  269. /package/skills/{computer-use → tools/computer-use}/docs/setup.md +0 -0
  270. /package/skills/{computer-use → tools/computer-use}/docs/troubleshooting.md +0 -0
  271. /package/skills/{eightctl → tools/eightctl}/SKILL.md +0 -0
  272. /package/skills/{eve → tools/eve}/SKILL.md +0 -0
  273. /package/skills/{eve → tools/eve}/docs/dual-account.md +0 -0
  274. /package/skills/{eve → tools/eve}/docs/intelligence.md +0 -0
  275. /package/skills/{eve → tools/eve}/docs/setup.md +0 -0
  276. /package/skills/{eve → tools/eve}/docs/troubleshooting.md +0 -0
  277. /package/skills/{eve → tools/eve}/scripts/setup-dual-account.sh +0 -0
  278. /package/skills/{food-order → tools/food-order}/SKILL.md +0 -0
  279. /package/skills/{gh → tools/gh}/SKILL.md +0 -0
  280. /package/skills/{gh → tools/gh}/docs/usage.md +0 -0
  281. /package/skills/{gifgrep → tools/gifgrep}/SKILL.md +0 -0
  282. /package/skills/{gog → tools/gog}/SKILL.md +0 -0
  283. /package/skills/{gog → tools/gog}/docs/portability.md +0 -0
  284. /package/skills/{gog → tools/gog}/docs/setup.md +0 -0
  285. /package/skills/{gog → tools/gog}/docs/troubleshooting.md +0 -0
  286. /package/skills/{gog → tools/gog}/scripts/cdp/README.md +0 -0
  287. /package/skills/{gog → tools/gog}/scripts/cdp/add_test_users.py +0 -0
  288. /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts.py +0 -0
  289. /package/skills/{gog → tools/gog}/scripts/cdp/auth_add_accounts_manual.py +0 -0
  290. /package/skills/{gog → tools/gog}/scripts/cdp/create_oauth_client.py +0 -0
  291. /package/skills/{gog → tools/gog}/scripts/cdp/launch_cdp_chrome.sh +0 -0
  292. /package/skills/{goplaces → tools/goplaces}/SKILL.md +0 -0
  293. /package/skills/{imsg → tools/imsg}/SKILL.md +0 -0
  294. /package/skills/{local-places → tools/local-places}/SERVER_README.md +0 -0
  295. /package/skills/{local-places → tools/local-places}/SKILL.md +0 -0
  296. /package/skills/{local-places → tools/local-places}/pyproject.toml +0 -0
  297. /package/skills/{local-places → tools/local-places}/src/local_places/__init__.py +0 -0
  298. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  299. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  300. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  301. /package/skills/{local-places → tools/local-places}/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  302. /package/skills/{local-places → tools/local-places}/src/local_places/google_places.py +0 -0
  303. /package/skills/{local-places → tools/local-places}/src/local_places/main.py +0 -0
  304. /package/skills/{local-places → tools/local-places}/src/local_places/schemas.py +0 -0
  305. /package/skills/{mcporter → tools/mcporter}/SKILL.md +0 -0
  306. /package/skills/{model-usage → tools/model-usage}/SKILL.md +0 -0
  307. /package/skills/{model-usage → tools/model-usage}/references/codexbar-cli.md +0 -0
  308. /package/skills/{model-usage → tools/model-usage}/scripts/model_usage.py +0 -0
  309. /package/skills/{nano-banana-pro → tools/nano-banana-pro}/SKILL.md +0 -0
  310. /package/skills/{nano-banana-pro → tools/nano-banana-pro}/scripts/generate_image.py +0 -0
  311. /package/skills/{nano-pdf → tools/nano-pdf}/SKILL.md +0 -0
  312. /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/security.md +0 -0
  313. /package/skills/{nexus-cloud → tools/nexus-cloud}/docs/troubleshooting.md +0 -0
  314. /package/skills/{obsidian → tools/obsidian}/SKILL.md +0 -0
  315. /package/skills/{openai-image-gen → tools/openai-image-gen}/SKILL.md +0 -0
  316. /package/skills/{openai-image-gen → tools/openai-image-gen}/scripts/gen.py +0 -0
  317. /package/skills/{openai-whisper → tools/openai-whisper}/SKILL.md +0 -0
  318. /package/skills/{openai-whisper-api → tools/openai-whisper-api}/SKILL.md +0 -0
  319. /package/skills/{openai-whisper-api → tools/openai-whisper-api}/scripts/transcribe.sh +0 -0
  320. /package/skills/{openhue → tools/openhue}/SKILL.md +0 -0
  321. /package/skills/{oracle → tools/oracle}/SKILL.md +0 -0
  322. /package/skills/{ordercli → tools/ordercli}/SKILL.md +0 -0
  323. /package/skills/{peekaboo → tools/peekaboo}/SKILL.md +0 -0
  324. /package/skills/{qmd → tools/qmd}/SKILL.md +0 -0
  325. /package/skills/{qmd → tools/qmd}/docs/mcp.md +0 -0
  326. /package/skills/{qmd → tools/qmd}/docs/ollama.md +0 -0
  327. /package/skills/{qmd → tools/qmd}/docs/setup.md +0 -0
  328. /package/skills/{sag → tools/sag}/SKILL.md +0 -0
  329. /package/skills/{skill-cli-template → tools/skill-cli-template}/SKILL.md +0 -0
  330. /package/skills/{songsee → tools/songsee}/SKILL.md +0 -0
  331. /package/skills/{sonoscli → tools/sonoscli}/SKILL.md +0 -0
  332. /package/skills/{spotify-player → tools/spotify-player}/SKILL.md +0 -0
  333. /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
  334. /package/skills/{things-mac → tools/things-mac}/SKILL.md +0 -0
  335. /package/skills/{tmux → tools/tmux}/SKILL.md +0 -0
  336. /package/skills/{tmux → tools/tmux}/scripts/find-sessions.sh +0 -0
  337. /package/skills/{tmux → tools/tmux}/scripts/wait-for-text.sh +0 -0
  338. /package/skills/{trello → tools/trello}/SKILL.md +0 -0
  339. /package/skills/{upstream-sync → tools/upstream-sync}/SKILL.md +0 -0
  340. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/auto-port.sh +0 -0
  341. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-all.sh +0 -0
  342. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-nexus.sh +0 -0
  343. /package/skills/{upstream-sync → tools/upstream-sync}/scripts/check-pi-ai.sh +0 -0
  344. /package/skills/{video-frames → tools/video-frames}/SKILL.md +0 -0
  345. /package/skills/{video-frames → tools/video-frames}/scripts/frame.sh +0 -0
  346. /package/skills/{weather → tools/weather}/SKILL.md +0 -0
  347. /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.command("credential").description("Manage credentials");
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("get")
59
- .description("Get a credential record")
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 getCredential({
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
- console.log(`\n${result.filePath}`);
79
- console.log(JSON.stringify(result.record, null, 2));
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>", "plaintext | keychain | 1password | external", "plaintext")
90
- .option("--value <value>", "Secret value for plaintext/keychain")
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("--sync-command <cmd>", "External sync command")
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 storage = String(opts.storage).trim();
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 === "external"
125
- ? { provider: "external", syncCommand: String(opts.syncCommand ?? "") }
126
- : { provider: "plaintext", value: opts.value },
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;
@@ -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
+ }
@@ -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))
@@ -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({ json: Boolean(opts.json) }, defaultRuntime);
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({ json: Boolean(opts.json) }, defaultRuntime);
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({ json: Boolean(opts.json) }, defaultRuntime);
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") ? target : undefined;
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
- .command("config")
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;
@@ -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 });