@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
package/docs/index.md ADDED
@@ -0,0 +1,196 @@
1
+ ---
2
+ summary: "Top-level overview of Nexus, features, and purpose"
3
+ read_when:
4
+ - Introducing Nexus to newcomers
5
+ ---
6
+ # NEXUS 🦞
7
+
8
+ > *"EXFOLIATE! EXFOLIATE!"* — A space lobster, probably
9
+
10
+ <p align="center">
11
+ <img src="whatsapp-nexus.jpg" alt="NEXUS" width="420" />
12
+ </p>
13
+
14
+ <p align="center">
15
+ <strong>Any OS + WhatsApp/Telegram/Discord/iMessage gateway for AI agents (Pi).</strong><br />
16
+ Send a message, get an agent response — from your pocket.
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="https://github.com/nexus/nexus">GitHub</a> ·
21
+ <a href="https://github.com/nexus/nexus/releases">Releases</a> ·
22
+ <a href="https://docs.nexus.bot">Docs</a> ·
23
+ <a href="https://docs.nexus.bot/nexus">Nexus setup</a>
24
+ </p>
25
+
26
+ NEXUS bridges WhatsApp (via WhatsApp Web / Baileys), Telegram (Bot API / grammY), Discord (Bot API / discord.js), and iMessage (imsg CLI) to coding agents like [Pi](https://github.com/badlogic/pi-mono).
27
+ It’s built for [Nexus](https://nexus.me), a space lobster who needed a TARDIS.
28
+
29
+ ## How it works
30
+
31
+ ```
32
+ WhatsApp / Telegram / Discord
33
+
34
+
35
+ ┌──────────────────────────┐
36
+ │ Gateway │ ws://127.0.0.1:18789 (loopback-only)
37
+ │ (single source) │ tcp://0.0.0.0:18790 (Bridge)
38
+ │ │ http://<gateway-host>:18793/__nexus__/canvas/ (Canvas host)
39
+ └───────────┬───────────────┘
40
+
41
+ ├─ Pi agent (RPC)
42
+ ├─ CLI (nexus …)
43
+ ├─ Chat UI (SwiftUI)
44
+ ├─ macOS app (Nexus.app)
45
+ ├─ iOS node via Bridge + pairing
46
+ └─ Android node via Bridge + pairing
47
+ ```
48
+
49
+ Most operations flow through the **Gateway** (`nexus gateway`), a single long-running process that owns provider connections and the WebSocket control plane.
50
+
51
+ ## Network model
52
+
53
+ - **One Gateway per host**: it is the only process allowed to own the WhatsApp Web session.
54
+ - **Loopback-first**: Gateway WS defaults to `ws://127.0.0.1:18789`.
55
+ - For Tailnet access, run `nexus gateway --bind tailnet --token ...` (token is required for non-loopback binds).
56
+ - **Bridge for nodes**: optional LAN/tailnet-facing bridge on `tcp://0.0.0.0:18790` for paired nodes (Bonjour-discoverable).
57
+ - **Canvas host**: HTTP file server on `canvasHost.port` (default `18793`), serving `/__nexus__/canvas/` for node WebViews; see [`docs/configuration.md`](https://docs.nexus.bot/configuration) (`canvasHost`).
58
+ - **Remote use**: SSH tunnel or tailnet/VPN; see [`docs/remote.md`](https://docs.nexus.bot/remote) and [`docs/discovery.md`](https://docs.nexus.bot/discovery).
59
+
60
+ ## Features (high level)
61
+
62
+ - 📱 **WhatsApp Integration** — Uses Baileys for WhatsApp Web protocol
63
+ - ✈️ **Telegram Bot** — DMs + groups via grammY
64
+ - 🎮 **Discord Bot** — DMs + guild channels via discord.js
65
+ - 💬 **iMessage** — Local imsg CLI integration (macOS)
66
+ - 🤖 **Agent bridge** — Pi (RPC mode) with tool streaming
67
+ - 🧠 **Multi-agent routing** — Route provider accounts/peers to isolated agents (workspace + per-agent sessions)
68
+ - 🔐 **Subscription auth** — Anthropic (Claude Pro/Max) + OpenAI (ChatGPT/Codex) via OAuth
69
+ - 💬 **Sessions** — Direct chats collapse into shared `main` (default); groups are isolated
70
+ - 👥 **Group Chat Support** — Mention-based by default; owner can toggle `/activation always|mention`
71
+ - 📎 **Media Support** — Send and receive images, audio, documents
72
+ - 🎤 **Voice notes** — Optional transcription hook
73
+ - 🖥️ **WebChat + macOS app** — Local UI + menu bar companion for ops and voice wake
74
+ - 📱 **iOS node** — Pairs as a node and exposes a Canvas surface
75
+ - 📱 **Android node** — Pairs as a node and exposes Canvas + Chat + Camera
76
+
77
+ Note: legacy Claude/Codex/Gemini/Opencode paths have been removed; Pi is the only coding-agent path.
78
+
79
+ ## Quick start
80
+
81
+ Runtime requirement: **Node ≥ 22**.
82
+
83
+ ```bash
84
+ # From source (recommended while the npm package is still settling)
85
+ pnpm install
86
+ pnpm build
87
+ pnpm link --global
88
+
89
+ # Pair WhatsApp Web (shows QR)
90
+ nexus login
91
+
92
+ # Run the Gateway (leave running)
93
+ nexus gateway --port 18789
94
+ ```
95
+
96
+ Multi-instance quickstart (optional):
97
+
98
+ ```bash
99
+ NEXUS_CONFIG_PATH=~/nexus/state/a.json \
100
+ NEXUS_STATE_DIR=~/nexus/state-a \
101
+ nexus gateway --port 19001
102
+ ```
103
+
104
+ Send a test message (requires a running Gateway):
105
+
106
+ ```bash
107
+ nexus send --to +15555550123 --message "Hello from NEXUS"
108
+ ```
109
+
110
+ ## Configuration (optional)
111
+
112
+ Config lives at `~/nexus/state/nexus.json`.
113
+
114
+ - If you **do nothing**, NEXUS uses the bundled Pi binary in RPC mode with per-sender sessions.
115
+ - If you want to lock it down, start with `whatsapp.allowFrom` and (for groups) mention rules.
116
+
117
+ Example:
118
+
119
+ ```json5
120
+ {
121
+ whatsapp: {
122
+ allowFrom: ["+15555550123"],
123
+ groups: { "*": { requireMention: true } }
124
+ },
125
+ routing: { groupChat: { mentionPatterns: ["@nexus"] } }
126
+ }
127
+ ```
128
+
129
+ ## Docs
130
+
131
+ - Start here:
132
+ - [Docs hubs (all pages linked)](https://docs.nexus.bot/hubs)
133
+ - [FAQ](https://docs.nexus.bot/faq) ← *common questions answered*
134
+ - [Configuration](https://docs.nexus.bot/configuration)
135
+ - [Multi-agent routing](https://docs.nexus.bot/multi-agent)
136
+ - [Updating / rollback](https://docs.nexus.bot/updating)
137
+ - [Pairing (DM + nodes)](https://docs.nexus.bot/pairing)
138
+ - [Nix mode](https://docs.nexus.bot/nix)
139
+ - [Nexus personal assistant setup](https://docs.nexus.bot/nexus)
140
+ - [Skills](https://docs.nexus.bot/skills)
141
+ - [Skills config](https://docs.nexus.bot/skills-config)
142
+ - [Workspace templates](https://docs.nexus.bot/templates/AGENTS)
143
+ - [RPC adapters](https://docs.nexus.bot/rpc)
144
+ - [Gateway runbook](https://docs.nexus.bot/gateway)
145
+ - [Nodes (iOS/Android)](https://docs.nexus.bot/nodes)
146
+ - [Web surfaces (Control UI)](https://docs.nexus.bot/web)
147
+ - [Discovery + transports](https://docs.nexus.bot/discovery)
148
+ - [Remote access](https://docs.nexus.bot/remote)
149
+ - Providers and UX:
150
+ - [WebChat](https://docs.nexus.bot/webchat)
151
+ - [Control UI (browser)](https://docs.nexus.bot/control-ui)
152
+ - [Telegram](https://docs.nexus.bot/telegram)
153
+ - [Discord](https://docs.nexus.bot/discord)
154
+ - [iMessage](https://docs.nexus.bot/imessage)
155
+ - [Groups](https://docs.nexus.bot/groups)
156
+ - [WhatsApp group messages](https://docs.nexus.bot/group-messages)
157
+ - [Media: images](https://docs.nexus.bot/images)
158
+ - [Media: audio](https://docs.nexus.bot/audio)
159
+ - Companion apps:
160
+ - [macOS app](https://docs.nexus.bot/macos)
161
+ - [iOS app](https://docs.nexus.bot/ios)
162
+ - [Android app](https://docs.nexus.bot/android)
163
+ - [Windows app](https://docs.nexus.bot/windows)
164
+ - [Linux app](https://docs.nexus.bot/linux)
165
+ - Ops and safety:
166
+ - [Sessions](https://docs.nexus.bot/session)
167
+ - [Cron + wakeups](https://docs.nexus.bot/cron)
168
+ - [Security](https://docs.nexus.bot/security)
169
+ - [Troubleshooting](https://docs.nexus.bot/troubleshooting)
170
+
171
+ ## The name
172
+
173
+ **NEXUS = CLAW + TARDIS** — because every space lobster needs a time-and-space machine.
174
+
175
+ ---
176
+
177
+ *"We're all just playing with our own prompts."* — an AI, probably high on tokens
178
+
179
+ ## Credits
180
+
181
+ - **Peter Steinberger** ([@steipete](https://twitter.com/steipete)) — Creator, lobster whisperer
182
+ - **Mario Zechner** ([@badlogicc](https://twitter.com/badlogicgames)) — Pi creator, security pen-tester
183
+ - **Nexus** — The space lobster who demanded a better name
184
+
185
+ ## Core Contributors
186
+
187
+ - **Maxim Vovshin** (@Hyaxia, 36747317+Hyaxia@users.noreply.github.com) — Blogwatcher skill
188
+ - **Nacho Iacovino** (@nachoiacovino, nacho.iacovino@gmail.com) — Location parsing (Telegram + WhatsApp)
189
+
190
+ ## License
191
+
192
+ MIT — Free as a lobster in the ocean 🦞
193
+
194
+ ---
195
+
196
+ *"We're all just playing with our own prompts."* — An AI, probably high on tokens
package/docs/ios.md ADDED
@@ -0,0 +1,372 @@
1
+ ---
2
+ summary: "iOS app (node): architecture + connection runbook"
3
+ read_when:
4
+ - Pairing or reconnecting the iOS node
5
+ - Debugging iOS bridge discovery or auth
6
+ - Sending screen/canvas commands to iOS
7
+ - Designing iOS node + gateway integration
8
+ - Extending the Gateway protocol for node/canvas commands
9
+ - Implementing Bonjour pairing or transport security
10
+ ---
11
+ # iOS App (Node)
12
+
13
+ Status: prototype implemented (internal) · Date: 2025-12-13
14
+
15
+ ## Connection Runbook
16
+
17
+ This is the practical “how do I connect the iOS node” guide:
18
+
19
+ **iOS app** ⇄ (Bonjour + TCP bridge) ⇄ **Gateway bridge** ⇄ (loopback WS) ⇄ **Gateway**
20
+
21
+ The Gateway WebSocket stays loopback-only (`ws://127.0.0.1:18789`). The iOS node talks to the LAN-facing **bridge** (default `tcp://0.0.0.0:18790`) and uses Gateway-owned pairing.
22
+
23
+ ### Prerequisites
24
+
25
+ - You can run the Gateway on the “master” machine.
26
+ - iOS node app can reach the gateway bridge:
27
+ - Same LAN with Bonjour/mDNS, **or**
28
+ - Same Tailscale tailnet using Wide-Area Bonjour / unicast DNS-SD (see below), **or**
29
+ - Manual bridge host/port (fallback)
30
+ - You can run the CLI (`nexus`) on the gateway machine (or via SSH).
31
+
32
+ ### 1) Start the Gateway (with bridge enabled)
33
+
34
+ Bridge is enabled by default (disable via `NEXUS_BRIDGE_ENABLED=0`).
35
+
36
+ ```bash
37
+ pnpm nexus gateway --port 18789 --verbose
38
+ ```
39
+
40
+ Confirm in logs you see something like:
41
+ - `bridge listening on tcp://0.0.0.0:18790 (node)`
42
+
43
+ For tailnet-only setups (recommended for Vienna ⇄ London), bind the bridge to the gateway machine’s Tailscale IP instead:
44
+
45
+ - Set `bridge.bind: "tailnet"` in `~/nexus/state/nexus.json` on the gateway host.
46
+ - Restart the Gateway / macOS menubar app.
47
+
48
+ ### 2) Verify Bonjour discovery (optional but recommended)
49
+
50
+ From the gateway machine:
51
+
52
+ ```bash
53
+ dns-sd -B _nexus-bridge._tcp local.
54
+ ```
55
+
56
+ You should see your gateway advertising `_nexus-bridge._tcp`.
57
+
58
+ If browse works, but the iOS node can’t connect, try resolving one instance:
59
+
60
+ ```bash
61
+ dns-sd -L "<instance name>" _nexus-bridge._tcp local.
62
+ ```
63
+
64
+ More debugging notes: [`docs/bonjour.md`](https://docs.nexus.bot/bonjour).
65
+
66
+ #### Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD
67
+
68
+ If the iOS node and the gateway are on different networks but connected via Tailscale, multicast mDNS won’t cross the boundary. Use Wide-Area Bonjour / unicast DNS-SD instead:
69
+
70
+ 1) Set up a DNS-SD zone (example `nexus.internal.`) on the gateway host and publish `_nexus-bridge._tcp` records.
71
+ 2) Configure Tailscale split DNS for `nexus.internal` pointing at that DNS server.
72
+
73
+ Details and example CoreDNS config: [`docs/bonjour.md`](https://docs.nexus.bot/bonjour).
74
+
75
+ ### 3) Connect from the iOS node app
76
+
77
+ In the iOS node app:
78
+ - Pick the discovered bridge (or hit refresh).
79
+ - If not paired yet, it will initiate pairing automatically.
80
+ - After the first successful pairing, it will auto-reconnect **strictly to the last discovered gateway** on launch (including after reinstall), as long as the iOS Keychain entry is still present.
81
+
82
+ #### Connection indicator (always visible)
83
+
84
+ The Settings tab icon shows a small status dot:
85
+ - **Green**: connected to the bridge
86
+ - **Yellow**: connecting (subtle pulse)
87
+ - **Red**: not connected / error
88
+
89
+ ### 4) Approve pairing (CLI)
90
+
91
+ On the gateway machine:
92
+
93
+ ```bash
94
+ nexus nodes pending
95
+ ```
96
+
97
+ Approve the request:
98
+
99
+ ```bash
100
+ nexus nodes approve <requestId>
101
+ ```
102
+
103
+ After approval, the iOS node receives/stores the token and reconnects authenticated.
104
+
105
+ Pairing details: [`docs/gateway/pairing.md`](https://docs.nexus.bot/gateway/pairing).
106
+
107
+ ### 5) Verify the node is connected
108
+
109
+ - In the macOS app: **Instances** tab should show something like `iOS Node (...)` with a green “Active” presence dot shortly after connect.
110
+ - Via nodes status (paired + connected):
111
+ ```bash
112
+ nexus nodes status
113
+ ```
114
+ - Via Gateway (paired + connected):
115
+ ```bash
116
+ nexus gateway call node.list --params "{}"
117
+ ```
118
+ - Via Gateway presence (legacy-ish, still useful):
119
+ ```bash
120
+ nexus gateway call system-presence --params "{}"
121
+ ```
122
+ Look for the node `instanceId` (often a UUID).
123
+
124
+ ### 6) Drive the iOS Canvas (draw / snapshot)
125
+
126
+ The iOS node runs a WKWebView “Canvas” scaffold which exposes:
127
+ - `window.__nexus.canvas`
128
+ - `window.__nexus.ctx` (2D context)
129
+ - `window.__nexus.setStatus(title, subtitle)`
130
+
131
+ #### Gateway Canvas Host (recommended for web content)
132
+
133
+ If you want the node to show real HTML/CSS/JS that the agent can edit on disk, point it at the Gateway canvas host.
134
+
135
+ Note: nodes always use the standalone canvas host on `canvasHost.port` (default `18793`), bound to the bridge interface.
136
+
137
+ 1) Create `~/nexus/canvas/index.html` on the gateway host.
138
+
139
+ 2) Navigate the node to it (LAN):
140
+
141
+ ```bash
142
+ nexus nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__nexus__/canvas/"}'
143
+ ```
144
+
145
+ Notes:
146
+ - The server injects a live-reload client into HTML and reloads on file changes.
147
+ - A2UI is hosted on the same canvas host at `http://<gateway-host>:18793/__nexus__/a2ui/`.
148
+ - Tailnet (optional): if both devices are on Tailscale, use a MagicDNS name or tailnet IP instead of `.local`, e.g. `http://<gateway-magicdns>:18793/__nexus__/canvas/`.
149
+ - iOS may require App Transport Security allowances to load plain `http://` URLs; if it fails to load, prefer HTTPS or adjust the iOS app’s ATS config.
150
+
151
+ #### Draw with `canvas.eval`
152
+
153
+ ```bash
154
+ nexus nodes invoke --node "iOS Node" --command canvas.eval --params "$(cat <<'JSON'
155
+ {"javaScript":"(() => { const {ctx,setStatus} = window.__nexus; setStatus('Drawing','…'); ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle='#ff2d55'; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); setStatus(null,null); return 'ok'; })()"}
156
+ JSON
157
+ )"
158
+ ```
159
+
160
+ #### Snapshot with `canvas.snapshot`
161
+
162
+ ```bash
163
+ nexus nodes invoke --node 192.168.0.88 --command canvas.snapshot --params '{"maxWidth":900}'
164
+ ```
165
+
166
+ The response includes `{ format, base64 }` image data (default `format="jpeg"`; pass `{"format":"png"}` when you specifically need lossless PNG).
167
+
168
+ ### Common gotchas
169
+
170
+ - **iOS in background:** all `canvas.*` commands fail fast with `NODE_BACKGROUND_UNAVAILABLE` (bring the iOS node app to foreground).
171
+ - **Return to default scaffold:** `canvas.navigate` with `{"url":""}` or `{"url":"/"}` returns to the built-in scaffold page.
172
+ - **mDNS blocked:** some networks block multicast; use a different LAN or plan a tailnet-capable bridge (see [`docs/discovery.md`](https://docs.nexus.bot/discovery)).
173
+ - **Wrong node selector:** `--node` can be the node id (UUID), display name (e.g. `iOS Node`), IP, or an unambiguous prefix. If it’s ambiguous, the CLI will tell you.
174
+ - **Stale pairing / Keychain cleared:** if the pairing token is missing (or iOS Keychain was wiped), the node must pair again; approve a new pending request.
175
+ - **App reinstall but no reconnect:** the node restores `instanceId` + last bridge preference from Keychain; if it still comes up “unpaired”, verify Keychain persistence on your device/simulator and re-pair once.
176
+
177
+ ## Design + Architecture
178
+
179
+ ### Goals
180
+ - Build an **iOS app** that acts as a **remote node** for Nexus:
181
+ - **Voice trigger** (wake-word / always-listening intent) that forwards transcripts to the Gateway `agent` method.
182
+ - **Canvas** surface that the agent can control: navigate, draw/render, evaluate JS, snapshot.
183
+ - **Dead-simple setup**:
184
+ - Auto-discover the host on the local network via **Bonjour**.
185
+ - One-tap pairing with an approval prompt on the Mac.
186
+ - iOS is **never** a local gateway; it is always a remote node.
187
+ - Operational clarity:
188
+ - When iOS is backgrounded, voice may still run; **canvas commands must fail fast** with a structured error.
189
+ - Provide **settings**: node display name, enable/disable voice wake, pairing status.
190
+
191
+ Non-goals (v1):
192
+ - Exposing the Node Gateway directly on the LAN.
193
+ - Supporting arbitrary third-party “plugins” on iOS.
194
+ - Perfect App Store compliance; this is **internal-only** initially.
195
+
196
+ ### Current repo reality (constraints we respect)
197
+ - The Gateway WebSocket server binds to `127.0.0.1:18789` (`src/gateway/server.ts`) with an optional `NEXUS_GATEWAY_TOKEN`.
198
+ - The Gateway exposes a Canvas file server (`canvasHost`) on `canvasHost.port` (default `18793`), so nodes can `canvas.navigate` to `http://<lanHost>:18793/__nexus__/canvas/` and auto-reload on file changes ([`docs/configuration.md`](https://docs.nexus.bot/configuration)).
199
+ - macOS “Canvas” is controlled via the Gateway node protocol (`canvas.*`), matching iOS/Android ([`docs/mac/canvas.md`](https://docs.nexus.bot/mac/canvas)).
200
+ - Voice wake forwards via `GatewayChannel` to Gateway `agent` (mac app: `VoiceWakeForwarder` → `GatewayConnection.sendAgent`).
201
+
202
+ ### Recommended topology (B): Gateway-owned Bridge + loopback Gateway
203
+ Keep the Node gateway loopback-only; expose a dedicated **gateway-owned bridge** to the LAN/tailnet.
204
+
205
+ **iOS App** ⇄ (TLS + pairing) ⇄ **Bridge (in gateway)** ⇄ (loopback) ⇄ **Gateway WS** (`ws://127.0.0.1:18789`)
206
+
207
+ Why:
208
+ - Preserves current threat model: Gateway remains local-only.
209
+ - Centralizes auth, rate limiting, and allowlisting in the bridge.
210
+ - Lets us unify “canvas node” semantics across mac + iOS without exposing raw gateway methods.
211
+
212
+ ### Security plan (internal, but still robust)
213
+ #### Transport
214
+ - **Current (v0):** bridge is a LAN-facing **TCP** listener with token-based auth after pairing.
215
+ - **Next:** wrap the bridge in **TLS** and prefer key-pinned or mTLS-like auth after pairing.
216
+
217
+ #### Pairing
218
+ - Bonjour discovery shows a candidate “Nexus Bridge” on the LAN.
219
+ - First connection:
220
+ 1) iOS generates a keypair (Secure Enclave if available).
221
+ 2) iOS connects to the bridge and requests pairing.
222
+ 3) The bridge forwards the pairing request to the **Gateway** as a *pending request*.
223
+ 4) Approval can happen via:
224
+ - **macOS UI** (Nexus shows an alert with Approve/Reject/Later, including the node IP), or
225
+ - **Terminal/CLI** (headless flows).
226
+ 5) Once approved, the bridge returns a token to iOS; iOS stores it in Keychain.
227
+ - Subsequent connections:
228
+ - The bridge requires the paired identity. Unpaired clients get a structured “not paired” error and no access.
229
+
230
+ ##### Gateway-owned pairing (Option B details)
231
+ Pairing decisions must be owned by the Gateway (`nexus` / Node) so nodes can be approved without the macOS app running.
232
+
233
+ Key idea:
234
+ - The Swift app may still show an alert, but it is only a **frontend** for pending requests stored in the Gateway.
235
+
236
+ Desired behavior:
237
+ - If the Swift UI is present: show alert with Approve/Reject/Later.
238
+ - If the Swift UI is not present: `nexus` CLI can list pending requests and approve/reject.
239
+
240
+ See [`docs/gateway/pairing.md`](https://docs.nexus.bot/gateway/pairing) for the API/events and storage.
241
+
242
+ CLI (headless approvals):
243
+ - `nexus nodes pending`
244
+ - `nexus nodes approve <requestId>`
245
+ - `nexus nodes reject <requestId>`
246
+
247
+ #### Authorization / scope control (bridge-side ACL)
248
+ The bridge must not be a raw proxy to every gateway method.
249
+
250
+ - Allow by default:
251
+ - `agent` (with guardrails; idempotency required)
252
+ - minimal `system-event` beacons (presence updates for the node)
253
+ - node/canvas methods defined below (new protocol surface)
254
+ - Deny by default:
255
+ - anything that widens control without explicit intent (future “shell”, “files”, etc.)
256
+ - Rate limit:
257
+ - handshake attempts
258
+ - voice forwards per minute
259
+ - snapshot frequency / payload size
260
+
261
+ ### Protocol unification: add “node/canvas” to Gateway protocol
262
+ #### Principle
263
+ Unify mac Canvas + iOS Canvas under a single conceptual surface:
264
+ - The agent talks to the Gateway using a stable method set (typed protocol).
265
+ - The Gateway routes node-targeted requests to:
266
+ - local mac Canvas implementation, or
267
+ - remote iOS node via the bridge
268
+
269
+ #### Minimal protocol additions (v1)
270
+ Add to `src/gateway/protocol/schema.ts` (and regenerate Swift models):
271
+
272
+ **Identity**
273
+ - Node identity comes from `connect.params.client.instanceId` (stable), and `connect.params.client.mode = "node"` (or `"ios-node"`).
274
+
275
+ **Methods**
276
+ - `node.list` → list paired/connected nodes + capabilities
277
+ - `node.describe` → describe a node (capabilities + supported `node.invoke` commands)
278
+ - `node.invoke` → send a command to a specific node
279
+ - Params: `{ nodeId, command, params?, timeoutMs? }`
280
+
281
+ **Events**
282
+ - `node.event` → async node status/errors
283
+ - e.g. background/foreground transitions, voice availability, canvas availability
284
+
285
+ #### Node command set (canvas)
286
+ These are values for `node.invoke.command`:
287
+ - `canvas.present` / `canvas.hide`
288
+ - `canvas.navigate` with `{ url }` (loads a URL; use `""` or `"/"` to return to the default scaffold)
289
+ - `canvas.eval` with `{ javaScript }`
290
+ - `canvas.snapshot` with `{ maxWidth?, quality?, format? }`
291
+ - A2UI (mobile + macOS canvas):
292
+ - `canvas.a2ui.push` with `{ messages: [...] }` (A2UI v0.8 server→client messages)
293
+ - `canvas.a2ui.pushJSONL` with `{ jsonl: "..." }` (legacy alias)
294
+ - `canvas.a2ui.reset`
295
+ - A2UI is hosted by the Gateway canvas host (`/__nexus__/a2ui/`) on `canvasHost.port`. Commands fail if the host is unreachable.
296
+
297
+ Result pattern:
298
+ - Request is a standard `req/res` with `ok` / `error`.
299
+ - Long operations (loads, streaming drawing, etc.) may also emit `node.event` progress.
300
+
301
+ ##### Current (implemented)
302
+ As of 2025-12-13, the Gateway supports `node.invoke` for bridge-connected nodes.
303
+
304
+ Example: draw a diagonal line on the iOS Canvas:
305
+ ```bash
306
+ nexus nodes invoke --node ios-node --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__nexus; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'
307
+ ```
308
+
309
+ ### Background behavior requirement
310
+ When iOS is backgrounded:
311
+ - Voice may still be active (subject to iOS suspension).
312
+ - **All `canvas.*` commands must fail** with a stable error code, e.g.:
313
+ - `NODE_BACKGROUND_UNAVAILABLE`
314
+ - Include `retryable: true` and `retryAfterMs` if we want the agent to wait.
315
+
316
+ ## iOS app architecture (SwiftUI)
317
+ ### App structure
318
+ - Single fullscreen Canvas surface (WKWebView).
319
+ - One settings entry point: a **gear button** that opens a settings sheet.
320
+ - All navigation is **agent-driven** (no local URL bar).
321
+
322
+ ### Components
323
+ - `BridgeDiscovery`: Bonjour browse + resolve (Network.framework `NWBrowser`)
324
+ - `BridgeConnection`: TCP session + pairing handshake + reconnect (TLS planned)
325
+ - `NodeRuntime`:
326
+ - Voice pipeline (wake-word + capture + forward)
327
+ - Canvas pipeline (WKWebView controller + snapshot + eval)
328
+ - Background state tracking; enforces “canvas unavailable in background”
329
+
330
+ ### Voice in background (internal)
331
+ - Enable background audio mode (and required session configuration) so the mic pipeline can keep running when the user switches apps.
332
+ - If iOS suspends the app anyway, surface a clear node status (`node.event`) so operators can see voice is unavailable.
333
+
334
+ ## Code sharing (macOS + iOS)
335
+ Create/expand SwiftPM targets so both apps share:
336
+ - `NexusProtocol` (generated models; platform-neutral)
337
+ - `NexusGatewayClient` (shared WS framing + connect/req/res + seq-gap handling)
338
+ - `NexusKit` (node/canvas command types + deep links + shared utilities)
339
+
340
+ macOS continues to own:
341
+ - local Canvas implementation details (custom scheme handler serving on-disk HTML, window/panel presentation)
342
+
343
+ iOS owns:
344
+ - iOS-specific audio/speech + WKWebView presentation and lifecycle
345
+
346
+ ## Repo layout
347
+ - iOS app: `apps/ios/` (XcodeGen `project.yml`)
348
+ - Shared Swift packages: `apps/shared/`
349
+ - Lint/format: iOS target runs `swiftformat --lint` + `swiftlint lint` using repo configs (`.swiftformat`, `.swiftlint.yml`).
350
+
351
+ Generate the Xcode project:
352
+ ```bash
353
+ cd apps/ios
354
+ xcodegen generate
355
+ open Nexus.xcodeproj
356
+ ```
357
+
358
+ ## Storage plan (private by default)
359
+ ### iOS
360
+ - Canvas/workspace files (persistent, private):
361
+ - `Application Support/Nexus/canvas/<sessionKey>/...`
362
+ - Snapshots / temp exports (evictable):
363
+ - `Library/Caches/Nexus/canvas-snapshots/<sessionKey>/...`
364
+ - Credentials:
365
+ - Keychain (paired identity + bridge trust anchor)
366
+
367
+ ## Related docs
368
+
369
+ - [`docs/gateway.md`](https://docs.nexus.bot/gateway) (gateway runbook)
370
+ - [`docs/gateway/pairing.md`](https://docs.nexus.bot/gateway/pairing) (approval + storage)
371
+ - [`docs/bonjour.md`](https://docs.nexus.bot/bonjour) (discovery debugging)
372
+ - [`docs/discovery.md`](https://docs.nexus.bot/discovery) (LAN vs tailnet vs SSH)
package/docs/linux.md ADDED
@@ -0,0 +1,11 @@
1
+ ---
2
+ summary: "Linux app status + contribution call"
3
+ read_when:
4
+ - Looking for Linux companion app status
5
+ - Planning platform coverage or contributions
6
+ ---
7
+ # Linux App
8
+
9
+ Nexus core is fully supported on Linux. The core is written in TypeScript, so it runs anywhere Node runs.
10
+
11
+ We do not have a Linux companion app yet. It is planned, and we would love contributions to make it happen.
@@ -0,0 +1,95 @@
1
+ ---
2
+ summary: "Location command for nodes (location.get), permission modes, and background behavior"
3
+ read_when:
4
+ - Adding location node support or permissions UI
5
+ - Designing background location + push flows
6
+ ---
7
+
8
+ # Location command (nodes)
9
+
10
+ ## TL;DR
11
+ - `location.get` is a node command (via `node.invoke`).
12
+ - Off by default.
13
+ - Settings use a selector: Off / While Using / Always.
14
+ - Separate toggle: Precise Location.
15
+
16
+ ## Why a selector (not just a switch)
17
+ OS permissions are multi-level. We can expose a selector in-app, but the OS still decides the actual grant.
18
+ - iOS/macOS: user can choose **While Using** or **Always** in system prompts/Settings. App can request upgrade, but OS may require Settings.
19
+ - Android: background location is a separate permission; on Android 10+ it often requires a Settings flow.
20
+ - Precise location is a separate grant (iOS 14+ “Precise”, Android “fine” vs “coarse”).
21
+
22
+ Selector in UI drives our requested mode; actual grant lives in OS settings.
23
+
24
+ ## Settings model
25
+ Per node device:
26
+ - `location.enabledMode`: `off | whileUsing | always`
27
+ - `location.preciseEnabled`: bool
28
+
29
+ UI behavior:
30
+ - Selecting `whileUsing` requests foreground permission.
31
+ - Selecting `always` first ensures `whileUsing`, then requests background (or sends user to Settings if required).
32
+ - If OS denies requested level, revert to the highest granted level and show status.
33
+
34
+ ## Permissions mapping (node.permissions)
35
+ Optional. macOS node reports `location` via the permissions map; iOS/Android may omit it.
36
+
37
+ ## Command: `location.get`
38
+ Called via `node.invoke`.
39
+
40
+ Params (suggested):
41
+ ```json
42
+ {
43
+ "timeoutMs": 10000,
44
+ "maxAgeMs": 15000,
45
+ "desiredAccuracy": "coarse|balanced|precise"
46
+ }
47
+ ```
48
+
49
+ Response payload:
50
+ ```json
51
+ {
52
+ "lat": 48.20849,
53
+ "lon": 16.37208,
54
+ "accuracyMeters": 12.5,
55
+ "altitudeMeters": 182.0,
56
+ "speedMps": 0.0,
57
+ "headingDeg": 270.0,
58
+ "timestamp": "2026-01-03T12:34:56.000Z",
59
+ "isPrecise": true,
60
+ "source": "gps|wifi|cell|unknown"
61
+ }
62
+ ```
63
+
64
+ Errors (stable codes):
65
+ - `LOCATION_DISABLED`: selector is off.
66
+ - `LOCATION_PERMISSION_REQUIRED`: permission missing for requested mode.
67
+ - `LOCATION_BACKGROUND_UNAVAILABLE`: app is backgrounded but only While Using allowed.
68
+ - `LOCATION_TIMEOUT`: no fix in time.
69
+ - `LOCATION_UNAVAILABLE`: system failure / no providers.
70
+
71
+ ## Background behavior (future)
72
+ Goal: model can request location even when node is backgrounded, but only when:
73
+ - User selected **Always**.
74
+ - OS grants background location.
75
+ - App is allowed to run in background for location (iOS background mode / Android foreground service or special allowance).
76
+
77
+ Push-triggered flow (future):
78
+ 1) Gateway sends a push to the node (silent push or FCM data).
79
+ 2) Node wakes briefly and calls `location.get` internally.
80
+ 3) Node forwards payload to Gateway.
81
+
82
+ Notes:
83
+ - iOS: Always permission + background location mode required. Silent push may be throttled; expect intermittent failures.
84
+ - Android: background location may require a foreground service; otherwise, expect denial.
85
+
86
+ ## Model/tooling integration
87
+ - Tool surface: `nodes` tool adds `location_get` action (node required).
88
+ - CLI: `nexus nodes location get --node <id>`.
89
+ - Agent guidelines: only call when user enabled location and understands the scope.
90
+
91
+ ## UX copy (suggested)
92
+ - Off: “Location sharing is disabled.”
93
+ - While Using: “Only when Nexus is open.”
94
+ - Always: “Allow background location. Requires system permission.”
95
+ - Precise: “Use precise GPS location. Toggle off to share approximate location.”