@intent-systems/nexus 2026.1.5-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (827) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +462 -0
  5. package/dist/agents/agent-paths.js +16 -0
  6. package/dist/agents/agent-scope.js +44 -0
  7. package/dist/agents/auth-profiles.js +626 -0
  8. package/dist/agents/bash-process-registry.js +126 -0
  9. package/dist/agents/bash-tools.js +838 -0
  10. package/dist/agents/chutes-oauth.js +47 -0
  11. package/dist/agents/clawdbot-tools.js +62 -0
  12. package/dist/agents/context.js +34 -0
  13. package/dist/agents/defaults.js +6 -0
  14. package/dist/agents/memory-search.js +80 -0
  15. package/dist/agents/model-auth.js +115 -0
  16. package/dist/agents/model-catalog.js +55 -0
  17. package/dist/agents/model-fallback.js +210 -0
  18. package/dist/agents/model-scan.js +263 -0
  19. package/dist/agents/model-selection.js +152 -0
  20. package/dist/agents/models-config.js +171 -0
  21. package/dist/agents/nexus-tools.js +46 -0
  22. package/dist/agents/pi-embedded-block-chunker.js +188 -0
  23. package/dist/agents/pi-embedded-helpers.js +139 -0
  24. package/dist/agents/pi-embedded-runner.js +932 -0
  25. package/dist/agents/pi-embedded-subscribe.js +541 -0
  26. package/dist/agents/pi-embedded-utils.js +20 -0
  27. package/dist/agents/pi-embedded.js +1 -0
  28. package/dist/agents/pi-extensions/compaction-safeguard.js +140 -0
  29. package/dist/agents/pi-tool-definition-adapter.js +17 -0
  30. package/dist/agents/pi-tools.js +510 -0
  31. package/dist/agents/pi-tools.schema.js +358 -0
  32. package/dist/agents/sandbox-paths.js +68 -0
  33. package/dist/agents/sandbox.js +667 -0
  34. package/dist/agents/shell-utils.js +53 -0
  35. package/dist/agents/skill-runner.js +224 -0
  36. package/dist/agents/skill-state.js +164 -0
  37. package/dist/agents/skill-tools.js +191 -0
  38. package/dist/agents/skill-usage.js +43 -0
  39. package/dist/agents/skills-install.js +244 -0
  40. package/dist/agents/skills-status.js +157 -0
  41. package/dist/agents/skills.js +472 -0
  42. package/dist/agents/subagent-registry.js +321 -0
  43. package/dist/agents/subagent-registry.store.js +47 -0
  44. package/dist/agents/system-prompt.js +179 -0
  45. package/dist/agents/timeout.js +26 -0
  46. package/dist/agents/tool-display.js +155 -0
  47. package/dist/agents/tool-display.json +236 -0
  48. package/dist/agents/tool-images.js +138 -0
  49. package/dist/agents/tool-policy.js +87 -0
  50. package/dist/agents/tools/agent-step.js +41 -0
  51. package/dist/agents/tools/browser-tool.js +295 -0
  52. package/dist/agents/tools/canvas-tool.js +193 -0
  53. package/dist/agents/tools/common.js +88 -0
  54. package/dist/agents/tools/cron-tool.js +141 -0
  55. package/dist/agents/tools/discord-actions-guild.js +186 -0
  56. package/dist/agents/tools/discord-actions-messaging.js +313 -0
  57. package/dist/agents/tools/discord-actions-moderation.js +70 -0
  58. package/dist/agents/tools/discord-actions.js +56 -0
  59. package/dist/agents/tools/discord-schema.js +199 -0
  60. package/dist/agents/tools/discord-tool.js +16 -0
  61. package/dist/agents/tools/gateway-tool.js +46 -0
  62. package/dist/agents/tools/gateway.js +28 -0
  63. package/dist/agents/tools/image-tool.js +140 -0
  64. package/dist/agents/tools/memory-tool.js +92 -0
  65. package/dist/agents/tools/nodes-tool.js +413 -0
  66. package/dist/agents/tools/nodes-utils.js +92 -0
  67. package/dist/agents/tools/sessions-announce-target.js +35 -0
  68. package/dist/agents/tools/sessions-helpers.js +88 -0
  69. package/dist/agents/tools/sessions-history-tool.js +137 -0
  70. package/dist/agents/tools/sessions-list-tool.js +196 -0
  71. package/dist/agents/tools/sessions-send-helpers.js +103 -0
  72. package/dist/agents/tools/sessions-send-tool.js +371 -0
  73. package/dist/agents/tools/sessions-spawn-tool.js +319 -0
  74. package/dist/agents/tools/slack-actions.js +129 -0
  75. package/dist/agents/tools/slack-schema.js +59 -0
  76. package/dist/agents/tools/slack-tool.js +16 -0
  77. package/dist/agents/tools/telegram-actions.js +159 -0
  78. package/dist/agents/tools/telegram-schema.js +28 -0
  79. package/dist/agents/tools/telegram-tool.js +16 -0
  80. package/dist/agents/tools/whatsapp-login-tool.js +63 -0
  81. package/dist/agents/usage.js +58 -0
  82. package/dist/agents/workspace.js +264 -0
  83. package/dist/auto-reply/chunk.js +177 -0
  84. package/dist/auto-reply/command-auth.js +44 -0
  85. package/dist/auto-reply/command-detection.js +22 -0
  86. package/dist/auto-reply/envelope.js +30 -0
  87. package/dist/auto-reply/group-activation.js +20 -0
  88. package/dist/auto-reply/heartbeat.js +58 -0
  89. package/dist/auto-reply/model.js +22 -0
  90. package/dist/auto-reply/reply/abort.js +14 -0
  91. package/dist/auto-reply/reply/agent-runner.js +426 -0
  92. package/dist/auto-reply/reply/bash-command.js +314 -0
  93. package/dist/auto-reply/reply/block-streaming.js +34 -0
  94. package/dist/auto-reply/reply/body.js +29 -0
  95. package/dist/auto-reply/reply/commands.js +332 -0
  96. package/dist/auto-reply/reply/directive-handling.js +626 -0
  97. package/dist/auto-reply/reply/directives.js +59 -0
  98. package/dist/auto-reply/reply/dispatch-from-config.js +23 -0
  99. package/dist/auto-reply/reply/followup-runner.js +181 -0
  100. package/dist/auto-reply/reply/groups.js +152 -0
  101. package/dist/auto-reply/reply/mentions.js +64 -0
  102. package/dist/auto-reply/reply/model-selection.js +209 -0
  103. package/dist/auto-reply/reply/queue.js +399 -0
  104. package/dist/auto-reply/reply/reply-dispatcher.js +68 -0
  105. package/dist/auto-reply/reply/reply-tags.js +26 -0
  106. package/dist/auto-reply/reply/session-updates.js +103 -0
  107. package/dist/auto-reply/reply/session.js +169 -0
  108. package/dist/auto-reply/reply/typing.js +125 -0
  109. package/dist/auto-reply/reply.js +655 -0
  110. package/dist/auto-reply/send-policy.js +28 -0
  111. package/dist/auto-reply/status.js +197 -0
  112. package/dist/auto-reply/templating.js +9 -0
  113. package/dist/auto-reply/thinking.js +49 -0
  114. package/dist/auto-reply/tokens.js +2 -0
  115. package/dist/auto-reply/tool-meta.js +74 -0
  116. package/dist/auto-reply/transcription.js +57 -0
  117. package/dist/auto-reply/types.js +1 -0
  118. package/dist/browser/bridge-server.js +37 -0
  119. package/dist/browser/cdp.js +382 -0
  120. package/dist/browser/chrome.js +432 -0
  121. package/dist/browser/client-actions-core.js +67 -0
  122. package/dist/browser/client-actions-observe.js +24 -0
  123. package/dist/browser/client-actions-types.js +1 -0
  124. package/dist/browser/client-actions.js +3 -0
  125. package/dist/browser/client-fetch.js +43 -0
  126. package/dist/browser/client.js +105 -0
  127. package/dist/browser/config.js +155 -0
  128. package/dist/browser/constants.js +5 -0
  129. package/dist/browser/profiles-service.js +124 -0
  130. package/dist/browser/profiles.js +96 -0
  131. package/dist/browser/pw-ai.js +2 -0
  132. package/dist/browser/pw-session.js +144 -0
  133. package/dist/browser/pw-tools-core.js +363 -0
  134. package/dist/browser/routes/agent.js +535 -0
  135. package/dist/browser/routes/basic.js +155 -0
  136. package/dist/browser/routes/index.js +8 -0
  137. package/dist/browser/routes/tabs.js +105 -0
  138. package/dist/browser/routes/utils.js +62 -0
  139. package/dist/browser/screenshot.js +40 -0
  140. package/dist/browser/server-context.js +377 -0
  141. package/dist/browser/server.js +81 -0
  142. package/dist/browser/target-id.js +18 -0
  143. package/dist/browser/trash.js +21 -0
  144. package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
  145. package/dist/canvas-host/a2ui/index.html +246 -0
  146. package/dist/canvas-host/a2ui.js +187 -0
  147. package/dist/canvas-host/server.js +382 -0
  148. package/dist/channel-web.js +8 -0
  149. package/dist/cli/browser-cli-actions-input.js +459 -0
  150. package/dist/cli/browser-cli-actions-observe.js +56 -0
  151. package/dist/cli/browser-cli-examples.js +31 -0
  152. package/dist/cli/browser-cli-inspect.js +97 -0
  153. package/dist/cli/browser-cli-manage.js +286 -0
  154. package/dist/cli/browser-cli-shared.js +1 -0
  155. package/dist/cli/browser-cli.js +26 -0
  156. package/dist/cli/canvas-cli.js +416 -0
  157. package/dist/cli/cloud-cli.js +336 -0
  158. package/dist/cli/credential-cli.js +227 -0
  159. package/dist/cli/cron-cli.js +454 -0
  160. package/dist/cli/deps.js +17 -0
  161. package/dist/cli/dns-cli.js +180 -0
  162. package/dist/cli/gateway-cli.js +665 -0
  163. package/dist/cli/gateway-rpc.js +20 -0
  164. package/dist/cli/hooks-cli.js +135 -0
  165. package/dist/cli/memory-cli.js +101 -0
  166. package/dist/cli/models-cli.js +248 -0
  167. package/dist/cli/nodes-camera.js +57 -0
  168. package/dist/cli/nodes-canvas.js +26 -0
  169. package/dist/cli/nodes-cli.js +946 -0
  170. package/dist/cli/nodes-screen.js +37 -0
  171. package/dist/cli/pairing-cli.js +100 -0
  172. package/dist/cli/parse-duration.js +20 -0
  173. package/dist/cli/plugins-cli.js +158 -0
  174. package/dist/cli/ports.js +97 -0
  175. package/dist/cli/profile.js +81 -0
  176. package/dist/cli/program.js +162 -0
  177. package/dist/cli/prompt.js +19 -0
  178. package/dist/cli/run-main.js +48 -0
  179. package/dist/cli/skills-cli.js +132 -0
  180. package/dist/cli/skills-hub-cli.js +1093 -0
  181. package/dist/cli/telegram-cli.js +56 -0
  182. package/dist/cli/tool-connector-cli.js +118 -0
  183. package/dist/cli/tui-cli.js +35 -0
  184. package/dist/cli/upstream-sync-cli.js +2833 -0
  185. package/dist/cli/usage-cli.js +24 -0
  186. package/dist/cli/wait.js +8 -0
  187. package/dist/commands/agent-via-gateway.js +115 -0
  188. package/dist/commands/agent.js +665 -0
  189. package/dist/commands/antigravity-oauth.js +327 -0
  190. package/dist/commands/auth-choice-options.js +80 -0
  191. package/dist/commands/auth-choice.js +134 -0
  192. package/dist/commands/auth-token.js +31 -0
  193. package/dist/commands/bootstrap-preset.js +214 -0
  194. package/dist/commands/capabilities.js +36 -0
  195. package/dist/commands/chutes-oauth.js +144 -0
  196. package/dist/commands/claude-md.js +137 -0
  197. package/dist/commands/config-view.js +11 -0
  198. package/dist/commands/configure.js +648 -0
  199. package/dist/commands/credential.js +236 -0
  200. package/dist/commands/cursor-rules.js +230 -0
  201. package/dist/commands/doctor-state-migrations.js +358 -0
  202. package/dist/commands/doctor-ui.js +113 -0
  203. package/dist/commands/doctor.js +673 -0
  204. package/dist/commands/health.js +112 -0
  205. package/dist/commands/identity.js +54 -0
  206. package/dist/commands/init.js +167 -0
  207. package/dist/commands/models/aliases.js +85 -0
  208. package/dist/commands/models/fallbacks.js +123 -0
  209. package/dist/commands/models/image-fallbacks.js +123 -0
  210. package/dist/commands/models/list.js +347 -0
  211. package/dist/commands/models/scan.js +271 -0
  212. package/dist/commands/models/set-image.js +27 -0
  213. package/dist/commands/models/set.js +27 -0
  214. package/dist/commands/models/shared.js +73 -0
  215. package/dist/commands/models.js +7 -0
  216. package/dist/commands/onboard-auth.js +101 -0
  217. package/dist/commands/onboard-channels.js +814 -0
  218. package/dist/commands/onboard-eve-identity.js +98 -0
  219. package/dist/commands/onboard-github.js +153 -0
  220. package/dist/commands/onboard-helpers.js +303 -0
  221. package/dist/commands/onboard-interactive.js +17 -0
  222. package/dist/commands/onboard-non-interactive.js +228 -0
  223. package/dist/commands/onboard-providers.js +829 -0
  224. package/dist/commands/onboard-quickstart.js +185 -0
  225. package/dist/commands/onboard-remote.js +120 -0
  226. package/dist/commands/onboard-skills.js +148 -0
  227. package/dist/commands/onboard-types.js +1 -0
  228. package/dist/commands/onboard.js +19 -0
  229. package/dist/commands/openai-codex-model-default.js +38 -0
  230. package/dist/commands/poll.js +64 -0
  231. package/dist/commands/quest.js +27 -0
  232. package/dist/commands/reset.js +61 -0
  233. package/dist/commands/send.js +124 -0
  234. package/dist/commands/sessions-ingest.js +359 -0
  235. package/dist/commands/sessions.js +212 -0
  236. package/dist/commands/setup.js +59 -0
  237. package/dist/commands/signal-install.js +135 -0
  238. package/dist/commands/skills-manifest.js +235 -0
  239. package/dist/commands/status.js +139 -0
  240. package/dist/commands/suggestions.js +54 -0
  241. package/dist/commands/systemd-linger.js +71 -0
  242. package/dist/commands/update.js +16 -0
  243. package/dist/commands/usage-upload.js +27 -0
  244. package/dist/config/config.js +6 -0
  245. package/dist/config/defaults.js +140 -0
  246. package/dist/config/group-policy.js +49 -0
  247. package/dist/config/includes.js +183 -0
  248. package/dist/config/io.js +188 -0
  249. package/dist/config/legacy-migrate.js +13 -0
  250. package/dist/config/legacy.js +425 -0
  251. package/dist/config/paths.js +82 -0
  252. package/dist/config/port-defaults.js +32 -0
  253. package/dist/config/schema.js +173 -0
  254. package/dist/config/sessions.js +611 -0
  255. package/dist/config/talk.js +31 -0
  256. package/dist/config/types.js +1 -0
  257. package/dist/config/validation.js +29 -0
  258. package/dist/config/zod-schema.js +1110 -0
  259. package/dist/control-ui/assets/index-D8Q5AI4D.js +2393 -0
  260. package/dist/control-ui/assets/index-D8Q5AI4D.js.map +1 -0
  261. package/dist/control-ui/assets/index-g06q5Xc3.css +1 -0
  262. package/dist/control-ui/favicon.ico +0 -0
  263. package/dist/control-ui/index.html +16 -0
  264. package/dist/cron/isolated-agent.js +529 -0
  265. package/dist/cron/normalize.js +73 -0
  266. package/dist/cron/parse.js +24 -0
  267. package/dist/cron/run-log.js +72 -0
  268. package/dist/cron/schedule.js +24 -0
  269. package/dist/cron/service.js +471 -0
  270. package/dist/cron/store.js +43 -0
  271. package/dist/cron/types.js +1 -0
  272. package/dist/daemon/constants.js +10 -0
  273. package/dist/daemon/launchd.js +295 -0
  274. package/dist/daemon/legacy.js +63 -0
  275. package/dist/daemon/program-args.js +141 -0
  276. package/dist/daemon/schtasks.js +269 -0
  277. package/dist/daemon/service.js +69 -0
  278. package/dist/daemon/systemd.js +332 -0
  279. package/dist/discord/index.js +2 -0
  280. package/dist/discord/monitor.js +1089 -0
  281. package/dist/discord/probe.js +54 -0
  282. package/dist/discord/send.js +652 -0
  283. package/dist/discord/token.js +8 -0
  284. package/dist/entry.js +16 -0
  285. package/dist/gateway/auth.js +121 -0
  286. package/dist/gateway/call.js +103 -0
  287. package/dist/gateway/chat-attachments.js +41 -0
  288. package/dist/gateway/client.js +180 -0
  289. package/dist/gateway/config-reload.js +274 -0
  290. package/dist/gateway/control-ui.js +184 -0
  291. package/dist/gateway/hooks-mapping.js +282 -0
  292. package/dist/gateway/hooks.js +168 -0
  293. package/dist/gateway/net.js +29 -0
  294. package/dist/gateway/protocol/index.js +62 -0
  295. package/dist/gateway/protocol/schema.js +577 -0
  296. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  297. package/dist/gateway/server-bridge.js +1066 -0
  298. package/dist/gateway/server-browser.js +11 -0
  299. package/dist/gateway/server-channels.js +680 -0
  300. package/dist/gateway/server-chat.js +159 -0
  301. package/dist/gateway/server-constants.js +8 -0
  302. package/dist/gateway/server-discovery.js +62 -0
  303. package/dist/gateway/server-http.js +165 -0
  304. package/dist/gateway/server-methods/agent-job.js +114 -0
  305. package/dist/gateway/server-methods/agent.js +254 -0
  306. package/dist/gateway/server-methods/channels.js +239 -0
  307. package/dist/gateway/server-methods/chat.js +207 -0
  308. package/dist/gateway/server-methods/config.js +50 -0
  309. package/dist/gateway/server-methods/connect.js +6 -0
  310. package/dist/gateway/server-methods/cron.js +89 -0
  311. package/dist/gateway/server-methods/health.js +28 -0
  312. package/dist/gateway/server-methods/models.js +16 -0
  313. package/dist/gateway/server-methods/nodes.js +294 -0
  314. package/dist/gateway/server-methods/providers.js +257 -0
  315. package/dist/gateway/server-methods/send.js +254 -0
  316. package/dist/gateway/server-methods/sessions.js +382 -0
  317. package/dist/gateway/server-methods/skills.js +83 -0
  318. package/dist/gateway/server-methods/system.js +118 -0
  319. package/dist/gateway/server-methods/talk.js +22 -0
  320. package/dist/gateway/server-methods/types.js +1 -0
  321. package/dist/gateway/server-methods/voicewake.js +30 -0
  322. package/dist/gateway/server-methods/web.js +81 -0
  323. package/dist/gateway/server-methods/wizard.js +100 -0
  324. package/dist/gateway/server-methods.js +53 -0
  325. package/dist/gateway/server-providers.js +687 -0
  326. package/dist/gateway/server-shared.js +1 -0
  327. package/dist/gateway/server-utils.js +35 -0
  328. package/dist/gateway/server.js +1478 -0
  329. package/dist/gateway/session-utils.js +355 -0
  330. package/dist/gateway/ws-log.js +343 -0
  331. package/dist/gateway/ws-logging.js +8 -0
  332. package/dist/globals.js +41 -0
  333. package/dist/hooks/gmail-ops.js +236 -0
  334. package/dist/hooks/gmail-setup-utils.js +278 -0
  335. package/dist/hooks/gmail-watcher.js +190 -0
  336. package/dist/hooks/gmail.js +177 -0
  337. package/dist/imessage/client.js +165 -0
  338. package/dist/imessage/index.js +3 -0
  339. package/dist/imessage/monitor.js +365 -0
  340. package/dist/imessage/probe.js +26 -0
  341. package/dist/imessage/send.js +83 -0
  342. package/dist/imessage/targets.js +176 -0
  343. package/dist/index.js +55 -0
  344. package/dist/infra/agent-events.js +46 -0
  345. package/dist/infra/binaries.js +9 -0
  346. package/dist/infra/bonjour-discovery.js +163 -0
  347. package/dist/infra/bonjour.js +200 -0
  348. package/dist/infra/bridge/server.js +564 -0
  349. package/dist/infra/canvas-host-url.js +54 -0
  350. package/dist/infra/channel-summary.js +78 -0
  351. package/dist/infra/control-ui-assets.js +112 -0
  352. package/dist/infra/dotenv.js +15 -0
  353. package/dist/infra/env.js +8 -0
  354. package/dist/infra/errors.js +28 -0
  355. package/dist/infra/event-log.js +251 -0
  356. package/dist/infra/gateway-lock.js +8 -0
  357. package/dist/infra/git-commit.js +91 -0
  358. package/dist/infra/heartbeat-events.js +21 -0
  359. package/dist/infra/heartbeat-runner.js +458 -0
  360. package/dist/infra/heartbeat-wake.js +61 -0
  361. package/dist/infra/is-main.js +37 -0
  362. package/dist/infra/json-file.js +21 -0
  363. package/dist/infra/machine-name.js +40 -0
  364. package/dist/infra/nexus-root.js +56 -0
  365. package/dist/infra/node-pairing.js +212 -0
  366. package/dist/infra/path-env.js +93 -0
  367. package/dist/infra/ports.js +87 -0
  368. package/dist/infra/provider-summary.js +80 -0
  369. package/dist/infra/provider-usage.auth.js +189 -0
  370. package/dist/infra/provider-usage.fetch.claude.js +129 -0
  371. package/dist/infra/provider-usage.fetch.codex.js +62 -0
  372. package/dist/infra/provider-usage.fetch.copilot.js +42 -0
  373. package/dist/infra/provider-usage.fetch.gemini.js +57 -0
  374. package/dist/infra/provider-usage.fetch.js +6 -0
  375. package/dist/infra/provider-usage.fetch.minimax.js +214 -0
  376. package/dist/infra/provider-usage.fetch.shared.js +11 -0
  377. package/dist/infra/provider-usage.fetch.zai.js +62 -0
  378. package/dist/infra/provider-usage.format.js +77 -0
  379. package/dist/infra/provider-usage.js +145 -0
  380. package/dist/infra/provider-usage.load.js +54 -0
  381. package/dist/infra/provider-usage.shared.js +19 -0
  382. package/dist/infra/provider-usage.types.js +1 -0
  383. package/dist/infra/restart.js +29 -0
  384. package/dist/infra/retry.js +16 -0
  385. package/dist/infra/runtime-guard.js +59 -0
  386. package/dist/infra/shell-env.js +88 -0
  387. package/dist/infra/system-events.js +71 -0
  388. package/dist/infra/system-presence.js +217 -0
  389. package/dist/infra/tailnet.js +46 -0
  390. package/dist/infra/tailscale.js +149 -0
  391. package/dist/infra/unhandled-rejections.js +19 -0
  392. package/dist/infra/usage-suggestions.js +241 -0
  393. package/dist/infra/usage-upload.js +290 -0
  394. package/dist/infra/voicewake.js +78 -0
  395. package/dist/infra/widearea-dns.js +123 -0
  396. package/dist/infra/ws.js +13 -0
  397. package/dist/logger.js +52 -0
  398. package/dist/logging.js +506 -0
  399. package/dist/macos/gateway-daemon.js +145 -0
  400. package/dist/macos/relay.js +49 -0
  401. package/dist/media/constants.js +33 -0
  402. package/dist/media/host.js +42 -0
  403. package/dist/media/image-ops.js +119 -0
  404. package/dist/media/mime.js +123 -0
  405. package/dist/media/parse.js +83 -0
  406. package/dist/media/server.js +64 -0
  407. package/dist/media/store.js +139 -0
  408. package/dist/polls.js +43 -0
  409. package/dist/process/command-queue.js +97 -0
  410. package/dist/process/exec.js +75 -0
  411. package/dist/provider-web.js +8 -0
  412. package/dist/providers/github-copilot-auth.js +123 -0
  413. package/dist/providers/github-copilot-models.js +35 -0
  414. package/dist/providers/github-copilot-token.js +11 -0
  415. package/dist/providers/location.js +48 -0
  416. package/dist/providers/web/index.js +2 -0
  417. package/dist/runtime.js +8 -0
  418. package/dist/sessions/level-overrides.js +9 -0
  419. package/dist/sessions/send-policy.js +68 -0
  420. package/dist/signal/client.js +134 -0
  421. package/dist/signal/daemon.js +69 -0
  422. package/dist/signal/index.js +3 -0
  423. package/dist/signal/monitor.js +411 -0
  424. package/dist/signal/probe.js +46 -0
  425. package/dist/signal/send.js +91 -0
  426. package/dist/slack/actions.js +97 -0
  427. package/dist/slack/index.js +5 -0
  428. package/dist/slack/monitor.js +1270 -0
  429. package/dist/slack/probe.js +47 -0
  430. package/dist/slack/send.js +131 -0
  431. package/dist/slack/token.js +10 -0
  432. package/dist/telegram/allowed-updates.js +8 -0
  433. package/dist/telegram/bot.js +724 -0
  434. package/dist/telegram/download.js +34 -0
  435. package/dist/telegram/index.js +4 -0
  436. package/dist/telegram/monitor.js +47 -0
  437. package/dist/telegram/pairing-store.js +77 -0
  438. package/dist/telegram/probe.js +63 -0
  439. package/dist/telegram/proxy.js +9 -0
  440. package/dist/telegram/reaction-level.js +45 -0
  441. package/dist/telegram/send.js +151 -0
  442. package/dist/telegram/sent-message-cache.js +65 -0
  443. package/dist/telegram/token.js +30 -0
  444. package/dist/telegram/update-offset-store.js +61 -0
  445. package/dist/telegram/webhook-set.js +12 -0
  446. package/dist/telegram/webhook.js +56 -0
  447. package/dist/tui/commands.js +87 -0
  448. package/dist/tui/components/assistant-message.js +16 -0
  449. package/dist/tui/components/chat-log.js +92 -0
  450. package/dist/tui/components/custom-editor.js +55 -0
  451. package/dist/tui/components/selectors.js +8 -0
  452. package/dist/tui/components/tool-execution.js +111 -0
  453. package/dist/tui/components/user-message.js +17 -0
  454. package/dist/tui/gateway-chat.js +140 -0
  455. package/dist/tui/theme/theme.js +80 -0
  456. package/dist/tui/tui.js +708 -0
  457. package/dist/utils.js +153 -0
  458. package/dist/version.js +18 -0
  459. package/dist/web/accounts.js +86 -0
  460. package/dist/web/active-listener.js +25 -0
  461. package/dist/web/auto-reply.js +1256 -0
  462. package/dist/web/inbound.js +649 -0
  463. package/dist/web/login-qr.js +230 -0
  464. package/dist/web/login.js +71 -0
  465. package/dist/web/media.js +175 -0
  466. package/dist/web/outbound.js +102 -0
  467. package/dist/web/qr-image.js +97 -0
  468. package/dist/web/reconnect.js +60 -0
  469. package/dist/web/session.js +370 -0
  470. package/dist/wizard/clack-prompter.js +56 -0
  471. package/dist/wizard/onboarding.js +620 -0
  472. package/dist/wizard/prompts.js +6 -0
  473. package/dist/wizard/session.js +203 -0
  474. package/docs/AGENTS.default.md +116 -0
  475. package/docs/CAPABILITIES.md +444 -0
  476. package/docs/CNAME +1 -0
  477. package/docs/NEXUS_CORE_REWRITE_SPEC.md +226 -0
  478. package/docs/RELEASING.md +69 -0
  479. package/docs/_config.yml +53 -0
  480. package/docs/_layouts/default.html +145 -0
  481. package/docs/agent-assisted-install.md +95 -0
  482. package/docs/agent-loop.md +61 -0
  483. package/docs/agent-send.md +21 -0
  484. package/docs/agent.md +108 -0
  485. package/docs/android.md +133 -0
  486. package/docs/architecture.md +114 -0
  487. package/docs/assets/markdown.css +133 -0
  488. package/docs/assets/pixel-lobster.svg +60 -0
  489. package/docs/assets/terminal.css +470 -0
  490. package/docs/assets/theme.js +55 -0
  491. package/docs/audio.md +48 -0
  492. package/docs/automation/nexus-sync.md +371 -0
  493. package/docs/background-process.md +74 -0
  494. package/docs/bash.md +32 -0
  495. package/docs/bedrock.md +71 -0
  496. package/docs/bonjour.md +159 -0
  497. package/docs/browser-linux-troubleshooting.md +114 -0
  498. package/docs/browser.md +293 -0
  499. package/docs/bun.md +56 -0
  500. package/docs/camera.md +152 -0
  501. package/docs/clawd.md +212 -0
  502. package/docs/concepts/usage-tracking.md +29 -0
  503. package/docs/configuration.md +1666 -0
  504. package/docs/control-ui.md +83 -0
  505. package/docs/cron.md +385 -0
  506. package/docs/dashboard.md +17 -0
  507. package/docs/device-models.md +46 -0
  508. package/docs/discord.md +308 -0
  509. package/docs/discovery.md +112 -0
  510. package/docs/docker.md +258 -0
  511. package/docs/docs.json +105 -0
  512. package/docs/doctor.md +68 -0
  513. package/docs/elevated.md +31 -0
  514. package/docs/faq.md +736 -0
  515. package/docs/feature-inventory/overview.md +141 -0
  516. package/docs/feature-inventory/rollout-checklist.md +53 -0
  517. package/docs/feature-inventory/test-matrix.md +87 -0
  518. package/docs/feature-inventory.md +9 -0
  519. package/docs/gateway/configuration-examples.md +221 -0
  520. package/docs/gateway/configuration.md +172 -0
  521. package/docs/gateway/cron.md +61 -0
  522. package/docs/gateway/heartbeat.md +207 -0
  523. package/docs/gateway/pairing.md +109 -0
  524. package/docs/gateway-lock.md +28 -0
  525. package/docs/gateway.md +227 -0
  526. package/docs/gmail-pubsub.md +191 -0
  527. package/docs/grammy.md +27 -0
  528. package/docs/group-messages.md +73 -0
  529. package/docs/groups.md +130 -0
  530. package/docs/health.md +28 -0
  531. package/docs/heartbeat.md +73 -0
  532. package/docs/home-userspace.md +277 -0
  533. package/docs/hubs.md +148 -0
  534. package/docs/images.md +51 -0
  535. package/docs/imessage.md +94 -0
  536. package/docs/index.md +196 -0
  537. package/docs/ios.md +372 -0
  538. package/docs/linux.md +11 -0
  539. package/docs/location-command.md +95 -0
  540. package/docs/location.md +46 -0
  541. package/docs/logging.md +110 -0
  542. package/docs/lore.md +131 -0
  543. package/docs/mac/bun.md +133 -0
  544. package/docs/mac/canvas.md +161 -0
  545. package/docs/mac/child-process.md +72 -0
  546. package/docs/mac/dev-setup.md +81 -0
  547. package/docs/mac/health.md +28 -0
  548. package/docs/mac/icon.md +26 -0
  549. package/docs/mac/logging.md +51 -0
  550. package/docs/mac/menu-bar.md +69 -0
  551. package/docs/mac/peekaboo.md +170 -0
  552. package/docs/mac/permissions.md +40 -0
  553. package/docs/mac/release.md +76 -0
  554. package/docs/mac/remote.md +57 -0
  555. package/docs/mac/signing.md +41 -0
  556. package/docs/mac/skills.md +27 -0
  557. package/docs/mac/voice-overlay.md +52 -0
  558. package/docs/mac/voicewake.md +56 -0
  559. package/docs/mac/webchat.md +27 -0
  560. package/docs/mac/xpc.md +40 -0
  561. package/docs/macos.md +104 -0
  562. package/docs/model-failover.md +75 -0
  563. package/docs/models.md +91 -0
  564. package/docs/multi-agent.md +74 -0
  565. package/docs/nix.md +95 -0
  566. package/docs/nodes.md +157 -0
  567. package/docs/onboarding-config-protocol.md +34 -0
  568. package/docs/onboarding.md +189 -0
  569. package/docs/pairing.md +85 -0
  570. package/docs/plans/cron-add-hardening.md +72 -0
  571. package/docs/plans/group-policy-hardening.md +121 -0
  572. package/docs/poll.md +52 -0
  573. package/docs/prereqs.md +67 -0
  574. package/docs/presence.md +133 -0
  575. package/docs/proposals/model-config.md +147 -0
  576. package/docs/provider-routing.md +25 -0
  577. package/docs/queue.md +78 -0
  578. package/docs/reference/templates/AGENTS.md +164 -0
  579. package/docs/remote-gateway-readme.md +153 -0
  580. package/docs/remote.md +61 -0
  581. package/docs/research/memory.md +227 -0
  582. package/docs/rpc.md +35 -0
  583. package/docs/security.md +200 -0
  584. package/docs/session-ingestion.md +119 -0
  585. package/docs/session-tool.md +154 -0
  586. package/docs/session.md +85 -0
  587. package/docs/sessions.md +8 -0
  588. package/docs/setup.md +131 -0
  589. package/docs/showcase.md +37 -0
  590. package/docs/signal.md +122 -0
  591. package/docs/skills-config.md +58 -0
  592. package/docs/skills.md +153 -0
  593. package/docs/slack.md +221 -0
  594. package/docs/subagents.md +72 -0
  595. package/docs/tailscale.md +71 -0
  596. package/docs/talk.md +79 -0
  597. package/docs/telegram.md +96 -0
  598. package/docs/templates/AGENTS.md +286 -0
  599. package/docs/templates/BOOTSTRAP.md +35 -0
  600. package/docs/templates/IDENTITY.md +17 -0
  601. package/docs/templates/PROFILE.md +14 -0
  602. package/docs/templates/SOUL.md +41 -0
  603. package/docs/templates/TOOLS.md +41 -0
  604. package/docs/templates/USER.md +8 -0
  605. package/docs/test.md +43 -0
  606. package/docs/testing-onboarding-quickstart.md +76 -0
  607. package/docs/testing-philosophy.md +211 -0
  608. package/docs/thinking.md +46 -0
  609. package/docs/timezone.md +40 -0
  610. package/docs/tools.md +346 -0
  611. package/docs/troubleshooting.md +257 -0
  612. package/docs/tui.md +71 -0
  613. package/docs/typebox.md +42 -0
  614. package/docs/updating.md +138 -0
  615. package/docs/usage-cloud-aggregation-spec.md +133 -0
  616. package/docs/usage-suggestions-pipeline.md +126 -0
  617. package/docs/voicewake.md +61 -0
  618. package/docs/web.md +115 -0
  619. package/docs/webchat.md +34 -0
  620. package/docs/webhook.md +132 -0
  621. package/docs/whatsapp-clawd.jpg +0 -0
  622. package/docs/whatsapp.md +170 -0
  623. package/docs/windows.md +11 -0
  624. package/docs/wizard.md +167 -0
  625. package/package.json +209 -0
  626. package/skills/1password/SKILL.md +54 -0
  627. package/skills/1password/docs/setup.md +85 -0
  628. package/skills/1password/docs/troubleshooting.md +63 -0
  629. package/skills/1password/references/cli-examples.md +29 -0
  630. package/skills/1password/references/get-started.md +17 -0
  631. package/skills/agent-browser/SKILL.md +450 -0
  632. package/skills/agent-browser/docs/browser-use-eval.md +95 -0
  633. package/skills/agent-browser/docs/first-tests.md +261 -0
  634. package/skills/agent-browser/docs/wordle-nyt-eval.js +32 -0
  635. package/skills/aix/SKILL.md +93 -0
  636. package/skills/aix/docs/embeddings.md +40 -0
  637. package/skills/aix/docs/setup.md +58 -0
  638. package/skills/aix/docs/troubleshooting.md +41 -0
  639. package/skills/aix/references/sql.md +48 -0
  640. package/skills/apple-notes/SKILL.md +50 -0
  641. package/skills/apple-reminders/SKILL.md +67 -0
  642. package/skills/bear-notes/SKILL.md +79 -0
  643. package/skills/bird/SKILL.md +32 -0
  644. package/skills/bird/docs/auth.md +31 -0
  645. package/skills/bird/docs/troubleshooting.md +31 -0
  646. package/skills/blogwatcher/SKILL.md +46 -0
  647. package/skills/blucli/SKILL.md +27 -0
  648. package/skills/brave-search/SKILL.md +36 -0
  649. package/skills/brave-search/docs/setup.md +40 -0
  650. package/skills/brave-search/docs/troubleshooting.md +37 -0
  651. package/skills/brave-search/docs/usage.md +28 -0
  652. package/skills/brave-search/scripts/content.mjs +53 -0
  653. package/skills/brave-search/scripts/search.mjs +79 -0
  654. package/skills/browser-use-agent-sdk/SKILL.md +90 -0
  655. package/skills/camsnap/SKILL.md +25 -0
  656. package/skills/clawdhub/SKILL.md +53 -0
  657. package/skills/coding-agent/SKILL.md +274 -0
  658. package/skills/comms/SKILL.md +249 -0
  659. package/skills/comms/docs/adapters.md +54 -0
  660. package/skills/comms/docs/setup.md +56 -0
  661. package/skills/comms/docs/troubleshooting.md +44 -0
  662. package/skills/comms/references/schema.md +49 -0
  663. package/skills/computer-use/SKILL.md +204 -0
  664. package/skills/computer-use/docs/open-interpreter.md +26 -0
  665. package/skills/computer-use/docs/peekaboo.md +26 -0
  666. package/skills/computer-use/docs/setup.md +47 -0
  667. package/skills/computer-use/docs/troubleshooting.md +33 -0
  668. package/skills/discord/SKILL.md +370 -0
  669. package/skills/eightctl/SKILL.md +29 -0
  670. package/skills/eve/SKILL.md +215 -0
  671. package/skills/eve/docs/dual-account.md +84 -0
  672. package/skills/eve/docs/intelligence.md +58 -0
  673. package/skills/eve/docs/setup.md +60 -0
  674. package/skills/eve/docs/troubleshooting.md +54 -0
  675. package/skills/eve/scripts/setup-dual-account.sh +125 -0
  676. package/skills/filesystem/SKILL.md +217 -0
  677. package/skills/food-order/SKILL.md +41 -0
  678. package/skills/gemini/SKILL.md +23 -0
  679. package/skills/gh/SKILL.md +22 -0
  680. package/skills/gh/docs/usage.md +41 -0
  681. package/skills/gifgrep/SKILL.md +47 -0
  682. package/skills/github/SKILL.md +26 -0
  683. package/skills/github/docs/setup.md +21 -0
  684. package/skills/github/docs/troubleshooting.md +24 -0
  685. package/skills/gog/SKILL.md +104 -0
  686. package/skills/gog/docs/portability.md +94 -0
  687. package/skills/gog/docs/setup.md +76 -0
  688. package/skills/gog/docs/troubleshooting.md +94 -0
  689. package/skills/gog/scripts/cdp/README.md +90 -0
  690. package/skills/gog/scripts/cdp/add_test_users.py +69 -0
  691. package/skills/gog/scripts/cdp/auth_add_accounts.py +209 -0
  692. package/skills/gog/scripts/cdp/auth_add_accounts_manual.py +206 -0
  693. package/skills/gog/scripts/cdp/create_oauth_client.py +165 -0
  694. package/skills/gog/scripts/cdp/launch_cdp_chrome.sh +58 -0
  695. package/skills/google-oauth/SKILL.md +94 -0
  696. package/skills/goplaces/SKILL.md +30 -0
  697. package/skills/imsg/SKILL.md +25 -0
  698. package/skills/json-render/SKILL.md +154 -0
  699. package/skills/json-render/assets/components/README.md +21 -0
  700. package/skills/json-render/assets/components/catalog.ts +78 -0
  701. package/skills/json-render/assets/components/registry.tsx +172 -0
  702. package/skills/json-render/assets/demo/App.css +397 -0
  703. package/skills/json-render/assets/demo/App.tsx +897 -0
  704. package/skills/json-render/assets/demo/README.md +22 -0
  705. package/skills/json-render/assets/demo/catalog.ts +78 -0
  706. package/skills/json-render/assets/demo/data/nexus-core.json +31 -0
  707. package/skills/json-render/assets/demo/index.css +27 -0
  708. package/skills/json-render/assets/demo/registry.tsx +150 -0
  709. package/skills/json-render/docs/nexus-state-demo.md +84 -0
  710. package/skills/json-render/docs/shadcn-preset.md +33 -0
  711. package/skills/json-render/scripts/create-vite-demo.sh +45 -0
  712. package/skills/json-render/scripts/llm-server/README.md +33 -0
  713. package/skills/json-render/scripts/llm-server/catalog.ts +78 -0
  714. package/skills/json-render/scripts/llm-server/package-lock.json +702 -0
  715. package/skills/json-render/scripts/llm-server/package.json +18 -0
  716. package/skills/json-render/scripts/llm-server/server.ts +285 -0
  717. package/skills/local-places/SERVER_README.md +101 -0
  718. package/skills/local-places/SKILL.md +91 -0
  719. package/skills/local-places/pyproject.toml +27 -0
  720. package/skills/local-places/src/local_places/__init__.py +2 -0
  721. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  722. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  723. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  724. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  725. package/skills/local-places/src/local_places/google_places.py +314 -0
  726. package/skills/local-places/src/local_places/main.py +65 -0
  727. package/skills/local-places/src/local_places/schemas.py +107 -0
  728. package/skills/mcporter/SKILL.md +38 -0
  729. package/skills/model-usage/SKILL.md +45 -0
  730. package/skills/model-usage/references/codexbar-cli.md +28 -0
  731. package/skills/model-usage/scripts/model_usage.py +310 -0
  732. package/skills/nano-banana-pro/SKILL.md +30 -0
  733. package/skills/nano-banana-pro/scripts/generate_image.py +169 -0
  734. package/skills/nano-pdf/SKILL.md +20 -0
  735. package/skills/nexus-cloud/SKILL.md +53 -0
  736. package/skills/nexus-cloud/docs/security.md +24 -0
  737. package/skills/nexus-cloud/docs/setup.md +51 -0
  738. package/skills/nexus-cloud/docs/troubleshooting.md +28 -0
  739. package/skills/notion/SKILL.md +156 -0
  740. package/skills/obsidian/SKILL.md +55 -0
  741. package/skills/onboarding/SKILL.md +515 -0
  742. package/skills/onboarding/docs/CAPABILITIES.md +444 -0
  743. package/skills/onboarding/docs/CAPABILITY_TAXONOMY.md +608 -0
  744. package/skills/onboarding/docs/CLI_GRAMMAR.md +797 -0
  745. package/skills/onboarding/docs/CLI_GRAMMAR_CREDENTIALS.md +632 -0
  746. package/skills/onboarding/docs/CLI_GRAMMAR_ONBOARDING.md +815 -0
  747. package/skills/onboarding/docs/CLI_GRAMMAR_SKILLS.md +449 -0
  748. package/skills/onboarding/docs/DOCUMENTATION_OVERVIEW.md +290 -0
  749. package/skills/onboarding/docs/ENTITY_MODEL.md +582 -0
  750. package/skills/onboarding/docs/GOAL_STATE_ARCHITECTURE.md +395 -0
  751. package/skills/onboarding/docs/NEXUS_SYSTEM_OVERVIEW.md +476 -0
  752. package/skills/onboarding/docs/SKILLS_HUB_SPEC.md +477 -0
  753. package/skills/onboarding/docs/SKILLS_SPECIFICATION.md +947 -0
  754. package/skills/onboarding/docs/SKILL_GATEWAY_DESIGN.md +702 -0
  755. package/skills/onboarding/docs/SKILL_GATEWAY_PRD.md +278 -0
  756. package/skills/onboarding/docs/SKILL_INVENTORY.md +266 -0
  757. package/skills/onboarding/docs/STATE_ARCHITECTURE.md +547 -0
  758. package/skills/onboarding/docs/TROUBLESHOOTING.md +363 -0
  759. package/skills/onboarding/docs/USER_JOURNEY.md +797 -0
  760. package/skills/onboarding/docs/WOW_MOMENTS.md +232 -0
  761. package/skills/onboarding/docs/agent-apple-id.md +289 -0
  762. package/skills/onboarding/docs/skill-deep-dives/1password.md +367 -0
  763. package/skills/onboarding/docs/skill-deep-dives/TEMPLATE.md +197 -0
  764. package/skills/onboarding/docs/skill-deep-dives/aix.md +498 -0
  765. package/skills/onboarding/docs/skill-deep-dives/bird.md +357 -0
  766. package/skills/onboarding/docs/skill-deep-dives/brave-search.md +601 -0
  767. package/skills/onboarding/docs/skill-deep-dives/comms.md +607 -0
  768. package/skills/onboarding/docs/skill-deep-dives/computer-use.md +599 -0
  769. package/skills/onboarding/docs/skill-deep-dives/cron-and-heartbeat.md +576 -0
  770. package/skills/onboarding/docs/skill-deep-dives/eve.md +711 -0
  771. package/skills/onboarding/docs/skill-deep-dives/github.md +333 -0
  772. package/skills/onboarding/docs/skill-deep-dives/gog.md +640 -0
  773. package/skills/onboarding/docs/skill-deep-dives/homebrew-prereqs.md +785 -0
  774. package/skills/onboarding/docs/skill-deep-dives/nexus-cloud.md +689 -0
  775. package/skills/onboarding/docs/skill-deep-dives/qmd.md +742 -0
  776. package/skills/onboarding/docs/skill-deep-dives/telegram.md +379 -0
  777. package/skills/onboarding/docs/skill-deep-dives/wacli.md +399 -0
  778. package/skills/onboarding/docs/skill-deep-dives/weather.md +513 -0
  779. package/skills/onboarding/scripts/ralph/prd.json +215 -0
  780. package/skills/onboarding/scripts/ralph/progress.txt +99 -0
  781. package/skills/onboarding/scripts/ralph/prompt.md +87 -0
  782. package/skills/onboarding/scripts/ralph/ralph.log +84 -0
  783. package/skills/onboarding/scripts/ralph/ralph.sh +45 -0
  784. package/skills/onboarding/scripts/setup-cursor-skills.sh +40 -0
  785. package/skills/openai-image-gen/SKILL.md +31 -0
  786. package/skills/openai-image-gen/scripts/gen.py +173 -0
  787. package/skills/openai-whisper/SKILL.md +19 -0
  788. package/skills/openai-whisper-api/SKILL.md +43 -0
  789. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  790. package/skills/openhue/SKILL.md +30 -0
  791. package/skills/oracle/SKILL.md +105 -0
  792. package/skills/ordercli/SKILL.md +47 -0
  793. package/skills/peekaboo/SKILL.md +153 -0
  794. package/skills/qmd/SKILL.md +32 -0
  795. package/skills/qmd/docs/mcp.md +30 -0
  796. package/skills/qmd/docs/ollama.md +42 -0
  797. package/skills/qmd/docs/setup.md +44 -0
  798. package/skills/sag/SKILL.md +62 -0
  799. package/skills/skill-cli-template/SKILL.md +109 -0
  800. package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
  801. package/skills/slack/SKILL.md +144 -0
  802. package/skills/songsee/SKILL.md +29 -0
  803. package/skills/sonoscli/SKILL.md +26 -0
  804. package/skills/spotify-player/SKILL.md +34 -0
  805. package/skills/summarize/SKILL.md +49 -0
  806. package/skills/telegram/SKILL.md +20 -0
  807. package/skills/telegram/docs/pairing.md +30 -0
  808. package/skills/telegram/docs/setup.md +41 -0
  809. package/skills/telegram/docs/webhook.md +17 -0
  810. package/skills/things-mac/SKILL.md +61 -0
  811. package/skills/tmux/SKILL.md +121 -0
  812. package/skills/tmux/scripts/find-sessions.sh +112 -0
  813. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  814. package/skills/trello/SKILL.md +84 -0
  815. package/skills/upstream-sync/SKILL.md +151 -0
  816. package/skills/upstream-sync/scripts/auto-port.sh +227 -0
  817. package/skills/upstream-sync/scripts/check-all.sh +88 -0
  818. package/skills/upstream-sync/scripts/check-nexus.sh +146 -0
  819. package/skills/upstream-sync/scripts/check-pi-ai.sh +129 -0
  820. package/skills/video-frames/SKILL.md +29 -0
  821. package/skills/video-frames/scripts/frame.sh +81 -0
  822. package/skills/wacli/SKILL.md +48 -0
  823. package/skills/wacli/docs/auth.md +21 -0
  824. package/skills/wacli/docs/backup.md +9 -0
  825. package/skills/wacli/docs/troubleshooting.md +21 -0
  826. package/skills/weather/SKILL.md +53 -0
  827. package/skills/weather/docs/usage.md +40 -0
