@intent-systems/nexus 2026.1.5-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (827) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +462 -0
  5. package/dist/agents/agent-paths.js +16 -0
  6. package/dist/agents/agent-scope.js +44 -0
  7. package/dist/agents/auth-profiles.js +626 -0
  8. package/dist/agents/bash-process-registry.js +126 -0
  9. package/dist/agents/bash-tools.js +838 -0
  10. package/dist/agents/chutes-oauth.js +47 -0
  11. package/dist/agents/clawdbot-tools.js +62 -0
  12. package/dist/agents/context.js +34 -0
  13. package/dist/agents/defaults.js +6 -0
  14. package/dist/agents/memory-search.js +80 -0
  15. package/dist/agents/model-auth.js +115 -0
  16. package/dist/agents/model-catalog.js +55 -0
  17. package/dist/agents/model-fallback.js +210 -0
  18. package/dist/agents/model-scan.js +263 -0
  19. package/dist/agents/model-selection.js +152 -0
  20. package/dist/agents/models-config.js +171 -0
  21. package/dist/agents/nexus-tools.js +46 -0
  22. package/dist/agents/pi-embedded-block-chunker.js +188 -0
  23. package/dist/agents/pi-embedded-helpers.js +139 -0
  24. package/dist/agents/pi-embedded-runner.js +932 -0
  25. package/dist/agents/pi-embedded-subscribe.js +541 -0
  26. package/dist/agents/pi-embedded-utils.js +20 -0
  27. package/dist/agents/pi-embedded.js +1 -0
  28. package/dist/agents/pi-extensions/compaction-safeguard.js +140 -0
  29. package/dist/agents/pi-tool-definition-adapter.js +17 -0
  30. package/dist/agents/pi-tools.js +510 -0
  31. package/dist/agents/pi-tools.schema.js +358 -0
  32. package/dist/agents/sandbox-paths.js +68 -0
  33. package/dist/agents/sandbox.js +667 -0
  34. package/dist/agents/shell-utils.js +53 -0
  35. package/dist/agents/skill-runner.js +224 -0
  36. package/dist/agents/skill-state.js +164 -0
  37. package/dist/agents/skill-tools.js +191 -0
  38. package/dist/agents/skill-usage.js +43 -0
  39. package/dist/agents/skills-install.js +244 -0
  40. package/dist/agents/skills-status.js +157 -0
  41. package/dist/agents/skills.js +472 -0
  42. package/dist/agents/subagent-registry.js +321 -0
  43. package/dist/agents/subagent-registry.store.js +47 -0
  44. package/dist/agents/system-prompt.js +179 -0
  45. package/dist/agents/timeout.js +26 -0
  46. package/dist/agents/tool-display.js +155 -0
  47. package/dist/agents/tool-display.json +236 -0
  48. package/dist/agents/tool-images.js +138 -0
  49. package/dist/agents/tool-policy.js +87 -0
  50. package/dist/agents/tools/agent-step.js +41 -0
  51. package/dist/agents/tools/browser-tool.js +295 -0
  52. package/dist/agents/tools/canvas-tool.js +193 -0
  53. package/dist/agents/tools/common.js +88 -0
  54. package/dist/agents/tools/cron-tool.js +141 -0
  55. package/dist/agents/tools/discord-actions-guild.js +186 -0
  56. package/dist/agents/tools/discord-actions-messaging.js +313 -0
  57. package/dist/agents/tools/discord-actions-moderation.js +70 -0
  58. package/dist/agents/tools/discord-actions.js +56 -0
  59. package/dist/agents/tools/discord-schema.js +199 -0
  60. package/dist/agents/tools/discord-tool.js +16 -0
  61. package/dist/agents/tools/gateway-tool.js +46 -0
  62. package/dist/agents/tools/gateway.js +28 -0
  63. package/dist/agents/tools/image-tool.js +140 -0
  64. package/dist/agents/tools/memory-tool.js +92 -0
  65. package/dist/agents/tools/nodes-tool.js +413 -0
  66. package/dist/agents/tools/nodes-utils.js +92 -0
  67. package/dist/agents/tools/sessions-announce-target.js +35 -0
  68. package/dist/agents/tools/sessions-helpers.js +88 -0
  69. package/dist/agents/tools/sessions-history-tool.js +137 -0
  70. package/dist/agents/tools/sessions-list-tool.js +196 -0
  71. package/dist/agents/tools/sessions-send-helpers.js +103 -0
  72. package/dist/agents/tools/sessions-send-tool.js +371 -0
  73. package/dist/agents/tools/sessions-spawn-tool.js +319 -0
  74. package/dist/agents/tools/slack-actions.js +129 -0
  75. package/dist/agents/tools/slack-schema.js +59 -0
  76. package/dist/agents/tools/slack-tool.js +16 -0
  77. package/dist/agents/tools/telegram-actions.js +159 -0
  78. package/dist/agents/tools/telegram-schema.js +28 -0
  79. package/dist/agents/tools/telegram-tool.js +16 -0
  80. package/dist/agents/tools/whatsapp-login-tool.js +63 -0
  81. package/dist/agents/usage.js +58 -0
  82. package/dist/agents/workspace.js +264 -0
  83. package/dist/auto-reply/chunk.js +177 -0
  84. package/dist/auto-reply/command-auth.js +44 -0
  85. package/dist/auto-reply/command-detection.js +22 -0
  86. package/dist/auto-reply/envelope.js +30 -0
  87. package/dist/auto-reply/group-activation.js +20 -0
  88. package/dist/auto-reply/heartbeat.js +58 -0
  89. package/dist/auto-reply/model.js +22 -0
  90. package/dist/auto-reply/reply/abort.js +14 -0
  91. package/dist/auto-reply/reply/agent-runner.js +426 -0
  92. package/dist/auto-reply/reply/bash-command.js +314 -0
  93. package/dist/auto-reply/reply/block-streaming.js +34 -0
  94. package/dist/auto-reply/reply/body.js +29 -0
  95. package/dist/auto-reply/reply/commands.js +332 -0
  96. package/dist/auto-reply/reply/directive-handling.js +626 -0
  97. package/dist/auto-reply/reply/directives.js +59 -0
  98. package/dist/auto-reply/reply/dispatch-from-config.js +23 -0
  99. package/dist/auto-reply/reply/followup-runner.js +181 -0
  100. package/dist/auto-reply/reply/groups.js +152 -0
  101. package/dist/auto-reply/reply/mentions.js +64 -0
  102. package/dist/auto-reply/reply/model-selection.js +209 -0
  103. package/dist/auto-reply/reply/queue.js +399 -0
  104. package/dist/auto-reply/reply/reply-dispatcher.js +68 -0
  105. package/dist/auto-reply/reply/reply-tags.js +26 -0
  106. package/dist/auto-reply/reply/session-updates.js +103 -0
  107. package/dist/auto-reply/reply/session.js +169 -0
  108. package/dist/auto-reply/reply/typing.js +125 -0
  109. package/dist/auto-reply/reply.js +655 -0
  110. package/dist/auto-reply/send-policy.js +28 -0
  111. package/dist/auto-reply/status.js +197 -0
  112. package/dist/auto-reply/templating.js +9 -0
  113. package/dist/auto-reply/thinking.js +49 -0
  114. package/dist/auto-reply/tokens.js +2 -0
  115. package/dist/auto-reply/tool-meta.js +74 -0
  116. package/dist/auto-reply/transcription.js +57 -0
  117. package/dist/auto-reply/types.js +1 -0
  118. package/dist/browser/bridge-server.js +37 -0
  119. package/dist/browser/cdp.js +382 -0
  120. package/dist/browser/chrome.js +432 -0
  121. package/dist/browser/client-actions-core.js +67 -0
  122. package/dist/browser/client-actions-observe.js +24 -0
  123. package/dist/browser/client-actions-types.js +1 -0
  124. package/dist/browser/client-actions.js +3 -0
  125. package/dist/browser/client-fetch.js +43 -0
  126. package/dist/browser/client.js +105 -0
  127. package/dist/browser/config.js +155 -0
  128. package/dist/browser/constants.js +5 -0
  129. package/dist/browser/profiles-service.js +124 -0
  130. package/dist/browser/profiles.js +96 -0
  131. package/dist/browser/pw-ai.js +2 -0
  132. package/dist/browser/pw-session.js +144 -0
  133. package/dist/browser/pw-tools-core.js +363 -0
  134. package/dist/browser/routes/agent.js +535 -0
  135. package/dist/browser/routes/basic.js +155 -0
  136. package/dist/browser/routes/index.js +8 -0
  137. package/dist/browser/routes/tabs.js +105 -0
  138. package/dist/browser/routes/utils.js +62 -0
  139. package/dist/browser/screenshot.js +40 -0
  140. package/dist/browser/server-context.js +377 -0
  141. package/dist/browser/server.js +81 -0
  142. package/dist/browser/target-id.js +18 -0
  143. package/dist/browser/trash.js +21 -0
  144. package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
  145. package/dist/canvas-host/a2ui/index.html +246 -0
  146. package/dist/canvas-host/a2ui.js +187 -0
  147. package/dist/canvas-host/server.js +382 -0
  148. package/dist/channel-web.js +8 -0
  149. package/dist/cli/browser-cli-actions-input.js +459 -0
  150. package/dist/cli/browser-cli-actions-observe.js +56 -0
  151. package/dist/cli/browser-cli-examples.js +31 -0
  152. package/dist/cli/browser-cli-inspect.js +97 -0
  153. package/dist/cli/browser-cli-manage.js +286 -0
  154. package/dist/cli/browser-cli-shared.js +1 -0
  155. package/dist/cli/browser-cli.js +26 -0
  156. package/dist/cli/canvas-cli.js +416 -0
  157. package/dist/cli/cloud-cli.js +336 -0
  158. package/dist/cli/credential-cli.js +227 -0
  159. package/dist/cli/cron-cli.js +454 -0
  160. package/dist/cli/deps.js +17 -0
  161. package/dist/cli/dns-cli.js +180 -0
  162. package/dist/cli/gateway-cli.js +665 -0
  163. package/dist/cli/gateway-rpc.js +20 -0
  164. package/dist/cli/hooks-cli.js +135 -0
  165. package/dist/cli/memory-cli.js +101 -0
  166. package/dist/cli/models-cli.js +248 -0
  167. package/dist/cli/nodes-camera.js +57 -0
  168. package/dist/cli/nodes-canvas.js +26 -0
  169. package/dist/cli/nodes-cli.js +946 -0
  170. package/dist/cli/nodes-screen.js +37 -0
  171. package/dist/cli/pairing-cli.js +100 -0
  172. package/dist/cli/parse-duration.js +20 -0
  173. package/dist/cli/plugins-cli.js +158 -0
  174. package/dist/cli/ports.js +97 -0
  175. package/dist/cli/profile.js +81 -0
  176. package/dist/cli/program.js +162 -0
  177. package/dist/cli/prompt.js +19 -0
  178. package/dist/cli/run-main.js +48 -0
  179. package/dist/cli/skills-cli.js +132 -0
  180. package/dist/cli/skills-hub-cli.js +1093 -0
  181. package/dist/cli/telegram-cli.js +56 -0
  182. package/dist/cli/tool-connector-cli.js +118 -0
  183. package/dist/cli/tui-cli.js +35 -0
  184. package/dist/cli/upstream-sync-cli.js +2833 -0
  185. package/dist/cli/usage-cli.js +24 -0
  186. package/dist/cli/wait.js +8 -0
  187. package/dist/commands/agent-via-gateway.js +115 -0
  188. package/dist/commands/agent.js +665 -0
  189. package/dist/commands/antigravity-oauth.js +327 -0
  190. package/dist/commands/auth-choice-options.js +80 -0
  191. package/dist/commands/auth-choice.js +134 -0
  192. package/dist/commands/auth-token.js +31 -0
  193. package/dist/commands/bootstrap-preset.js +214 -0
  194. package/dist/commands/capabilities.js +36 -0
  195. package/dist/commands/chutes-oauth.js +144 -0
  196. package/dist/commands/claude-md.js +137 -0
  197. package/dist/commands/config-view.js +11 -0
  198. package/dist/commands/configure.js +648 -0
  199. package/dist/commands/credential.js +236 -0
  200. package/dist/commands/cursor-rules.js +230 -0
  201. package/dist/commands/doctor-state-migrations.js +358 -0
  202. package/dist/commands/doctor-ui.js +113 -0
  203. package/dist/commands/doctor.js +673 -0
  204. package/dist/commands/health.js +112 -0
  205. package/dist/commands/identity.js +54 -0
  206. package/dist/commands/init.js +167 -0
  207. package/dist/commands/models/aliases.js +85 -0
  208. package/dist/commands/models/fallbacks.js +123 -0
  209. package/dist/commands/models/image-fallbacks.js +123 -0
  210. package/dist/commands/models/list.js +347 -0
  211. package/dist/commands/models/scan.js +271 -0
  212. package/dist/commands/models/set-image.js +27 -0
  213. package/dist/commands/models/set.js +27 -0
  214. package/dist/commands/models/shared.js +73 -0
  215. package/dist/commands/models.js +7 -0
  216. package/dist/commands/onboard-auth.js +101 -0
  217. package/dist/commands/onboard-channels.js +814 -0
  218. package/dist/commands/onboard-eve-identity.js +98 -0
  219. package/dist/commands/onboard-github.js +153 -0
  220. package/dist/commands/onboard-helpers.js +303 -0
  221. package/dist/commands/onboard-interactive.js +17 -0
  222. package/dist/commands/onboard-non-interactive.js +228 -0
  223. package/dist/commands/onboard-providers.js +829 -0
  224. package/dist/commands/onboard-quickstart.js +185 -0
  225. package/dist/commands/onboard-remote.js +120 -0
  226. package/dist/commands/onboard-skills.js +148 -0
  227. package/dist/commands/onboard-types.js +1 -0
  228. package/dist/commands/onboard.js +19 -0
  229. package/dist/commands/openai-codex-model-default.js +38 -0
  230. package/dist/commands/poll.js +64 -0
  231. package/dist/commands/quest.js +27 -0
  232. package/dist/commands/reset.js +61 -0
  233. package/dist/commands/send.js +124 -0
  234. package/dist/commands/sessions-ingest.js +359 -0
  235. package/dist/commands/sessions.js +212 -0
  236. package/dist/commands/setup.js +59 -0
  237. package/dist/commands/signal-install.js +135 -0
  238. package/dist/commands/skills-manifest.js +235 -0
  239. package/dist/commands/status.js +139 -0
  240. package/dist/commands/suggestions.js +54 -0
  241. package/dist/commands/systemd-linger.js +71 -0
  242. package/dist/commands/update.js +16 -0
  243. package/dist/commands/usage-upload.js +27 -0
  244. package/dist/config/config.js +6 -0
  245. package/dist/config/defaults.js +140 -0
  246. package/dist/config/group-policy.js +49 -0
  247. package/dist/config/includes.js +183 -0
  248. package/dist/config/io.js +188 -0
  249. package/dist/config/legacy-migrate.js +13 -0
  250. package/dist/config/legacy.js +425 -0
  251. package/dist/config/paths.js +82 -0
  252. package/dist/config/port-defaults.js +32 -0
  253. package/dist/config/schema.js +173 -0
  254. package/dist/config/sessions.js +611 -0
  255. package/dist/config/talk.js +31 -0
  256. package/dist/config/types.js +1 -0
  257. package/dist/config/validation.js +29 -0
  258. package/dist/config/zod-schema.js +1110 -0
  259. package/dist/control-ui/assets/index-D8Q5AI4D.js +2393 -0
  260. package/dist/control-ui/assets/index-D8Q5AI4D.js.map +1 -0
  261. package/dist/control-ui/assets/index-g06q5Xc3.css +1 -0
  262. package/dist/control-ui/favicon.ico +0 -0
  263. package/dist/control-ui/index.html +16 -0
  264. package/dist/cron/isolated-agent.js +529 -0
  265. package/dist/cron/normalize.js +73 -0
  266. package/dist/cron/parse.js +24 -0
  267. package/dist/cron/run-log.js +72 -0
  268. package/dist/cron/schedule.js +24 -0
  269. package/dist/cron/service.js +471 -0
  270. package/dist/cron/store.js +43 -0
  271. package/dist/cron/types.js +1 -0
  272. package/dist/daemon/constants.js +10 -0
  273. package/dist/daemon/launchd.js +295 -0
  274. package/dist/daemon/legacy.js +63 -0
  275. package/dist/daemon/program-args.js +141 -0
  276. package/dist/daemon/schtasks.js +269 -0
  277. package/dist/daemon/service.js +69 -0
  278. package/dist/daemon/systemd.js +332 -0
  279. package/dist/discord/index.js +2 -0
  280. package/dist/discord/monitor.js +1089 -0
  281. package/dist/discord/probe.js +54 -0
  282. package/dist/discord/send.js +652 -0
  283. package/dist/discord/token.js +8 -0
  284. package/dist/entry.js +16 -0
  285. package/dist/gateway/auth.js +121 -0
  286. package/dist/gateway/call.js +103 -0
  287. package/dist/gateway/chat-attachments.js +41 -0
  288. package/dist/gateway/client.js +180 -0
  289. package/dist/gateway/config-reload.js +274 -0
  290. package/dist/gateway/control-ui.js +184 -0
  291. package/dist/gateway/hooks-mapping.js +282 -0
  292. package/dist/gateway/hooks.js +168 -0
  293. package/dist/gateway/net.js +29 -0
  294. package/dist/gateway/protocol/index.js +62 -0
  295. package/dist/gateway/protocol/schema.js +577 -0
  296. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  297. package/dist/gateway/server-bridge.js +1066 -0
  298. package/dist/gateway/server-browser.js +11 -0
  299. package/dist/gateway/server-channels.js +680 -0
  300. package/dist/gateway/server-chat.js +159 -0
  301. package/dist/gateway/server-constants.js +8 -0
  302. package/dist/gateway/server-discovery.js +62 -0
  303. package/dist/gateway/server-http.js +165 -0
  304. package/dist/gateway/server-methods/agent-job.js +114 -0
  305. package/dist/gateway/server-methods/agent.js +254 -0
  306. package/dist/gateway/server-methods/channels.js +239 -0
  307. package/dist/gateway/server-methods/chat.js +207 -0
  308. package/dist/gateway/server-methods/config.js +50 -0
  309. package/dist/gateway/server-methods/connect.js +6 -0
  310. package/dist/gateway/server-methods/cron.js +89 -0
  311. package/dist/gateway/server-methods/health.js +28 -0
  312. package/dist/gateway/server-methods/models.js +16 -0
  313. package/dist/gateway/server-methods/nodes.js +294 -0
  314. package/dist/gateway/server-methods/providers.js +257 -0
  315. package/dist/gateway/server-methods/send.js +254 -0
  316. package/dist/gateway/server-methods/sessions.js +382 -0
  317. package/dist/gateway/server-methods/skills.js +83 -0
  318. package/dist/gateway/server-methods/system.js +118 -0
  319. package/dist/gateway/server-methods/talk.js +22 -0
  320. package/dist/gateway/server-methods/types.js +1 -0
  321. package/dist/gateway/server-methods/voicewake.js +30 -0
  322. package/dist/gateway/server-methods/web.js +81 -0
  323. package/dist/gateway/server-methods/wizard.js +100 -0
  324. package/dist/gateway/server-methods.js +53 -0
  325. package/dist/gateway/server-providers.js +687 -0
  326. package/dist/gateway/server-shared.js +1 -0
  327. package/dist/gateway/server-utils.js +35 -0
  328. package/dist/gateway/server.js +1478 -0
  329. package/dist/gateway/session-utils.js +355 -0
  330. package/dist/gateway/ws-log.js +343 -0
  331. package/dist/gateway/ws-logging.js +8 -0
  332. package/dist/globals.js +41 -0
  333. package/dist/hooks/gmail-ops.js +236 -0
  334. package/dist/hooks/gmail-setup-utils.js +278 -0
  335. package/dist/hooks/gmail-watcher.js +190 -0
  336. package/dist/hooks/gmail.js +177 -0
  337. package/dist/imessage/client.js +165 -0
  338. package/dist/imessage/index.js +3 -0
  339. package/dist/imessage/monitor.js +365 -0
  340. package/dist/imessage/probe.js +26 -0
  341. package/dist/imessage/send.js +83 -0
  342. package/dist/imessage/targets.js +176 -0
  343. package/dist/index.js +55 -0
  344. package/dist/infra/agent-events.js +46 -0
  345. package/dist/infra/binaries.js +9 -0
  346. package/dist/infra/bonjour-discovery.js +163 -0
  347. package/dist/infra/bonjour.js +200 -0
  348. package/dist/infra/bridge/server.js +564 -0
  349. package/dist/infra/canvas-host-url.js +54 -0
  350. package/dist/infra/channel-summary.js +78 -0
  351. package/dist/infra/control-ui-assets.js +112 -0
  352. package/dist/infra/dotenv.js +15 -0
  353. package/dist/infra/env.js +8 -0
  354. package/dist/infra/errors.js +28 -0
  355. package/dist/infra/event-log.js +251 -0
  356. package/dist/infra/gateway-lock.js +8 -0
  357. package/dist/infra/git-commit.js +91 -0
  358. package/dist/infra/heartbeat-events.js +21 -0
  359. package/dist/infra/heartbeat-runner.js +458 -0
  360. package/dist/infra/heartbeat-wake.js +61 -0
  361. package/dist/infra/is-main.js +37 -0
  362. package/dist/infra/json-file.js +21 -0
  363. package/dist/infra/machine-name.js +40 -0
  364. package/dist/infra/nexus-root.js +56 -0
  365. package/dist/infra/node-pairing.js +212 -0
  366. package/dist/infra/path-env.js +93 -0
  367. package/dist/infra/ports.js +87 -0
  368. package/dist/infra/provider-summary.js +80 -0
  369. package/dist/infra/provider-usage.auth.js +189 -0
  370. package/dist/infra/provider-usage.fetch.claude.js +129 -0
  371. package/dist/infra/provider-usage.fetch.codex.js +62 -0
  372. package/dist/infra/provider-usage.fetch.copilot.js +42 -0
  373. package/dist/infra/provider-usage.fetch.gemini.js +57 -0
  374. package/dist/infra/provider-usage.fetch.js +6 -0
  375. package/dist/infra/provider-usage.fetch.minimax.js +214 -0
  376. package/dist/infra/provider-usage.fetch.shared.js +11 -0
  377. package/dist/infra/provider-usage.fetch.zai.js +62 -0
  378. package/dist/infra/provider-usage.format.js +77 -0
  379. package/dist/infra/provider-usage.js +145 -0
  380. package/dist/infra/provider-usage.load.js +54 -0
  381. package/dist/infra/provider-usage.shared.js +19 -0
  382. package/dist/infra/provider-usage.types.js +1 -0
  383. package/dist/infra/restart.js +29 -0
  384. package/dist/infra/retry.js +16 -0
  385. package/dist/infra/runtime-guard.js +59 -0
  386. package/dist/infra/shell-env.js +88 -0
  387. package/dist/infra/system-events.js +71 -0
  388. package/dist/infra/system-presence.js +217 -0
  389. package/dist/infra/tailnet.js +46 -0
  390. package/dist/infra/tailscale.js +149 -0
  391. package/dist/infra/unhandled-rejections.js +19 -0
  392. package/dist/infra/usage-suggestions.js +241 -0
  393. package/dist/infra/usage-upload.js +290 -0
  394. package/dist/infra/voicewake.js +78 -0
  395. package/dist/infra/widearea-dns.js +123 -0
  396. package/dist/infra/ws.js +13 -0
  397. package/dist/logger.js +52 -0
  398. package/dist/logging.js +506 -0
  399. package/dist/macos/gateway-daemon.js +145 -0
  400. package/dist/macos/relay.js +49 -0
  401. package/dist/media/constants.js +33 -0
  402. package/dist/media/host.js +42 -0
  403. package/dist/media/image-ops.js +119 -0
  404. package/dist/media/mime.js +123 -0
  405. package/dist/media/parse.js +83 -0
  406. package/dist/media/server.js +64 -0
  407. package/dist/media/store.js +139 -0
  408. package/dist/polls.js +43 -0
  409. package/dist/process/command-queue.js +97 -0
  410. package/dist/process/exec.js +75 -0
  411. package/dist/provider-web.js +8 -0
  412. package/dist/providers/github-copilot-auth.js +123 -0
  413. package/dist/providers/github-copilot-models.js +35 -0
  414. package/dist/providers/github-copilot-token.js +11 -0
  415. package/dist/providers/location.js +48 -0
  416. package/dist/providers/web/index.js +2 -0
  417. package/dist/runtime.js +8 -0
  418. package/dist/sessions/level-overrides.js +9 -0
  419. package/dist/sessions/send-policy.js +68 -0
  420. package/dist/signal/client.js +134 -0
  421. package/dist/signal/daemon.js +69 -0
  422. package/dist/signal/index.js +3 -0
  423. package/dist/signal/monitor.js +411 -0
  424. package/dist/signal/probe.js +46 -0
  425. package/dist/signal/send.js +91 -0
  426. package/dist/slack/actions.js +97 -0
  427. package/dist/slack/index.js +5 -0
  428. package/dist/slack/monitor.js +1270 -0
  429. package/dist/slack/probe.js +47 -0
  430. package/dist/slack/send.js +131 -0
  431. package/dist/slack/token.js +10 -0
  432. package/dist/telegram/allowed-updates.js +8 -0
  433. package/dist/telegram/bot.js +724 -0
  434. package/dist/telegram/download.js +34 -0
  435. package/dist/telegram/index.js +4 -0
  436. package/dist/telegram/monitor.js +47 -0
  437. package/dist/telegram/pairing-store.js +77 -0
  438. package/dist/telegram/probe.js +63 -0
  439. package/dist/telegram/proxy.js +9 -0
  440. package/dist/telegram/reaction-level.js +45 -0
  441. package/dist/telegram/send.js +151 -0
  442. package/dist/telegram/sent-message-cache.js +65 -0
  443. package/dist/telegram/token.js +30 -0
  444. package/dist/telegram/update-offset-store.js +61 -0
  445. package/dist/telegram/webhook-set.js +12 -0
  446. package/dist/telegram/webhook.js +56 -0
  447. package/dist/tui/commands.js +87 -0
  448. package/dist/tui/components/assistant-message.js +16 -0
  449. package/dist/tui/components/chat-log.js +92 -0
  450. package/dist/tui/components/custom-editor.js +55 -0
  451. package/dist/tui/components/selectors.js +8 -0
  452. package/dist/tui/components/tool-execution.js +111 -0
  453. package/dist/tui/components/user-message.js +17 -0
  454. package/dist/tui/gateway-chat.js +140 -0
  455. package/dist/tui/theme/theme.js +80 -0
  456. package/dist/tui/tui.js +708 -0
  457. package/dist/utils.js +153 -0
  458. package/dist/version.js +18 -0
  459. package/dist/web/accounts.js +86 -0
  460. package/dist/web/active-listener.js +25 -0
  461. package/dist/web/auto-reply.js +1256 -0
  462. package/dist/web/inbound.js +649 -0
  463. package/dist/web/login-qr.js +230 -0
  464. package/dist/web/login.js +71 -0
  465. package/dist/web/media.js +175 -0
  466. package/dist/web/outbound.js +102 -0
  467. package/dist/web/qr-image.js +97 -0
  468. package/dist/web/reconnect.js +60 -0
  469. package/dist/web/session.js +370 -0
  470. package/dist/wizard/clack-prompter.js +56 -0
  471. package/dist/wizard/onboarding.js +620 -0
  472. package/dist/wizard/prompts.js +6 -0
  473. package/dist/wizard/session.js +203 -0
  474. package/docs/AGENTS.default.md +116 -0
  475. package/docs/CAPABILITIES.md +444 -0
  476. package/docs/CNAME +1 -0
  477. package/docs/NEXUS_CORE_REWRITE_SPEC.md +226 -0
  478. package/docs/RELEASING.md +69 -0
  479. package/docs/_config.yml +53 -0
  480. package/docs/_layouts/default.html +145 -0
  481. package/docs/agent-assisted-install.md +95 -0
  482. package/docs/agent-loop.md +61 -0
  483. package/docs/agent-send.md +21 -0
  484. package/docs/agent.md +108 -0
  485. package/docs/android.md +133 -0
  486. package/docs/architecture.md +114 -0
  487. package/docs/assets/markdown.css +133 -0
  488. package/docs/assets/pixel-lobster.svg +60 -0
  489. package/docs/assets/terminal.css +470 -0
  490. package/docs/assets/theme.js +55 -0
  491. package/docs/audio.md +48 -0
  492. package/docs/automation/nexus-sync.md +371 -0
  493. package/docs/background-process.md +74 -0
  494. package/docs/bash.md +32 -0
  495. package/docs/bedrock.md +71 -0
  496. package/docs/bonjour.md +159 -0
  497. package/docs/browser-linux-troubleshooting.md +114 -0
  498. package/docs/browser.md +293 -0
  499. package/docs/bun.md +56 -0
  500. package/docs/camera.md +152 -0
  501. package/docs/clawd.md +212 -0
  502. package/docs/concepts/usage-tracking.md +29 -0
  503. package/docs/configuration.md +1666 -0
  504. package/docs/control-ui.md +83 -0
  505. package/docs/cron.md +385 -0
  506. package/docs/dashboard.md +17 -0
  507. package/docs/device-models.md +46 -0
  508. package/docs/discord.md +308 -0
  509. package/docs/discovery.md +112 -0
  510. package/docs/docker.md +258 -0
  511. package/docs/docs.json +105 -0
  512. package/docs/doctor.md +68 -0
  513. package/docs/elevated.md +31 -0
  514. package/docs/faq.md +736 -0
  515. package/docs/feature-inventory/overview.md +141 -0
  516. package/docs/feature-inventory/rollout-checklist.md +53 -0
  517. package/docs/feature-inventory/test-matrix.md +87 -0
  518. package/docs/feature-inventory.md +9 -0
  519. package/docs/gateway/configuration-examples.md +221 -0
  520. package/docs/gateway/configuration.md +172 -0
  521. package/docs/gateway/cron.md +61 -0
  522. package/docs/gateway/heartbeat.md +207 -0
  523. package/docs/gateway/pairing.md +109 -0
  524. package/docs/gateway-lock.md +28 -0
  525. package/docs/gateway.md +227 -0
  526. package/docs/gmail-pubsub.md +191 -0
  527. package/docs/grammy.md +27 -0
  528. package/docs/group-messages.md +73 -0
  529. package/docs/groups.md +130 -0
  530. package/docs/health.md +28 -0
  531. package/docs/heartbeat.md +73 -0
  532. package/docs/home-userspace.md +277 -0
  533. package/docs/hubs.md +148 -0
  534. package/docs/images.md +51 -0
  535. package/docs/imessage.md +94 -0
  536. package/docs/index.md +196 -0
  537. package/docs/ios.md +372 -0
  538. package/docs/linux.md +11 -0
  539. package/docs/location-command.md +95 -0
  540. package/docs/location.md +46 -0
  541. package/docs/logging.md +110 -0
  542. package/docs/lore.md +131 -0
  543. package/docs/mac/bun.md +133 -0
  544. package/docs/mac/canvas.md +161 -0
  545. package/docs/mac/child-process.md +72 -0
  546. package/docs/mac/dev-setup.md +81 -0
  547. package/docs/mac/health.md +28 -0
  548. package/docs/mac/icon.md +26 -0
  549. package/docs/mac/logging.md +51 -0
  550. package/docs/mac/menu-bar.md +69 -0
  551. package/docs/mac/peekaboo.md +170 -0
  552. package/docs/mac/permissions.md +40 -0
  553. package/docs/mac/release.md +76 -0
  554. package/docs/mac/remote.md +57 -0
  555. package/docs/mac/signing.md +41 -0
  556. package/docs/mac/skills.md +27 -0
  557. package/docs/mac/voice-overlay.md +52 -0
  558. package/docs/mac/voicewake.md +56 -0
  559. package/docs/mac/webchat.md +27 -0
  560. package/docs/mac/xpc.md +40 -0
  561. package/docs/macos.md +104 -0
  562. package/docs/model-failover.md +75 -0
  563. package/docs/models.md +91 -0
  564. package/docs/multi-agent.md +74 -0
  565. package/docs/nix.md +95 -0
  566. package/docs/nodes.md +157 -0
  567. package/docs/onboarding-config-protocol.md +34 -0
  568. package/docs/onboarding.md +189 -0
  569. package/docs/pairing.md +85 -0
  570. package/docs/plans/cron-add-hardening.md +72 -0
  571. package/docs/plans/group-policy-hardening.md +121 -0
  572. package/docs/poll.md +52 -0
  573. package/docs/prereqs.md +67 -0
  574. package/docs/presence.md +133 -0
  575. package/docs/proposals/model-config.md +147 -0
  576. package/docs/provider-routing.md +25 -0
  577. package/docs/queue.md +78 -0
  578. package/docs/reference/templates/AGENTS.md +164 -0
  579. package/docs/remote-gateway-readme.md +153 -0
  580. package/docs/remote.md +61 -0
  581. package/docs/research/memory.md +227 -0
  582. package/docs/rpc.md +35 -0
  583. package/docs/security.md +200 -0
  584. package/docs/session-ingestion.md +119 -0
  585. package/docs/session-tool.md +154 -0
  586. package/docs/session.md +85 -0
  587. package/docs/sessions.md +8 -0
  588. package/docs/setup.md +131 -0
  589. package/docs/showcase.md +37 -0
  590. package/docs/signal.md +122 -0
  591. package/docs/skills-config.md +58 -0
  592. package/docs/skills.md +153 -0
  593. package/docs/slack.md +221 -0
  594. package/docs/subagents.md +72 -0
  595. package/docs/tailscale.md +71 -0
  596. package/docs/talk.md +79 -0
  597. package/docs/telegram.md +96 -0
  598. package/docs/templates/AGENTS.md +286 -0
  599. package/docs/templates/BOOTSTRAP.md +35 -0
  600. package/docs/templates/IDENTITY.md +17 -0
  601. package/docs/templates/PROFILE.md +14 -0
  602. package/docs/templates/SOUL.md +41 -0
  603. package/docs/templates/TOOLS.md +41 -0
  604. package/docs/templates/USER.md +8 -0
  605. package/docs/test.md +43 -0
  606. package/docs/testing-onboarding-quickstart.md +76 -0
  607. package/docs/testing-philosophy.md +211 -0
  608. package/docs/thinking.md +46 -0
  609. package/docs/timezone.md +40 -0
  610. package/docs/tools.md +346 -0
  611. package/docs/troubleshooting.md +257 -0
  612. package/docs/tui.md +71 -0
  613. package/docs/typebox.md +42 -0
  614. package/docs/updating.md +138 -0
  615. package/docs/usage-cloud-aggregation-spec.md +133 -0
  616. package/docs/usage-suggestions-pipeline.md +126 -0
  617. package/docs/voicewake.md +61 -0
  618. package/docs/web.md +115 -0
  619. package/docs/webchat.md +34 -0
  620. package/docs/webhook.md +132 -0
  621. package/docs/whatsapp-clawd.jpg +0 -0
  622. package/docs/whatsapp.md +170 -0
  623. package/docs/windows.md +11 -0
  624. package/docs/wizard.md +167 -0
  625. package/package.json +209 -0
  626. package/skills/1password/SKILL.md +54 -0
  627. package/skills/1password/docs/setup.md +85 -0
  628. package/skills/1password/docs/troubleshooting.md +63 -0
  629. package/skills/1password/references/cli-examples.md +29 -0
  630. package/skills/1password/references/get-started.md +17 -0
  631. package/skills/agent-browser/SKILL.md +450 -0
  632. package/skills/agent-browser/docs/browser-use-eval.md +95 -0
  633. package/skills/agent-browser/docs/first-tests.md +261 -0
  634. package/skills/agent-browser/docs/wordle-nyt-eval.js +32 -0
  635. package/skills/aix/SKILL.md +93 -0
  636. package/skills/aix/docs/embeddings.md +40 -0
  637. package/skills/aix/docs/setup.md +58 -0
  638. package/skills/aix/docs/troubleshooting.md +41 -0
  639. package/skills/aix/references/sql.md +48 -0
  640. package/skills/apple-notes/SKILL.md +50 -0
  641. package/skills/apple-reminders/SKILL.md +67 -0
  642. package/skills/bear-notes/SKILL.md +79 -0
  643. package/skills/bird/SKILL.md +32 -0
  644. package/skills/bird/docs/auth.md +31 -0
  645. package/skills/bird/docs/troubleshooting.md +31 -0
  646. package/skills/blogwatcher/SKILL.md +46 -0
  647. package/skills/blucli/SKILL.md +27 -0
  648. package/skills/brave-search/SKILL.md +36 -0
  649. package/skills/brave-search/docs/setup.md +40 -0
  650. package/skills/brave-search/docs/troubleshooting.md +37 -0
  651. package/skills/brave-search/docs/usage.md +28 -0
  652. package/skills/brave-search/scripts/content.mjs +53 -0
  653. package/skills/brave-search/scripts/search.mjs +79 -0
  654. package/skills/browser-use-agent-sdk/SKILL.md +90 -0
  655. package/skills/camsnap/SKILL.md +25 -0
  656. package/skills/clawdhub/SKILL.md +53 -0
  657. package/skills/coding-agent/SKILL.md +274 -0
  658. package/skills/comms/SKILL.md +249 -0
  659. package/skills/comms/docs/adapters.md +54 -0
  660. package/skills/comms/docs/setup.md +56 -0
  661. package/skills/comms/docs/troubleshooting.md +44 -0
  662. package/skills/comms/references/schema.md +49 -0
  663. package/skills/computer-use/SKILL.md +204 -0
  664. package/skills/computer-use/docs/open-interpreter.md +26 -0
  665. package/skills/computer-use/docs/peekaboo.md +26 -0
  666. package/skills/computer-use/docs/setup.md +47 -0
  667. package/skills/computer-use/docs/troubleshooting.md +33 -0
  668. package/skills/discord/SKILL.md +370 -0
  669. package/skills/eightctl/SKILL.md +29 -0
  670. package/skills/eve/SKILL.md +215 -0
  671. package/skills/eve/docs/dual-account.md +84 -0
  672. package/skills/eve/docs/intelligence.md +58 -0
  673. package/skills/eve/docs/setup.md +60 -0
  674. package/skills/eve/docs/troubleshooting.md +54 -0
  675. package/skills/eve/scripts/setup-dual-account.sh +125 -0
  676. package/skills/filesystem/SKILL.md +217 -0
  677. package/skills/food-order/SKILL.md +41 -0
  678. package/skills/gemini/SKILL.md +23 -0
  679. package/skills/gh/SKILL.md +22 -0
  680. package/skills/gh/docs/usage.md +41 -0
  681. package/skills/gifgrep/SKILL.md +47 -0
  682. package/skills/github/SKILL.md +26 -0
  683. package/skills/github/docs/setup.md +21 -0
  684. package/skills/github/docs/troubleshooting.md +24 -0
  685. package/skills/gog/SKILL.md +104 -0
  686. package/skills/gog/docs/portability.md +94 -0
  687. package/skills/gog/docs/setup.md +76 -0
  688. package/skills/gog/docs/troubleshooting.md +94 -0
  689. package/skills/gog/scripts/cdp/README.md +90 -0
  690. package/skills/gog/scripts/cdp/add_test_users.py +69 -0
  691. package/skills/gog/scripts/cdp/auth_add_accounts.py +209 -0
  692. package/skills/gog/scripts/cdp/auth_add_accounts_manual.py +206 -0
  693. package/skills/gog/scripts/cdp/create_oauth_client.py +165 -0
  694. package/skills/gog/scripts/cdp/launch_cdp_chrome.sh +58 -0
  695. package/skills/google-oauth/SKILL.md +94 -0
  696. package/skills/goplaces/SKILL.md +30 -0
  697. package/skills/imsg/SKILL.md +25 -0
  698. package/skills/json-render/SKILL.md +154 -0
  699. package/skills/json-render/assets/components/README.md +21 -0
  700. package/skills/json-render/assets/components/catalog.ts +78 -0
  701. package/skills/json-render/assets/components/registry.tsx +172 -0
  702. package/skills/json-render/assets/demo/App.css +397 -0
  703. package/skills/json-render/assets/demo/App.tsx +897 -0
  704. package/skills/json-render/assets/demo/README.md +22 -0
  705. package/skills/json-render/assets/demo/catalog.ts +78 -0
  706. package/skills/json-render/assets/demo/data/nexus-core.json +31 -0
  707. package/skills/json-render/assets/demo/index.css +27 -0
  708. package/skills/json-render/assets/demo/registry.tsx +150 -0
  709. package/skills/json-render/docs/nexus-state-demo.md +84 -0
  710. package/skills/json-render/docs/shadcn-preset.md +33 -0
  711. package/skills/json-render/scripts/create-vite-demo.sh +45 -0
  712. package/skills/json-render/scripts/llm-server/README.md +33 -0
  713. package/skills/json-render/scripts/llm-server/catalog.ts +78 -0
  714. package/skills/json-render/scripts/llm-server/package-lock.json +702 -0
  715. package/skills/json-render/scripts/llm-server/package.json +18 -0
  716. package/skills/json-render/scripts/llm-server/server.ts +285 -0
  717. package/skills/local-places/SERVER_README.md +101 -0
  718. package/skills/local-places/SKILL.md +91 -0
  719. package/skills/local-places/pyproject.toml +27 -0
  720. package/skills/local-places/src/local_places/__init__.py +2 -0
  721. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  722. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  723. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  724. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  725. package/skills/local-places/src/local_places/google_places.py +314 -0
  726. package/skills/local-places/src/local_places/main.py +65 -0
  727. package/skills/local-places/src/local_places/schemas.py +107 -0
  728. package/skills/mcporter/SKILL.md +38 -0
  729. package/skills/model-usage/SKILL.md +45 -0
  730. package/skills/model-usage/references/codexbar-cli.md +28 -0
  731. package/skills/model-usage/scripts/model_usage.py +310 -0
  732. package/skills/nano-banana-pro/SKILL.md +30 -0
  733. package/skills/nano-banana-pro/scripts/generate_image.py +169 -0
  734. package/skills/nano-pdf/SKILL.md +20 -0
  735. package/skills/nexus-cloud/SKILL.md +53 -0
  736. package/skills/nexus-cloud/docs/security.md +24 -0
  737. package/skills/nexus-cloud/docs/setup.md +51 -0
  738. package/skills/nexus-cloud/docs/troubleshooting.md +28 -0
  739. package/skills/notion/SKILL.md +156 -0
  740. package/skills/obsidian/SKILL.md +55 -0
  741. package/skills/onboarding/SKILL.md +515 -0
  742. package/skills/onboarding/docs/CAPABILITIES.md +444 -0
  743. package/skills/onboarding/docs/CAPABILITY_TAXONOMY.md +608 -0
  744. package/skills/onboarding/docs/CLI_GRAMMAR.md +797 -0
  745. package/skills/onboarding/docs/CLI_GRAMMAR_CREDENTIALS.md +632 -0
  746. package/skills/onboarding/docs/CLI_GRAMMAR_ONBOARDING.md +815 -0
  747. package/skills/onboarding/docs/CLI_GRAMMAR_SKILLS.md +449 -0
  748. package/skills/onboarding/docs/DOCUMENTATION_OVERVIEW.md +290 -0
  749. package/skills/onboarding/docs/ENTITY_MODEL.md +582 -0
  750. package/skills/onboarding/docs/GOAL_STATE_ARCHITECTURE.md +395 -0
  751. package/skills/onboarding/docs/NEXUS_SYSTEM_OVERVIEW.md +476 -0
  752. package/skills/onboarding/docs/SKILLS_HUB_SPEC.md +477 -0
  753. package/skills/onboarding/docs/SKILLS_SPECIFICATION.md +947 -0
  754. package/skills/onboarding/docs/SKILL_GATEWAY_DESIGN.md +702 -0
  755. package/skills/onboarding/docs/SKILL_GATEWAY_PRD.md +278 -0
  756. package/skills/onboarding/docs/SKILL_INVENTORY.md +266 -0
  757. package/skills/onboarding/docs/STATE_ARCHITECTURE.md +547 -0
  758. package/skills/onboarding/docs/TROUBLESHOOTING.md +363 -0
  759. package/skills/onboarding/docs/USER_JOURNEY.md +797 -0
  760. package/skills/onboarding/docs/WOW_MOMENTS.md +232 -0
  761. package/skills/onboarding/docs/agent-apple-id.md +289 -0
  762. package/skills/onboarding/docs/skill-deep-dives/1password.md +367 -0
  763. package/skills/onboarding/docs/skill-deep-dives/TEMPLATE.md +197 -0
  764. package/skills/onboarding/docs/skill-deep-dives/aix.md +498 -0
  765. package/skills/onboarding/docs/skill-deep-dives/bird.md +357 -0
  766. package/skills/onboarding/docs/skill-deep-dives/brave-search.md +601 -0
  767. package/skills/onboarding/docs/skill-deep-dives/comms.md +607 -0
  768. package/skills/onboarding/docs/skill-deep-dives/computer-use.md +599 -0
  769. package/skills/onboarding/docs/skill-deep-dives/cron-and-heartbeat.md +576 -0
  770. package/skills/onboarding/docs/skill-deep-dives/eve.md +711 -0
  771. package/skills/onboarding/docs/skill-deep-dives/github.md +333 -0
  772. package/skills/onboarding/docs/skill-deep-dives/gog.md +640 -0
  773. package/skills/onboarding/docs/skill-deep-dives/homebrew-prereqs.md +785 -0
  774. package/skills/onboarding/docs/skill-deep-dives/nexus-cloud.md +689 -0
  775. package/skills/onboarding/docs/skill-deep-dives/qmd.md +742 -0
  776. package/skills/onboarding/docs/skill-deep-dives/telegram.md +379 -0
  777. package/skills/onboarding/docs/skill-deep-dives/wacli.md +399 -0
  778. package/skills/onboarding/docs/skill-deep-dives/weather.md +513 -0
  779. package/skills/onboarding/scripts/ralph/prd.json +215 -0
  780. package/skills/onboarding/scripts/ralph/progress.txt +99 -0
  781. package/skills/onboarding/scripts/ralph/prompt.md +87 -0
  782. package/skills/onboarding/scripts/ralph/ralph.log +84 -0
  783. package/skills/onboarding/scripts/ralph/ralph.sh +45 -0
  784. package/skills/onboarding/scripts/setup-cursor-skills.sh +40 -0
  785. package/skills/openai-image-gen/SKILL.md +31 -0
  786. package/skills/openai-image-gen/scripts/gen.py +173 -0
  787. package/skills/openai-whisper/SKILL.md +19 -0
  788. package/skills/openai-whisper-api/SKILL.md +43 -0
  789. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  790. package/skills/openhue/SKILL.md +30 -0
  791. package/skills/oracle/SKILL.md +105 -0
  792. package/skills/ordercli/SKILL.md +47 -0
  793. package/skills/peekaboo/SKILL.md +153 -0
  794. package/skills/qmd/SKILL.md +32 -0
  795. package/skills/qmd/docs/mcp.md +30 -0
  796. package/skills/qmd/docs/ollama.md +42 -0
  797. package/skills/qmd/docs/setup.md +44 -0
  798. package/skills/sag/SKILL.md +62 -0
  799. package/skills/skill-cli-template/SKILL.md +109 -0
  800. package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
  801. package/skills/slack/SKILL.md +144 -0
  802. package/skills/songsee/SKILL.md +29 -0
  803. package/skills/sonoscli/SKILL.md +26 -0
  804. package/skills/spotify-player/SKILL.md +34 -0
  805. package/skills/summarize/SKILL.md +49 -0
  806. package/skills/telegram/SKILL.md +20 -0
  807. package/skills/telegram/docs/pairing.md +30 -0
  808. package/skills/telegram/docs/setup.md +41 -0
  809. package/skills/telegram/docs/webhook.md +17 -0
  810. package/skills/things-mac/SKILL.md +61 -0
  811. package/skills/tmux/SKILL.md +121 -0
  812. package/skills/tmux/scripts/find-sessions.sh +112 -0
  813. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  814. package/skills/trello/SKILL.md +84 -0
  815. package/skills/upstream-sync/SKILL.md +151 -0
  816. package/skills/upstream-sync/scripts/auto-port.sh +227 -0
  817. package/skills/upstream-sync/scripts/check-all.sh +88 -0
  818. package/skills/upstream-sync/scripts/check-nexus.sh +146 -0
  819. package/skills/upstream-sync/scripts/check-pi-ai.sh +129 -0
  820. package/skills/video-frames/SKILL.md +29 -0
  821. package/skills/video-frames/scripts/frame.sh +81 -0
  822. package/skills/wacli/SKILL.md +48 -0
  823. package/skills/wacli/docs/auth.md +21 -0
  824. package/skills/wacli/docs/backup.md +9 -0
  825. package/skills/wacli/docs/troubleshooting.md +21 -0
  826. package/skills/weather/SKILL.md +53 -0
  827. package/skills/weather/docs/usage.md +40 -0
