quoxcli 0.0.0-stage → 0.3.1

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 (516) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +144 -2
  3. package/bin/quox.js +265 -0
  4. package/bin/quoxon.js +8 -0
  5. package/lib/api/endpoints/admin.js +151 -0
  6. package/lib/api/endpoints/aee.js +38 -0
  7. package/lib/api/endpoints/agent-attach.js +126 -0
  8. package/lib/api/endpoints/agent-schedules.js +26 -0
  9. package/lib/api/endpoints/agents.js +63 -0
  10. package/lib/api/endpoints/assistants.js +62 -0
  11. package/lib/api/endpoints/audit.js +14 -0
  12. package/lib/api/endpoints/auth.js +50 -0
  13. package/lib/api/endpoints/awareness.js +34 -0
  14. package/lib/api/endpoints/away.js +15 -0
  15. package/lib/api/endpoints/backup-schedules.js +20 -0
  16. package/lib/api/endpoints/backups.js +86 -0
  17. package/lib/api/endpoints/brain.js +140 -0
  18. package/lib/api/endpoints/budgets.js +62 -0
  19. package/lib/api/endpoints/calendarq.js +71 -0
  20. package/lib/api/endpoints/catalog.js +14 -0
  21. package/lib/api/endpoints/chat.js +61 -0
  22. package/lib/api/endpoints/consent.js +26 -0
  23. package/lib/api/endpoints/contactsq.js +68 -0
  24. package/lib/api/endpoints/conversations.js +46 -0
  25. package/lib/api/endpoints/custom-roles.js +92 -0
  26. package/lib/api/endpoints/divisions.js +56 -0
  27. package/lib/api/endpoints/domains.js +38 -0
  28. package/lib/api/endpoints/engagement.js +231 -0
  29. package/lib/api/endpoints/engine.js +11 -0
  30. package/lib/api/endpoints/entity.js +50 -0
  31. package/lib/api/endpoints/executions.js +45 -0
  32. package/lib/api/endpoints/fetchAllowlist.js +27 -0
  33. package/lib/api/endpoints/file.js +20 -0
  34. package/lib/api/endpoints/files.js +40 -0
  35. package/lib/api/endpoints/github.js +21 -0
  36. package/lib/api/endpoints/governance.js +43 -0
  37. package/lib/api/endpoints/hat.js +66 -0
  38. package/lib/api/endpoints/inbox.js +52 -0
  39. package/lib/api/endpoints/inboxq.js +120 -0
  40. package/lib/api/endpoints/index.js +242 -0
  41. package/lib/api/endpoints/invites.js +19 -0
  42. package/lib/api/endpoints/llm-policy.js +43 -0
  43. package/lib/api/endpoints/lucid.js +89 -0
  44. package/lib/api/endpoints/members.js +32 -0
  45. package/lib/api/endpoints/memory.js +94 -0
  46. package/lib/api/endpoints/mfa.js +32 -0
  47. package/lib/api/endpoints/mind.js +13 -0
  48. package/lib/api/endpoints/mon.js +184 -0
  49. package/lib/api/endpoints/notesq.js +43 -0
  50. package/lib/api/endpoints/objectives.js +68 -0
  51. package/lib/api/endpoints/orgs.js +38 -0
  52. package/lib/api/endpoints/plugins.js +152 -0
  53. package/lib/api/endpoints/powers.js +75 -0
  54. package/lib/api/endpoints/presence.js +33 -0
  55. package/lib/api/endpoints/prompts.js +69 -0
  56. package/lib/api/endpoints/qlarity.js +122 -0
  57. package/lib/api/endpoints/quoxbox.js +55 -0
  58. package/lib/api/endpoints/quoxchat.js +54 -0
  59. package/lib/api/endpoints/quoxflow.js +32 -0
  60. package/lib/api/endpoints/quoxplan.js +121 -0
  61. package/lib/api/endpoints/quoxseo.js +114 -0
  62. package/lib/api/endpoints/reach.js +47 -0
  63. package/lib/api/endpoints/router.js +17 -0
  64. package/lib/api/endpoints/runs.js +38 -0
  65. package/lib/api/endpoints/safety.js +53 -0
  66. package/lib/api/endpoints/scim.js +46 -0
  67. package/lib/api/endpoints/scopes.js +14 -0
  68. package/lib/api/endpoints/security.js +69 -0
  69. package/lib/api/endpoints/setup.js +90 -0
  70. package/lib/api/endpoints/skills.js +200 -0
  71. package/lib/api/endpoints/sso.js +67 -0
  72. package/lib/api/endpoints/stepup.js +20 -0
  73. package/lib/api/endpoints/tags.js +32 -0
  74. package/lib/api/endpoints/teams.js +56 -0
  75. package/lib/api/endpoints/telephony.js +46 -0
  76. package/lib/api/endpoints/tg.js +56 -0
  77. package/lib/api/endpoints/tools.js +50 -0
  78. package/lib/api/endpoints/traces.js +157 -0
  79. package/lib/api/endpoints/triggers.js +96 -0
  80. package/lib/api/endpoints/user-library.js +41 -0
  81. package/lib/api/endpoints/users.js +20 -0
  82. package/lib/api/endpoints/v1.js +585 -0
  83. package/lib/api/endpoints/vault.js +192 -0
  84. package/lib/api/endpoints/voice.js +22 -0
  85. package/lib/api/endpoints/volt.js +84 -0
  86. package/lib/api/endpoints/ward.js +47 -0
  87. package/lib/api/endpoints/webhooks.js +46 -0
  88. package/lib/api/endpoints/workflows.js +169 -0
  89. package/lib/api/endpoints/x.js +32 -0
  90. package/lib/api/endpoints.js +15 -0
  91. package/lib/commands/actions.js +61 -0
  92. package/lib/commands/admin.js +375 -0
  93. package/lib/commands/aee.js +99 -0
  94. package/lib/commands/agent.js +337 -0
  95. package/lib/commands/agentAttach.js +1528 -0
  96. package/lib/commands/approvals.js +119 -0
  97. package/lib/commands/aside.js +24 -0
  98. package/lib/commands/ask.js +144 -0
  99. package/lib/commands/assistant.js +169 -0
  100. package/lib/commands/auth.js +464 -0
  101. package/lib/commands/awareness.js +88 -0
  102. package/lib/commands/backup.js +377 -0
  103. package/lib/commands/brain.js +1085 -0
  104. package/lib/commands/budget.js +241 -0
  105. package/lib/commands/build.js +170 -0
  106. package/lib/commands/calendar.js +216 -0
  107. package/lib/commands/capabilities.js +34 -0
  108. package/lib/commands/chat.js +295 -0
  109. package/lib/commands/claude.js +380 -0
  110. package/lib/commands/config-cmd.js +106 -0
  111. package/lib/commands/consent.js +84 -0
  112. package/lib/commands/contacts.js +1016 -0
  113. package/lib/commands/contactsSelftest.js +132 -0
  114. package/lib/commands/conversation.js +105 -0
  115. package/lib/commands/dashboard.js +43 -0
  116. package/lib/commands/department.js +96 -0
  117. package/lib/commands/dev.js +620 -0
  118. package/lib/commands/devResident.js +326 -0
  119. package/lib/commands/devSupervisor.js +1062 -0
  120. package/lib/commands/discord.js +132 -0
  121. package/lib/commands/doctor.js +181 -0
  122. package/lib/commands/domain.js +114 -0
  123. package/lib/commands/done.js +347 -0
  124. package/lib/commands/engagement.js +597 -0
  125. package/lib/commands/entity.js +119 -0
  126. package/lib/commands/facebook.js +212 -0
  127. package/lib/commands/fetchAllowlist.js +71 -0
  128. package/lib/commands/file.js +165 -0
  129. package/lib/commands/fleet.js +1189 -0
  130. package/lib/commands/governance.js +647 -0
  131. package/lib/commands/gripe.js +355 -0
  132. package/lib/commands/hat.js +374 -0
  133. package/lib/commands/helpers.js +96 -0
  134. package/lib/commands/hyperion.js +58 -0
  135. package/lib/commands/inbox.js +173 -0
  136. package/lib/commands/instagram.js +264 -0
  137. package/lib/commands/integration.js +100 -0
  138. package/lib/commands/inventory.js +115 -0
  139. package/lib/commands/invites.js +45 -0
  140. package/lib/commands/licence.js +139 -0
  141. package/lib/commands/linkedin.js +178 -0
  142. package/lib/commands/llm-policy.js +117 -0
  143. package/lib/commands/llm.js +45 -0
  144. package/lib/commands/lucid.js +597 -0
  145. package/lib/commands/mail.js +531 -0
  146. package/lib/commands/memory.js +361 -0
  147. package/lib/commands/mind.js +71 -0
  148. package/lib/commands/mon.js +581 -0
  149. package/lib/commands/monitoring.js +86 -0
  150. package/lib/commands/motion.js +22 -0
  151. package/lib/commands/notes.js +1246 -0
  152. package/lib/commands/notesBatch.js +160 -0
  153. package/lib/commands/notesBridges.js +56 -0
  154. package/lib/commands/notesLinks.js +60 -0
  155. package/lib/commands/notification.js +57 -0
  156. package/lib/commands/nucleus.js +123 -0
  157. package/lib/commands/objective.js +240 -0
  158. package/lib/commands/offload.js +89 -0
  159. package/lib/commands/onboard.js +329 -0
  160. package/lib/commands/open.js +56 -0
  161. package/lib/commands/org.js +276 -0
  162. package/lib/commands/peek.js +28 -0
  163. package/lib/commands/plan.js +944 -0
  164. package/lib/commands/plugin-doctor.js +1091 -0
  165. package/lib/commands/plugin.js +649 -0
  166. package/lib/commands/policy.js +78 -0
  167. package/lib/commands/powers.js +296 -0
  168. package/lib/commands/presence.js +89 -0
  169. package/lib/commands/prompt.js +350 -0
  170. package/lib/commands/provider.js +159 -0
  171. package/lib/commands/qlarity.js +706 -0
  172. package/lib/commands/quoxbox.js +270 -0
  173. package/lib/commands/quoxchat.js +275 -0
  174. package/lib/commands/quoxseo.js +378 -0
  175. package/lib/commands/reach.js +159 -0
  176. package/lib/commands/role.js +286 -0
  177. package/lib/commands/router.js +77 -0
  178. package/lib/commands/rows.js +358 -0
  179. package/lib/commands/run.js +187 -0
  180. package/lib/commands/safety.js +107 -0
  181. package/lib/commands/scim.js +88 -0
  182. package/lib/commands/scope.js +58 -0
  183. package/lib/commands/security.js +157 -0
  184. package/lib/commands/server.js +292 -0
  185. package/lib/commands/service.js +89 -0
  186. package/lib/commands/settings.js +99 -0
  187. package/lib/commands/setup.js +569 -0
  188. package/lib/commands/skillManifest.js +113 -0
  189. package/lib/commands/skillRightsFormat.js +38 -0
  190. package/lib/commands/skills.js +687 -0
  191. package/lib/commands/slot.js +1451 -0
  192. package/lib/commands/sso.js +229 -0
  193. package/lib/commands/status.js +137 -0
  194. package/lib/commands/tag.js +91 -0
  195. package/lib/commands/team.js +142 -0
  196. package/lib/commands/tg.js +240 -0
  197. package/lib/commands/tiktok.js +218 -0
  198. package/lib/commands/tips.js +23 -0
  199. package/lib/commands/tool.js +304 -0
  200. package/lib/commands/trace.js +530 -0
  201. package/lib/commands/trigger.js +223 -0
  202. package/lib/commands/update.js +46 -0
  203. package/lib/commands/vault.js +1447 -0
  204. package/lib/commands/vm.js +237 -0
  205. package/lib/commands/voice.js +213 -0
  206. package/lib/commands/volt.js +570 -0
  207. package/lib/commands/walkthrough.js +32 -0
  208. package/lib/commands/watch.js +167 -0
  209. package/lib/commands/webhook.js +137 -0
  210. package/lib/commands/welcome.js +14 -0
  211. package/lib/commands/workflow.js +660 -0
  212. package/lib/commands/x.js +448 -0
  213. package/lib/core/actingAs.js +136 -0
  214. package/lib/core/activeSummary.js +186 -0
  215. package/lib/core/aee.js +53 -0
  216. package/lib/core/agentAlias.js +163 -0
  217. package/lib/core/approvalContext.js +61 -0
  218. package/lib/core/aside.js +54 -0
  219. package/lib/core/askDecision.js +60 -0
  220. package/lib/core/auth.js +501 -0
  221. package/lib/core/banner.js +143 -0
  222. package/lib/core/brainPrime.js +90 -0
  223. package/lib/core/callerSource.js +129 -0
  224. package/lib/core/claudeLs.js +94 -0
  225. package/lib/core/cliBuild.js +62 -0
  226. package/lib/core/client.js +693 -0
  227. package/lib/core/commandRegistrars.js +121 -0
  228. package/lib/core/completions.js +163 -0
  229. package/lib/core/config.js +669 -0
  230. package/lib/core/confirm.js +37 -0
  231. package/lib/core/customHats.js +168 -0
  232. package/lib/core/deeplinks.js +76 -0
  233. package/lib/core/doneEngineFetch.js +227 -0
  234. package/lib/core/errors.js +441 -0
  235. package/lib/core/global-flags.js +190 -0
  236. package/lib/core/governedSession.js +402 -0
  237. package/lib/core/hyperion.js +102 -0
  238. package/lib/core/inboxResolution.js +65 -0
  239. package/lib/core/lazyCommands.js +122 -0
  240. package/lib/core/liveSessionsReport.js +112 -0
  241. package/lib/core/offload.js +504 -0
  242. package/lib/core/org-override.js +52 -0
  243. package/lib/core/orgResolve.js +70 -0
  244. package/lib/core/output.js +239 -0
  245. package/lib/core/peek.js +126 -0
  246. package/lib/core/prodEnv.js +7 -0
  247. package/lib/core/profileUsers.js +51 -0
  248. package/lib/core/promptCancel.js +18 -0
  249. package/lib/core/quoxglyph.js +158 -0
  250. package/lib/core/repoPath.js +11 -0
  251. package/lib/core/residentAlarm.js +282 -0
  252. package/lib/core/residentAuth.js +243 -0
  253. package/lib/core/residentPump.js +229 -0
  254. package/lib/core/residentSeed.js +106 -0
  255. package/lib/core/rootOptions.js +39 -0
  256. package/lib/core/router.js +168 -0
  257. package/lib/core/selfUpdate.js +188 -0
  258. package/lib/core/sessionHeartbeat.js +192 -0
  259. package/lib/core/sessionsOverview.js +224 -0
  260. package/lib/core/slotKeeper.js +527 -0
  261. package/lib/core/slotWake.js +120 -0
  262. package/lib/core/supervisorEngine.js +933 -0
  263. package/lib/core/systemdInstaller.js +256 -0
  264. package/lib/core/version.js +87 -0
  265. package/lib/core/vm.js +361 -0
  266. package/lib/core/vmTui.js +86 -0
  267. package/lib/core/walkthrough.js +35 -0
  268. package/lib/hyperion/deck.js +29 -0
  269. package/lib/lucid/LucidCard.jsx +68 -0
  270. package/lib/lucid/LucidIntro.jsx +92 -0
  271. package/lib/lucid/blind.js +71 -0
  272. package/lib/lucid/cards.js +86 -0
  273. package/lib/lucid/deck.js +32 -0
  274. package/lib/lucid/fmt.js +139 -0
  275. package/lib/lucid/markdown.js +81 -0
  276. package/lib/lucid/motion.js +56 -0
  277. package/lib/lucid/sitrep.js +173 -0
  278. package/lib/plugins/loader.js +93 -0
  279. package/lib/quoxon/activity.js +116 -0
  280. package/lib/quoxon/aocl.js +117 -0
  281. package/lib/quoxon/api.js +952 -0
  282. package/lib/quoxon/app.js +4032 -0
  283. package/lib/quoxon/approvalFacts.js +94 -0
  284. package/lib/quoxon/approvalsView.js +325 -0
  285. package/lib/quoxon/asideView.js +40 -0
  286. package/lib/quoxon/ask.js +121 -0
  287. package/lib/quoxon/away.js +52 -0
  288. package/lib/quoxon/bang.js +224 -0
  289. package/lib/quoxon/bulkRisk.js +17 -0
  290. package/lib/quoxon/capabilities.js +82 -0
  291. package/lib/quoxon/cells.js +53 -0
  292. package/lib/quoxon/commandShort.js +112 -0
  293. package/lib/quoxon/commands.js +479 -0
  294. package/lib/quoxon/connect.js +654 -0
  295. package/lib/quoxon/connectCard.js +45 -0
  296. package/lib/quoxon/consent.js +86 -0
  297. package/lib/quoxon/context.js +68 -0
  298. package/lib/quoxon/copy.js +34 -0
  299. package/lib/quoxon/countdownLine.js +11 -0
  300. package/lib/quoxon/demo.autoplay.js +29 -0
  301. package/lib/quoxon/demo.fixtures.js +24 -0
  302. package/lib/quoxon/demo.js +76 -0
  303. package/lib/quoxon/devObserver.js +20 -0
  304. package/lib/quoxon/dividerAocl.js +191 -0
  305. package/lib/quoxon/dividerRule.js +57 -0
  306. package/lib/quoxon/dragonModes.js +150 -0
  307. package/lib/quoxon/dragonView.js +41 -0
  308. package/lib/quoxon/earlyInput.js +40 -0
  309. package/lib/quoxon/echo.js +15 -0
  310. package/lib/quoxon/egg.js +36 -0
  311. package/lib/quoxon/events.js +677 -0
  312. package/lib/quoxon/feedback.js +50 -0
  313. package/lib/quoxon/gallery.js +237 -0
  314. package/lib/quoxon/handoffOffer.js +78 -0
  315. package/lib/quoxon/hatSwitch.js +37 -0
  316. package/lib/quoxon/headless.js +161 -0
  317. package/lib/quoxon/hostUrls.js +41 -0
  318. package/lib/quoxon/indicator.js +197 -0
  319. package/lib/quoxon/intent.js +52 -0
  320. package/lib/quoxon/keys.js +164 -0
  321. package/lib/quoxon/launcher.js +103 -0
  322. package/lib/quoxon/main.js +176 -0
  323. package/lib/quoxon/markdown.js +341 -0
  324. package/lib/quoxon/markdownSettle.js +19 -0
  325. package/lib/quoxon/matrixDomains.json +46 -0
  326. package/lib/quoxon/mentions.js +90 -0
  327. package/lib/quoxon/mind.js +103 -0
  328. package/lib/quoxon/mode.js +46 -0
  329. package/lib/quoxon/model.js +311 -0
  330. package/lib/quoxon/modelPrefs.js +345 -0
  331. package/lib/quoxon/motion/clock.js +70 -0
  332. package/lib/quoxon/motion/color.js +35 -0
  333. package/lib/quoxon/motion/frame.js +14 -0
  334. package/lib/quoxon/motion/level.js +91 -0
  335. package/lib/quoxon/motion/reveal.js +54 -0
  336. package/lib/quoxon/motion/ring.js +79 -0
  337. package/lib/quoxon/mouse.js +211 -0
  338. package/lib/quoxon/noai.js +57 -0
  339. package/lib/quoxon/objects/agent.js +61 -0
  340. package/lib/quoxon/objects/away.js +72 -0
  341. package/lib/quoxon/objects/crystal.js +100 -0
  342. package/lib/quoxon/objects/fetch.js +182 -0
  343. package/lib/quoxon/objects/fleet.js +149 -0
  344. package/lib/quoxon/objects/health.js +186 -0
  345. package/lib/quoxon/objects/index.js +106 -0
  346. package/lib/quoxon/objects/ladder.js +71 -0
  347. package/lib/quoxon/objects/memory.js +44 -0
  348. package/lib/quoxon/objects/mirror.js +137 -0
  349. package/lib/quoxon/objects/model.js +118 -0
  350. package/lib/quoxon/objects/peek.js +17 -0
  351. package/lib/quoxon/objects/proof.js +110 -0
  352. package/lib/quoxon/objects/prove.js +130 -0
  353. package/lib/quoxon/objects/replay.js +125 -0
  354. package/lib/quoxon/objects/sitrep.js +58 -0
  355. package/lib/quoxon/objects/skill.js +105 -0
  356. package/lib/quoxon/objects/view.js +87 -0
  357. package/lib/quoxon/objects/workflow.js +119 -0
  358. package/lib/quoxon/observers.js +42 -0
  359. package/lib/quoxon/onboarding/copy.js +263 -0
  360. package/lib/quoxon/onboarding/credential.js +108 -0
  361. package/lib/quoxon/onboarding/detect.js +22 -0
  362. package/lib/quoxon/onboarding/dockerOffer.js +45 -0
  363. package/lib/quoxon/onboarding/failureCause.js +33 -0
  364. package/lib/quoxon/onboarding/finish.js +134 -0
  365. package/lib/quoxon/onboarding/index.js +94 -0
  366. package/lib/quoxon/onboarding/installRunner.js +284 -0
  367. package/lib/quoxon/onboarding/intent.js +53 -0
  368. package/lib/quoxon/onboarding/journey.js +73 -0
  369. package/lib/quoxon/onboarding/preflight.js +156 -0
  370. package/lib/quoxon/onboarding/probe.js +65 -0
  371. package/lib/quoxon/onboarding/runner.js +58 -0
  372. package/lib/quoxon/onboarding/view.js +682 -0
  373. package/lib/quoxon/orgLabel.js +10 -0
  374. package/lib/quoxon/orgSwitch.js +33 -0
  375. package/lib/quoxon/ownBroadcast.js +22 -0
  376. package/lib/quoxon/palette.js +43 -0
  377. package/lib/quoxon/print.js +98 -0
  378. package/lib/quoxon/profileSwitch.js +53 -0
  379. package/lib/quoxon/promptHistory.js +41 -0
  380. package/lib/quoxon/providers.js +48 -0
  381. package/lib/quoxon/qart.js +348 -0
  382. package/lib/quoxon/qdragon.js +410 -0
  383. package/lib/quoxon/qdragonFly.js +61 -0
  384. package/lib/quoxon/qdragonScenes.js +282 -0
  385. package/lib/quoxon/qeyes.js +213 -0
  386. package/lib/quoxon/qglyph.js +143 -0
  387. package/lib/quoxon/qhello.js +58 -0
  388. package/lib/quoxon/qmotion.js +132 -0
  389. package/lib/quoxon/render.js +1167 -0
  390. package/lib/quoxon/resend.js +72 -0
  391. package/lib/quoxon/roster.js +307 -0
  392. package/lib/quoxon/route.js +39 -0
  393. package/lib/quoxon/rows.js +711 -0
  394. package/lib/quoxon/rowsStore.js +80 -0
  395. package/lib/quoxon/rules.js +130 -0
  396. package/lib/quoxon/screenContext.js +150 -0
  397. package/lib/quoxon/screenFrames.js +254 -0
  398. package/lib/quoxon/session.js +238 -0
  399. package/lib/quoxon/sessionDead.js +17 -0
  400. package/lib/quoxon/signin.js +125 -0
  401. package/lib/quoxon/skills.js +30 -0
  402. package/lib/quoxon/slash/agents.js +112 -0
  403. package/lib/quoxon/slash/argSources.js +65 -0
  404. package/lib/quoxon/slash/args.js +65 -0
  405. package/lib/quoxon/slash/automate.js +89 -0
  406. package/lib/quoxon/slash/broadcast.js +140 -0
  407. package/lib/quoxon/slash/broadcastRun.js +108 -0
  408. package/lib/quoxon/slash/card.js +30 -0
  409. package/lib/quoxon/slash/challenge.js +114 -0
  410. package/lib/quoxon/slash/cliCommand.js +53 -0
  411. package/lib/quoxon/slash/cliLeaves.json +948 -0
  412. package/lib/quoxon/slash/compact.js +90 -0
  413. package/lib/quoxon/slash/confirm.js +30 -0
  414. package/lib/quoxon/slash/crystallize.js +69 -0
  415. package/lib/quoxon/slash/dashboard.js +136 -0
  416. package/lib/quoxon/slash/draft.js +54 -0
  417. package/lib/quoxon/slash/hatWalk.js +206 -0
  418. package/lib/quoxon/slash/inverses.js +77 -0
  419. package/lib/quoxon/slash/killer.js +24 -0
  420. package/lib/quoxon/slash/killerApi.js +16 -0
  421. package/lib/quoxon/slash/ledger.js +88 -0
  422. package/lib/quoxon/slash/listView.js +30 -0
  423. package/lib/quoxon/slash/modelCmd.js +261 -0
  424. package/lib/quoxon/slash/palette.js +118 -0
  425. package/lib/quoxon/slash/paletteController.js +169 -0
  426. package/lib/quoxon/slash/panels.js +116 -0
  427. package/lib/quoxon/slash/picker.js +56 -0
  428. package/lib/quoxon/slash/restart.js +202 -0
  429. package/lib/quoxon/slash/resume.js +59 -0
  430. package/lib/quoxon/slash/rowCmd.js +157 -0
  431. package/lib/quoxon/slash/rowWalk.js +175 -0
  432. package/lib/quoxon/slash/settings.js +60 -0
  433. package/lib/quoxon/slash/spawn.js +177 -0
  434. package/lib/quoxon/slash/stepUp.js +274 -0
  435. package/lib/quoxon/slash/stepUpCard.js +60 -0
  436. package/lib/quoxon/slash/stepUpCmds.js +78 -0
  437. package/lib/quoxon/slash/undoApi.js +38 -0
  438. package/lib/quoxon/slash/undoCmd.js +49 -0
  439. package/lib/quoxon/slash/undoWish.js +15 -0
  440. package/lib/quoxon/slash/watch.js +164 -0
  441. package/lib/quoxon/slash/wish.js +23 -0
  442. package/lib/quoxon/slash/wishCmd.js +32 -0
  443. package/lib/quoxon/slotChat.js +300 -0
  444. package/lib/quoxon/slotFormat.js +195 -0
  445. package/lib/quoxon/slotRun.js +131 -0
  446. package/lib/quoxon/sound/index.js +186 -0
  447. package/lib/quoxon/sound/mapping.js +120 -0
  448. package/lib/quoxon/sound/output.js +52 -0
  449. package/lib/quoxon/sound/synth.js +122 -0
  450. package/lib/quoxon/stray.js +22 -0
  451. package/lib/quoxon/suggestCommand.js +59 -0
  452. package/lib/quoxon/term.js +141 -0
  453. package/lib/quoxon/textBuffer.js +416 -0
  454. package/lib/quoxon/theme.js +286 -0
  455. package/lib/quoxon/tips.js +433 -0
  456. package/lib/quoxon/toolError.js +41 -0
  457. package/lib/quoxon/transcript.js +188 -0
  458. package/lib/quoxon/web/qface.js +89 -0
  459. package/lib/quoxon/welcome.js +52 -0
  460. package/lib/quoxon/whatsnew.js +136 -0
  461. package/lib/quoxon/whatsnew.jsonl +89 -0
  462. package/lib/quoxon/windowOrg.js +113 -0
  463. package/lib/server/diag.js +129 -0
  464. package/lib/server/doctor.js +71 -0
  465. package/lib/server/install.js +149 -0
  466. package/lib/server/pluginEnable.js +161 -0
  467. package/lib/server/skew.js +56 -0
  468. package/lib/server/snapshot.js +131 -0
  469. package/lib/server/status.js +128 -0
  470. package/lib/server/sys.js +65 -0
  471. package/lib/server/uninstall.js +63 -0
  472. package/lib/server/update.js +234 -0
  473. package/lib/toolOutputShape.js +315 -0
  474. package/lib/tui/app.jsx +289 -0
  475. package/lib/tui/components/Breadcrumb.jsx +42 -0
  476. package/lib/tui/components/ChatInput.jsx +68 -0
  477. package/lib/tui/components/Confirm.jsx +32 -0
  478. package/lib/tui/components/DataTable.jsx +270 -0
  479. package/lib/tui/components/DetailPanel.jsx +241 -0
  480. package/lib/tui/components/HelpOverlay.jsx +67 -0
  481. package/lib/tui/components/Layout.jsx +129 -0
  482. package/lib/tui/components/Palette.jsx +141 -0
  483. package/lib/tui/components/SearchInput.jsx +125 -0
  484. package/lib/tui/components/Sparkline.jsx +55 -0
  485. package/lib/tui/components/StatusBar.jsx +133 -0
  486. package/lib/tui/components/Toast.jsx +52 -0
  487. package/lib/tui/hooks/useApi.js +44 -0
  488. package/lib/tui/hooks/useHealth.js +90 -0
  489. package/lib/tui/hooks/usePolledApi.js +86 -0
  490. package/lib/tui/hooks/useTerminalSize.js +46 -0
  491. package/lib/tui/index.js +56 -0
  492. package/lib/tui/intro/Intro.jsx +332 -0
  493. package/lib/tui/jsx-loader.js +32 -0
  494. package/lib/tui/keys.js +87 -0
  495. package/lib/tui/registry.js +49 -0
  496. package/lib/tui/theme.js +103 -0
  497. package/lib/tui/views/AdminView.jsx +398 -0
  498. package/lib/tui/views/AgentView.jsx +204 -0
  499. package/lib/tui/views/BackupView.jsx +225 -0
  500. package/lib/tui/views/BrainView.jsx +223 -0
  501. package/lib/tui/views/ChatView.jsx +468 -0
  502. package/lib/tui/views/FilesView.jsx +218 -0
  503. package/lib/tui/views/FleetView.jsx +234 -0
  504. package/lib/tui/views/GovernanceView.jsx +453 -0
  505. package/lib/tui/views/HealthView.jsx +216 -0
  506. package/lib/tui/views/HyperionDeck.jsx +79 -0
  507. package/lib/tui/views/InboxView.jsx +228 -0
  508. package/lib/tui/views/LucidDeck.jsx +719 -0
  509. package/lib/tui/views/MainMenu.jsx +123 -0
  510. package/lib/tui/views/MemoryView.jsx +377 -0
  511. package/lib/tui/views/ObjectivesView.jsx +230 -0
  512. package/lib/tui/views/OrgView.jsx +229 -0
  513. package/lib/tui/views/ToolView.jsx +221 -0
  514. package/lib/tui/views/VaultView.jsx +422 -0
  515. package/lib/tui/views/WorkflowView.jsx +329 -0
  516. package/package.json +75 -4
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Role commands: org custom roles (RBAC) + agent/tool permission rules
3
+ *
4
+ * quox role list|get|create|delete
5
+ * quox role capability add|remove
6
+ * quox role agent list|set|clear
7
+ * quox role tool list|set|clear
8
+ *
9
+ * Backend: services/auth/routes/customRoles.js, mounted at plain `/api`
10
+ * (org-scoped IN the URL: /api/orgs/:orgId/custom-roles...). Enterprise-tier
11
+ * + ORG_MANAGE_ROLES gated — expect 402/403 on non-enterprise orgs.
12
+ *
13
+ * Capability grants are subject to a server-side privilege-escalation
14
+ * guard: for capabilities in the known Capabilities enum, the caller must
15
+ * already hold the capability themselves or the grant is rejected with
16
+ * `forbidden_escalation` (customRoles.js:166-188). Free-form custom
17
+ * capability strings bypass this check (org-defined extensions).
18
+ */
19
+
20
+ import { formatOutput, formatDetail, printSuccess, printInfo } from '../core/output.js';
21
+ import { resolveOrgId } from './helpers.js';
22
+ import { resolveEndpoint } from '../api/endpoints.js';
23
+
24
+ export function registerRoleCommands(program, ctx) {
25
+ const { client, auth } = ctx;
26
+
27
+ const role = program
28
+ .command('role')
29
+ .description('Manage org custom roles (enterprise — RBAC)');
30
+
31
+ // ── role list ────────────────────────────────────────────────────────────────
32
+
33
+ role
34
+ .command('list')
35
+ .description('List custom roles for the active org')
36
+ .action(async () => {
37
+ auth.requireAuth();
38
+ const orgId = resolveOrgId(auth, program);
39
+ const ep = resolveEndpoint('custom-roles.list', { orgId });
40
+ const data = await client.get(ep.path, { service: ep.service });
41
+ const rows = data.roles || data || [];
42
+
43
+ formatOutput({
44
+ columns: ['id', 'slug', 'name', 'description', 'created_at'],
45
+ headers: ['ID', 'Slug', 'Name', 'Description', 'Created'],
46
+ rows,
47
+ }, { format: program.opts().output, emptyMessage: 'No custom roles configured.' });
48
+ });
49
+
50
+ // ── role get ─────────────────────────────────────────────────────────────────
51
+
52
+ role
53
+ .command('get')
54
+ .description('Show a custom role and its granted capabilities')
55
+ .argument('<roleId>', 'role ID')
56
+ .action(async (roleId) => {
57
+ auth.requireAuth();
58
+ const orgId = resolveOrgId(auth, program);
59
+ const ep = resolveEndpoint('custom-roles.get', { orgId, roleId });
60
+ const data = await client.get(ep.path, { service: ep.service });
61
+
62
+ formatDetail(data.role || {}, {
63
+ format: program.opts().output,
64
+ title: `Role: ${data.role?.name || roleId}`,
65
+ fields: ['id', 'slug', 'name', 'description', 'created_at'],
66
+ });
67
+ const capabilities = data.capabilities || [];
68
+ if (program.opts().output !== 'json') {
69
+ formatOutput({
70
+ columns: ['capability', 'scope_id'],
71
+ headers: ['Capability', 'Scope'],
72
+ rows: capabilities,
73
+ }, { format: program.opts().output, emptyMessage: 'No capabilities granted.' });
74
+ }
75
+ });
76
+
77
+ // ── role create ──────────────────────────────────────────────────────────────
78
+
79
+ role
80
+ .command('create')
81
+ .description('Create a custom role')
82
+ .requiredOption('--slug <slug>', 'unique role slug')
83
+ .requiredOption('--name <name>', 'role name')
84
+ .option('--description <text>', 'role description')
85
+ .action(async (options) => {
86
+ auth.requireAuth();
87
+ const orgId = resolveOrgId(auth, program);
88
+ const body = { slug: options.slug, name: options.name };
89
+ if (options.description) body.description = options.description;
90
+
91
+ const ep = resolveEndpoint('custom-roles.create', { orgId });
92
+ const data = await client.post(ep.path, { service: ep.service, body });
93
+ printSuccess(`Role "${options.name}" created.`);
94
+ formatDetail(data.role || data, { format: program.opts().output });
95
+ });
96
+
97
+ // ── role delete ──────────────────────────────────────────────────────────────
98
+
99
+ role
100
+ .command('delete')
101
+ .description('Delete a custom role')
102
+ .argument('<roleId>', 'role ID')
103
+ .option('--force', 'skip confirmation')
104
+ .action(async (roleId, options) => {
105
+ auth.requireAuth();
106
+ const orgId = resolveOrgId(auth, program);
107
+
108
+ if (!options.force && !program.opts().yes) {
109
+ const { default: inquirer } = await import('inquirer');
110
+ const ans = await inquirer.prompt([{
111
+ type: 'confirm',
112
+ name: 'confirm',
113
+ message: `Delete role ${roleId}? Members assigned this role lose its capabilities immediately.`,
114
+ default: false,
115
+ }]);
116
+ if (!ans.confirm) {
117
+ printInfo('Cancelled.');
118
+ return;
119
+ }
120
+ }
121
+
122
+ const ep = resolveEndpoint('custom-roles.delete', { orgId, roleId });
123
+ await client.delete(ep.path, { service: ep.service });
124
+ printSuccess('Role deleted.');
125
+ });
126
+
127
+ // ── role capability ─────────────────────────────────────────────────────────
128
+
129
+ const capability = role
130
+ .command('capability')
131
+ .description('Manage capability grants on a role');
132
+
133
+ capability
134
+ .command('add')
135
+ .description('Grant a capability to a role')
136
+ .argument('<roleId>', 'role ID')
137
+ .argument('<capability>', 'capability string (e.g. "agents.manage")')
138
+ .option('--scope-id <scopeId>', 'restrict the grant to a specific scope')
139
+ .action(async (roleId, cap, options) => {
140
+ auth.requireAuth();
141
+ const orgId = resolveOrgId(auth, program);
142
+ const body = { capability: cap };
143
+ if (options.scopeId) body.scope_id = options.scopeId;
144
+
145
+ const ep = resolveEndpoint('custom-roles.capabilities.add', { orgId, roleId });
146
+ await client.post(ep.path, { service: ep.service, body });
147
+ printSuccess(`Capability "${cap}" granted.`);
148
+ });
149
+
150
+ capability
151
+ .command('remove')
152
+ .description('Revoke a capability from a role')
153
+ .argument('<roleId>', 'role ID')
154
+ .argument('<capability>', 'capability string')
155
+ .option('--scope-id <scopeId>', 'scope ID (must match the grant\'s scope)')
156
+ .action(async (roleId, cap, options) => {
157
+ auth.requireAuth();
158
+ const orgId = resolveOrgId(auth, program);
159
+ const query = { capability: cap };
160
+ if (options.scopeId) query.scope_id = options.scopeId;
161
+
162
+ const ep = resolveEndpoint('custom-roles.capabilities.remove', { orgId, roleId });
163
+ await client.delete(ep.path, { service: ep.service, query });
164
+ printSuccess(`Capability "${cap}" revoked.`);
165
+ });
166
+
167
+ // ── role agent ───────────────────────────────────────────────────────────────
168
+
169
+ const agent = role
170
+ .command('agent')
171
+ .description('Manage agent access rules on a role');
172
+
173
+ agent
174
+ .command('list')
175
+ .description('List agent access rules for a role')
176
+ .argument('<roleId>', 'role ID')
177
+ .action(async (roleId) => {
178
+ auth.requireAuth();
179
+ const orgId = resolveOrgId(auth, program);
180
+ const ep = resolveEndpoint('custom-roles.agents.list', { orgId, roleId });
181
+ const data = await client.get(ep.path, { service: ep.service });
182
+ const rows = data.permissions || data || [];
183
+
184
+ formatOutput({
185
+ columns: ['agent_id', 'scope_id', 'allowed'],
186
+ headers: ['Agent ID', 'Scope', 'Allowed'],
187
+ rows,
188
+ }, { format: program.opts().output, emptyMessage: 'No agent access rules set for this role.' });
189
+ });
190
+
191
+ agent
192
+ .command('set')
193
+ .description('Set (allow or deny) a role\'s access to an agent')
194
+ .argument('<roleId>', 'role ID')
195
+ .argument('<agentId>', 'agent ID')
196
+ .requiredOption('--allowed <bool>', 'true|false')
197
+ .option('--scope-id <scopeId>', 'restrict the rule to a specific scope')
198
+ .action(async (roleId, agentId, options) => {
199
+ auth.requireAuth();
200
+ const orgId = resolveOrgId(auth, program);
201
+ if (options.allowed !== 'true' && options.allowed !== 'false') {
202
+ throw new Error('--allowed must be "true" or "false".');
203
+ }
204
+ const body = { agent_id: agentId, allowed: options.allowed === 'true' };
205
+ if (options.scopeId) body.scope_id = options.scopeId;
206
+
207
+ const ep = resolveEndpoint('custom-roles.agents.set', { orgId, roleId });
208
+ await client.put(ep.path, { service: ep.service, body });
209
+ printSuccess(`Agent access rule set (${body.allowed ? 'allowed' : 'denied'}).`);
210
+ });
211
+
212
+ agent
213
+ .command('clear')
214
+ .description('Remove an agent access rule from a role')
215
+ .argument('<roleId>', 'role ID')
216
+ .argument('<agentId>', 'agent ID')
217
+ .option('--scope-id <scopeId>', 'scope ID (must match the rule\'s scope)')
218
+ .action(async (roleId, agentId, options) => {
219
+ auth.requireAuth();
220
+ const orgId = resolveOrgId(auth, program);
221
+ const query = { agent_id: agentId };
222
+ if (options.scopeId) query.scope_id = options.scopeId;
223
+
224
+ const ep = resolveEndpoint('custom-roles.agents.clear', { orgId, roleId });
225
+ await client.delete(ep.path, { service: ep.service, query });
226
+ printSuccess('Agent access rule cleared.');
227
+ });
228
+
229
+ // ── role tool ────────────────────────────────────────────────────────────────
230
+
231
+ const tool = role
232
+ .command('tool')
233
+ .description('Manage tool access rules on a role');
234
+
235
+ tool
236
+ .command('list')
237
+ .description('List tool access rules for a role')
238
+ .argument('<roleId>', 'role ID')
239
+ .action(async (roleId) => {
240
+ auth.requireAuth();
241
+ const orgId = resolveOrgId(auth, program);
242
+ const ep = resolveEndpoint('custom-roles.tools.list', { orgId, roleId });
243
+ const data = await client.get(ep.path, { service: ep.service });
244
+ const rows = data.permissions || data || [];
245
+
246
+ formatOutput({
247
+ columns: ['tool_id', 'allowed'],
248
+ headers: ['Tool ID', 'Allowed'],
249
+ rows,
250
+ }, { format: program.opts().output, emptyMessage: 'No tool access rules set for this role.' });
251
+ });
252
+
253
+ tool
254
+ .command('set')
255
+ .description('Set (allow or deny) a role\'s access to a tool')
256
+ .argument('<roleId>', 'role ID')
257
+ .argument('<toolId>', 'tool ID')
258
+ .requiredOption('--allowed <bool>', 'true|false')
259
+ .action(async (roleId, toolId, options) => {
260
+ auth.requireAuth();
261
+ const orgId = resolveOrgId(auth, program);
262
+ if (options.allowed !== 'true' && options.allowed !== 'false') {
263
+ throw new Error('--allowed must be "true" or "false".');
264
+ }
265
+ const body = { tool_id: toolId, allowed: options.allowed === 'true' };
266
+
267
+ const ep = resolveEndpoint('custom-roles.tools.set', { orgId, roleId });
268
+ await client.put(ep.path, { service: ep.service, body });
269
+ printSuccess(`Tool access rule set (${body.allowed ? 'allowed' : 'denied'}).`);
270
+ });
271
+
272
+ tool
273
+ .command('clear')
274
+ .description('Remove a tool access rule from a role')
275
+ .argument('<roleId>', 'role ID')
276
+ .argument('<toolId>', 'tool ID')
277
+ .action(async (roleId, toolId) => {
278
+ auth.requireAuth();
279
+ const orgId = resolveOrgId(auth, program);
280
+ const query = { tool_id: toolId };
281
+
282
+ const ep = resolveEndpoint('custom-roles.tools.clear', { orgId, roleId });
283
+ await client.delete(ep.path, { service: ep.service, query });
284
+ printSuccess('Tool access rule cleared.');
285
+ });
286
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * `quox router` : read-only MikroTik RouterOS views via the NETWATCH tools (ROUTEROS-WIRE).
3
+ *
4
+ * quox router health CPU, memory, temperature, uptime
5
+ * quox router leases DHCP leases
6
+ * quox router pools DHCP pool usage
7
+ * quox router conflicts IP address conflicts (ARP vs DHCP leases)
8
+ * quox router free-ip [--count n] [--pool name] spare addresses for static use (reserves nothing)
9
+ * quox router vpn VPN tunnel health (WireGuard + IPsec)
10
+ * quox router wireguard WireGuard peers and whether they are connected
11
+ * quox router inventory routers and the devices connected to them
12
+ * quox router trust --show the router's current TLS fingerprint (sends NO credentials; pins nothing)
13
+ *
14
+ * Every verb is one tool call through POST /api/v1/tools/execute. No verb writes to the router.
15
+ * Engine: lib/core/router.js.
16
+ */
17
+ import { resolveOrgId } from './helpers.js';
18
+ import { ROUTER_TOOLS, ROUTER_FORMATTERS, makeRouterExec, formatTrust } from '../core/router.js';
19
+ import { resolveEndpoint } from '../api/endpoints.js';
20
+
21
+ const DESCRIPTIONS = {
22
+ health: 'Router CPU, memory, temperature and uptime (read only)',
23
+ leases: 'DHCP leases: which devices hold an address (read only)',
24
+ pools: 'DHCP pool usage: size, used, free (read only)',
25
+ conflicts: 'IP address conflicts seen by the router, ARP vs DHCP leases (read only)',
26
+ 'free-ip': 'Spare pool addresses for static assignment; reserves nothing (read only)',
27
+ vpn: 'VPN tunnel health, WireGuard and IPsec (read only)',
28
+ wireguard: 'WireGuard peers and whether each is connected (read only)',
29
+ inventory: 'MikroTik routers and the devices connected to them (read only)',
30
+ };
31
+
32
+ export function registerRouterCommands(program, ctx) {
33
+ const { client, auth } = ctx;
34
+ const json = () => program.opts().output === 'json';
35
+
36
+ const router = program
37
+ .command('router')
38
+ .description('MikroTik RouterOS read-only views via NETWATCH (health, DHCP, VPN, inventory)');
39
+
40
+ for (const verb of Object.keys(ROUTER_TOOLS)) {
41
+ const cmd = router.command(verb).description(DESCRIPTIONS[verb]);
42
+ if (verb === 'free-ip') {
43
+ cmd.option('--count <n>', 'how many addresses (1-20)', '3').option('--pool <name>', 'only this DHCP pool');
44
+ }
45
+ cmd.action(async (opts = {}) => {
46
+ auth.requireAuth();
47
+ const exec = makeRouterExec({ client, orgId: resolveOrgId(auth, program) });
48
+ const input = {};
49
+ if (verb === 'free-ip') {
50
+ const n = Number.parseInt(opts.count, 10);
51
+ if (!Number.isInteger(n) || n < 1 || n > 20) throw new Error('--count must be a whole number from 1 to 20');
52
+ input.count = n;
53
+ if (opts.pool) input.pool = String(opts.pool);
54
+ }
55
+ const p = await exec(ROUTER_TOOLS[verb], input);
56
+ if (json()) console.log(JSON.stringify(p, null, 2));
57
+ else console.log(ROUTER_FORMATTERS[verb](p).join('\n'));
58
+ });
59
+ }
60
+
61
+ // quoxai/quox#1236: the operator reads the endpoint's fingerprint here (no credentials sent),
62
+ // compares it out of band, then sets MIKROTIK_TLS_PIN themselves. This verb never pins.
63
+ router
64
+ .command('trust')
65
+ .description("Show the router's current TLS fingerprint, sending no credentials (never pins; you set MIKROTIK_TLS_PIN yourself)")
66
+ .option('--show', "print the fingerprint the router's HTTPS endpoint presents now")
67
+ .action(async (opts = {}) => {
68
+ auth.requireAuth();
69
+ if (!opts.show) {
70
+ throw new Error('quox router trust only has --show. It never pins anything: compare the fingerprint out of band, then set MIKROTIK_TLS_PIN yourself.');
71
+ }
72
+ const ep = resolveEndpoint('router.tlsFingerprint');
73
+ const data = await client.get(ep.path, { service: ep.service, query: { org_id: resolveOrgId(auth, program) } });
74
+ if (json()) { console.log(JSON.stringify(data, null, 2)); return; }
75
+ console.log(formatTrust(data).join('\n'));
76
+ });
77
+ }