@@ -0,0 +1,61 @@
1
+ ---
2
+ summary: "Gateway cron jobs: scheduling tasks and automation"
3
+ read_when:
4
+ - Scheduling periodic tasks
5
+ - Automating syncs, backups, or reports
6
+ ---
7
+
8
+ # Cron (Gateway)
9
+
10
+ Cron jobs schedule tasks through the Gateway. Use them for recurring syncs, backups, and reports.
11
+
12
+ ## Basic commands
13
+
14
+ ```bash
15
+ nexus cron list
16
+ nexus cron add --schedule "0 2 * * *" --command "eve sync" --name "Daily iMessage sync"
17
+ nexus cron remove <job-id>
18
+ nexus cron disable <job-id>
19
+ nexus cron enable <job-id>
20
+ nexus cron logs <job-id>
21
+ ```
22
+
23
+ ## Schedule format
24
+
25
+ Standard cron syntax: `minute hour day month weekday`
26
+
27
+ Examples:
28
+
29
+ - `0 9 * * *` daily at 9:00
30
+ - `*/30 * * * *` every 30 minutes
31
+ - `0 * * * *` hourly
32
+ - `0 0 * * 0` Sundays at midnight
33
+
34
+ ## Common use cases
35
+
36
+ ```bash
37
+ # Hourly WhatsApp sync
38
+ nexus cron add --schedule "0 * * * *" --command "wacli sync" --name "Hourly WhatsApp sync"
39
+
40
+ # Nightly backup
41
+ nexus cron add --schedule "0 3 * * *" --command "nexus-cloud push -m 'Daily backup'" --name "Daily backup"
42
+
43
+ # Update qmd index
44
+ nexus cron add --schedule "0 * * * *" --command "qmd update" --name "Index update"
45
+ ```
46
+
47
+ ## Best practices
48
+
49
+ - Test commands manually before scheduling.
50
+ - Use absolute paths for binaries if PATH is unknown.
51
+ - Redirect output to logs for debugging.
52
+
53
+ ## Troubleshooting
54
+
55
+ If jobs do not run:
56
+
57
+ ```bash
58
+ nexus status
59
+ nexus cron list
60
+ nexus cron logs <job-id>
61
+ ```
@@ -0,0 +1,207 @@
1
+ ---
2
+ summary: "Heartbeat polling messages and notification rules"
3
+ read_when:
4
+ - Adjusting heartbeat cadence or messaging
5
+ ---
6
+ # Heartbeat (Gateway)
7
+
8
+ Heartbeat runs **periodic agent turns** in the main session so the model can
9
+ surface anything that needs attention without spamming you.
10
+
11
+ ## Quick start (beginner)
12
+
13
+ 1. Leave heartbeats enabled (default is `30m`) or set your own cadence.
14
+ 2. Create a tiny `HEARTBEAT.md` checklist in the agent workspace (optional but recommended).
15
+ 3. Decide where heartbeat messages should go (`target: "last"` is the default).
16
+ 4. Optional: enable heartbeat reasoning delivery for transparency.
17
+
18
+ Example config:
19
+
20
+ ```json5
21
+ {
22
+ agents: {
23
+ defaults: {
24
+ heartbeat: {
25
+ every: "30m",
26
+ target: "last",
27
+ // includeReasoning: true, // optional: send separate `Reasoning:` message too
28
+ }
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ ## Defaults
35
+
36
+ - Interval: `30m` (set `agents.defaults.heartbeat.every`; use `0m` to disable).
37
+ - Prompt body (configurable via `agents.defaults.heartbeat.prompt`):
38
+ `Read HEARTBEAT.md if exists. Consider outstanding tasks. Checkup sometimes on your human during (user local) day time.`
39
+ - The heartbeat prompt is sent **verbatim** as the user message. The system
40
+ prompt includes a “Heartbeat” section and the run is flagged internally.
41
+
42
+ ## What the heartbeat prompt is for
43
+
44
+ The default prompt is intentionally broad:
45
+ - **Background tasks**: “Consider outstanding tasks” nudges the agent to review
46
+ follow-ups (inbox, calendar, reminders, queued work) and surface anything urgent.
47
+ - **Human check-in**: “Checkup sometimes on your human during day time” nudges an
48
+ occasional lightweight “anything you need?” message, but avoids night-time spam
49
+ by using your configured local timezone (see [/concepts/timezone](/concepts/timezone)).
50
+
51
+ If you want a heartbeat to do something very specific (e.g. “check Gmail PubSub
52
+ stats” or “verify gateway health”), set `agents.defaults.heartbeat.prompt` to a
53
+ custom body (sent verbatim).
54
+
55
+ ## Response contract
56
+
57
+ - If nothing needs attention, reply with **`HEARTBEAT_OK`**.
58
+ - During heartbeat runs, Nexus treats `HEARTBEAT_OK` as an ack when it appears
59
+ at the **start or end** of the reply. The token is stripped and the reply is
60
+ dropped if the remaining content is **≤ `ackMaxChars`** (default: 300).
61
+ - If `HEARTBEAT_OK` appears in the **middle** of a reply, it is not treated
62
+ specially.
63
+ - For alerts, **do not** include `HEARTBEAT_OK`; return only the alert text.
64
+
65
+ Outside heartbeats, stray `HEARTBEAT_OK` at the start/end of a message is stripped
66
+ and logged; a message that is only `HEARTBEAT_OK` is dropped.
67
+
68
+ ## Config
69
+
70
+ ```json5
71
+ {
72
+ agents: {
73
+ defaults: {
74
+ heartbeat: {
75
+ every: "30m", // default: 30m (0m disables)
76
+ model: "anthropic/claude-opus-4-5",
77
+ includeReasoning: false, // default: false (deliver separate Reasoning: message when available)
78
+ target: "last", // last | whatsapp | telegram | discord | slack | signal | imessage | none
79
+ to: "+15551234567", // optional provider-specific override
80
+ prompt: "Read HEARTBEAT.md if exists. Consider outstanding tasks. Checkup sometimes on your human during (user local) day time.",
81
+ ackMaxChars: 300 // max chars allowed after HEARTBEAT_OK
82
+ }
83
+ }
84
+ }
85
+ }
86
+ ```
87
+
88
+ ### Field notes
89
+
90
+ - `every`: heartbeat interval (duration string; default unit = minutes).
91
+ - `model`: optional model override for heartbeat runs (`provider/model`).
92
+ - `includeReasoning`: when enabled, also deliver the separate `Reasoning:` message when available (same shape as `/reasoning on`).
93
+ - `target`:
94
+ - `last` (default): deliver to the last used external provider.
95
+ - explicit provider: `whatsapp` / `telegram` / `discord` / `slack` / `signal` / `imessage`.
96
+ - `none`: run the heartbeat but **do not deliver** externally.
97
+ - `to`: optional recipient override (E.164 for WhatsApp, chat id for Telegram, etc.).
98
+ - `prompt`: overrides the default prompt body (not merged).
99
+ - `ackMaxChars`: max chars allowed after `HEARTBEAT_OK` before delivery.
100
+
101
+ ## Delivery behavior
102
+
103
+ - Heartbeats run in the **main session** (`main`, or `global` when scope is global).
104
+ - If the main queue is busy, the heartbeat is skipped and retried later.
105
+ - If `target` resolves to no external destination, the run still happens but no
106
+ outbound message is sent.
107
+ - Heartbeat-only replies do **not** keep the session alive; the last `updatedAt`
108
+ is restored so idle expiry behaves normally.
109
+
110
+ ## HEARTBEAT.md (optional)
111
+
112
+ If a `HEARTBEAT.md` file exists in the workspace, the default prompt tells the
113
+ agent to read it. Think of it as your “heartbeat checklist”: small, stable, and
114
+ safe to include every 30 minutes.
115
+
116
+ Keep it tiny (short checklist or reminders) to avoid prompt bloat.
117
+
118
+ Example `HEARTBEAT.md`:
119
+
120
+ ```md
121
+ # Heartbeat checklist
122
+
123
+ - Quick scan: anything urgent in inboxes?
124
+ - If it’s daytime, do a lightweight check-in if nothing else is pending.
125
+ - If a task is blocked, write down *what is missing* and ask Peter next time.
126
+ ```
127
+
128
+ ### Can the agent update HEARTBEAT.md?
129
+
130
+ Yes — if you ask it to.
131
+
132
+ `HEARTBEAT.md` is just a normal file in the agent workspace, so you can tell the
133
+ agent (in a normal chat) something like:
134
+ - “Update `HEARTBEAT.md` to add a daily calendar check.”
135
+ - “Rewrite `HEARTBEAT.md` so it’s shorter and focused on inbox follow-ups.”
136
+
137
+ If you want this to happen proactively, you can also include an explicit line in
138
+ your heartbeat prompt like: “If the checklist becomes stale, update HEARTBEAT.md
139
+ with a better one.”
140
+
141
+ Safety note: don’t put secrets (API keys, phone numbers, private tokens) into
142
+ `HEARTBEAT.md` — it becomes part of the prompt context.
143
+
144
+ ## Manual wake (on-demand)
145
+
146
+ You can enqueue a system event and trigger an immediate heartbeat with:
147
+
148
+ ```bash
149
+ nexus wake --text "Check for urgent follow-ups" --mode now
150
+ ```
151
+
152
+ Use `--mode next-heartbeat` to wait for the next scheduled tick.
153
+
154
+ ## Reasoning delivery (optional)
155
+
156
+ By default, heartbeats deliver only the final “answer” payload.
157
+
158
+ If you want transparency, enable:
159
+ - `agents.defaults.heartbeat.includeReasoning: true`
160
+
161
+ When enabled, heartbeats will also deliver a separate message prefixed
162
+ `Reasoning:` (same shape as `/reasoning on`). This can be useful when the agent
163
+ is managing multiple sessions/codexes and you want to see why it decided to ping
164
+ you — but it can also leak more internal detail than you want. Prefer keeping it
165
+ off in group chats.
166
+
167
+ ## Cost awareness
168
+
169
+ Heartbeats run full agent turns. Shorter intervals burn more tokens. Keep
170
+ `HEARTBEAT.md` small and consider a cheaper `model` or `target: "none"` if you
171
+ only want internal state updates.
172
+
173
+ ## Heartbeat commands
174
+
175
+ ```bash
176
+ nexus heartbeat list
177
+ nexus heartbeat status <heartbeat-name>
178
+ nexus heartbeat logs <heartbeat-name>
179
+ nexus heartbeat run <heartbeat-name>
180
+ nexus heartbeat disable <heartbeat-name>
181
+ nexus heartbeat enable <heartbeat-name>
182
+ ```
183
+
184
+ ## Example heartbeats
185
+
186
+ ```yaml
187
+ heartbeats:
188
+ - name: "Ollama health"
189
+ interval: 60
190
+ command: "curl -sf http://localhost:11434/api/tags > /dev/null"
191
+ alert_on_failure: true
192
+ alert_after: 2
193
+
194
+ - name: "Disk space"
195
+ interval: 300
196
+ command: "df -h / | awk 'NR==2 {print $5}' | sed 's/%//' | awk '{if ($1 > 90) exit 1}'"
197
+ alert_on_failure: true
198
+ ```
199
+
200
+ ## Troubleshooting
201
+
202
+ If heartbeats do not run:
203
+
204
+ ```bash
205
+ nexus status
206
+ nexus heartbeat list
207
+ ```
@@ -0,0 +1,109 @@
1
+ ---
2
+ summary: "Gateway-owned node pairing (Option B) for iOS and other remote nodes"
3
+ read_when:
4
+ - Implementing node pairing approvals without macOS UI
5
+ - Adding CLI flows for approving remote nodes
6
+ - Extending gateway protocol with node management
7
+ ---
8
+ # Gateway-owned pairing (Option B)
9
+
10
+ Goal: The Gateway (`nexus`) is the **source of truth** for which nodes are allowed to join the network.
11
+
12
+ This enables:
13
+ - Headless approval via terminal/CLI (no Swift UI required).
14
+ - Optional macOS UI approval (Swift app is just a frontend).
15
+ - One consistent membership store for iOS, mac nodes, future hardware nodes.
16
+
17
+ ## Concepts
18
+ - **Pending request**: a node asked to join; requires explicit approve/reject.
19
+ - **Paired node**: node is allowed; gateway returns an auth token for subsequent connects.
20
+ - **Bridge**: direct transport endpoint owned by the gateway. The bridge does not decide membership.
21
+
22
+ ## API surface (gateway protocol)
23
+ These are conceptual method names; wire them into [`src/gateway/protocol/schema.ts`](https://github.com/nexus/nexus/blob/main/src/gateway/protocol/schema.ts) and regenerate Swift types.
24
+
25
+ ### Events
26
+ - `node.pair.requested`
27
+ - Emitted whenever a new pending pairing request is created.
28
+ - Payload:
29
+ - `requestId` (string)
30
+ - `nodeId` (string)
31
+ - `displayName?` (string)
32
+ - `platform?` (string)
33
+ - `version?` (string)
34
+ - `remoteIp?` (string)
35
+ - `silent?` (boolean) — hint that the UI may attempt auto-approval
36
+ - `ts` (ms since epoch)
37
+ - `node.pair.resolved`
38
+ - Emitted when a pending request is approved/rejected.
39
+ - Payload:
40
+ - `requestId` (string)
41
+ - `nodeId` (string)
42
+ - `decision` ("approved" | "rejected" | "expired")
43
+ - `ts` (ms since epoch)
44
+
45
+ ### Methods
46
+ - `node.pair.request`
47
+ - Creates (or returns) a pending request.
48
+ - Params: node metadata (same shape as `node.pair.requested` payload, minus `requestId`/`ts`).
49
+ - Optional `silent` flag hints that the UI can attempt an SSH auto-approve before showing an alert.
50
+ - Result:
51
+ - `status` ("pending")
52
+ - `created` (boolean) — whether this call created the pending request
53
+ - `request` (pending request object), including `isRepair` when the node was already paired
54
+ - Security: **never returns an existing token**. If a paired node “lost” its token, it must be approved again (token rotation).
55
+ - `node.pair.list`
56
+ - Returns:
57
+ - `pending[]` (pending requests)
58
+ - `paired[]` (paired node records)
59
+ - `node.pair.approve`
60
+ - Params: `{ requestId }`
61
+ - Result: `{ requestId, node: { nodeId, token, ... } }`
62
+ - Must be idempotent (first decision wins).
63
+ - `node.pair.reject`
64
+ - Params: `{ requestId }`
65
+ - Result: `{ requestId, nodeId }`
66
+ - `node.pair.verify`
67
+ - Params: `{ nodeId, token }`
68
+ - Result: `{ ok: boolean, node?: { nodeId, ... } }`
69
+
70
+ ## CLI flows
71
+ CLI must be able to fully operate without any GUI:
72
+ - `nexus nodes pending`
73
+ - `nexus nodes approve <requestId>`
74
+ - `nexus nodes reject <requestId>`
75
+ - `nexus nodes status` (paired nodes + connection status/capabilities)
76
+
77
+ Optional interactive helper:
78
+ - `nexus nodes watch` (subscribe to `node.pair.requested` and prompt in-place)
79
+
80
+ Implementation pointers:
81
+ - CLI commands: [`src/cli/nodes-cli.ts`](https://github.com/nexus/nexus/blob/main/src/cli/nodes-cli.ts)
82
+ - Gateway handlers + events: [`src/gateway/server.ts`](https://github.com/nexus/nexus/blob/main/src/gateway/server.ts) + [`src/gateway/server-methods/nodes.ts`](https://github.com/nexus/nexus/blob/main/src/gateway/server-methods/nodes.ts)
83
+ - Pairing store: [`src/infra/node-pairing.ts`](https://github.com/nexus/nexus/blob/main/src/infra/node-pairing.ts) (under `~/nexus/state/nodes/`)
84
+ - Optional macOS UI prompt (frontend only): [`apps/macos/Sources/Nexus/NodePairingApprovalPrompter.swift`](https://github.com/nexus/nexus/blob/main/apps/macos/Sources/Nexus/NodePairingApprovalPrompter.swift)
85
+ - Push-first: listens to `node.pair.requested`/`node.pair.resolved`, does a `node.pair.list` on startup/reconnect,
86
+ and only runs a slow safety poll while a request is pending/visible.
87
+
88
+ ## Storage (private, local)
89
+ Gateway stores the authoritative state under `~/nexus/state/`:
90
+ - `~/nexus/state/nodes/paired.json`
91
+ - `~/nexus/state/nodes/pending.json` (or `~/nexus/state/nodes/pending/*.json`)
92
+
93
+ Notes:
94
+ - Tokens are secrets. Treat `paired.json` as sensitive.
95
+ - Pending entries should have a TTL (e.g. 5 minutes) and expire automatically.
96
+
97
+ ## Bridge integration
98
+ Target direction:
99
+ - The gateway runs the bridge listener (LAN/tailnet-facing) and advertises discovery beacons (Bonjour).
100
+ - The bridge is transport only; it forwards/scopes requests and enforces ACLs, but pairing decisions are made by the gateway.
101
+
102
+ The macOS UI (Swift) can:
103
+ - Subscribe to `node.pair.requested`, show an alert (including `remoteIp`), and call `node.pair.approve` or `node.pair.reject`.
104
+ - Or ignore/dismiss (“Later”) and let CLI handle it.
105
+ - When `silent` is set, it can try a short SSH probe (same user) and auto-approve if reachable; otherwise fall back to the normal alert.
106
+
107
+ ## Implementation note
108
+ If the bridge is only provided by the macOS app, then “no Swift app running” cannot work end-to-end.
109
+ The long-term goal is to move bridge hosting + Bonjour advertising into the Node gateway so headless pairing works by default.
@@ -0,0 +1,28 @@
1
+ ---
2
+ summary: "Gateway singleton guard using the WebSocket listener bind"
3
+ read_when:
4
+ - Running or debugging the gateway process
5
+ - Investigating single-instance enforcement
6
+ ---
7
+ # Gateway lock
8
+
9
+ Last updated: 2025-12-11
10
+
11
+ ## Why
12
+ - Ensure only one gateway instance runs per host.
13
+ - Survive crashes/SIGKILL without leaving stale lock files.
14
+ - Fail fast with a clear error when the control port is already occupied.
15
+
16
+ ## Mechanism
17
+ - The gateway binds the WebSocket listener (default `ws://127.0.0.1:18789`) immediately on startup using an exclusive TCP listener.
18
+ - If the bind fails with `EADDRINUSE`, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
19
+ - The OS releases the listener automatically on any process exit, including crashes and SIGKILL—no separate lock file or cleanup step is needed.
20
+ - On shutdown the gateway closes the WebSocket server and underlying HTTP server to free the port promptly.
21
+
22
+ ## Error surface
23
+ - If another process holds the port, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
24
+ - Other bind failures surface as `GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")`.
25
+
26
+ ## Operational notes
27
+ - If the port is occupied by *another* process, the error is the same; free the port or choose another with `nexus gateway --port <port>`.
28
+ - The macOS app still maintains its own lightweight PID guard before spawning the gateway; the runtime lock is enforced by the WebSocket bind.
@@ -0,0 +1,227 @@
1
+ ---
2
+ summary: "Runbook for the Gateway daemon, lifecycle, and operations"
3
+ read_when:
4
+ - Running or debugging the gateway process
5
+ ---
6
+ # Gateway (daemon) runbook
7
+
8
+ Last updated: 2025-12-09
9
+
10
+ ## What it is
11
+ - The always-on process that owns the single Baileys/Telegram connection and the control/event plane.
12
+ - Replaces the legacy `gateway` command. CLI entry point: `nexus gateway`.
13
+ - Runs until stopped; exits non-zero on fatal errors so the supervisor restarts it.
14
+
15
+ ## How to run (local)
16
+ ```bash
17
+ pnpm nexus gateway --port 18789
18
+ # for full debug/trace logs in stdio:
19
+ pnpm nexus gateway --port 18789 --verbose
20
+ # if the port is busy, terminate listeners then start:
21
+ pnpm nexus gateway --force
22
+ # dev loop (auto-reload on TS changes):
23
+ pnpm gateway:watch
24
+ ```
25
+ - Config hot reload watches `~/nexus/state/nexus.json` (or `NEXUS_CONFIG_PATH`).
26
+ - Default mode: `gateway.reload.mode="hybrid"` (hot-apply safe changes, restart on critical).
27
+ - Hot reload uses in-process restart via **SIGUSR1** when needed.
28
+ - Disable with `gateway.reload.mode="off"`.
29
+ - Binds WebSocket control plane to `127.0.0.1:<port>` (default 18789).
30
+ - The same port also serves HTTP (control UI, hooks, A2UI). Single-port multiplex.
31
+ - Starts a Canvas file server by default on `canvasHost.port` (default `18793`), serving `http://<gateway-host>:18793/__nexus__/canvas/` from `~/nexus/canvas`. Disable with `canvasHost.enabled=false` or `NEXUS_SKIP_CANVAS_HOST=1`.
32
+ - Logs to stdout; use launchd/systemd to keep it alive and rotate logs.
33
+ - Pass `--verbose` to mirror debug logging (handshakes, req/res, events) from the log file into stdio when troubleshooting.
34
+ - `--force` uses `lsof` to find listeners on the chosen port, sends SIGTERM, logs what it killed, then starts the gateway (fails fast if `lsof` is missing).
35
+ - If you run under a supervisor (launchd/systemd/mac app child-process mode), a stop/restart typically sends **SIGTERM**; older builds may surface this as `pnpm` `ELIFECYCLE` exit code **143** (SIGTERM), which is a normal shutdown, not a crash.
36
+ - **SIGUSR1** triggers an in-process restart (no external supervisor required). This is what the `gateway` agent tool uses.
37
+ - Optional shared secret: pass `--token <value>` or set `NEXUS_GATEWAY_TOKEN` to require clients to send `connect.params.auth.token`.
38
+ - Port precedence: `--port` > `NEXUS_GATEWAY_PORT` > `gateway.port` > default `18789`.
39
+
40
+ ## Remote access
41
+ - Tailscale/VPN preferred; otherwise SSH tunnel:
42
+ ```bash
43
+ ssh -N -L 18789:127.0.0.1:18789 user@host
44
+ ```
45
+ - Clients then connect to `ws://127.0.0.1:18789` through the tunnel.
46
+ - If a token is configured, clients must include it in `connect.params.auth.token` even over the tunnel.
47
+
48
+ ## Multiple gateways (same host)
49
+
50
+ Supported if you isolate state + config and use unique ports.
51
+
52
+ ### Dev profile (`--dev`)
53
+
54
+ Fast path: run a fully-isolated dev instance (config/state/workspace) without touching your primary setup.
55
+
56
+ ```bash
57
+ nexus --dev setup
58
+ nexus --dev gateway --allow-unconfigured
59
+ # then target the dev instance:
60
+ nexus --dev status
61
+ nexus --dev health
62
+ ```
63
+
64
+ Defaults (can be overridden via env/flags/config):
65
+ - `NEXUS_STATE_DIR=~/nexus/state-dev`
66
+ - `NEXUS_CONFIG_PATH=~/nexus/state-dev/nexus.json`
67
+ - `NEXUS_GATEWAY_PORT=19001` (Gateway WS + HTTP)
68
+ - `bridge.port=19002` (derived: `gateway.port+1`)
69
+ - `browser.controlUrl=http://127.0.0.1:19003` (derived: `gateway.port+2`)
70
+ - `canvasHost.port=19005` (derived: `gateway.port+4`)
71
+ - `agent.workspace` default becomes `~/nexus-dev` when you run `setup`/`onboard` under `--dev`.
72
+
73
+ Derived ports (rules of thumb):
74
+ - Base port = `gateway.port` (or `NEXUS_GATEWAY_PORT` / `--port`)
75
+ - `bridge.port = base + 1` (or `NEXUS_BRIDGE_PORT` / config override)
76
+ - `browser.controlUrl port = base + 2` (or `NEXUS_BROWSER_CONTROL_URL` / config override)
77
+ - `canvasHost.port = base + 4` (or `NEXUS_CANVAS_HOST_PORT` / config override)
78
+ - Browser profile CDP ports auto-allocate from `browser.controlPort + 9 .. + 108` (persisted per profile).
79
+
80
+ Checklist per instance:
81
+ - unique `gateway.port`
82
+ - unique `NEXUS_CONFIG_PATH`
83
+ - unique `NEXUS_STATE_DIR`
84
+ - unique `agent.workspace`
85
+ - separate WhatsApp numbers (if using WA)
86
+
87
+ Example:
88
+ ```bash
89
+ NEXUS_CONFIG_PATH=~/nexus/state/a.json NEXUS_STATE_DIR=~/nexus/state-a nexus gateway --port 19001
90
+ NEXUS_CONFIG_PATH=~/nexus/state/b.json NEXUS_STATE_DIR=~/nexus/state-b nexus gateway --port 19002
91
+ ```
92
+
93
+ ## Protocol (operator view)
94
+ - Mandatory first frame from client: `req {type:"req", id, method:"connect", params:{minProtocol,maxProtocol,client:{name,version,platform,deviceFamily?,modelIdentifier?,mode,instanceId}, caps, auth?, locale?, userAgent? } }`.
95
+ - Gateway replies `res {type:"res", id, ok:true, payload:hello-ok }` (or `ok:false` with an error, then closes).
96
+ - After handshake:
97
+ - Requests: `{type:"req", id, method, params}` → `{type:"res", id, ok, payload|error}`
98
+ - Events: `{type:"event", event, payload, seq?, stateVersion?}`
99
+ - Structured presence entries: `{host, ip, version, platform?, deviceFamily?, modelIdentifier?, mode, lastInputSeconds?, ts, reason?, tags?[], instanceId? }`.
100
+ - `agent` responses are two-stage: first `res` ack `{runId,status:"accepted"}`, then a final `res` `{runId,status:"ok"|"error",summary}` after the run finishes; streamed output arrives as `event:"agent"`.
101
+
102
+ ## Methods (initial set)
103
+ - `health` — full health snapshot (same shape as `nexus health --json`).
104
+ - `status` — short summary.
105
+ - `system-presence` — current presence list.
106
+ - `system-event` — post a presence/system note (structured).
107
+ - `send` — send a message via the active provider(s).
108
+ - `agent` — run an agent turn (streams events back on same connection).
109
+ - `node.list` — list paired + currently-connected bridge nodes (includes `caps`, `deviceFamily`, `modelIdentifier`, `paired`, `connected`, and advertised `commands`).
110
+ - `node.describe` — describe a node (capabilities + supported `node.invoke` commands; works for paired nodes and for currently-connected unpaired nodes).
111
+ - `node.invoke` — invoke a command on a node (e.g. `canvas.*`, `camera.*`).
112
+ - `node.pair.*` — pairing lifecycle (`request`, `list`, `approve`, `reject`, `verify`).
113
+
114
+ See also: [`docs/presence.md`](https://docs.nexus.bot/presence) for how presence is produced/deduped and why `instanceId` matters.
115
+
116
+ ## Events
117
+ - `agent` — streamed tool/output events from the agent run (seq-tagged).
118
+ - `presence` — presence updates (deltas with stateVersion) pushed to all connected clients.
119
+ - `tick` — periodic keepalive/no-op to confirm liveness.
120
+ - `shutdown` — Gateway is exiting; payload includes `reason` and optional `restartExpectedMs`. Clients should reconnect.
121
+
122
+ ## WebChat integration
123
+ - WebChat is a native SwiftUI UI that talks directly to the Gateway WebSocket for history, sends, abort, and events.
124
+ - Remote use goes through the same SSH/Tailscale tunnel; if a gateway token is configured, the client includes it during `connect`.
125
+ - macOS app connects via a single WS (shared connection); it hydrates presence from the initial snapshot and listens for `presence` events to update the UI.
126
+
127
+ ## Typing and validation
128
+ - Server validates every inbound frame with AJV against JSON Schema emitted from the protocol definitions.
129
+ - Clients (TS/Swift) consume generated types (TS directly; Swift via the repo’s generator).
130
+ - Types live in `src/gateway/protocol/*.ts`; regenerate schemas/models with `pnpm protocol:gen` (writes `dist/protocol.schema.json`) and `pnpm protocol:gen:swift` (writes `apps/macos/Sources/NexusProtocol/GatewayModels.swift`).
131
+
132
+ ## Connection snapshot
133
+ - `hello-ok` includes a `snapshot` with `presence`, `health`, `stateVersion`, and `uptimeMs` plus `policy {maxPayload,maxBufferedBytes,tickIntervalMs}` so clients can render immediately without extra requests.
134
+ - `health`/`system-presence` remain available for manual refresh, but are not required at connect time.
135
+
136
+ ## Error codes (res.error shape)
137
+ - Errors use `{ code, message, details?, retryable?, retryAfterMs? }`.
138
+ - Standard codes:
139
+ - `NOT_LINKED` — WhatsApp not authenticated.
140
+ - `AGENT_TIMEOUT` — agent did not respond within the configured deadline.
141
+ - `INVALID_REQUEST` — schema/param validation failed.
142
+ - `UNAVAILABLE` — Gateway is shutting down or a dependency is unavailable.
143
+
144
+ ## Keepalive behavior
145
+ - `tick` events (or WS ping/pong) are emitted periodically so clients know the Gateway is alive even when no traffic occurs.
146
+ - Send/agent acknowledgements remain separate responses; do not overload ticks for sends.
147
+
148
+ ## Replay / gaps
149
+ - Events are not replayed. Clients detect seq gaps and should refresh (`health` + `system-presence`) before continuing. WebChat and macOS clients now auto-refresh on gap.
150
+
151
+ ## Supervision (macOS example)
152
+ - Use launchd to keep the daemon alive:
153
+ - Program: path to `nexus`
154
+ - Arguments: `gateway`
155
+ - KeepAlive: true
156
+ - StandardOut/Err: file paths or `syslog`
157
+ - On failure, launchd restarts; fatal misconfig should keep exiting so the operator notices.
158
+ - LaunchAgents are per-user and require a logged-in session; for headless setups use a custom LaunchDaemon (not shipped).
159
+
160
+ Bundled mac app:
161
+ - Nexus.app can bundle a bun-compiled gateway binary and install a per-user LaunchAgent labeled `com.nexus.gateway`.
162
+ - To stop it cleanly, use `nexus gateway stop` (or `launchctl bootout gui/$UID/com.nexus.gateway`).
163
+ - To restart, use `nexus gateway restart` (or `launchctl kickstart -k gui/$UID/com.nexus.gateway`).
164
+
165
+ ## Supervision (systemd user unit)
166
+ Create `~/.config/systemd/user/nexus-gateway.service`:
167
+ ```
168
+ [Unit]
169
+ Description=Nexus Gateway
170
+ After=network-online.target
171
+ Wants=network-online.target
172
+
173
+ [Service]
174
+ ExecStart=/usr/local/bin/nexus gateway --port 18789
175
+ Restart=always
176
+ RestartSec=5
177
+ Environment=NEXUS_GATEWAY_TOKEN=
178
+ WorkingDirectory=/home/youruser
179
+
180
+ [Install]
181
+ WantedBy=default.target
182
+ ```
183
+ Enable lingering (required so the user service survives logout/idle):
184
+ ```
185
+ sudo loginctl enable-linger youruser
186
+ ```
187
+ Onboarding runs this on Linux (may prompt for sudo; writes `/var/lib/systemd/linger`).
188
+ Then enable the service:
189
+ ```
190
+ systemctl --user enable --now nexus-gateway.service
191
+ ```
192
+
193
+ **Alternative (system service)** - for always-on or multi-user servers, you can
194
+ install a systemd **system** unit instead of a user unit (no lingering needed).
195
+ Create `/etc/systemd/system/nexus-gateway.service` (copy the unit above,
196
+ switch `WantedBy=multi-user.target`, set `User=` + `WorkingDirectory=`), then:
197
+ ```
198
+ sudo systemctl daemon-reload
199
+ sudo systemctl enable --now nexus-gateway.service
200
+ ```
201
+
202
+ ## Supervision (Windows scheduled task)
203
+ - Onboarding installs a Scheduled Task named `Nexus Gateway` (runs on user logon).
204
+ - Requires a logged-in user session; for headless setups use a system service or a task configured to run without a logged-in user (not shipped).
205
+
206
+ ## Operational checks
207
+ - Liveness: open WS and send `req:connect` → expect `res` with `payload.type="hello-ok"` (with snapshot).
208
+ - Readiness: call `health` → expect `ok: true` and `web.linked=true`.
209
+ - Debug: subscribe to `tick` and `presence` events; ensure `status` shows linked/auth age; presence entries show Gateway host and connected clients.
210
+
211
+ ## Safety guarantees
212
+ - Only one Gateway per host; all sends/agent calls must go through it.
213
+ - No fallback to direct Baileys connections; if the Gateway is down, sends fail fast.
214
+ - Non-connect first frames or malformed JSON are rejected and the socket is closed.
215
+ - Graceful shutdown: emit `shutdown` event before closing; clients must handle close + reconnect.
216
+
217
+ ## CLI helpers
218
+ - `nexus gateway health|status` — request health/status over the Gateway WS.
219
+ - `nexus gateway send --to <num> --message "hi" [--media-url ...]` — send via Gateway (idempotent).
220
+ - `nexus gateway agent --message "hi" [--to ...]` — run an agent turn (waits for final by default).
221
+ - `nexus gateway call <method> --params '{"k":"v"}'` — raw method invoker for debugging.
222
+ - `nexus gateway stop|restart` — stop/restart the supervised gateway service (launchd/systemd/schtasks).
223
+ - Gateway helper subcommands assume a running gateway on `--url`; they no longer auto-spawn one.
224
+
225
+ ## Migration guidance
226
+ - Retire uses of `nexus gateway` and the legacy TCP control port.
227
+ - Update clients to speak the WS protocol with mandatory connect and structured presence.