@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,81 @@
1
+ ---
2
+ summary: "Setup guide for developers working on the Nexus macOS app"
3
+ read_when:
4
+ - Setting up the macOS development environment
5
+ ---
6
+ # macOS Developer Setup
7
+
8
+ This guide covers the necessary steps to build and run the Nexus macOS application from source.
9
+
10
+ ## Prerequisites
11
+
12
+ Before building the app, ensure you have the following installed:
13
+
14
+ 1. **Xcode 26.2+**: Required for Swift development.
15
+ 2. **Node.js & pnpm**: Required for the gateway and CLI components.
16
+ 3. **Bun**: Required to package the embedded gateway relay.
17
+ ```bash
18
+ curl -fsSL https://bun.sh/install | bash
19
+ ```
20
+
21
+ ## 1. Initialize Submodules
22
+
23
+ Nexus depends on several submodules (like `Peekaboo`). You must initialize these recursively:
24
+
25
+ ```bash
26
+ git submodule update --init --recursive
27
+ ```
28
+
29
+ ## 2. Install Dependencies
30
+
31
+ Install the project-wide dependencies:
32
+
33
+ ```bash
34
+ pnpm install
35
+ ```
36
+
37
+ ## 3. Build and Package the App
38
+
39
+ To build the macOS app and package it into `dist/Nexus.app`, run:
40
+
41
+ ```bash
42
+ ./scripts/package-mac-app.sh
43
+ ```
44
+
45
+ If you don't have an Apple Developer ID certificate, the script will automatically use **ad-hoc signing** (`-`).
46
+
47
+ > **Note**: Ad-hoc signed apps may trigger security prompts. If the app crashes immediately with "Abort trap 6", see the [Troubleshooting](#troubleshooting) section.
48
+
49
+ ## 4. Install the CLI Helper
50
+
51
+ The macOS app requires a symlink named `nexus` in `/usr/local/bin` or `/opt/homebrew/bin` to manage background tasks.
52
+
53
+ **To install it:**
54
+ 1. Open the Nexus app.
55
+ 2. Go to the **General** settings tab.
56
+ 3. Click **"Install CLI helper"** (requires administrator privileges).
57
+
58
+ Alternatively, you can manually link it from your Admin account:
59
+ ```bash
60
+ sudo ln -sf "/Users/$(whoami)/nexus/dist/Nexus.app/Contents/Resources/Relay/nexus" /usr/local/bin/nexus
61
+ ```
62
+
63
+ ## Troubleshooting
64
+
65
+ ### App Crashes on Permission Grant
66
+ If the app crashes when you try to allow **Speech Recognition** or **Microphone** access, it may be due to a corrupted TCC cache or signature mismatch.
67
+
68
+ **Fix:**
69
+ 1. Reset the TCC permissions:
70
+ ```bash
71
+ tccutil reset All com.nexus.mac.debug
72
+ ```
73
+ 2. If that fails, change the `BUNDLE_ID` temporarily in `scripts/package-mac-app.sh` to force a "clean slate" from macOS.
74
+
75
+ ### Gateway "Starting..." indefinitely
76
+ If the gateway status stays on "Starting...", check if a zombie process is holding the port:
77
+
78
+ ```bash
79
+ lsof -nP -i :18789
80
+ ```
81
+ Kill any existing `node` or `nexus` processes listening on that port and restart the app.
@@ -0,0 +1,28 @@
1
+ ---
2
+ summary: "How the macOS app reports gateway/Baileys health states"
3
+ read_when:
4
+ - Debugging mac app health indicators
5
+ ---
6
+ # Health Checks on macOS
7
+
8
+ How to see whether the WhatsApp Web/Baileys bridge is healthy from the menu bar app.
9
+
10
+ ## Menu bar
11
+ - Status dot now reflects Baileys health:
12
+ - Green: linked + socket opened recently.
13
+ - Orange: connecting/retrying.
14
+ - Red: logged out or probe failed.
15
+ - Secondary line reads "Web: linked · auth 12m · socket ok" or shows the failure reason.
16
+ - "Run Health Check" menu item triggers an on-demand probe.
17
+
18
+ ## Settings
19
+ - General tab gains a Health card showing: linked auth age, session-store path/count, last check time, last error/status code, and buttons for Run Health Check / Reveal Logs.
20
+ - Uses a cached snapshot so the UI loads instantly and falls back gracefully when offline.
21
+ - **Connections tab** surfaces provider status + controls for WhatsApp/Telegram (login QR, logout, probe, last disconnect/error).
22
+
23
+ ## How the probe works
24
+ - App runs `nexus health --json` via `ShellExecutor` every ~60s and on demand. The probe loads creds, attempts a short Baileys connect, and reports status without sending messages.
25
+ - Cache the last good snapshot and the last error separately to avoid flicker; show the timestamp of each.
26
+
27
+ ## When in doubt
28
+ - You can still use the CLI flow in [`docs/health.md`](https://docs.nexus.bot/health) (`nexus status`, `nexus status --deep`, `nexus health --json`) and tail `~/nexus/state/logs/nexus-*.log` for `web-heartbeat` / `web-reconnect`.
@@ -0,0 +1,26 @@
1
+ ---
2
+ summary: "Menu bar icon states and animations for Nexus on macOS"
3
+ read_when:
4
+ - Changing menu bar icon behavior
5
+ ---
6
+ # Menu Bar Icon States
7
+
8
+ Author: steipete · Updated: 2025-12-06 · Scope: macOS app (`apps/macos`)
9
+
10
+ - **Idle:** Normal icon animation (blink, occasional wiggle).
11
+ - **Paused:** Status item uses `appearsDisabled`; no motion.
12
+ - **Voice trigger (big ears):** Voice wake detector calls `AppState.triggerVoiceEars(ttl: nil)` when the wake word is heard, keeping `earBoostActive=true` while the utterance is captured. Ears scale up (1.9x), get circular ear holes for readability, then drop via `stopVoiceEars()` after 1s of silence. Only fired from the in-app voice pipeline.
13
+ - **Working (agent running):** `AppState.isWorking=true` drives a “tail/leg scurry” micro-motion: faster leg wiggle and slight offset while work is in-flight. Currently toggled around WebChat agent runs; add the same toggle around other long tasks when you wire them.
14
+
15
+ Wiring points
16
+ - Voice wake: runtime/tester call `AppState.triggerVoiceEars(ttl: nil)` on trigger and `stopVoiceEars()` after 1s of silence to match the capture window.
17
+ - Agent activity: set `AppStateStore.shared.setWorking(true/false)` around work spans (already done in WebChat agent call). Keep spans short and reset in `defer` blocks to avoid stuck animations.
18
+
19
+ Shapes & sizes
20
+ - Base icon drawn in `CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)`.
21
+ - Ear scale defaults to `1.0`; voice boost sets `earScale=1.9` and toggles `earHoles=true` without changing overall frame (18×18 pt template image rendered into a 36×36 px Retina backing store).
22
+ - Scurry uses leg wiggle up to ~1.0 with a small horizontal jiggle; it’s additive to any existing idle wiggle.
23
+
24
+ Behavioral notes
25
+ - No external CLI/broker toggle for ears/working; keep it internal to the app’s own signals to avoid accidental flapping.
26
+ - Keep TTLs short (<10s) so the icon returns to baseline quickly if a job hangs.
@@ -0,0 +1,51 @@
1
+ ---
2
+ summary: "Nexus logging: rolling diagnostics file log + unified log privacy flags"
3
+ read_when:
4
+ - Capturing macOS logs or investigating private data logging
5
+ - Debugging voice wake/session lifecycle issues
6
+ ---
7
+ # Logging (macOS)
8
+
9
+ ## Rolling diagnostics file log (Debug pane)
10
+ Nexus routes macOS app logs through swift-log (unified logging by default) and can write a local, rotating file log to disk when you need a durable capture.
11
+
12
+ - Verbosity: **Debug pane → Logs → App logging → Verbosity**
13
+ - Enable: **Debug pane → Logs → App logging → “Write rolling diagnostics log (JSONL)”**
14
+ - Location: `~/Library/Logs/Nexus/diagnostics.jsonl` (rotates automatically; old files are suffixed with `.1`, `.2`, …)
15
+ - Clear: **Debug pane → Logs → App logging → “Clear”**
16
+
17
+ Notes:
18
+ - This is **off by default**. Enable only while actively debugging.
19
+ - Treat the file as sensitive; don’t share it without review.
20
+
21
+ ## Unified logging private data on macOS
22
+
23
+ Unified logging redacts most payloads unless a subsystem opts into `privacy -off`. Per Peter's write-up on macOS [logging privacy shenanigans](https://steipete.me/posts/2025/logging-privacy-shenanigans) (2025) this is controlled by a plist in `/Library/Preferences/Logging/Subsystems/` keyed by the subsystem name. Only new log entries pick up the flag, so enable it before reproducing an issue.
24
+
25
+ ## Enable for Nexus (`com.nexus`)
26
+ - Write the plist to a temp file first, then install it atomically as root:
27
+
28
+ ```bash
29
+ cat <<'EOF' >/tmp/com.nexus.plist
30
+ <?xml version="1.0" encoding="UTF-8"?>
31
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
32
+ <plist version="1.0">
33
+ <dict>
34
+ <key>DEFAULT-OPTIONS</key>
35
+ <dict>
36
+ <key>Enable-Private-Data</key>
37
+ <true/>
38
+ </dict>
39
+ </dict>
40
+ </plist>
41
+ EOF
42
+ sudo install -m 644 -o root -g wheel /tmp/com.nexus.plist /Library/Preferences/Logging/Subsystems/com.nexus.plist
43
+ ```
44
+
45
+ - No reboot is required; logd notices the file quickly, but only new log lines will include private payloads.
46
+ - View the richer output with the existing helper, e.g. `./scripts/clawlog.sh --category WebChat --last 5m`.
47
+
48
+ ## Disable after debugging
49
+ - Remove the override: `sudo rm /Library/Preferences/Logging/Subsystems/com.nexus.plist`.
50
+ - Optionally run `sudo log config --reload` to force logd to drop the override immediately.
51
+ - Remember this surface can include phone numbers and message bodies; keep the plist in place only while you actively need the extra detail.
@@ -0,0 +1,69 @@
1
+ ---
2
+ summary: "Menu bar status logic and what is surfaced to users"
3
+ read_when:
4
+ - Tweaking mac menu UI or status logic
5
+ ---
6
+ # Menu Bar Status Logic
7
+
8
+ ## What is shown
9
+ - We surface the current agent work state in the menu bar icon and in the first status row of the menu.
10
+ - Health status is hidden while work is active; it returns when all sessions are idle.
11
+ - The “Nodes” block in the menu lists **devices** only (gateway bridge nodes via `node.list`), not client/presence entries.
12
+
13
+ ## State model
14
+ - Sessions: events arrive with `runId` (per-run) plus `sessionKey` in the payload. The “main” session is the key `main`; if absent, we fall back to the most recently updated session.
15
+ - Priority: main always wins. If main is active, its state is shown immediately. If main is idle, the most recently active non‑main session is shown. We do not flip‑flop mid‑activity; we only switch when the current session goes idle or main becomes active.
16
+ - Activity kinds:
17
+ - `job`: high‑level command execution (`state: started|streaming|done|error`).
18
+ - `tool`: `phase: start|result` with `toolName` and `meta/args`.
19
+
20
+ ## IconState enum (Swift)
21
+ - `idle`
22
+ - `workingMain(ActivityKind)`
23
+ - `workingOther(ActivityKind)`
24
+ - `overridden(ActivityKind)` (debug override)
25
+
26
+ ### ActivityKind → glyph
27
+ - `bash` → 💻
28
+ - `read` → 📄
29
+ - `write` → ✍️
30
+ - `edit` → 📝
31
+ - `attach` → 📎
32
+ - default → 🛠️
33
+
34
+ ### Visual mapping
35
+ - `idle`: normal critter.
36
+ - `workingMain`: badge with glyph, full tint, leg “working” animation.
37
+ - `workingOther`: badge with glyph, muted tint, no scurry.
38
+ - `overridden`: uses the chosen glyph/tint regardless of activity.
39
+
40
+ ## Status row text (menu)
41
+ - While work is active: `<Session role> · <activity label>`
42
+ - Examples: `Main · bash: pnpm test`, `Other · read: apps/macos/Sources/Nexus/AppState.swift`.
43
+ - When idle: falls back to the health summary.
44
+
45
+ ## Event ingestion
46
+ - Source: control‑channel `agent` events (`ControlChannel.handleAgentEvent`).
47
+ - Parsed fields:
48
+ - `stream: "job"` with `data.state` for start/stop.
49
+ - `stream: "tool"` with `data.phase`, `name`, optional `meta`/`args`.
50
+ - Labels:
51
+ - `bash`: first line of `args.command`.
52
+ - `read`/`write`: shortened path.
53
+ - `edit`: path plus inferred change kind from `meta`/diff counts.
54
+ - fallback: tool name.
55
+
56
+ ## Debug override
57
+ - Settings ▸ Debug ▸ “Icon override” picker:
58
+ - `System (auto)` (default)
59
+ - `Working: main` (per tool kind)
60
+ - `Working: other` (per tool kind)
61
+ - `Idle`
62
+ - Stored via `@AppStorage("iconOverride")`; mapped to `IconState.overridden`.
63
+
64
+ ## Testing checklist
65
+ - Trigger main session job: verify icon switches immediately and status row shows main label.
66
+ - Trigger non‑main session job while main idle: icon/status shows non‑main; stays stable until it finishes.
67
+ - Start main while other active: icon flips to main instantly.
68
+ - Rapid tool bursts: ensure badge does not flicker (TTL grace on tool results).
69
+ - Health row reappears once all sessions idle.
@@ -0,0 +1,170 @@
1
+ ---
2
+ summary: "Plan for integrating Peekaboo automation into Nexus via PeekabooBridge (socket-based TCC broker)"
3
+ read_when:
4
+ - Hosting PeekabooBridge in Nexus.app
5
+ - Integrating Peekaboo as a submodule
6
+ - Changing PeekabooBridge protocol/paths
7
+ ---
8
+ # Peekaboo Bridge in Nexus (macOS UI automation broker)
9
+
10
+ ## TL;DR
11
+ - **Peekaboo removed its XPC helper** and now exposes privileged automation via a **UNIX domain socket bridge** (`PeekabooBridge` / `PeekabooBridgeHost`, socket name `bridge.sock`).
12
+ - Nexus integrates by **optionally hosting the same bridge** inside **Nexus.app** (user-toggleable). The primary client is the **`peekaboo` CLI** (installed via npm); Nexus does not need its own `ui …` CLI surface.
13
+ - For **visualizations**, we keep them in **Peekaboo.app** (best UX); Nexus stays a thin broker host. No visualizer toggle in Nexus.
14
+
15
+ Non-goals:
16
+ - No auto-launching Peekaboo.app.
17
+ - No onboarding deep links from the automation endpoint (Nexus onboarding already handles permissions).
18
+ - No AI provider/agent runtime dependencies in Nexus (avoid pulling Tachikoma/MCP into the Nexus app/CLI).
19
+
20
+ ## Big refactor (Dec 2025): XPC → Bridge
21
+ Peekaboo’s privileged execution moved from “CLI → XPC helper” to “CLI → socket bridge host”. For Nexus this is a win:
22
+ - It matches the existing “local socket + codesign checks” approach.
23
+ - It lets us piggyback on **either** Peekaboo.app’s permissions **or** Nexus.app’s permissions (whichever is running).
24
+ - It avoids “two apps with two TCC bubbles” unless needed.
25
+
26
+ Reference (Peekaboo submodule): `Peekaboo/docs/bridge-host.md`.
27
+
28
+ ## Architecture
29
+ ### Processes
30
+ - **Bridge hosts** (provide TCC-backed automation):
31
+ - **Peekaboo.app** (preferred; also provides visualizations + controls)
32
+ - **Claude.app** (secondary; lets `peekaboo` reuse Claude Desktop’s granted permissions)
33
+ - **Nexus.app** (secondary; “thin host” only)
34
+ - **Bridge clients** (trigger single actions):
35
+ - `peekaboo …` (preferred; humans + agents)
36
+ - Optional: Nexus/Node shells out to `peekaboo` when it needs UI automation/capture
37
+
38
+ ### Host discovery (client-side)
39
+ Order is deliberate:
40
+ 1. Peekaboo.app host (full UX)
41
+ 2. Claude.app host (piggyback on Claude Desktop permissions)
42
+ 3. Nexus.app host (piggyback on Nexus permissions)
43
+
44
+ Socket paths (convention; exact paths must match Peekaboo):
45
+ - Peekaboo: `~/Library/Application Support/Peekaboo/bridge.sock`
46
+ - Claude: `~/Library/Application Support/Claude/bridge.sock`
47
+ - Nexus: `~/Library/Application Support/nexus/bridge.sock`
48
+
49
+ No auto-launch: if a host isn’t reachable, the command fails with a clear error (start Peekaboo.app, Claude.app, or Nexus.app).
50
+
51
+ Override (debugging): set `PEEKABOO_BRIDGE_SOCKET=/path/to/bridge.sock`.
52
+
53
+ ### Protocol shape
54
+ - **Single request per connection**: connect → write one JSON request → half-close → read one JSON response → close.
55
+ - **Timeout**: 10 seconds end-to-end per action (client enforced; host should also enforce per-operation).
56
+ - **Errors**: human-readable string by default; structured envelope in `--json`.
57
+
58
+ ## Dependency strategy (submodule)
59
+ Integrate Peekaboo via git submodule (nested submodules are OK).
60
+
61
+ Path in Nexus repo:
62
+ - `./Peekaboo` (Swabble-style; keep stable so SwiftPM path deps don’t churn).
63
+
64
+ What Nexus should use:
65
+ - **Client side**: `PeekabooBridge` (socket client + protocol models).
66
+ - **Host side (Nexus.app)**: `PeekabooBridgeHost` + the minimal Peekaboo services needed to implement operations.
67
+
68
+ What Nexus should *not* embed:
69
+ - **Visualizer UI**: keep it in Peekaboo.app for now (toggle + controls live there).
70
+ - **XPC**: don’t reintroduce helper targets; use the bridge.
71
+
72
+ ## IPC / CLI surface
73
+ ### No `nexus ui …`
74
+ We avoid a parallel “Nexus UI automation CLI”. Instead:
75
+ - `peekaboo` is the user/agent-facing CLI surface for automation and capture.
76
+ - Nexus.app can host PeekabooBridge as a **thin TCC broker** so Peekaboo can piggyback on Nexus permissions when Peekaboo.app isn’t running.
77
+
78
+ ### Diagnostics
79
+ Use Peekaboo’s built-in diagnostics to see which host would be used:
80
+ - `peekaboo bridge status`
81
+ - `peekaboo bridge status --verbose`
82
+ - `peekaboo bridge status --json`
83
+
84
+ ### Output format
85
+ Peekaboo commands default to human text output. Add `--json` for a structured envelope.
86
+
87
+ ### Timeouts
88
+ Default timeout for UI actions: **10 seconds** end-to-end (client enforced; host should also enforce per-operation).
89
+
90
+ ## Coordinate model (multi-display)
91
+ Requirement: coordinates are **per screen**, not global.
92
+
93
+ Standardize for the CLI (agent-friendly): **top-left origin per screen**.
94
+
95
+ Proposed request shape:
96
+ - Requests accept `screenIndex` + `{x, y}` in that screen’s local coordinate space.
97
+ - Nexus.app converts to global CG coordinates using `NSScreen.screens[screenIndex].frame.origin`.
98
+ - Responses should echo both:
99
+ - The resolved `screenIndex`
100
+ - The local `{x, y}` and bounds
101
+ - Optionally the global `{x, y}` for debugging
102
+
103
+ Ordering: use `NSScreen.screens` ordering consistently (documented in the CLI help + JSON schema).
104
+
105
+ ## Targeting (per app/window)
106
+ Expose window/app targeting in the UI surface (align with Peekaboo targeting):
107
+ - frontmost
108
+ - by app name / bundle id
109
+ - by window title substring
110
+ - by (app, index)
111
+
112
+ Peekaboo CLI targeting (agent-friendly):
113
+ - `--bundle-id <id>` for app targeting
114
+ - `--window-index <n>` (0-based) for disambiguating within an app when capturing
115
+
116
+ All “see/click/type/scroll/wait” requests should accept a target (default: frontmost).
117
+
118
+ ## “See” + click packs (Playwright-style)
119
+ Behavior stays aligned with Peekaboo:
120
+ - `peekaboo see` returns element IDs (e.g. `B1`, `T3`) with bounds/labels.
121
+ - Follow-up actions reference those IDs without re-scanning.
122
+
123
+ `peekaboo see` should:
124
+ - capture (optionally targeted) window/screen
125
+ - return a screenshot **file path** (default: temp directory)
126
+ - return a list of elements (text or JSON)
127
+
128
+ Snapshot lifecycle requirement:
129
+ - Host apps are long-lived, so snapshot state should be **in-memory by default**.
130
+ - Snapshot scoping: “implicit snapshot” is **per target bundle id** (reuse last snapshot for that app when snapshot id is omitted).
131
+
132
+ Practical flow (agent-friendly):
133
+ - `peekaboo list apps` / `peekaboo list windows` provide bundle-id context for targeting.
134
+ - `peekaboo see --bundle-id X` updates the implicit snapshot for `X`.
135
+ - `peekaboo click --bundle-id X --on B1` reuses the most recent snapshot for `X` when `--snapshot-id` is omitted.
136
+
137
+ ## Visualizer integration
138
+ Keep visualizations in **Peekaboo.app** for now.
139
+ - Nexus hosts the bridge, but does not render overlays.
140
+ - Any “visualizer enabled/disabled” setting is controlled in Peekaboo.app.
141
+
142
+ ## Screenshots (legacy → Peekaboo takeover)
143
+ Nexus should not grow a separate screenshot CLI surface.
144
+
145
+ Migration plan:
146
+ - Use `peekaboo capture …` / `peekaboo see …` (returns a file path, default temp directory).
147
+ - Once Nexus’ legacy screenshot plumbing is replaced, remove it cleanly (no aliases).
148
+
149
+ ## Permissions behavior
150
+ If required permissions are missing:
151
+ - return `ok=false` with a short human error message (e.g., “Accessibility permission missing”)
152
+ - do not try to open System Settings from the automation endpoint
153
+
154
+ ## Security (socket auth)
155
+ Both hosts must enforce:
156
+ - filesystem perms on the socket path (owner read/write only)
157
+ - server-side caller validation:
158
+ - require the caller’s code signature TeamID to be `Y5PE65HELJ`
159
+ - optional bundle-id allowlist for tighter scoping
160
+
161
+ Debug-only escape hatch (development convenience):
162
+ - “allow same-UID callers” means: *skip codesign checks for clients running under the same Unix user*.
163
+ - This must be **opt-in**, **DEBUG-only**, and guarded by an env var (Peekaboo uses `PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1`).
164
+
165
+ ## Next integration steps (after this doc)
166
+ 1. Add Peekaboo as a git submodule (nested submodules OK).
167
+ 2. Host `PeekabooBridgeHost` inside Nexus.app behind a single setting (“Enable Peekaboo Bridge”, default on).
168
+ 3. Ensure Nexus hosts the bridge at `~/Library/Application Support/nexus/bridge.sock` and speaks the PeekabooBridge JSON protocol.
169
+ 4. Validate with `peekaboo bridge status --verbose` that Peekaboo can select Nexus as the fallback host (no auto-launch).
170
+ 5. Keep all protocol decisions aligned with Peekaboo (coordinate system, element IDs, snapshot scoping, error envelopes).
@@ -0,0 +1,40 @@
1
+ ---
2
+ summary: "macOS permission persistence (TCC) and signing requirements"
3
+ read_when:
4
+ - Debugging missing or stuck macOS permission prompts
5
+ - Packaging or signing the macOS app
6
+ - Changing bundle IDs or app install paths
7
+ ---
8
+ # macOS permissions (TCC)
9
+
10
+ macOS permission grants are fragile. TCC associates a permission grant with the
11
+ app's code signature, bundle identifier, and on-disk path. If any of those change,
12
+ macOS treats the app as new and may drop or hide prompts.
13
+
14
+ ## Requirements for stable permissions
15
+ - Same path: run the app from a fixed location (for Nexus, `dist/Nexus.app`).
16
+ - Same bundle identifier: changing the bundle ID creates a new permission identity.
17
+ - Signed app: unsigned or ad-hoc signed builds do not persist permissions.
18
+ - Consistent signature: use a real Apple Development or Developer ID certificate
19
+ so the signature stays stable across rebuilds.
20
+
21
+ Ad-hoc signatures generate a new identity every build. macOS will forget previous
22
+ grants, and prompts can disappear entirely until the stale entries are cleared.
23
+
24
+ ## Recovery checklist when prompts disappear
25
+ 1. Quit the app.
26
+ 2. Remove the app entry in System Settings -> Privacy & Security.
27
+ 3. Relaunch the app from the same path and re-grant permissions.
28
+ 4. If the prompt still does not appear, reset TCC entries with `tccutil` and try again.
29
+ 5. Some permissions only reappear after a full macOS restart.
30
+
31
+ Example resets (replace bundle ID as needed):
32
+
33
+ ```bash
34
+ sudo tccutil reset Accessibility com.nexus.mac
35
+ sudo tccutil reset ScreenCapture com.nexus.mac
36
+ sudo tccutil reset AppleEvents
37
+ ```
38
+
39
+ If you are testing permissions, always sign with a real certificate. Ad-hoc
40
+ builds are only acceptable for quick local runs where permissions do not matter.
@@ -0,0 +1,76 @@
1
+ ---
2
+ summary: "Nexus macOS release checklist (Sparkle feed, packaging, signing)"
3
+ read_when:
4
+ - Cutting or validating a Nexus macOS release
5
+ - Updating the Sparkle appcast or feed assets
6
+ ---
7
+
8
+ # Nexus macOS release (Sparkle)
9
+
10
+ This app now ships Sparkle auto-updates. Release builds must be Developer ID–signed, zipped, and published with a signed appcast entry.
11
+
12
+ ## Prereqs
13
+ - Developer ID Application cert installed (`Developer ID Application: Peter Steinberger (Y5PE65HELJ)` is expected).
14
+ - Sparkle private key path set in the environment as `SPARKLE_PRIVATE_KEY_FILE`; key lives in `/Users/steipete/Library/CloudStorage/Dropbox/Backup/Sparkle` (same key as Trimmy; public key baked into Info.plist).
15
+ - Notary credentials (keychain profile or API key) for `xcrun notarytool` if you want Gatekeeper-safe DMG/zip distribution.
16
+ - We use a Keychain profile named `nexus-notary`, created from App Store Connect API key env vars in your shell profile:
17
+ - `APP_STORE_CONNECT_API_KEY_P8`, `APP_STORE_CONNECT_KEY_ID`, `APP_STORE_CONNECT_ISSUER_ID`
18
+ - `echo "$APP_STORE_CONNECT_API_KEY_P8" | sed 's/\\n/\n/g' > /tmp/nexus-notary.p8`
19
+ - `xcrun notarytool store-credentials "nexus-notary" --key /tmp/nexus-notary.p8 --key-id "$APP_STORE_CONNECT_KEY_ID" --issuer "$APP_STORE_CONNECT_ISSUER_ID"`
20
+ - `pnpm` deps installed (`pnpm install --config.node-linker=hoisted`).
21
+ - Sparkle tools are fetched automatically via SwiftPM at `apps/macos/.build/artifacts/sparkle/Sparkle/bin/` (`sign_update`, `generate_appcast`, etc.).
22
+
23
+ ## Build & package
24
+ Notes:
25
+ - `APP_BUILD` maps to `CFBundleVersion`/`sparkle:version`; keep it numeric + monotonic (no `-beta`), or Sparkle compares it as equal.
26
+ - Defaults to the current architecture (`$(uname -m)`). For release/universal builds, set `BUILD_ARCHS="arm64 x86_64"` (or `BUILD_ARCHS=all`).
27
+
28
+ ```bash
29
+ # From repo root; set release IDs so Sparkle feed is enabled.
30
+ # APP_BUILD must be numeric + monotonic for Sparkle compare.
31
+ BUNDLE_ID=com.nexus.mac \
32
+ APP_VERSION=0.1.0 \
33
+ APP_BUILD="$(git rev-list --count HEAD)" \
34
+ BUILD_CONFIG=release \
35
+ SIGN_IDENTITY="Developer ID Application: Peter Steinberger (Y5PE65HELJ)" \
36
+ scripts/package-mac-app.sh
37
+
38
+ # Zip for distribution (includes resource forks for Sparkle delta support)
39
+ ditto -c -k --sequesterRsrc --keepParent dist/Nexus.app dist/Nexus-0.1.0.zip
40
+
41
+ # Optional: also build a styled DMG for humans (drag to /Applications)
42
+ scripts/create-dmg.sh dist/Nexus.app dist/Nexus-0.1.0.dmg
43
+
44
+ # Recommended: build + notarize/staple zip + DMG
45
+ # First, create a keychain profile once:
46
+ # xcrun notarytool store-credentials "nexus-notary" \
47
+ # --apple-id "<apple-id>" --team-id "<team-id>" --password "<app-specific-password>"
48
+ NOTARIZE=1 NOTARYTOOL_PROFILE=nexus-notary \
49
+ BUNDLE_ID=com.nexus.mac \
50
+ APP_VERSION=0.1.0 \
51
+ APP_BUILD="$(git rev-list --count HEAD)" \
52
+ BUILD_CONFIG=release \
53
+ SIGN_IDENTITY="Developer ID Application: Peter Steinberger (Y5PE65HELJ)" \
54
+ scripts/package-mac-dist.sh
55
+
56
+ # Optional: ship dSYM alongside the release
57
+ ditto -c -k --keepParent apps/macos/.build/release/Nexus.app.dSYM dist/Nexus-0.1.0.dSYM.zip
58
+ ```
59
+
60
+ ## Appcast entry
61
+ Use the release note generator so Sparkle renders formatted HTML notes:
62
+ ```bash
63
+ SPARKLE_PRIVATE_KEY_FILE=/Users/steipete/Library/CloudStorage/Dropbox/Backup/Sparkle/ed25519-private-key scripts/make_appcast.sh dist/Nexus-0.1.0.zip https://raw.githubusercontent.com/nexus/nexus/main/appcast.xml
64
+ ```
65
+ Generates HTML release notes from `CHANGELOG.md` (via `scripts/changelog-to-html.sh`) and embeds them in the appcast entry.
66
+ Commit the updated `appcast.xml` alongside the release assets (zip + dSYM) when publishing.
67
+
68
+ ## Publish & verify
69
+ - Upload `Nexus-0.1.0.zip` (and `Nexus-0.1.0.dSYM.zip`) to the GitHub release for tag `v0.1.0`.
70
+ - Ensure the raw appcast URL matches the baked feed: `https://raw.githubusercontent.com/nexus/nexus/main/appcast.xml`.
71
+ - Sanity checks:
72
+ - `curl -I https://raw.githubusercontent.com/nexus/nexus/main/appcast.xml` returns 200.
73
+ - `curl -I <enclosure url>` returns 200 after assets upload.
74
+ - On a previous public build, run “Check for Updates…” from the About tab and verify Sparkle installs the new build cleanly.
75
+
76
+ Definition of done: signed app + appcast are published, update flow works from an older installed version, and release assets are attached to the GitHub release.
@@ -0,0 +1,57 @@
1
+ ---
2
+ summary: "macOS app flow for controlling a remote Nexus gateway over SSH"
3
+ read_when:
4
+ - Setting up or debugging remote mac control
5
+ ---
6
+ # Remote Nexus (macOS ⇄ remote host)
7
+
8
+ Updated: 2025-12-08
9
+
10
+ This flow lets the macOS app act as a full remote control for a Nexus gateway running on another host (e.g. a Mac Studio). All features—health checks, Voice Wake forwarding, and Web Chat—reuse the same remote SSH configuration from *Settings → General*.
11
+
12
+ ## Modes
13
+ - **Local (this Mac)**: Everything runs on the laptop. No SSH involved.
14
+ - **Remote over SSH**: Nexus commands are executed on the remote host. The mac app opens an SSH connection with `-o BatchMode` plus your chosen identity/key.
15
+
16
+ ## Prereqs on the remote host
17
+ 1) Install Node + pnpm and build/install the Nexus CLI (`pnpm install && pnpm build && pnpm link --global`).
18
+ 2) Ensure `nexus` is on PATH for non-interactive shells (symlink into `/usr/local/bin` or `/opt/homebrew/bin` if needed).
19
+ 3) Open SSH with key auth. We recommend **Tailscale** IPs for stable reachability off-LAN.
20
+
21
+ ## macOS app setup
22
+ 1) Open *Settings → General*.
23
+ 2) Under **Nexus runs**, pick **Remote over SSH** and set:
24
+ - **SSH target**: `user@host` (optional `:port`).
25
+ - If the gateway is on the same LAN and advertises Bonjour, pick it from the discovered list to auto-fill this field.
26
+ - **Identity file** (advanced): path to your key.
27
+ - **Project root** (advanced): remote checkout path used for commands.
28
+ - **CLI path** (advanced): optional path to a runnable `nexus` entrypoint/binary (auto-filled when advertised).
29
+ 3) Hit **Test remote**. Success indicates the remote `nexus status --json` runs correctly. Failures usually mean PATH/CLI issues; exit 127 means the CLI isn’t found remotely.
30
+ 4) Health checks and Web Chat will now run through this SSH tunnel automatically.
31
+
32
+ ## Web Chat over SSH
33
+ - Web Chat connects to the gateway over the forwarded WebSocket control port (default 18789).
34
+ - There is no separate WebChat HTTP server anymore.
35
+
36
+ ## Permissions
37
+ - The remote host needs the same TCC approvals as local (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications). Run onboarding on that machine to grant them once.
38
+ - Nodes advertise their permission state via `node.list` / `node.describe` so agents know what’s available.
39
+
40
+ ## WhatsApp login flow (remote)
41
+ - Run `nexus login --verbose` **on the remote host**. Scan the QR with WhatsApp on your phone.
42
+ - Re-run login on that host if auth expires. Health check will surface link problems.
43
+
44
+ ## Troubleshooting
45
+ - **exit 127 / not found**: `nexus` isn’t on PATH for non-login shells. Add it to `/etc/paths`, your shell rc, or symlink into `/usr/local/bin`/`/opt/homebrew/bin`.
46
+ - **Health probe failed**: check SSH reachability, PATH, and that Baileys is logged in (`nexus status --json`).
47
+ - **Web Chat stuck**: confirm the gateway is running on the remote host and the forwarded port matches the gateway WS port; the UI requires a healthy WS connection.
48
+ - **Voice Wake**: trigger phrases are forwarded automatically in remote mode; no separate forwarder is needed.
49
+
50
+ ## Notification sounds
51
+ Pick sounds per notification from scripts with `nexus` and `node.invoke`, e.g.:
52
+
53
+ ```bash
54
+ nexus nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
55
+ ```
56
+
57
+ There is no global “default sound” toggle in the app anymore; callers choose a sound (or none) per request.
@@ -0,0 +1,41 @@
1
+ ---
2
+ summary: "Signing steps for macOS debug builds generated by packaging scripts"
3
+ read_when:
4
+ - Building or signing mac debug builds
5
+ ---
6
+ # mac signing (debug builds)
7
+
8
+ This app is usually built from `scripts/package-mac-app.sh`, which now:
9
+
10
+ - sets a stable debug bundle identifier: `com.nexus.mac.debug`
11
+ - writes the Info.plist with that bundle id (override via `BUNDLE_ID=...`)
12
+ - calls `scripts/codesign-mac-app.sh` to sign the main binary, bundled CLI, and app bundle so macOS treats each rebuild as the same signed bundle and keeps TCC permissions (notifications, accessibility, screen recording, mic, speech). For stable permissions, use a real signing identity; ad-hoc is opt-in and fragile (see [`docs/mac/permissions.md`](https://docs.nexus.bot/mac/permissions)).
13
+ - uses `CODESIGN_TIMESTAMP=auto` by default; it enables trusted timestamps for Developer ID signatures. Set `CODESIGN_TIMESTAMP=off` to skip timestamping (offline debug builds).
14
+ - inject build metadata into Info.plist: `NexusBuildTimestamp` (UTC) and `NexusGitCommit` (short hash) so the About pane can show build, git, and debug/release channel.
15
+ - **Packaging requires Bun**: The embedded gateway relay is compiled using `bun`. Ensure it is installed (`curl -fsSL https://bun.sh/install | bash`).
16
+ - reads `SIGN_IDENTITY` from the environment. Add `export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"` (or your Developer ID Application cert) to your shell rc to always sign with your cert. Ad-hoc signing requires explicit opt-in via `ALLOW_ADHOC_SIGNING=1` or `SIGN_IDENTITY="-"` (not recommended for permission testing).
17
+
18
+ ## Usage
19
+
20
+ ```bash
21
+ # from repo root
22
+ scripts/package-mac-app.sh # auto-selects identity; errors if none found
23
+ SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real cert
24
+ ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ad-hoc (permissions will not stick)
25
+ SIGN_IDENTITY="-" scripts/package-mac-app.sh # explicit ad-hoc (same caveat)
26
+ ```
27
+
28
+ ### Ad-hoc Signing Note
29
+ When signing with `SIGN_IDENTITY="-"` (ad-hoc), the script automatically disables the **Hardened Runtime** (`--options runtime`). This is necessary to prevent crashes when the app attempts to load embedded frameworks (like Sparkle) that do not share the same Team ID. Ad-hoc signatures also break TCC permission persistence; see [`docs/mac/permissions.md`](https://docs.nexus.bot/mac/permissions) for recovery steps.
30
+
31
+ ## Build metadata for About
32
+
33
+ `package-mac-app.sh` stamps the bundle with:
34
+ - `NexusBuildTimestamp`: ISO8601 UTC at package time
35
+ - `NexusGitCommit`: short git hash (or `unknown` if unavailable)
36
+
37
+ The About tab reads these keys to show version, build date, git commit, and whether it’s a debug build (via `#if DEBUG`). Run the packager to refresh these values after code changes.
38
+
39
+ ## Why
40
+
41
+ TCC permissions are tied to the bundle identifier *and* code signature. Unsigned debug builds with changing UUIDs were causing macOS to forget grants after each rebuild. Signing the binaries (ad‑hoc by default) and keeping a fixed bundle id/path (`dist/Nexus.app`) preserves the grants between builds, matching the VibeTunnel approach.