@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
@@ -21,6 +21,8 @@ export function normalizeThinkLevel(raw) {
21
21
  "max",
22
22
  ].includes(key))
23
23
  return "high";
24
+ if (["xhigh", "x-high", "extra-high"].includes(key))
25
+ return "xhigh";
24
26
  if (["think"].includes(key))
25
27
  return "minimal";
26
28
  return undefined;
@@ -47,3 +49,16 @@ export function normalizeElevatedLevel(raw) {
47
49
  return "on";
48
50
  return undefined;
49
51
  }
52
+ // Normalize reasoning visibility flags used to control <think> output.
53
+ export function normalizeReasoningLevel(raw) {
54
+ if (!raw)
55
+ return undefined;
56
+ const key = raw.toLowerCase();
57
+ if (["off", "false", "no", "0"].includes(key))
58
+ return "off";
59
+ if (["on", "true", "yes", "1"].includes(key))
60
+ return "on";
61
+ if (["stream", "live"].includes(key))
62
+ return "stream";
63
+ return undefined;
64
+ }
@@ -7,7 +7,7 @@ import { ensurePortAvailable } from "../infra/ports.js";
7
7
  import { createSubsystemLogger } from "../logging.js";
8
8
  import { CONFIG_DIR } from "../utils.js";
9
9
  import { normalizeCdpWsUrl } from "./cdp.js";
10
- import { DEFAULT_NEXUS_BROWSER_COLOR, DEFAULT_NEXUS_BROWSER_PROFILE_NAME } from "./constants.js";
10
+ import { DEFAULT_NEXUS_BROWSER_COLOR, DEFAULT_NEXUS_BROWSER_PROFILE_NAME, } from "./constants.js";
11
11
  const log = createSubsystemLogger("browser").child("chrome");
