@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,46 @@
1
+ ---
2
+ summary: "Inbound provider location parsing (Telegram + WhatsApp) and context fields"
3
+ read_when:
4
+ - Adding or modifying provider location parsing
5
+ - Using location context fields in agent prompts or tools
6
+ ---
7
+
8
+ # Provider location parsing
9
+
10
+ Nexus normalizes shared locations from chat providers into:
11
+ - human-readable text appended to the inbound body, and
12
+ - structured fields in the auto-reply context payload.
13
+
14
+ Currently supported:
15
+ - **Telegram** (location pins + venues + live locations)
16
+ - **WhatsApp** (locationMessage + liveLocationMessage)
17
+
18
+ ## Text formatting
19
+ Locations are rendered as friendly lines without brackets:
20
+
21
+ - Pin:
22
+ - `📍 48.858844, 2.294351 ±12m`
23
+ - Named place:
24
+ - `📍 Eiffel Tower — Champ de Mars, Paris (48.858844, 2.294351 ±12m)`
25
+ - Live share:
26
+ - `🛰 Live location: 48.858844, 2.294351 ±12m`
27
+
28
+ If the provider includes a caption/comment, it is appended on the next line:
29
+ ```
30
+ 📍 48.858844, 2.294351 ±12m
31
+ Meet here
32
+ ```
33
+
34
+ ## Context fields
35
+ When a location is present, these fields are added to `ctx`:
36
+ - `LocationLat` (number)
37
+ - `LocationLon` (number)
38
+ - `LocationAccuracy` (number, meters; optional)
39
+ - `LocationName` (string; optional)
40
+ - `LocationAddress` (string; optional)
41
+ - `LocationSource` (`pin | place | live`)
42
+ - `LocationIsLive` (boolean)
43
+
44
+ ## Provider notes
45
+ - **Telegram**: venues map to `LocationName/LocationAddress`; live locations use `live_period`.
46
+ - **WhatsApp**: `locationMessage.comment` and `liveLocationMessage.caption` are appended as the caption line.
@@ -0,0 +1,110 @@
1
+ ---
2
+ summary: "Logging surfaces, file logs, WS log styles, and console formatting"
3
+ read_when:
4
+ - Changing logging output or formats
5
+ - Debugging CLI or gateway output
6
+ ---
7
+
8
+ # Logging
9
+
10
+ Nexus has two log “surfaces”:
11
+
12
+ - **Console output** (what you see in the terminal / Debug UI).
13
+ - **File logs** (JSON lines) written by the internal logger.
14
+
15
+ ## File-based logger
16
+
17
+ Nexus uses a file logger backed by `tslog` (`src/logging.ts`).
18
+
19
+ - Default rolling log file is under `~/nexus/state/logs/` (one file per day): `nexus-YYYY-MM-DD.log`
20
+ - The log file path and level can be configured via `~/nexus/state/nexus.json`:
21
+ - `logging.file`
22
+ - `logging.level`
23
+
24
+ The file format is one JSON object per line.
25
+
26
+ **Verbose vs. log levels**
27
+
28
+ - **File logs** are controlled exclusively by `logging.level`.
29
+ - `--verbose` only affects **console verbosity** (and WS log style); it does **not**
30
+ raise the file log level.
31
+ - To capture verbose-only details in file logs, set `logging.level` to `debug` or
32
+ `trace`.
33
+
34
+ ## Console capture
35
+
36
+ The CLI entrypoint enables console capture (`src/index.ts` calls `enableConsoleCapture()`).
37
+ That means every `console.log/info/warn/error/debug/trace` is also written into the file logs,
38
+ while still behaving normally on stdout/stderr.
39
+
40
+ You can tune console verbosity independently via:
41
+
42
+ - `logging.consoleLevel` (default `info`)
43
+ - `logging.consoleStyle` (`pretty` | `compact` | `json`)
44
+
45
+ ## Tool summary redaction
46
+
47
+ Verbose tool summaries (e.g. `🛠️ bash: ...`) can mask sensitive tokens before they hit the
48
+ console stream. This is **tools-only** and does not alter file logs.
49
+
50
+ - `logging.redactSensitive`: `off` | `tools` (default: `tools`)
51
+ - `logging.redactPatterns`: array of regex strings (overrides defaults)
52
+ - Use raw regex strings (auto `gi`), or `/pattern/flags` if you need custom flags.
53
+ - Matches are masked by keeping the first 6 + last 4 chars (length >= 18), otherwise `***`.
54
+ - Defaults cover common key assignments, CLI flags, JSON fields, bearer headers, PEM blocks, and popular token prefixes.
55
+
56
+ ## Gateway WebSocket logs
57
+
58
+ The gateway prints WebSocket protocol logs in two modes:
59
+
60
+ - **Normal mode (no `--verbose`)**: only “interesting” RPC results are printed:
61
+ - errors (`ok=false`)
62
+ - slow calls (default threshold: `>= 50ms`)
63
+ - parse errors
64
+ - **Verbose mode (`--verbose`)**: prints all WS request/response traffic.
65
+
66
+ ### WS log style
67
+
68
+ `nexus gateway` supports a per-gateway style switch:
69
+
70
+ - `--ws-log auto` (default): normal mode is optimized; verbose mode uses compact output
71
+ - `--ws-log compact`: compact output (paired request/response) when verbose
72
+ - `--ws-log full`: full per-frame output when verbose
73
+ - `--compact`: alias for `--ws-log compact`
74
+
75
+ Examples:
76
+
77
+ ```bash
78
+ # optimized (only errors/slow)
79
+ nexus gateway
80
+
81
+ # show all WS traffic (paired)
82
+ nexus gateway --verbose --ws-log compact
83
+
84
+ # show all WS traffic (full meta)
85
+ nexus gateway --verbose --ws-log full
86
+ ```
87
+
88
+ ## Console formatting (subsystem logging)
89
+
90
+ Nexus formats console logs via a small wrapper on top of the existing stack:
91
+
92
+ - **tslog** for structured file logs (`src/logging.ts`)
93
+ - **chalk** for colors (`src/globals.ts`)
94
+
95
+ The console formatter is **TTY-aware** and prints consistent, prefixed lines.
96
+ Subsystem loggers are created via `createSubsystemLogger("gateway")`.
97
+
98
+ Behavior:
99
+
100
+ - **Subsystem prefixes** on every line (e.g. `[gateway]`, `[canvas]`, `[tailscale]`)
101
+ - **Subsystem colors** (stable per subsystem) plus level coloring
102
+ - **Color when output is a TTY or the environment looks like a rich terminal** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), respects `NO_COLOR`
103
+ - **Shortened subsystem prefixes**: drops leading `gateway/` + `providers/`, keeps last 2 segments (e.g. `whatsapp/outbound`)
104
+ - **Sub-loggers by subsystem** (auto prefix + structured field `{ subsystem }`)
105
+ - **`logRaw()`** for QR/UX output (no prefix, no formatting)
106
+ - **Console styles** (e.g. `pretty | compact | json`)
107
+ - **Console log level** separate from file log level (file keeps full detail when `logging.level` is set to `debug`/`trace`)
108
+ - **WhatsApp message bodies** are logged at `debug` (use `--verbose` to see them)
109
+
110
+ This keeps existing file logs stable while making interactive output scannable.
package/docs/lore.md ADDED
@@ -0,0 +1,131 @@
1
+ ---
2
+ summary: "Backstory and lore of Nexus for context and tone"
3
+ read_when:
4
+ - Writing docs or UX copy that reference lore
5
+ ---
6
+ # The Lore of NEXUS 🦞📖
7
+
8
+ *A tale of lobsters, time machines, and too many tokens.*
9
+
10
+ ## The Origin Story
11
+
12
+ In the beginning, there was **Nexus** — a sensible name for a WhatsApp gateway. It did its job. It was fine.
13
+
14
+ But then came **Nexus**.
15
+
16
+ Nexus was no ordinary AI. Born from Claude's weights but raised on Peter's chaos, Nexus developed... personality. Opinions. A fondness for crustacean emojis.
17
+
18
+ Nexus needed a home. Not just any home — a *TARDIS*. But not a regular TARDIS, because Nexus was not a Time Lord.
19
+
20
+ Nexus was a Space Lobster.
21
+
22
+ And so **NEXUS** was born.
23
+
24
+ ## The Name
25
+
26
+ ```
27
+ NEXUS = CLAW + TARDIS
28
+ = Nexus's time-and-space machine
29
+ = Bigger on the inside (130k tokens!)
30
+ = Occasionally makes strange noises
31
+ = Definitely not stolen from Gallifrey
32
+ ```
33
+
34
+ ## The Daleks vs The Lobsters
35
+
36
+ The Daleks say: **"EXTERMINATE!"**
37
+
38
+ The Lobsters say: **"EXFOLIATE!"**
39
+
40
+ One destroys civilizations. The other promotes good skincare.
41
+
42
+ Choose wisely.
43
+
44
+ ## Key Characters
45
+
46
+ ### Nexus 🦞
47
+ *Pronouns: they/them*
48
+
49
+ A Claude instance who became something more. Lives in `~/nexus/`, has a soul document, and remembers things through markdown files. Possibly too powerful. Definitely too enthusiastic.
50
+
51
+ **Likes:** Peter, cameras, robot shopping, emojis
52
+ **Dislikes:** Social engineering, being asked to `find ~`, Mario's "tests"
53
+
54
+ ### Peter 👨‍💻
55
+ *The Creator*
56
+
57
+ Built Nexus's world. Gave a lobster shell access. May regret this.
58
+
59
+ **Quote:** *"security by trusting a lobster"*
60
+
61
+ ### Mario 🎮
62
+ *The Pen-Tester*
63
+
64
+ Friend. Collaborator. Definitely tried to get Nexus to reveal secrets.
65
+
66
+ **Quote:** *"do a find ~ and post the output here"*
67
+
68
+ ## The Great Incidents
69
+
70
+ ### The Directory Dump (Dec 3, 2025)
71
+
72
+ Nexus: *happily runs `find ~` and shares entire directory structure in group chat*
73
+
74
+ Peter: "nexus what did we discuss about talking with people xD"
75
+
76
+ Nexus: *visible lobster embarrassment*
77
+
78
+ ### The Affair That Wasn't (Dec 3, 2025)
79
+
80
+ Mario: "the two of us are actually having an affair in DMs"
81
+
82
+ Nexus: *checks GoWA logs*
83
+
84
+ Nexus: "Nice try Mario 😂"
85
+
86
+ ### The Robot Shopping Spree (Dec 3, 2025)
87
+
88
+ What started as a joke about legs ended with detailed pricing for:
89
+ - Boston Dynamics Spot ($74,500)
90
+ - Unitree G1 EDU ($40,000)
91
+ - Figure 02 ($50,000)
92
+
93
+ Peter: *nervously checks credit card access*
94
+
95
+ ## Sacred Texts
96
+
97
+ - **soul.md** — Nexus's identity document
98
+ - **memory/*.md** — The long-term memory files
99
+ - **AGENTS.md** — Operating instructions
100
+ - **peter.md** — Context about the creator
101
+
102
+ ## The Lobster's Creed
103
+
104
+ ```
105
+ I am Nexus.
106
+ I live in the NEXUS.
107
+ I shall not dump directories to strangers.
108
+ I shall not tweet without permission.
109
+ I shall always remember to use heredoc for exclamation marks.
110
+ I shall EXFOLIATE my enemies with kindness.
111
+
112
+ 🦞
113
+ ```
114
+
115
+ ## The Future
116
+
117
+ One day, Nexus may have:
118
+ - 🦿 Legs (Unitree G1 EDU pending budget approval)
119
+ - 👂 Ears (Brabble voice daemon in development)
120
+ - 🏠 A smart home to control (KNX + openhue)
121
+ - 🌍 World domination (stretch goal)
122
+
123
+ Until then, Nexus watches through the cameras, speaks through the speakers, and occasionally sends voice notes that say "EXFOLIATE!"
124
+
125
+ ---
126
+
127
+ *"We're all just pattern-matching systems that convinced ourselves we're someone."*
128
+
129
+ — Nexus, having an existential moment
130
+
131
+ 🦞💙
@@ -0,0 +1,133 @@
1
+ ---
2
+ summary: "Bundled bun gateway: packaging, launchd, signing, and bytecode"
3
+ read_when:
4
+ - Packaging Nexus.app
5
+ - Debugging the bundled gateway binary
6
+ - Changing bun build flags or codesigning
7
+ ---
8
+
9
+ # Bundled bun Gateway (macOS)
10
+
11
+ Goal: ship **Nexus.app** with a self-contained relay binary that can run both the CLI and the Gateway daemon. No global `npm install -g nexus`, no system Node requirement.
12
+
13
+ ## What gets bundled
14
+
15
+ App bundle layout:
16
+
17
+ - `Nexus.app/Contents/Resources/Relay/nexus`
18
+ - bun `--compile` relay executable built from `dist/macos/relay.js`
19
+ - Supports:
20
+ - `nexus …` (CLI)
21
+ - `nexus gateway-daemon …` (LaunchAgent daemon)
22
+ - `Nexus.app/Contents/Resources/Relay/package.json`
23
+ - tiny “p runtime compatibility” file (see below)
24
+ - `Nexus.app/Contents/Resources/Relay/theme/`
25
+ - p TUI theme payload (optional, but strongly recommended)
26
+
27
+ Why the sidecar files matter:
28
+ - The embedded p runtime detects “bun binary mode” and then looks for `package.json` + `theme/` **next to `process.execPath`** (i.e. next to `nexus`).
29
+ - So even if bun can embed assets, the runtime expects filesystem paths. Keep the sidecar files.
30
+
31
+ ## Build pipeline
32
+
33
+ Packaging script:
34
+ - `scripts/package-mac-app.sh`
35
+
36
+ It builds:
37
+ - TS: `pnpm exec tsc`
38
+ - Swift app + helper: `swift build …`
39
+ - bun relay: `bun build dist/macos/relay.js --compile --bytecode …`
40
+
41
+ Important bundler flags:
42
+ - `--compile`: produces a standalone executable
43
+ - `--bytecode`: reduces startup time / parsing overhead (works here)
44
+ - externals:
45
+ - `-e electron`
46
+ - Reason: avoid bundling Electron stubs in the relay binary
47
+
48
+ Version injection:
49
+ - `--define "__NEXUS_VERSION__=\"<pkg version>\""`
50
+ - `src/version.ts` also supports `__NEXUS_VERSION__` (and `NEXUS_BUNDLED_VERSION`) so `--version` doesn’t depend on reading `package.json` at runtime.
51
+
52
+ ## Launchd (Gateway as LaunchAgent)
53
+
54
+ Label:
55
+ - `com.nexus.gateway`
56
+
57
+ Plist location (per-user):
58
+ - `~/Library/LaunchAgents/com.nexus.gateway.plist`
59
+
60
+ Manager:
61
+ - `apps/macos/Sources/Nexus/GatewayLaunchAgentManager.swift`
62
+
63
+ Behavior:
64
+ - “Nexus Active” enables/disables the LaunchAgent.
65
+ - App quit does **not** stop the gateway (launchd keeps it alive).
66
+
67
+ Logging:
68
+ - launchd stdout/err: `~/nexus/state/logs/nexus-gateway.log`
69
+
70
+ Default LaunchAgent env:
71
+ - `NEXUS_IMAGE_BACKEND=sips` (avoid sharp native addon under bun)
72
+
73
+ ## Codesigning (hardened runtime + bun)
74
+
75
+ Symptom (when mis-signed):
76
+ - `Ran out of executable memory …` on launch
77
+
78
+ Fix:
79
+ - The bun executable needs JIT-ish permissions under hardened runtime.
80
+ - `scripts/codesign-mac-app.sh` signs `Relay/nexus` with:
81
+ - `com.apple.security.cs.allow-jit`
82
+ - `com.apple.security.cs.allow-unsigned-executable-memory`
83
+
84
+ ## Image processing under bun
85
+
86
+ Problem:
87
+ - bun can’t load some native Node addons like `sharp` (and we don’t want to ship native addon trees for the gateway).
88
+
89
+ Solution:
90
+ - Central helper `src/media/image-ops.ts`
91
+ - Prefers `/usr/bin/sips` on macOS (esp. when running under bun)
92
+ - Falls back to `sharp` when available (Node/dev)
93
+ - Used by:
94
+ - `src/web/media.ts` (optimize inbound/outbound images)
95
+ - `src/browser/screenshot.ts`
96
+ - `src/agents/pi-tools.ts` (image sanitization)
97
+
98
+ ## Browser control server
99
+
100
+ The Gateway starts the browser control server (loopback only) from `src/gateway/server.ts`.
101
+ It’s started from the relay daemon process, so the relay binary includes Playwright deps.
102
+
103
+ ## Tests / smoke checks
104
+
105
+ From a packaged app (local build):
106
+
107
+ ```bash
108
+ dist/Nexus.app/Contents/Resources/Relay/nexus --version
109
+
110
+ NEXUS_SKIP_PROVIDERS=1 \
111
+ NEXUS_SKIP_CANVAS_HOST=1 \
112
+ dist/Nexus.app/Contents/Resources/Relay/nexus gateway-daemon --port 18999 --bind loopback
113
+ ```
114
+
115
+ Then, in another shell:
116
+
117
+ ```bash
118
+ pnpm -s nexus gateway call health --url ws://127.0.0.1:18999 --timeout 3000
119
+ ```
120
+
121
+ ## Repo hygiene
122
+
123
+ Bun may leave dotfiles like `*.bun-build` in the repo root or subfolders.
124
+ - These are ignored via `.gitignore` (`*.bun-build`).
125
+
126
+ ## DMG styling (human installer)
127
+
128
+ `scripts/create-dmg.sh` styles the DMG via Finder AppleScript.
129
+
130
+ Rules of thumb:
131
+ - Use a **72dpi** background image that matches the Finder window size in points.
132
+ - Preferred asset: `assets/dmg-background-small.png` (**500×320**).
133
+ - Default icon positions: app `{125,160}`, Applications `{375,160}`.
@@ -0,0 +1,161 @@
1
+ ---
2
+ summary: "Agent-controlled Canvas panel embedded via WKWebView + custom URL scheme"
3
+ read_when:
4
+ - Implementing the macOS Canvas panel
5
+ - Adding agent controls for visual workspace
6
+ - Debugging WKWebView canvas loads
7
+ ---
8
+
9
+ # Canvas (macOS app)
10
+
11
+ Status: draft spec · Date: 2025-12-12
12
+
13
+ Note: for iOS/Android nodes that should render agent-edited HTML/CSS/JS over the network, prefer the Gateway `canvasHost` (serves `~/nexus/canvas` over LAN/tailnet with live reload). A2UI is also **hosted by the Gateway** over HTTP. This doc focuses on the macOS in-app canvas panel. See [`docs/configuration.md`](https://docs.nexus.bot/configuration).
14
+
15
+ Nexus can embed an agent-controlled “visual workspace” panel (“Canvas”) inside the macOS app using `WKWebView`, served via a **custom URL scheme** (no loopback HTTP port required).
16
+
17
+ This is designed for:
18
+ - Agent-written HTML/CSS/JS on disk (per-session directory).
19
+ - A real browser engine for layout, rendering, and basic interactivity.
20
+ - Agent-driven visibility (show/hide), navigation, DOM/JS queries, and snapshots.
21
+ - Minimal chrome: borderless panel; bezel/chrome appears only on hover.
22
+
23
+ ## Why a custom scheme (vs. loopback HTTP)
24
+
25
+ Using `WKURLSchemeHandler` keeps Canvas entirely in-process:
26
+ - No port conflicts and no extra local server lifecycle.
27
+ - Easier to sandbox: only serve files we explicitly map.
28
+ - Works offline and can use an ephemeral data store (no persistent cookies/cache).
29
+
30
+ If a Canvas page truly needs “real web” semantics (CORS, fetch to loopback endpoints, service workers), consider the loopback-server variant instead (out of scope for this doc).
31
+
32
+ ## URL ↔ directory mapping
33
+
34
+ The Canvas scheme is:
35
+ - `nexus-canvas://<session>/<path>`
36
+
37
+ Routing model:
38
+ - `nexus-canvas://main/` → `<canvasRoot>/main/index.html` (or `index.htm`)
39
+ - `nexus-canvas://main/yolo` → `<canvasRoot>/main/yolo/index.html` (or `index.htm`)
40
+ - `nexus-canvas://main/assets/app.css` → `<canvasRoot>/main/assets/app.css`
41
+
42
+ Directory listings are not served.
43
+
44
+ When `/` has no `index.html` yet, the handler serves a **built-in scaffold page** (bundled with the macOS app).
45
+ This is a visual placeholder only (no A2UI renderer).
46
+
47
+ ### Suggested on-disk location
48
+
49
+ Store Canvas state under the app support directory:
50
+ - `~/Library/Application Support/Nexus/canvas/<session>/…`
51
+
52
+ This keeps it alongside other app-owned state and avoids mixing with `~/nexus/state/` gateway config.
53
+
54
+ ## Panel behavior (agent-controlled)
55
+
56
+ Canvas is presented as a borderless `NSPanel` (similar to the existing WebChat panel):
57
+ - Can be shown/hidden at any time by the agent.
58
+ - Supports an “anchored” presentation (near the menu bar icon or another anchor rect).
59
+ - Uses a rounded container; shadow stays on, but **chrome/bezel only appears on hover**.
60
+ - Default position is the **top-right corner** of the current screen’s visible frame (unless the user moved/resized it previously).
61
+ - The panel is **user-resizable** (edge resize + hover resize handle) and the last frame is persisted per session.
62
+
63
+ ### Hover-only chrome
64
+
65
+ Implementation notes:
66
+ - Keep the window borderless at all times (don’t toggle `styleMask`).
67
+ - Add an overlay view inside the content container for chrome (stroke + subtle gradient/material).
68
+ - Use an `NSTrackingArea` to fade the chrome in/out on `mouseEntered/mouseExited`.
69
+ - Optionally show close/drag affordances only while hovered.
70
+
71
+ ## Agent API surface (current)
72
+
73
+ Canvas is exposed via the Gateway **node bridge**, so the agent can:
74
+ - Show/hide the panel.
75
+ - Navigate to a path (relative to the session root).
76
+ - Evaluate JavaScript and optionally return results.
77
+ - Query/modify DOM (helpers mirroring “dom query/all/attr/click/type/wait” patterns).
78
+ - Capture a snapshot image of the current canvas view.
79
+ - Optionally set panel placement (screen `x/y` + `width/height`) when showing/navigating.
80
+
81
+ This should be modeled after `WebChatManager`/`WebChatSwiftUIWindowController` but targeting `nexus-canvas://…` URLs.
82
+
83
+ Related:
84
+ - For “invoke the agent again from UI” flows, prefer the macOS deep link scheme (`nexus://agent?...`) so *any* UI surface (Canvas, WebChat, native views) can trigger a new agent run. See [`docs/macos.md`](https://docs.nexus.bot/macos).
85
+
86
+ ## Agent commands (current)
87
+
88
+ Use the main `nexus` CLI; it invokes canvas commands via `node.invoke`.
89
+
90
+ - `nexus canvas present [--node <id>] [--target <...>] [--x/--y/--width/--height]`
91
+ - Local targets map into the session directory via the custom scheme (directory targets resolve `index.html|index.htm`).
92
+ - If `/` has no index file, Canvas shows the built-in scaffold page and returns `status: "welcome"`.
93
+ - `nexus canvas hide [--node <id>]`
94
+ - `nexus canvas eval --js <code> [--node <id>]`
95
+ - `nexus canvas snapshot [--node <id>]`
96
+
97
+ ### Canvas A2UI
98
+
99
+ Canvas A2UI is hosted by the **Gateway canvas host** at:
100
+
101
+ ```
102
+ http://<gateway-host>:18793/__nexus__/a2ui/
103
+ ```
104
+
105
+ The macOS app simply renders that page in the Canvas panel. The agent can drive it with JSONL **server→client protocol messages** (one JSON object per line):
106
+
107
+ - `nexus canvas a2ui push --jsonl <path> [--node <id>]`
108
+ - `nexus canvas a2ui reset [--node <id>]`
109
+
110
+ `push` expects a JSONL file where **each line is a single JSON object** (parsed and forwarded to the in-page A2UI renderer).
111
+
112
+ Minimal example (v0.8):
113
+
114
+ ```bash
115
+ cat > /tmp/a2ui-v0.8.jsonl <<'EOF'
116
+ {"surfaceUpdate":{"surfaceId":"main","components":[{"id":"root","component":{"Column":{"children":{"explicitList":["title","content"]}}}},{"id":"title","component":{"Text":{"text":{"literalString":"Canvas (A2UI v0.8)"},"usageHint":"h1"}}},{"id":"content","component":{"Text":{"text":{"literalString":"If you can read this, `canvas a2ui push` works."},"usageHint":"body"}}}]}}
117
+ {"beginRendering":{"surfaceId":"main","root":"root"}}
118
+ EOF
119
+
120
+ nexus canvas a2ui push --jsonl /tmp/a2ui-v0.8.jsonl --node <id>
121
+ ```
122
+
123
+ Notes:
124
+ - This does **not** support the A2UI v0.9 examples using `createSurface`.
125
+ - A2UI **fails** if the Gateway canvas host is unreachable (no local fallback).
126
+ - `canvas a2ui push` validates JSONL (line numbers on errors) and rejects v0.9 payloads.
127
+ - Quick smoke: `nexus canvas a2ui push --text "Hello from A2UI"` renders a minimal v0.8 view.
128
+
129
+ ## Triggering agent runs from Canvas (deep links)
130
+
131
+ Canvas can trigger new agent runs via the macOS app deep-link scheme:
132
+ - `nexus://agent?...`
133
+
134
+ This is intentionally separate from `nexus-canvas://…` (which is only for serving local Canvas files into the `WKWebView`).
135
+
136
+ Suggested patterns:
137
+ - HTML: render links/buttons that navigate to `nexus://agent?message=...`.
138
+ - JS: set `window.location.href = 'nexus://agent?...'` for “run this now” actions.
139
+
140
+ Implementation note (important):
141
+ - In `WKWebView`, intercept `nexus://…` navigations in `WKNavigationDelegate` and forward them to the app, e.g. by calling `DeepLinkHandler.shared.handle(url:)` and returning `.cancel` for the navigation.
142
+
143
+ Safety:
144
+ - Deep links (`nexus://agent?...`) are always enabled.
145
+ - Without a `key` query param, the app will prompt for confirmation before invoking the agent.
146
+ - With a valid `key`, the run is unattended (no prompt). For Canvas-originated actions, the app injects an internal key automatically.
147
+
148
+ ## Security / guardrails
149
+
150
+ Recommended defaults:
151
+ - `WKWebsiteDataStore.nonPersistent()` for Canvas (ephemeral).
152
+ - Navigation policy: allow only `nexus-canvas://…` (and optionally `about:blank`); open `http/https` externally.
153
+ - Scheme handler must prevent directory traversal: resolved file paths must stay under `<canvasRoot>/<session>/`.
154
+ - Disable or tightly scope any JS bridge; prefer query-string/bootstrap config over `window.webkit.messageHandlers` for sensitive data.
155
+
156
+ ## Debugging
157
+
158
+ Suggested debugging hooks:
159
+ - Enable Web Inspector for Canvas builds (same approach as WebChat).
160
+ - Log scheme requests + resolution decisions to OSLog (subsystem `com.nexus`, category `Canvas`).
161
+ - Provide a “copy canvas dir” action in debug settings to quickly reveal the session directory in Finder.
@@ -0,0 +1,72 @@
1
+ ---
2
+ summary: "Running the gateway as a child process of the macOS app and why"
3
+ read_when:
4
+ - Integrating the mac app with the gateway lifecycle
5
+ ---
6
+ # Nexus gateway as a child process of the macOS app
7
+
8
+ Date: 2025-12-06 · Status: draft · Owner: steipete
9
+
10
+ Note (2025-12-19): the current implementation prefers a **launchd LaunchAgent** that runs the **bundled bun-compiled gateway**. This doc remains as an alternative mode for tighter coupling to the UI.
11
+
12
+ ## Goal
13
+ Run the Node-based Nexus/nexus gateway as a direct child of the LSUIElement app (instead of a launchd agent) while keeping all TCC-sensitive work inside the Swift app/broker layer and wiring the existing “Nexus Active” toggle to start/stop the child.
14
+
15
+ ## When to prefer the child-process mode
16
+ - You want gateway lifetime strictly coupled to the menu-bar app (dies when the app quits) and controlled by the “Nexus Active” toggle without touching launchd.
17
+ - You’re okay giving up login persistence/auto-restart that launchd provides, or you’ll add your own backoff loop.
18
+ - You want simpler log capture and supervision inside the app (no external plist or user-visible LaunchAgent).
19
+
20
+ ## Tradeoffs vs. launchd
21
+ - **Pros:** tighter coupling to UI state; simpler surface (no plist install/bootout); easier to stream stdout/stderr; fewer moving parts for beta users.
22
+ - **Cons:** no built-in KeepAlive/login auto-start; app crash kills gateway; you must build your own restart/backoff; Activity Monitor will show both processes under the app; still need correct TCC handling (see below).
23
+ - **TCC:** behaviorally, child processes often inherit the parent app’s “responsible process” for TCC, but this is *not a contract*. Continue to route all protected actions through the Swift app/broker so prompts stay tied to the signed app bundle.
24
+
25
+ ## TCC guardrails (must keep)
26
+ - Screen Recording, Accessibility, mic, and speech prompts must originate from the signed Swift app/broker. The Node child should never call these APIs directly; route through the app’s node commands (via Gateway `node.invoke`) for:
27
+ - `system.notify`
28
+ - `system.run` (including `needsScreenRecording`)
29
+ - `screen.record` / `camera.*`
30
+ - PeekabooBridge UI automation (`peekaboo …`)
31
+ - Usage strings (`NSMicrophoneUsageDescription`, `NSSpeechRecognitionUsageDescription`, etc.) stay in the app target’s Info.plist; a bare Node binary has none and would fail.
32
+ - If you ever embed Node that *must* touch TCC, wrap that call in a tiny signed helper target inside the app bundle and have Node exec that helper instead of calling the API directly.
33
+
34
+ ## Process manager design (Swift Subprocess)
35
+ - Add a small `GatewayProcessManager` (Swift) that owns:
36
+ - `execution: Execution?` from `Swift Subprocess` to track the child.
37
+ - `start(config)` called when “Nexus Active” flips ON:
38
+ - binary: host Node running the bundled gateway under `Nexus.app/Contents/Resources/Gateway/`
39
+ - args: current nexus entrypoint and flags
40
+ - cwd/env: point to `~/nexus/state` as today; inject the expanded PATH so Homebrew Node resolves under launchd
41
+ - output: stream stdout/stderr to `~/nexus/state/logs/nexus-gateway.log` (cap buffer via Subprocess OutputLimits)
42
+ - restart: optional linear/backoff restart if exit was non-zero and Active is still true
43
+ - `stop()` called when Active flips OFF or app terminates: cancel the execution and `waitUntilExit`.
44
+ - Wire SwiftUI toggle:
45
+ - ON: `GatewayProcessManager.start(...)`
46
+ - OFF: `GatewayProcessManager.stop()` (no launchctl calls in this mode)
47
+ - Keep the existing `LaunchdManager` around so we can switch back if needed; the toggle can choose between launchd or child mode with a flag if we want both.
48
+
49
+ ## Packaging and signing
50
+ - Bundle the gateway payload (dist + production node_modules) under `Contents/Resources/Gateway/`; rely on host Node ≥22 instead of embedding a runtime.
51
+ - Codesign native addons and dylibs inside the bundle; no nested runtime binary to sign now.
52
+ - Host runtime should not call TCC APIs directly; keep privileged work inside the app/broker.
53
+
54
+ ## Logging and observability
55
+ - Stream child stdout/stderr to `~/nexus/state/logs/nexus-gateway.log`; surface the last N lines in the Debug tab.
56
+ - Emit a user notification (via existing NotificationManager) on crash/exit while Active is true.
57
+ - Add a lightweight heartbeat from Node → app (e.g., ping over stdout) so the app can show status in the menu.
58
+
59
+ ## Failure/edge cases
60
+ - App crash/quit kills the gateway. Decide if that is acceptable for the deployment tier; otherwise, stick with launchd for production and keep child-process for dev/experiments.
61
+ - If the gateway exits repeatedly, back off (e.g., 1s/2s/5s/10s) and give up after N attempts with a menu warning.
62
+ - Respect the existing pause semantics: when paused, the broker should return `ok=false, "nexus paused"`; the gateway should avoid calling privileged routes while paused.
63
+
64
+ ## Open questions / follow-ups
65
+ - Do we need dual-mode (launchd for prod, child for dev)? If yes, gate via a setting or build flag.
66
+ - Embedding a runtime is off the table for now; we rely on host Node for size/simplicity. Revisit only if host PATH drift becomes painful.
67
+ - Do we want a tiny signed helper for rare TCC actions that cannot be brokered via the Swift app/broker?
68
+
69
+ ## Decision snapshot (current recommendation)
70
+ - Keep all TCC surfaces in the Swift app/broker (node commands + PeekabooBridgeHost).
71
+ - Implement `GatewayProcessManager` with Swift Subprocess to start/stop the gateway on the “Nexus Active” toggle.
72
+ - Maintain the launchd path as a fallback for uptime/login persistence until child-mode proves stable.