package/docs/nodes.md ADDED
@@ -0,0 +1,157 @@
1
+ ---
2
+ summary: "Nodes: pairing, capabilities, permissions, and CLI helpers for canvas/camera/screen/system"
3
+ read_when:
4
+ - Pairing iOS/Android nodes to a gateway
5
+ - Using node canvas/camera for agent context
6
+ - Adding new node commands or CLI helpers
7
+ ---
8
+
9
+ # Nodes
10
+
11
+ A **node** is a companion device (iOS/Android today) that connects to the Gateway over the **Bridge** and exposes a command surface (e.g. `canvas.*`, `camera.*`, `system.*`) via `node.invoke`.
12
+
13
+ macOS can also run in **node mode**: the menubar app connects to the Gateway’s bridge and exposes its local canvas/camera commands as a node (so `nexus nodes …` works against this Mac).
14
+
15
+ ## Pairing + status
16
+
17
+ Pairing is gateway-owned and approval-based. See [`docs/gateway/pairing.md`](https://docs.nexus.bot/gateway/pairing) for the full flow.
18
+
19
+ Quick CLI:
20
+
21
+ ```bash
22
+ nexus nodes pending
23
+ nexus nodes approve <requestId>
24
+ nexus nodes reject <requestId>
25
+ nexus nodes status
26
+ nexus nodes describe --node <idOrNameOrIp>
27
+ nexus nodes rename --node <idOrNameOrIp> --name "Kitchen iPad"
28
+ ```
29
+
30
+ Notes:
31
+ - `nodes rename` stores a display name override in the gateway pairing store.
32
+
33
+ ## Invoking commands
34
+
35
+ Low-level (raw RPC):
36
+
37
+ ```bash
38
+ nexus nodes invoke --node <idOrNameOrIp> --command canvas.eval --params '{"javaScript":"location.href"}'
39
+ ```
40
+
41
+ Higher-level helpers exist for the common “give the agent a MEDIA attachment” workflows.
42
+
43
+ ## Screenshots (canvas snapshots)
44
+
45
+ If the node is showing the Canvas (WebView), `canvas.snapshot` returns `{ format, base64 }`.
46
+
47
+ CLI helper (writes to a temp file and prints `MEDIA:<path>`):
48
+
49
+ ```bash
50
+ nexus nodes canvas snapshot --node <idOrNameOrIp> --format png
51
+ nexus nodes canvas snapshot --node <idOrNameOrIp> --format jpg --max-width 1200 --quality 0.9
52
+ ```
53
+
54
+ Simple shortcut (auto-picks a single connected node if possible):
55
+
56
+ ```bash
57
+ nexus canvas snapshot --format png
58
+ nexus canvas snapshot --format jpg --max-width 1200 --quality 0.9
59
+ ```
60
+
61
+ ## Photos + videos (node camera)
62
+
63
+ Photos (`jpg`):
64
+
65
+ ```bash
66
+ nexus nodes camera snap --node <idOrNameOrIp> # default: both facings (2 MEDIA lines)
67
+ nexus nodes camera snap --node <idOrNameOrIp> --facing front
68
+ ```
69
+
70
+ Video clips (`mp4`):
71
+
72
+ ```bash
73
+ nexus nodes camera clip --node <idOrNameOrIp> --duration 10s
74
+ nexus nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio
75
+ ```
76
+
77
+ Notes:
78
+ - The node must be **foregrounded** for `canvas.*` and `camera.*` (background calls return `NODE_BACKGROUND_UNAVAILABLE`).
79
+ - Clip duration is clamped (currently `<= 60s`) to avoid oversized base64 payloads.
80
+ - Android will prompt for `CAMERA`/`RECORD_AUDIO` permissions when possible; denied permissions fail with `*_PERMISSION_REQUIRED`.
81
+
82
+ ## Screen recordings (nodes)
83
+
84
+ Nodes expose `screen.record` (mp4). Example:
85
+
86
+ ```bash
87
+ nexus nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10
88
+ nexus nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio
89
+ ```
90
+
91
+ Notes:
92
+ - `screen.record` requires the node app to be foregrounded.
93
+ - Android will show the system screen-capture prompt before recording.
94
+ - Screen recordings are clamped to `<= 60s`.
95
+ - `--no-audio` disables microphone capture (supported on iOS/Android; macOS uses system capture audio).
96
+
97
+ ## Location (nodes)
98
+
99
+ Nodes expose `location.get` when Location is enabled in settings.
100
+
101
+ CLI helper:
102
+
103
+ ```bash
104
+ nexus nodes location get --node <idOrNameOrIp>
105
+ nexus nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000
106
+ ```
107
+
108
+ Notes:
109
+ - Location is **off by default**.
110
+ - “Always” requires system permission; background fetch is best-effort.
111
+ - The response includes lat/lon, accuracy (meters), and timestamp.
112
+
113
+ ## SMS (Android nodes)
114
+
115
+ Android nodes can expose `sms.send` when the user grants **SMS** permission and the device supports telephony.
116
+
117
+ Low-level invoke:
118
+
119
+ ```bash
120
+ nexus nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from Nexus"}'
121
+ ```
122
+
123
+ Notes:
124
+ - The permission prompt must be accepted on the Android device before the capability is advertised.
125
+ - Wi-Fi-only devices without telephony will not advertise `sms.send`.
126
+
127
+ ## System commands (mac node)
128
+
129
+ The macOS node exposes `system.run` and `system.notify`.
130
+
131
+ Examples:
132
+
133
+ ```bash
134
+ nexus nodes run --node <idOrNameOrIp> -- echo "Hello from mac node"
135
+ nexus nodes notify --node <idOrNameOrIp> --title "Ping" --body "Gateway ready"
136
+ ```
137
+
138
+ Notes:
139
+ - `system.run` returns stdout/stderr/exit code in the payload.
140
+ - `system.notify` respects notification permission state on the macOS app.
141
+
142
+ ## Permissions map
143
+
144
+ Nodes may include a `permissions` map in `node.list` / `node.describe`, keyed by permission name (e.g. `screenRecording`, `accessibility`) with boolean values (`true` = granted).
145
+
146
+ ## Mac node mode
147
+
148
+ - The macOS menubar app connects to the Gateway bridge as a node (so `nexus nodes …` works against this Mac).
149
+ - In remote mode, the app opens an SSH tunnel for the bridge port and connects to `localhost`.
150
+
151
+ ## Where to look in code
152
+
153
+ - CLI wiring: `src/cli/nodes-cli.ts`
154
+ - Canvas snapshot decoding/temp paths: `src/cli/nodes-canvas.ts`
155
+ - Duration parsing for CLI: `src/cli/parse-duration.ts`
156
+ - iOS node commands: `apps/ios/Sources/Model/NodeAppModel.swift`
157
+ - Android node commands: `apps/android/app/src/main/java/com/nexus/android/node/*`
@@ -0,0 +1,34 @@
1
+ ---
2
+ summary: "RPC protocol notes for onboarding wizard and config schema"
3
+ read_when: "Changing onboarding wizard steps or config schema endpoints"
4
+ ---
5
+
6
+ # Onboarding + Config Protocol
7
+
8
+ Purpose: shared onboarding + config surfaces across CLI, macOS app, and Web UI.
9
+
10
+ ## Components
11
+ - Wizard engine: `src/wizard` (session + prompts + onboarding state).
12
+ - CLI: `src/commands/onboard-*.ts` uses the wizard with the CLI prompter.
13
+ - Gateway RPC: wizard + config schema endpoints serve UI clients.
14
+ - macOS: SwiftUI onboarding uses the wizard step model.
15
+ - Web UI: config form renders from JSON Schema + hints.
16
+
17
+ ## Gateway RPC
18
+ - `wizard.start` params: `{ mode?: "local"|"remote", workspace?: string }`
19
+ - `wizard.next` params: `{ sessionId, answer?: { stepId, value? } }`
20
+ - `wizard.cancel` params: `{ sessionId }`
21
+ - `wizard.status` params: `{ sessionId }`
22
+ - `config.schema` params: `{}`
23
+
24
+ Responses (shape)
25
+ - Wizard: `{ sessionId, done, step?, status?, error? }`
26
+ - Config schema: `{ schema, uiHints, version, generatedAt }`
27
+
28
+ ## UI Hints
29
+ - `uiHints` keyed by path; optional metadata (label/help/group/order/advanced/sensitive/placeholder).
30
+ - Sensitive fields render as password inputs; no redaction layer.
31
+ - Unsupported schema nodes fall back to the raw JSON editor.
32
+
33
+ ## Notes
34
+ - This doc is the single place to track protocol refactors for onboarding/config.
@@ -0,0 +1,189 @@
1
+ ---
2
+ summary: "Planned first-run onboarding flow for Nexus (local vs remote, OAuth auth, workspace bootstrap ritual)"
3
+ read_when:
4
+ - Designing the macOS onboarding assistant
5
+ - Implementing Anthropic/OpenAI auth or identity setup
6
+ ---
7
+ # Onboarding (macOS app)
8
+
9
+ This doc describes the intended **first-run onboarding** for Nexus. The goal is a good “day 0” experience: pick where the Gateway runs, bind subscription auth (Anthropic or OpenAI) for the embedded agent runtime, and then let the **agent bootstrap itself** via a first-run ritual in the workspace.
10
+
11
+ ## Page order (high level)
12
+
13
+ 1) **Local vs Remote**
14
+ 2) **(Local only)** Connect subscription auth (Anthropic / OpenAI OAuth) — optional, but recommended
15
+ 3) **Connect Gmail (optional)** — run `nexus hooks gmail setup` to configure Pub/Sub hooks
16
+ 4) **Onboarding chat** — dedicated session where the agent introduces itself and guides setup
17
+
18
+ ## 1) Local vs Remote
19
+
20
+ First question: where does the **Gateway** run?
21
+
22
+ - **Local (this Mac):** onboarding can run OAuth flows and write OAuth credentials locally.
23
+ - **Remote (over SSH/tailnet):** onboarding must not run OAuth locally, because credentials must exist on the **gateway host**.
24
+
25
+ Gateway auth tip:
26
+ - If you only use Nexus on this Mac (loopback gateway), keep auth **Off**.
27
+ - Use **Token** for multi-machine access or non-loopback binds.
28
+
29
+ Implementation note (2025-12-19): in local mode, the macOS app bundles the Gateway and enables it via a per-user launchd LaunchAgent (no global npm install/Node requirement for the user).
30
+
31
+ ## 2) Local-only: Connect subscription auth (Anthropic / OpenAI OAuth)
32
+
33
+ This is the “bind Nexus to subscription auth” step. It is explicitly the **Anthropic (Claude Pro/Max)** or **OpenAI (ChatGPT/Codex)** OAuth flow, not a generic “login”.
34
+
35
+ ### Recommended: OAuth (Anthropic)
36
+
37
+ The macOS app should:
38
+ - Start the Anthropic OAuth (PKCE) flow in the user’s browser.
39
+ - Ask the user to paste the `code#state` value.
40
+ - Exchange it for tokens and write credentials to:
41
+ - `~/nexus/state/credentials/oauth.json` (file mode `0600`, directory mode `0700`)
42
+
43
+ Why this location matters: it’s the Nexus-owned OAuth store.
44
+ Nexus also imports `oauth.json` into the agent auth profile store (`~/nexus/state/agent/auth-profiles.json`) on first use.
45
+
46
+ ### Recommended: OAuth (OpenAI Codex)
47
+
48
+ The macOS app should:
49
+ - Start the OpenAI Codex OAuth (PKCE) flow in the user’s browser.
50
+ - Auto-capture the callback on `http://127.0.0.1:1455/auth/callback` when possible.
51
+ - If the callback fails, prompt the user to paste the redirect URL or code.
52
+ - Store credentials in `~/nexus/state/credentials/oauth.json` (same OAuth store as Anthropic).
53
+ - Set `agent.model` to `openai-codex/gpt-5.2` when the model is unset or `openai/*`.
54
+
55
+ ### Alternative: API key (instructions only)
56
+
57
+ Offer an “API key” option, but for now it is **instructions only**:
58
+ - Get an Anthropic API key.
59
+ - Provide it to Nexus via your preferred mechanism (env/config).
60
+
61
+ Note: environment variables are often confusing when the Gateway is launched by a GUI app (launchd environment != your shell).
62
+
63
+ ### Model safety rule
64
+
65
+ Nexus should **always pass** `--model` when invoking the embedded agent (don’t rely on defaults).
66
+
67
+ Example (CLI):
68
+
69
+ ```bash
70
+ nexus agent --mode rpc --model anthropic/claude-opus-4-5 "<message>"
71
+ ```
72
+
73
+ If the user skips auth, onboarding should be clear: the agent likely won’t respond until auth is configured.
74
+
75
+ ## 4) Onboarding chat (dedicated session)
76
+
77
+ The onboarding flow now embeds the SwiftUI chat view directly. It uses a **special session key**
78
+ (`onboarding`) so the “newborn agent” ritual stays separate from the main chat.
79
+
80
+ This onboarding chat is where the agent:
81
+ - follows the BOOTSTRAP prompt when identity is missing (one question at a time)
82
+ - visits **soul.md** with the user and writes `SOUL.md` (values, tone, boundaries)
83
+ - asks how the user wants to talk (web-only / WhatsApp / Telegram)
84
+ - guides linking steps (including showing a QR inline for WhatsApp via the `whatsapp_login` tool)
85
+
86
+ If identity already exists, the onboarding chat step is skipped.
87
+
88
+ ## 2.5) Optional: Connect Gmail
89
+
90
+ The macOS onboarding includes an optional Gmail step. It runs:
91
+
92
+ ```bash
93
+ nexus hooks gmail setup --account you@gmail.com
94
+ ```
95
+
96
+ This writes the full `hooks.gmail` config, installs `gcloud` / `gog` / `tailscale`
97
+ via Homebrew if needed, and configures the Pub/Sub push endpoint. After setup,
98
+ restart the gateway so the internal Gmail watcher starts.
99
+
100
+ Once setup is complete, the user can switch to the normal chat (`main`) via the menu bar panel.
101
+
102
+ ## 5) Agent bootstrap ritual (outside onboarding)
103
+
104
+ We no longer collect identity in the onboarding wizard. Instead, the **first agent run** performs a playful bootstrap ritual using files in state:
105
+
106
+ - Workspace is created implicitly (default `~/nexus/home`, configurable via `agent.workspace`) when local is selected,
107
+ but only if the folder is empty or already contains `AGENTS.md`.
108
+ - Files are seeded: `~/nexus/AGENTS.md`, `state/nexus/onboarding/BOOTSTRAP.md`, and identity files in `state/`.
109
+ - `BOOTSTRAP.md` tells the agent to keep it conversational:
110
+ - open with a cute hello
111
+ - ask **one question at a time** (no multi-question bombardment)
112
+ - offer a small set of suggestions where helpful (name, creature, emoji)
113
+ - wait for the user’s reply before asking the next question
114
+ - The agent writes results to:
115
+ - `state/agents/{agent}/identity/IDENTITY.md` (agent name, vibe/creature, emoji)
116
+ - `state/user/identity/PROFILE.md` (who the user is + how they want to be addressed)
117
+ - `state/agents/{agent}/identity/SOUL.md` (identity, tone, boundaries — crafted from the soul.md prompt)
118
+ - `state/nexus/config.json` (structured identity defaults)
119
+ - The bootstrap prompt remains, but `nexus status` stops showing it once identity exists.
120
+
121
+ Identity data still feeds the same defaults as before:
122
+
123
+ - outbound prefix emoji (`messages.responsePrefix`)
124
+ - group mention patterns / wake words
125
+ - default session intro (“You are Samantha…”)
126
+ - macOS UI labels
127
+
128
+ ## 6) Workspace notes (no explicit onboarding step)
129
+
130
+ The workspace is created automatically as part of agent bootstrap (no dedicated onboarding screen).
131
+
132
+ Recommendation: treat the workspace as the agent’s “memory” and make it a git repo (ideally private) so identity + memories are backed up:
133
+
134
+ ```bash
135
+ cd ~/nexus/home
136
+ git init
137
+ git add AGENTS.md
138
+ git commit -m "Add agent workspace"
139
+ ```
140
+
141
+ Daily memory lives under `memory/` in the workspace:
142
+ - one file per day: `memory/YYYY-MM-DD.md`
143
+ - read today + yesterday on session start
144
+ - keep it short (durable facts, preferences, decisions; avoid secrets)
145
+
146
+ ## Remote mode note (why OAuth is hidden)
147
+
148
+ If the Gateway runs on another machine, OAuth credentials must be created/stored on that host (where the agent runtime runs).
149
+
150
+ For now, remote onboarding should:
151
+ - explain why OAuth isn't shown
152
+ - point the user at the credential location (`~/nexus/state/credentials/oauth.json`) and the auth profile store (`~/nexus/state/agent/auth-profiles.json`) on the gateway host
153
+ - mention that the **bootstrap ritual happens on the gateway host** (same BOOTSTRAP/IDENTITY/USER files)
154
+
155
+ ### Manual credential setup
156
+
157
+ On the gateway host, create `~/nexus/state/credentials/oauth.json` with this exact format:
158
+
159
+ ```json
160
+ {
161
+ "anthropic": { "type": "oauth", "access": "sk-ant-oat01-...", "refresh": "sk-ant-ort01-...", "expires": 1767304352803 },
162
+ "openai-codex": { "type": "oauth", "access": "eyJhbGciOi...", "refresh": "oai-refresh-...", "expires": 1767304352803, "accountId": "acct_..." }
163
+ }
164
+ ```
165
+
166
+ Set permissions: `chmod 600 ~/nexus/state/credentials/oauth.json`
167
+
168
+ **Note:** Nexus auto-imports from legacy pi-coding-agent paths (`~/.pi/agent/oauth.json`, etc.) but this does NOT work with Claude Code credentials — different file and format.
169
+
170
+ ### Using Claude Code credentials
171
+
172
+ If Claude Code is installed on the gateway host, convert its credentials:
173
+
174
+ ```bash
175
+ cat ~/.claude/.credentials.json | jq '{
176
+ anthropic: {
177
+ access: .claudeAiOauth.accessToken,
178
+ refresh: .claudeAiOauth.refreshToken,
179
+ expires: .claudeAiOauth.expiresAt
180
+ }
181
+ }' > ~/nexus/state/credentials/oauth.json
182
+ chmod 600 ~/nexus/state/credentials/oauth.json
183
+ ```
184
+
185
+ | Claude Code field | Nexus field |
186
+ |-------------------|---------------|
187
+ | `accessToken` | `access` |
188
+ | `refreshToken` | `refresh` |
189
+ | `expiresAt` | `expires` |
@@ -0,0 +1,85 @@
1
+ ---
2
+ summary: "Pairing overview: approve who can DM you + which nodes can join"
3
+ read_when:
4
+ - Setting up DM access control
5
+ - Pairing a new iOS/Android node
6
+ - Reviewing Nexus security posture
7
+ ---
8
+
9
+ # Pairing
10
+
11
+ “Pairing” is Nexus’s explicit **owner approval** step.
12
+ It is used in two places:
13
+
14
+ 1) **DM pairing** (who is allowed to talk to the bot)
15
+ 2) **Node pairing** (which devices/nodes are allowed to join the gateway network)
16
+
17
+ Security context: https://docs.nexus.bot/security
18
+
19
+ ## 1) DM pairing (inbound chat access)
20
+
21
+ When a provider is configured with DM policy `pairing`, unknown senders get a short code and their message is **not processed** until you approve.
22
+
23
+ Default DM policies are documented in: https://docs.nexus.bot/security
24
+
25
+ ### Approve a sender
26
+
27
+ ```bash
28
+ nexus pairing list --provider telegram
29
+ nexus pairing approve --provider telegram <CODE>
30
+ ```
31
+
32
+ Supported providers: `telegram`, `whatsapp`, `signal`, `imessage`, `discord`, `slack`.
33
+
34
+ ### Where the state lives
35
+
36
+ Stored under `~/nexus/state/credentials/`:
37
+ - Pending requests: `<provider>-pairing.json`
38
+ - Approved allowlist store: `<provider>-allowFrom.json`
39
+
40
+ Treat these as sensitive (they gate access to your assistant).
41
+
42
+ ### Source of truth (code)
43
+
44
+ - DM pairing storage + code generation: [`src/pairing/pairing-store.ts`](https://github.com/nexus/nexus/blob/main/src/pairing/pairing-store.ts)
45
+ - CLI commands: [`src/cli/pairing-cli.ts`](https://github.com/nexus/nexus/blob/main/src/cli/pairing-cli.ts)
46
+
47
+ ## 2) Node pairing (iOS/Android nodes joining the gateway)
48
+
49
+ Nodes (iOS/Android, future hardware, etc.) connect to the Gateway and request to join.
50
+ The Gateway keeps an authoritative allowlist; new nodes require explicit approve/reject.
51
+
52
+ ### Approve a node
53
+
54
+ ```bash
55
+ nexus nodes pending
56
+ nexus nodes approve <requestId>
57
+ ```
58
+
59
+ ### Where the state lives
60
+
61
+ Stored under `~/nexus/state/nodes/`:
62
+ - `pending.json` (short-lived; pending requests expire)
63
+ - `paired.json` (paired nodes + tokens)
64
+
65
+ ### Details
66
+
67
+ Full protocol + design notes: https://docs.nexus.bot/gateway/pairing
68
+
69
+ ### Source of truth (code)
70
+
71
+ - Node pairing store (pending/paired + token issuance): [`src/infra/node-pairing.ts`](https://github.com/nexus/nexus/blob/main/src/infra/node-pairing.ts)
72
+ - Gateway methods/events (`node.pair.*`): [`src/gateway/server-methods/nodes.ts`](https://github.com/nexus/nexus/blob/main/src/gateway/server-methods/nodes.ts)
73
+ - CLI: [`src/cli/nodes-cli.ts`](https://github.com/nexus/nexus/blob/main/src/cli/nodes-cli.ts)
74
+
75
+ ## Related docs
76
+
77
+ - Security model + prompt injection: https://docs.nexus.bot/security
78
+ - Updating safely (run doctor): https://docs.nexus.bot/updating
79
+ - Provider configs:
80
+ - Telegram: https://docs.nexus.bot/telegram
81
+ - WhatsApp: https://docs.nexus.bot/whatsapp
82
+ - Signal: https://docs.nexus.bot/signal
83
+ - iMessage: https://docs.nexus.bot/imessage
84
+ - Discord: https://docs.nexus.bot/discord
85
+ - Slack: https://docs.nexus.bot/slack
@@ -0,0 +1,72 @@
1
+ ---
2
+ summary: "Harden cron.add input handling, align schemas, and improve cron UI/agent tooling"
3
+ owner: "nexus"
4
+ status: "complete"
5
+ last_updated: "2026-01-05"
6
+ ---
7
+
8
+ # Cron Add Hardening & Schema Alignment
9
+
10
+ ## Context
11
+ Recent gateway logs show repeated `cron.add` failures with invalid parameters (missing `sessionTarget`, `wakeMode`, `payload`, and malformed `schedule`). This indicates that at least one client (likely the agent tool call path) is sending wrapped or partially specified job payloads. Separately, there is drift between cron provider enums in TypeScript, gateway schema, CLI flags, and UI form types, plus a UI mismatch for `cron.status` (expects `jobCount` while gateway returns `jobs`).
12
+
13
+ ## Goals
14
+ - Stop `cron.add` INVALID_REQUEST spam by normalizing common wrapper payloads and inferring missing `kind` fields.
15
+ - Align cron provider lists across gateway schema, cron types, CLI docs, and UI forms.
16
+ - Make agent cron tool schema explicit so the LLM produces correct job payloads.
17
+ - Fix the Control UI cron status job count display.
18
+ - Add tests to cover normalization and tool behavior.
19
+
20
+ ## Non-goals
21
+ - Change cron scheduling semantics or job execution behavior.
22
+ - Add new schedule kinds or cron expression parsing.
23
+ - Overhaul the UI/UX for cron beyond the necessary field fixes.
24
+
25
+ ## Findings (current gaps)
26
+ - `CronPayloadSchema` in gateway excludes `signal` + `imessage`, while TS types include them.
27
+ - Control UI CronStatus expects `jobCount`, but gateway returns `jobs`.
28
+ - Agent cron tool schema allows arbitrary `job` objects, enabling malformed inputs.
29
+ - Gateway strictly validates `cron.add` with no normalization, so wrapped payloads fail.
30
+
31
+ ## Proposed Approach
32
+ 1. **Normalize** incoming `cron.add` payloads (unwrap `data`/`job`, infer `schedule.kind` and `payload.kind`, default `wakeMode` + `sessionTarget` when safe).
33
+ 2. **Harden** the agent cron tool schema using the canonical gateway `CronAddParamsSchema` and normalize before sending to the gateway.
34
+ 3. **Align** provider enums and cron status fields across gateway schema, TS types, CLI descriptions, and UI form controls.
35
+ 4. **Test** normalization in gateway tests and tool behavior in agent tests.
36
+
37
+ ## Multi-phase Execution Plan
38
+
39
+ ### Phase 1 — Schema + type alignment
40
+ - [x] Expand gateway `CronPayloadSchema` provider enum to include `signal` and `imessage`.
41
+ - [x] Update CLI `--provider` descriptions to include `slack` (already supported by gateway).
42
+ - [x] Update UI Cron payload/provider union types to include all supported providers.
43
+ - [x] Fix UI CronStatus type to match gateway (`jobs` instead of `jobCount`).
44
+ - [x] Update cron UI channel select to include Discord/Slack/Signal/iMessage.
45
+ - [x] Update macOS CronJobEditor channel picker + enum to include Slack/Signal/iMessage.
46
+ - [x] Document cron compatibility normalization policy in [`docs/cron.md`](https://docs.nexus.bot/cron).
47
+
48
+ ### Phase 2 — Input normalization + tooling hardening
49
+ - [x] Add shared cron input normalization helpers (`normalizeCronJobCreate`/`normalizeCronJobPatch`).
50
+ - [x] Apply normalization in gateway `cron.add` (and patch normalization in `cron.update`).
51
+ - [x] Tighten agent cron tool schema to `CronAddParamsSchema` and normalize job/patch before sending.
52
+
53
+ ### Phase 3 — Tests
54
+ - [x] Add gateway test covering wrapped `cron.add` payload normalization.
55
+ - [x] Add cron tool test to assert normalization and defaulting for `cron.add`.
56
+ - [x] Add gateway test covering `cron.update` normalization.
57
+ - [x] Add UI + Swift conformance test for cron channels + status fields.
58
+
59
+ ### Phase 4 — Verification
60
+ - [x] Run tests (full suite executed via `pnpm test -- cron-tool`).
61
+
62
+ ## Rollout/Monitoring
63
+ - Watch gateway logs for reduced `cron.add` INVALID_REQUEST errors.
64
+ - Confirm Control UI cron status shows job count after refresh.
65
+ - If errors persist, extend normalization for additional common shapes (e.g., `schedule.at`, `payload.message` without `kind`).
66
+
67
+ ## Optional Follow-ups
68
+ - Manual Control UI smoke: add cron job per provider + verify status job count.
69
+
70
+ ## Open Questions
71
+ - Should `cron.add` accept explicit `state` from clients (currently disallowed by schema)?
72
+ - Should we allow `webchat` as an explicit delivery provider (currently filtered in delivery resolution)?
@@ -0,0 +1,121 @@
1
+ # Engineering Execution Spec: groupPolicy Hardening (Telegram Allowlist Parity)
2
+
3
+ **Date**: 2026-01-05
4
+ **Status**: Complete
5
+ **PR**: #216 (feat/whatsapp-group-policy)
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ Follow-up hardening work ensures Telegram allowlists behave consistently across inbound group/DM filtering and outbound send normalization. The focus is on prefix parity (`telegram:` / `tg:`), case-insensitive matching for prefixes, and resilience to accidental whitespace in config entries. Documentation and tests were updated to reflect and lock in this behavior.
12
+
13
+ ---
14
+
15
+ ## Findings Analysis
16
+
17
+ ### [MED] F1: Telegram Allowlist Prefix Handling Is Case-Sensitive and Excludes `tg:`
18
+
19
+ **Location**: `src/telegram/bot.ts`
20
+
21
+ **Problem**: Inbound allowlist normalization only stripped a lowercase `telegram:` prefix. This rejected `TG:123` / `Telegram:123` and did not accept the `tg:` shorthand even though outbound send normalization already accepts `tg:` and case-insensitive prefixes.
22
+
23
+ **Impact**:
24
+ - DMs and group allowlists fail when users copy/paste prefixed IDs from logs or existing send format.
25
+ - Behavior is inconsistent between inbound filtering and outbound send normalization.
26
+
27
+ **Fix**: Normalize allowlist entries by trimming whitespace and stripping `telegram:` / `tg:` prefixes case-insensitively at pre-compute time.
28
+
29
+ ---
30
+
31
+ ### [LOW] F2: Allowlist Entries Are Not Trimmed
32
+
33
+ **Location**: `src/telegram/bot.ts`
34
+
35
+ **Problem**: Allowlist entries are not trimmed; accidental whitespace causes mismatches.
36
+
37
+ **Fix**: Trim and drop empty entries while normalizing allowlist inputs.
38
+
39
+ ---
40
+
41
+ ## Implementation Phases
42
+
43
+ ### Phase 1: Normalize Telegram Allowlist Inputs
44
+
45
+ **File**: `src/telegram/bot.ts`
46
+
47
+ **Changes**:
48
+ 1. Trim allowlist entries and drop empty values.
49
+ 2. Strip `telegram:` / `tg:` prefixes case-insensitively.
50
+ 3. Simplify DM allowlist check to rely on normalized values.
51
+
52
+ ---
53
+
54
+ ### Phase 2: Add Coverage for Prefix + Whitespace
55
+
56
+ **File**: `src/telegram/bot.test.ts`
57
+
58
+ **Add Tests**:
59
+ - DM allowlist accepts `TG:` prefix with surrounding whitespace.
60
+ - Group allowlist accepts `TG:` prefix case-insensitively.
61
+
62
+ ---
63
+
64
+ ### Phase 3: Documentation Updates
65
+
66
+ **Files**:
67
+ - [`docs/groups.md`](https://docs.nexus.bot/groups)
68
+ - [`docs/telegram.md`](https://docs.nexus.bot/telegram)
69
+
70
+ **Changes**:
71
+ - Document `tg:` alias and case-insensitive prefixes for Telegram allowlists.
72
+
73
+ ---
74
+
75
+ ### Phase 4: Verification
76
+
77
+ 1. Run targeted Telegram tests (`pnpm test -- src/telegram/bot.test.ts`).
78
+ 2. If time allows, run full suite (`pnpm test`).
79
+
80
+ ---
81
+
82
+ ## Files Modified
83
+
84
+ | File | Change Type | Description |
85
+ |------|-------------|-------------|
86
+ | `src/telegram/bot.ts` | Fix | Trim allowlist values; strip `telegram:` / `tg:` prefixes case-insensitively |
87
+ | `src/telegram/bot.test.ts` | Test | Add DM + group allowlist coverage for `TG:` prefix + whitespace |
88
+ | [`docs/groups.md`](https://docs.nexus.bot/groups) | Docs | Mention `tg:` alias + case-insensitive prefixes |
89
+ | [`docs/telegram.md`](https://docs.nexus.bot/telegram) | Docs | Mention `tg:` alias + case-insensitive prefixes |
90
+
91
+ ---
92
+
93
+ ## Success Criteria
94
+
95
+ - [x] Telegram allowlist accepts `telegram:` / `tg:` prefixes case-insensitively.
96
+ - [x] Telegram allowlist tolerates whitespace in config entries.
97
+ - [x] DM and group allowlist tests cover prefixed cases.
98
+ - [x] Docs updated to reflect allowlist formats.
99
+ - [x] Targeted tests pass.
100
+ - [x] Full test suite passes.
101
+
102
+ ---
103
+
104
+ ## Risk Assessment
105
+
106
+ | Risk | Severity | Mitigation |
107
+ |------|----------|------------|
108
+ | Behavior change for malformed entries | Low | Normalization is additive and trims only whitespace |
109
+ | Test fragility | Low | Isolated unit tests; no external dependencies |
110
+ | Doc drift | Low | Updated docs alongside code |
111
+
112
+ ---
113
+
114
+ ## Estimated Complexity
115
+
116
+ - **Phase 1**: Low (normalization helpers)
117
+ - **Phase 2**: Low (2 new tests)
118
+ - **Phase 3**: Low (doc edits)
119
+ - **Phase 4**: Low (verification)
120
+
121
+ **Total**: ~20 minutes