12
12
  function exists(filePath) {
13
13
  try {
@@ -96,6 +96,8 @@ export async function browserSnapshot(baseUrl, opts) {
96
96
  q.set("targetId", opts.targetId);
97
97
  if (typeof opts.limit === "number")
98
98
  q.set("limit", String(opts.limit));
99
+ if (typeof opts.maxChars === "number")
100
+ q.set("maxChars", String(opts.maxChars));
99
101
  if (opts.profile)
100
102
  q.set("profile", opts.profile);
101
103
  return await fetchBrowserJson(`${baseUrl}/snapshot?${q.toString()}`, {
@@ -56,7 +56,8 @@ function ensureDefaultProfile(profiles, defaultColor, legacyCdpPort, derivedDefa
56
56
  }
57
57
  export function resolveBrowserConfig(cfg) {
58
58
  const enabled = cfg?.enabled ?? DEFAULT_NEXUS_BROWSER_ENABLED;
59
- const envControlUrl = (process.env.NEXUS_BROWSER_CONTROL_URL ?? process.env.NEXUS_BROWSER_CONTROL_URL)?.trim();
59
+ const envControlUrl = (process.env.NEXUS_BROWSER_CONTROL_URL ??
60
+ process.env.NEXUS_BROWSER_CONTROL_URL)?.trim();
60
61
  const derivedControlPort = (() => {
61
62
  const raw = (process.env.NEXUS_GATEWAY_PORT ?? process.env.NEXUS_GATEWAY_PORT)?.trim();
62
63
  if (!raw)
@@ -69,7 +70,10 @@ export function resolveBrowserConfig(cfg) {
69
70
  const derivedControlUrl = derivedControlPort
70
71
  ? `http://127.0.0.1:${derivedControlPort}`
71
72
  : null;
72
- const controlInfo = parseHttpUrl(cfg?.controlUrl ?? envControlUrl ?? derivedControlUrl ?? DEFAULT_NEXUS_BROWSER_CONTROL_URL, "browser.controlUrl");
73
+ const controlInfo = parseHttpUrl(cfg?.controlUrl ??
74
+ envControlUrl ??
75
+ derivedControlUrl ??
76
+ DEFAULT_NEXUS_BROWSER_CONTROL_URL, "browser.controlUrl");
73
77
  const controlPort = controlInfo.port;
74
78
  const defaultColor = normalizeHexColor(cfg?.color);
75
79
  const derivedCdpRange = deriveDefaultBrowserCdpPortRange(controlPort);
@@ -20,6 +20,9 @@ export async function snapshotAiViaPlaywright(opts) {
20
20
  const result = await maybe._snapshotForAI({
21
21
  timeout: Math.max(500, Math.min(60_000, Math.floor(opts.timeoutMs ?? 5000))),
22
22
  track: "response",
23
+ ...(typeof opts.maxChars === "number" && Number.isFinite(opts.maxChars)
24
+ ? { maxChars: Math.max(1, Math.floor(opts.maxChars)) }
25
+ : {}),
23
26
  });
24
27
  return { snapshot: String(result?.full ?? "") };
25
28
  }
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { ensureMediaDir, saveMediaBuffer } from "../../media/store.js";
3
3
  import { captureScreenshot, snapshotAria } from "../cdp.js";
4
+ import { DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "../constants.js";
4
5
  import { DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES, DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE, normalizeBrowserScreenshot, } from "../screenshot.js";
5
6
  import { getProfileContext, jsonError, toBoolean, toNumber, toStringArray, toStringOrEmpty, } from "./utils.js";
6
7
  const SELECTOR_UNSUPPORTED_MESSAGE = [
@@ -498,6 +499,18 @@ export function registerBrowserAgentRoutes(app, ctx) {
498
499
  ? "ai"
499
500
  : "aria";
500
501
  const limit = typeof req.query.limit === "string" ? Number(req.query.limit) : undefined;
502
+ const maxCharsRaw = typeof req.query.maxChars === "string" ||
503
+ typeof req.query.maxChars === "number"
504
+ ? Number(req.query.maxChars)
505
+ : undefined;
506
+ const maxChars = format === "ai" &&
507
+ typeof maxCharsRaw === "number" &&
508
+ Number.isFinite(maxCharsRaw) &&
509
+ maxCharsRaw > 0
510
+ ? Math.floor(maxCharsRaw)
511
+ : format === "ai"
512
+ ? DEFAULT_AI_SNAPSHOT_MAX_CHARS
513
+ : undefined;
501
514
  try {
502
515
  const tab = await profileCtx.ensureTabAvailable(targetId || undefined);
503
516
  if (format === "ai") {
@@ -507,6 +520,7 @@ export function registerBrowserAgentRoutes(app, ctx) {
507
520
  const snap = await pw.snapshotAiViaPlaywright({
508
521
  cdpUrl: profileCtx.profile.cdpUrl,
509
522
  targetId: tab.targetId,
523
+ maxChars,
510
524
  });
511
525
  return res.json({
512
526
  ok: true,
@@ -126,7 +126,7 @@ async function resolveFilePath(rootReal, urlPath) {
126
126
  }
127
127
  }
128
128
  function isDisabledByEnv() {
129
- if (process.env.NEXUS_SKIP_CANVAS_HOST === "1" || process.env.NEXUS_SKIP_CANVAS_HOST === "1")
129
+ if (process.env.NEXUS_SKIP_CANVAS_HOST === "1")
130
130
  return true;
131
131
  if (process.env.NODE_ENV === "test")
132
132
  return true;
@@ -1,10 +1,9 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { getSkillMetadata, isConfigPathTruthy, loadWorkspaceSkillEntries, resolveRuntimePlatform, resolveSkillConfig, } from "../agents/skills.js";
3
4
  import { loadConfig } from "../config/config.js";
4
- import { resolveStateDir } from "../config/paths.js";
5
- import { getSkillMetadata, isConfigPathTruthy, loadWorkspaceSkillEntries, resolveSkillConfig, resolveRuntimePlatform, } from "../agents/skills.js";
6
5
  import { ensureCredentialIndexSync } from "../credentials/store.js";
7
- import { NEXUS_ROOT } from "../utils.js";
6
+ import { NEXUS_ROOT, SKILLS_STATE_DIR } from "../utils.js";
8
7
  import { loadCapabilityRegistry } from "./registry.js";
9
8
  const STATUS_PRIORITY = [
10
9
  "active",
@@ -58,7 +57,7 @@ function setupLooksCredentialed(raw) {
58
57
  lowered.includes("key"));
59
58
  }
60
59
  function detectSkillUsageActive(skillName) {
61
- const usageLog = path.join(resolveStateDir(), "nexus", "skills", skillName, "usage.log");
60
+ const usageLog = path.join(SKILLS_STATE_DIR, skillName, "usage.log");
62
61
  try {
63
62
  const stat = fs.statSync(usageLog);
64
63
  return stat.isFile() && stat.size > 0;
@@ -67,7 +66,7 @@ function detectSkillUsageActive(skillName) {
67
66
  return false;
68
67
  }
69
68
  }
70
- function resolveSkillType(skillName, metadata) {
69
+ function resolveSkillType(_skillName, metadata) {
71
70
  if (metadata?.type)
72
71
  return metadata.type;
73
72
  const requires = metadata?.requires;
@@ -78,11 +77,16 @@ function resolveSkillType(skillName, metadata) {
78
77
  return "guide";
79
78
  }
80
79
  function resolveSkillProviderStatus(params) {
81
- const { skillName, providerId, config, credentialServices, metadata, setupHint } = params;
80
+ const { skillName, providerId, config, credentialServices, metadata, setupHint, } = params;
82
81
  const platform = resolveRuntimePlatform();
83
82
  const skillType = resolveSkillType(skillName, metadata);
84
83
  if (metadata?.os?.length && !metadata.os.includes(platform)) {
85
- return { id: providerId, kind: "skill", status: "unavailable", reason: "os" };
84
+ return {
85
+ id: providerId,
86
+ kind: "skill",
87
+ status: "unavailable",
88
+ reason: "os",
89
+ };
86
90
  }
87
91
  const skillKey = metadata?.skillKey ?? skillName;
88
92
  const skillConfig = resolveSkillConfig(config, skillKey);
@@ -108,15 +112,27 @@ function resolveSkillProviderStatus(params) {
108
112
  return true;
109
113
  });
110
114
  if (missingEnv.length > 0) {
111
- return { id: providerId, kind: "skill", status: "needs_setup", reason: "missing_env" };
115
+ return {
116
+ id: providerId,
117
+ kind: "skill",
118
+ status: "needs_setup",
119
+ reason: "missing_env",
120
+ };
112
121
  }
113
122
  const missingConfig = (requires?.config ?? []).filter((configPath) => !isConfigPathTruthy(config, configPath));
114
123
  if (missingConfig.length > 0) {
115
- return { id: providerId, kind: "skill", status: "needs_setup", reason: "missing_config" };
124
+ return {
125
+ id: providerId,
126
+ kind: "skill",
127
+ status: "needs_setup",
128
+ reason: "missing_config",
129
+ };
116
130
  }
117
131
  const credentialHints = requires?.credentials ?? [];
118
132
  const requiresCredential = setupLooksCredentialed(setupHint ?? "");
119
- if (skillType === "connector" || credentialHints.length > 0 || requiresCredential) {
133
+ if (skillType === "connector" ||
134
+ credentialHints.length > 0 ||
135
+ requiresCredential) {
120
136
  const aliases = new Set();
121
137
  for (const entry of [providerId, ...credentialHints]) {
122
138
  for (const alias of resolveCredentialAliases(entry))
@@ -124,7 +140,12 @@ function resolveSkillProviderStatus(params) {
124
140
  }
125
141
  const hasCred = Array.from(aliases).some((alias) => credentialServices.has(alias));
126
142
  if (!hasCred) {
127
- return { id: providerId, kind: "skill", status: "needs_setup", reason: "missing_credentials" };
143
+ return {
144
+ id: providerId,
145
+ kind: "skill",
146
+ status: "needs_setup",
147
+ reason: "missing_credentials",
148
+ };
128
149
  }
129
150
  }
130
151
  if (detectSkillUsageActive(skillName)) {
@@ -162,7 +183,9 @@ export function detectCapabilities(params) {
162
183
  const metadata = getSkillMetadata(entry);
163
184
  const key = normalizeProviderId(metadata?.skillKey ?? entry.skill.name);
164
185
  skillMap.set(key, { name: entry.skill.name, metadata });
165
- const provides = (metadata?.provides ?? []).map((cap) => cap.trim()).filter(Boolean);
186
+ const provides = (metadata?.provides ?? [])
187
+ .map((cap) => cap.trim())
188
+ .filter(Boolean);
166
189
  for (const capId of provides) {
167
190
  const normalizedCap = capId.trim();
168
191
  if (!normalizedCap)
@@ -176,7 +199,10 @@ export function detectCapabilities(params) {
176
199
  const capabilities = [];
177
200
  for (const capability of registry.all) {
178
201
  const extraProviders = providesMap.get(capability.id) ?? [];
179
- const providerList = Array.from(new Set([...capability.providers.map(normalizeProviderId), ...extraProviders]));
202
+ const providerList = Array.from(new Set([
203
+ ...capability.providers.map(normalizeProviderId),
204
+ ...extraProviders,
205
+ ]));
180
206
  const providerStatuses = [];
181
207
  for (const provider of providerList) {
182
208
  const normalized = normalizeProviderId(provider);
@@ -195,7 +221,11 @@ export function detectCapabilities(params) {
195
221
  providerStatuses.push(resolveCredentialProviderStatus(normalized, credentialServices));
196
222
  }
197
223
  else {
198
- providerStatuses.push({ id: normalized, kind: "unknown", status: "unavailable" });
224
+ providerStatuses.push({
225
+ id: normalized,
226
+ kind: "unknown",
227
+ status: "unavailable",
228
+ });
199
229
  }
200
230
  }
201
231
  const status = pickBestStatus(providerStatuses.map((p) => p.status));
@@ -206,7 +236,8 @@ export function detectCapabilities(params) {
206
236
  active: capabilities.filter((c) => c.status === "active").length,
207
237
  ready: capabilities.filter((c) => c.status === "ready").length,
208
238
  needs_setup: capabilities.filter((c) => c.status === "needs_setup").length,
209
- needs_install: capabilities.filter((c) => c.status === "needs_install").length,
239
+ needs_install: capabilities.filter((c) => c.status === "needs_install")
240
+ .length,
210
241
  unavailable: capabilities.filter((c) => c.status === "unavailable").length,
211
242
  broken: capabilities.filter((c) => c.status === "broken").length,
212
243
  };
@@ -70,7 +70,8 @@ export function loadCapabilityRegistry() {
70
70
  for (const line of lines) {
71
71
  const headingMatch = line.match(/^###\s+(.+)$/);
72
72
  if (headingMatch) {
73
- currentCategory = headingMatch[1]?.replace(/^[-–]\s*/, "").trim() || currentCategory;
73
+ currentCategory =
74
+ headingMatch[1]?.replace(/^[-–]\s*/, "").trim() || currentCategory;
74
75
  continue;
75
76
  }
76
77
  const tableMatch = line.match(/^\|\s*`([^`]+)`\s*\|\s*([^|]+)\|\s*([^|]+)\|\s*([^|]+)\|/);
@@ -1,10 +1,11 @@
1
+ import { spawn } from "node:child_process";
2
+ import crypto from "node:crypto";
1
3
  import fs from "node:fs";
2
4
  import path from "node:path";
3
- import crypto from "node:crypto";
4
- import { spawn } from "node:child_process";
5
+ import { fileURLToPath } from "node:url";
5
6
  import { scanCredentials } from "../commands/credential.js";
6
7
  import { openUrl } from "../commands/onboard-helpers.js";
7
- import { storeKeychainSecret, writeCredentialRecord, } from "../credentials/store.js";
8
+ import { resolveDefaultEnvVar, storeKeychainSecret, writeCredentialRecord, } from "../credentials/store.js";
8
9
  import { NEXUS_ROOT, sleep } from "../utils.js";
9
10
  const DEFAULT_CLOUD_TIMEOUT_MS = 120_000;
10
11
  const DEFAULT_CLOUD_POLL_MS = 2_000;
@@ -77,6 +78,7 @@ async function storeHubToken(params) {
77
78
  value: params.token,
78
79
  });
79
80
  }
81
+ let envVar;
80
82
  if (storedInKeychain) {
81
83
  record = {
82
84
  owner: "user",
@@ -86,17 +88,18 @@ async function storeHubToken(params) {
86
88
  };
87
89
  }
88
90
  else {
91
+ envVar = resolveDefaultEnvVar({ service, type: "token" });
92
+ process.env[envVar] = params.token;
89
93
  record = {
90
94
  owner: "user",
91
95
  type: "token",
92
96
  configuredAt: now,
93
- storage: { provider: "plaintext" },
94
- token: params.token,
97
+ storage: { provider: "env", var: envVar },
95
98
  };
96
99
  }
97
100
  await writeCredentialRecord(service, account, authId, record);
98
101
  await scanCredentials();
99
- return { storedInKeychain, account };
102
+ return { storedInKeychain, account, envVar };
100
103
  }
101
104
  function parseCloudLoginArgs(args) {
102
105
  let baseUrl = getHubBaseUrl();
@@ -206,6 +209,56 @@ function resolveRepoRoot(argv1 = process.argv[1]) {
206
209
  }
207
210
  return null;
208
211
  }
212
+ function resolveModuleRoot() {
213
+ try {
214
+ let dir = path.dirname(fileURLToPath(import.meta.url));
215
+ for (let i = 0; i < 6; i += 1) {
216
+ if (fs.existsSync(path.join(dir, "package.json")))
217
+ return dir;
218
+ const parent = path.dirname(dir);
219
+ if (parent === dir)
220
+ break;
221
+ dir = parent;
222
+ }
223
+ }
224
+ catch {
225
+ return null;
226
+ }
227
+ return null;
228
+ }
229
+ function resolvePackageRoot(argv1 = process.argv[1]) {
230
+ const moduleRoot = resolveModuleRoot();
231
+ if (moduleRoot)
232
+ return moduleRoot;
233
+ if (!argv1)
234
+ return null;
235
+ let normalized = path.resolve(argv1);
236
+ try {
237
+ normalized = fs.realpathSync(normalized);
238
+ }
239
+ catch {
240
+ // ignore
241
+ }
242
+ const parts = normalized.split(path.sep);
243
+ const distIndex = parts.lastIndexOf("dist");
244
+ if (distIndex !== -1) {
245
+ return parts.slice(0, distIndex).join(path.sep);
246
+ }
247
+ return null;
248
+ }
249
+ function resolveBundledCloudBinary(packageRoot) {
250
+ const ext = process.platform === "win32" ? ".exe" : "";
251
+ const platformId = `${process.platform}-${process.arch}`;
252
+ const candidates = [
253
+ path.join(packageRoot, "dist", "native", "nexus-cloud", platformId, `nexus-cloud-rs${ext}`),
254
+ path.join(packageRoot, "dist", "native", "nexus-cloud", `nexus-cloud-rs${ext}`),
255
+ ];
256
+ for (const candidate of candidates) {
257
+ if (fs.existsSync(candidate))
258
+ return candidate;
259
+ }
260
+ return null;
261
+ }
209
262
  function resolveCloudRunner(args) {
210
263
  const env = { ...process.env };
211
264
  if (!env.NEXUS_HOME && NEXUS_ROOT) {
@@ -215,6 +268,13 @@ function resolveCloudRunner(args) {
215
268
  if (override) {
216
269
  return { command: override, args, env };
217
270
  }
271
+ const packageRoot = resolvePackageRoot();
272
+ if (packageRoot) {
273
+ const bundled = resolveBundledCloudBinary(packageRoot);
274
+ if (bundled) {
275
+ return { command: bundled, args, env };
276
+ }
277
+ }
218
278
  const repoRoot = resolveRepoRoot();
219
279
  if (repoRoot) {
220
280
  const nativeRoot = path.join(repoRoot, "native", "nexus-cloud");
@@ -296,7 +356,10 @@ async function handleCloudLogin(rawArgs) {
296
356
  }
297
357
  console.log(stored.storedInKeychain
298
358
  ? " Token stored in keychain"
299
- : " Token stored in plaintext credentials");
359
+ : ` Token stored in env var ${stored.envVar ?? ""}`.trim());
360
+ if (!stored.storedInKeychain && stored.envVar) {
361
+ console.log(` Persist it in your shell: export ${stored.envVar}=...`);
362
+ }
300
363
  if (cloudUrl) {
301
364
  console.log(` Cloud URL: ${cloudUrl}`);
302
365
  }