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,192 @@
1
+ /**
2
+ * 'vault.*' endpoints — extracted from the former monolithic
3
+ * cli/lib/api/endpoints.js as part of the per-domain fragment split.
4
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
5
+ */
6
+
7
+ export const vault = {
8
+ 'vault.activity.list': {
9
+ method: 'GET',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/activity`,
12
+ tags: ['live-safe'],
13
+ },
14
+ // VAULT-INTEG P6: agent-credential-assignments (services/auth/routes/
15
+ // agent-credentials.js) is NOT under the /vault/ namespace alias — the
16
+ // real route already lives at this exact path, no server-side rewrite.
17
+ 'vault.agent-assignments.create': {
18
+ method: 'POST',
19
+ service: 'auth',
20
+ path: ({ orgId }) => `/api/orgs/${orgId}/agent-credential-assignments`,
21
+ tags: ['live-write'],
22
+ },
23
+ 'vault.agent-assignments.delete': {
24
+ method: 'DELETE',
25
+ service: 'auth',
26
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/agent-credential-assignments/${id}`,
27
+ tags: ['live-write'],
28
+ },
29
+ 'vault.agent-assignments.list': {
30
+ method: 'GET',
31
+ service: 'auth',
32
+ path: ({ orgId }) => `/api/orgs/${orgId}/agent-credential-assignments`,
33
+ tags: ['live-safe'],
34
+ },
35
+ 'vault.create': {
36
+ method: 'POST',
37
+ service: 'auth',
38
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault`,
39
+ tags: ['live-write'],
40
+ },
41
+ 'vault.cross-org.list': {
42
+ method: 'GET',
43
+ service: 'auth',
44
+ // VAULT-INTEG P6: /me/cross-org-credentials — no orgId in the path at
45
+ // all (it looks up every org the CALLER belongs to), so this is the one
46
+ // vault.* entry with no {orgId} param.
47
+ path: () => '/api/me/cross-org-credentials',
48
+ tags: ['live-safe'],
49
+ },
50
+ 'vault.default': {
51
+ method: 'POST',
52
+ service: 'auth',
53
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/vault/${id}/default`,
54
+ tags: ['live-write'],
55
+ },
56
+ 'vault.delete': {
57
+ method: 'DELETE',
58
+ service: 'auth',
59
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/vault/${id}`,
60
+ tags: ['live-write'],
61
+ },
62
+ 'vault.expiring.list': {
63
+ method: 'GET',
64
+ service: 'auth',
65
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/expiring`,
66
+ tags: ['live-safe'],
67
+ },
68
+ 'vault.folders.create': {
69
+ method: 'POST',
70
+ service: 'auth',
71
+ // Rewritten server-side: /orgs/:orgId/vault/folders -> /orgs/:orgId/credential-folders
72
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/folders`,
73
+ tags: ['live-write'],
74
+ },
75
+ 'vault.folders.delete': {
76
+ method: 'DELETE',
77
+ service: 'auth',
78
+ path: ({ orgId, folderId }) => `/api/orgs/${orgId}/vault/folders/${folderId}`,
79
+ tags: ['live-write'],
80
+ },
81
+ 'vault.folders.list': {
82
+ method: 'GET',
83
+ service: 'auth',
84
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/folders`,
85
+ tags: ['live-safe'],
86
+ },
87
+ 'vault.folders.update': {
88
+ method: 'PUT',
89
+ service: 'auth',
90
+ path: ({ orgId, folderId }) => `/api/orgs/${orgId}/vault/folders/${folderId}`,
91
+ tags: ['live-write'],
92
+ },
93
+ 'vault.get': {
94
+ method: 'GET',
95
+ service: 'auth',
96
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/vault/${id}`,
97
+ tags: ['live-safe'],
98
+ },
99
+ // VAULT-INTEG P6: GET /internal/vault-health — service-key gated (checks
100
+ // raw `x-service-key` header against INTERNAL_SERVICE_KEY), NOT a user
101
+ // Bearer route. No orgId path param; org scoping is an optional query
102
+ // string (`org_id`, server default 'default'). See vault.js's `vault
103
+ // health` command doc comment for the auth caveat.
104
+ 'vault.health': {
105
+ method: 'GET',
106
+ service: 'auth',
107
+ path: () => '/api/internal/vault-health',
108
+ tags: ['skip-live'],
109
+ },
110
+ 'vault.health-scan': {
111
+ method: 'POST',
112
+ service: 'auth',
113
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/health-scan`,
114
+ tags: ['live-write'],
115
+ },
116
+ 'vault.leases.approve': {
117
+ method: 'POST',
118
+ service: 'auth',
119
+ // Rewritten server-side: /orgs/:orgId/vault/leases/... -> /orgs/:orgId/integrations/leases/...
120
+ path: ({ orgId, leaseId }) => `/api/orgs/${orgId}/vault/leases/${leaseId}/approve`,
121
+ tags: ['live-write'],
122
+ },
123
+ 'vault.leases.deny': {
124
+ method: 'POST',
125
+ service: 'auth',
126
+ path: ({ orgId, leaseId }) => `/api/orgs/${orgId}/vault/leases/${leaseId}/deny`,
127
+ tags: ['live-write'],
128
+ },
129
+ 'vault.leases.list': {
130
+ method: 'GET',
131
+ service: 'auth',
132
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/leases`,
133
+ tags: ['live-safe'],
134
+ },
135
+ 'vault.leases.request': {
136
+ method: 'POST',
137
+ service: 'auth',
138
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/leases/request`,
139
+ tags: ['live-write'],
140
+ },
141
+ 'vault.leases.revoke': {
142
+ method: 'POST',
143
+ service: 'auth',
144
+ path: ({ orgId, leaseId }) => `/api/orgs/${orgId}/vault/leases/${leaseId}/revoke`,
145
+ tags: ['live-write'],
146
+ },
147
+ 'vault.list': {
148
+ method: 'GET',
149
+ service: 'auth',
150
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault`,
151
+ tags: ['live-safe'],
152
+ },
153
+ 'vault.rotate': {
154
+ method: 'POST',
155
+ service: 'auth',
156
+ path: ({ orgId, id, testQuery }) => `/api/orgs/${orgId}/vault/${id}/rotate${testQuery}`,
157
+ tags: ['live-write'],
158
+ },
159
+ 'vault.test': {
160
+ method: 'POST',
161
+ service: 'auth',
162
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/vault/${id}/test`,
163
+ tags: ['live-write'],
164
+ },
165
+ // VAULT-INTEG P6: POST /integrations/test-credentials — pre-save test,
166
+ // nothing is persisted either way. Rewritten server-side the same as
167
+ // every other /vault/* alias.
168
+ 'vault.test-credentials': {
169
+ method: 'POST',
170
+ service: 'auth',
171
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/test-credentials`,
172
+ tags: ['live-write'],
173
+ },
174
+ 'vault.types.list': {
175
+ method: 'GET',
176
+ service: 'auth',
177
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/types`,
178
+ tags: ['live-safe'],
179
+ },
180
+ 'vault.update': {
181
+ method: 'PUT',
182
+ service: 'auth',
183
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/vault/${id}`,
184
+ tags: ['live-write'],
185
+ },
186
+ 'vault.vault-stats.list': {
187
+ method: 'GET',
188
+ service: 'auth',
189
+ path: ({ orgId }) => `/api/orgs/${orgId}/vault/vault-stats`,
190
+ tags: ['live-safe'],
191
+ },
192
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 'voice.*' endpoints: QuoxVoice Console call history + aggregate insights
3
+ * (org-scoped reads). Split out of telephony.js so every key matches its
4
+ * fragment's domain.
5
+ *
6
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
7
+ */
8
+
9
+ export const voice = {
10
+ 'voice.calls.list': {
11
+ method: 'GET',
12
+ service: 'collector',
13
+ path: () => `/api/v1/voice/calls`,
14
+ tags: ['live-safe'],
15
+ },
16
+ 'voice.insights.get': {
17
+ method: 'GET',
18
+ service: 'collector',
19
+ path: () => `/api/v1/voice/insights`,
20
+ tags: ['live-safe'],
21
+ },
22
+ };
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 'volt.*' endpoints — extracted from the former monolithic
3
+ * cli/lib/api/endpoints.js as part of the per-domain fragment split.
4
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
5
+ */
6
+
7
+ export const volt = {
8
+ 'volt.cert.get': {
9
+ method: 'GET',
10
+ service: 'collector',
11
+ path: ({ certId }) => `/volt/cert/${certId}`,
12
+ tags: ['live-safe'],
13
+ },
14
+ 'volt.cert.run.get': {
15
+ method: 'GET',
16
+ service: 'collector',
17
+ path: ({ runId }) => `/volt/cert/run/${runId}`,
18
+ tags: ['live-safe'],
19
+ },
20
+ 'volt.certify': {
21
+ method: 'POST',
22
+ service: 'collector',
23
+ path: () => `/volt/certify`,
24
+ tags: ['live-write'],
25
+ },
26
+ 'volt.certs.list': {
27
+ method: 'GET',
28
+ service: 'collector',
29
+ path: () => `/volt/certs`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'volt.certs.stats.list': {
33
+ method: 'GET',
34
+ service: 'collector',
35
+ path: () => `/volt/certs/stats`,
36
+ tags: ['live-safe'],
37
+ },
38
+ // 2026-08-19 (proof-loop): these two routes existed on the collector with no
39
+ // CLI verb reaching them, so `quox volt verify` — which only accepts a local
40
+ // FILE — could not be pointed at real product evidence. The chain
41
+ // run -> bundle -> verify was broken at exactly the step a customer needs to
42
+ // check a receipt themselves, which is the whole "keep the receipt" pitch.
43
+ 'volt.run.bundle.get': {
44
+ method: 'GET',
45
+ service: 'collector',
46
+ path: ({ runId }) => `/volt/runs/${runId}/bundle`,
47
+ tags: ['live-safe'],
48
+ },
49
+ 'volt.bundle.download': {
50
+ method: 'GET',
51
+ service: 'collector',
52
+ path: ({ bundleId }) => `/volt/bundles/${bundleId}/download`,
53
+ tags: ['live-safe'],
54
+ },
55
+ // fleet #447: the bundle persisted per-run at completion is manifest_only
56
+ // (no events_ndjson, see voltContentStore.js), so `quox volt fetch` writing
57
+ // it straight to disk gave `quox volt verify` a file it could never
58
+ // chain-verify (bare MISSING_EVENTS). This is the missing verb: build the
59
+ // full bundle (manifest + events_ndjson) from the run's stored events on
60
+ // demand, then `volt.bundle.download` above fetches it.
61
+ 'volt.bundle.create': {
62
+ method: 'POST',
63
+ service: 'collector',
64
+ path: () => `/volt/bundles/create`,
65
+ tags: ['live-write'],
66
+ },
67
+ // SEO-MOAT (owner ruling 2026-09-03): minimal witnessed acceptance verdict.
68
+ // The evidence chain proves what happened; this records whether it WORKED —
69
+ // an attestation by a human or calling system, witnessed as its own VOLT
70
+ // run pinning the target's head_hash. actor_type is credential-derived
71
+ // server-side, never self-asserted.
72
+ 'volt.run.acceptance.post': {
73
+ method: 'POST',
74
+ service: 'collector',
75
+ path: ({ runId }) => `/volt/runs/${runId}/acceptance`,
76
+ tags: ['live-write'],
77
+ },
78
+ 'volt.run.acceptance.get': {
79
+ method: 'GET',
80
+ service: 'collector',
81
+ path: ({ runId }) => `/volt/runs/${runId}/acceptance`,
82
+ tags: ['live-safe'],
83
+ },
84
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 'ward.*' endpoints — extracted from the former monolithic
3
+ * cli/lib/api/endpoints.js as part of the per-domain fragment split.
4
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
5
+ */
6
+
7
+ export const ward = {
8
+ 'ward.chains.list': {
9
+ method: 'GET',
10
+ service: 'collector',
11
+ path: () => `/ward/chains`,
12
+ tags: ['live-safe'],
13
+ },
14
+ 'ward.entries.list': {
15
+ method: 'GET',
16
+ service: 'collector',
17
+ path: () => `/ward/entries`,
18
+ tags: ['live-safe'],
19
+ },
20
+ // PEEK: one WARD entry (a receipt) by its ward_entry_id; org-scoped for a user login.
21
+ 'ward.entries.get': {
22
+ method: 'GET',
23
+ service: 'collector',
24
+ path: ({ id }) => `/ward/entries/${id}`,
25
+ tags: ['live-safe'],
26
+ },
27
+ 'ward.stats.list': {
28
+ method: 'GET',
29
+ service: 'collector',
30
+ path: () => `/ward/stats`,
31
+ tags: ['live-safe'],
32
+ },
33
+ 'ward.verify': {
34
+ method: 'POST',
35
+ service: 'collector',
36
+ path: () => `/ward/verify`,
37
+ tags: ['live-write'],
38
+ },
39
+ // #622: bounded single-action receipt verification (entry → covering signed
40
+ // tip only). Safe on the production chain where 'ward.verify' is not.
41
+ 'ward.verify_receipt': {
42
+ method: 'POST',
43
+ service: 'collector',
44
+ path: () => `/ward/verify-receipt`,
45
+ tags: ['live-safe'],
46
+ },
47
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 'webhooks.*' endpoints — WP2.2 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #2).
3
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
4
+ *
5
+ * Backend: services/auth/routes/webhooks.js, mounted at plain `/api`
6
+ * (server.js:641 `app.use('/api', webhooksRoutes)`) — routes are org-scoped
7
+ * IN the URL (`/api/orgs/:orgId/webhooks...`), unlike prompts.js. Gated
8
+ * enterprise-tier + ORG_MANAGE_SETTINGS (requirePlan('enterprise') +
9
+ * resolveCap(Capabilities.ORG_MANAGE_SETTINGS) — services/auth/routes/webhooks.js
10
+ * `chain`). Expect 402/403 on non-enterprise orgs; that's a real route, not
11
+ * a phantom.
12
+ *
13
+ * These are org WEBHOOK SUBSCRIBERS (team_event fan-out targets), distinct
14
+ * from quoxflow's workflow-trigger webhooks in ./triggers.js — the latter
15
+ * are inbound webhook paths registered by an activated workflow node; these
16
+ * are outbound subscriptions this org owns for receiving team_event
17
+ * notifications. SCIM tokens + team-events reads on the same router file
18
+ * are explicitly out of scope for this WP (separate work packages).
19
+ */
20
+
21
+ export const webhooks = {
22
+ 'webhooks.create': {
23
+ method: 'POST',
24
+ service: 'auth',
25
+ path: ({ orgId }) => `/api/orgs/${orgId}/webhooks`,
26
+ tags: ['live-write'],
27
+ },
28
+ 'webhooks.delete': {
29
+ method: 'DELETE',
30
+ service: 'auth',
31
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/webhooks/${id}`,
32
+ tags: ['live-write'],
33
+ },
34
+ 'webhooks.list': {
35
+ method: 'GET',
36
+ service: 'auth',
37
+ path: ({ orgId }) => `/api/orgs/${orgId}/webhooks`,
38
+ tags: ['live-safe'],
39
+ },
40
+ 'webhooks.rotate': {
41
+ method: 'POST',
42
+ service: 'auth',
43
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/webhooks/${id}/rotate`,
44
+ tags: ['live-write'],
45
+ },
46
+ };
@@ -0,0 +1,169 @@
1
+ /**
2
+ * 'workflows.*' endpoints — extracted from the former monolithic
3
+ * cli/lib/api/endpoints.js as part of the per-domain fragment split.
4
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
5
+ *
6
+ * WP2.5 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #5 — `quox workflow apply/validate/import`):
7
+ * the 'workflows.apply*'/'workflows.importN8n'/'workflows.importObjective'/'workflows.validate'
8
+ * entries below are DIRECT to quoxflow (service: 'quoxflow'), same access-path precedent as
9
+ * 'workflows.activate'/'workflows.deactivate' above. They are DELIBERATELY separate keys from
10
+ * 'workflows.create'/'workflows.update' (which hit the AUTH service's org-scoped, lightweight
11
+ * workflows table used by the pre-existing `workflow create`/`workflow update` commands) — the
12
+ * quoxflow store is a completely different backend (full Workflow/DAG execution schema, no
13
+ * orgId in the path) and reusing the same key names would have silently overwritten the auth
14
+ * entries in this object literal (no error — endpoints-fragments.test.js's duplicate-key guard
15
+ * only checks ACROSS fragment files, not within one file's own object literal).
16
+ *
17
+ * Route provenance (quoxflow/src/api/routes/workflows.ts, mounted at app.route('/api/workflows', ...)):
18
+ * - applyCreate: POST /api/workflows — body validated by WorkflowSchema (core/workflow.ts),
19
+ * which requires `id` as a non-optional field — i.e. even "create" needs a caller-supplied
20
+ * id; the store's save() is an upsert (`ON CONFLICT (id) DO UPDATE`), so POSTing an id that
21
+ * already exists silently updates it instead of erroring.
22
+ * - applyGet: GET /api/workflows/:id — used internally by `workflow apply`'s diff-preview to
23
+ * fetch the current stored definition before a PUT.
24
+ * - applyUpdate: PUT /api/workflows/:id — partial merge (name/description/notes/definition, or
25
+ * top-level nodes/edges/variables/metadata/tags), NOT validated against WorkflowSchema.
26
+ * - validate: POST /api/workflows/:id/validate — validates the ALREADY-STORED workflow by id;
27
+ * takes no body at all (no validateBody on this route). It does NOT validate arbitrary local
28
+ * file content — only whatever is currently persisted under that id.
29
+ * - importN8n: POST /api/workflows/import-n8n — body { workflow: unknown, options?: { generateIds?, includePositions? } }.
30
+ * - importObjective: POST /api/workflows/import-objective — body { template: {...}, schedule?: { cron, timezone? }, options?: { activate?, includeApprovalGate? } }.
31
+ *
32
+ * BACKEND FINDING (not fixed here — flagged for triage, see also the identical finding
33
+ * documented in endpoints/triggers.js): GET /api/workflows (list, quoxflow) does NOT filter by
34
+ * org at all — `createWorkflowRoutes`'s `app.get('/', ...)` calls `deps.workflowStore.list({
35
+ * limit, offset, active })` with no orgId, and neither `InMemoryWorkflowStore.list()` nor
36
+ * `PostgresWorkflowStore.list()` (workflow-store.ts) accept or filter on one — `ListOptions`
37
+ * has no orgId field. Worse than triggers.*: `PostgresWorkflowStore.save()` doesn't even INSERT
38
+ * an org_id value (relies on the column's DB-level `DEFAULT 'default'`), so every workflow
39
+ * created via this quoxflow-direct path is invisible to any per-org filtering that might be
40
+ * bolted on later unless a migration backfills it. Same cross-tenant-leak shape as the
41
+ * triggers.* finding — every org's workflows are visible to every other org's caller via this
42
+ * endpoint today. Not seeded as a CLI endpoint in this file (no CLI command reads it), so it
43
+ * isn't reachable via `quox workflow ...` — flagged here purely because WP2.5 was asked to
44
+ * check it while reading this route file for the apply/validate/import work.
45
+ */
46
+
47
+ export const workflows = {
48
+ // WP2.2: lifecycle routes live in QUOXFLOW (not auth), unlike every other
49
+ // 'workflows.*' entry in this file. quoxflow/src/api/routes/workflows-lifecycle.ts
50
+ // mounts at /api/workflows (app.ts), registering/unregistering triggers on
51
+ // activate/deactivate. org_id travels in the body (optional tenant-ownership
52
+ // check — see route handler), NOT the URL, so no orgId path param here.
53
+ 'workflows.activate': {
54
+ method: 'POST',
55
+ service: 'quoxflow',
56
+ path: ({ workflowId }) => `/api/workflows/${workflowId}/activate`,
57
+ tags: ['live-write'],
58
+ },
59
+ 'workflows.applyCreate': {
60
+ method: 'POST',
61
+ service: 'quoxflow',
62
+ path: () => `/api/workflows`,
63
+ tags: ['live-write'],
64
+ },
65
+ 'workflows.applyGet': {
66
+ method: 'GET',
67
+ service: 'quoxflow',
68
+ path: ({ workflowId }) => `/api/workflows/${workflowId}`,
69
+ tags: ['live-safe'],
70
+ },
71
+ // fleet #465: GET /api/workflows (list), same quoxflow-direct precedent as
72
+ // 'workflows.applyGet' above. Added so `workflow list` can read the engine
73
+ // store's own list route instead of only the auth-service store, which
74
+ // quoxflow's write paths (activate/applyCreate/applyUpdate) never touch.
75
+ 'workflows.applyList': {
76
+ method: 'GET',
77
+ service: 'quoxflow',
78
+ path: () => `/api/workflows`,
79
+ tags: ['live-safe'],
80
+ },
81
+ // quoxflow#7: execute an engine-store workflow directly (the auth-service
82
+ // runs route only knows auth-store workflows). Org comes from the caller's
83
+ // auth context server-side, like the other quoxflow-direct entries.
84
+ // #997: `workflow delete` reaches engine workflows (the ones `workflow list` labels "engine")
85
+ 'workflows.applyDelete': {
86
+ method: 'DELETE',
87
+ service: 'quoxflow',
88
+ path: ({ workflowId }) => `/api/workflows/${workflowId}`,
89
+ tags: ['live-write'],
90
+ },
91
+ 'workflows.applyExecute': {
92
+ method: 'POST',
93
+ service: 'quoxflow',
94
+ path: ({ workflowId }) => `/api/workflows/${workflowId}/execute`,
95
+ tags: ['live-write'],
96
+ },
97
+ 'workflows.applyUpdate': {
98
+ method: 'PUT',
99
+ service: 'quoxflow',
100
+ path: ({ workflowId }) => `/api/workflows/${workflowId}`,
101
+ tags: ['live-write'],
102
+ },
103
+ 'workflows.create': {
104
+ method: 'POST',
105
+ service: 'auth',
106
+ path: ({ orgId }) => `/api/orgs/${orgId}/workflows`,
107
+ tags: ['live-write'],
108
+ },
109
+ 'workflows.deactivate': {
110
+ method: 'POST',
111
+ service: 'quoxflow',
112
+ path: ({ workflowId }) => `/api/workflows/${workflowId}/deactivate`,
113
+ tags: ['live-write'],
114
+ },
115
+ 'workflows.delete': {
116
+ method: 'DELETE',
117
+ service: 'auth',
118
+ path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
119
+ tags: ['live-write'],
120
+ },
121
+ 'workflows.get': {
122
+ method: 'GET',
123
+ service: 'auth',
124
+ path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
125
+ tags: ['live-safe'],
126
+ },
127
+ 'workflows.importN8n': {
128
+ method: 'POST',
129
+ service: 'quoxflow',
130
+ path: () => `/api/workflows/import-n8n`,
131
+ tags: ['live-write'],
132
+ },
133
+ 'workflows.importObjective': {
134
+ method: 'POST',
135
+ service: 'quoxflow',
136
+ path: () => `/api/workflows/import-objective`,
137
+ tags: ['live-write'],
138
+ },
139
+ 'workflows.list': {
140
+ method: 'GET',
141
+ service: 'auth',
142
+ path: ({ orgId }) => `/api/orgs/${orgId}/workflows`,
143
+ tags: ['live-safe'],
144
+ },
145
+ 'workflows.publish': {
146
+ method: 'POST',
147
+ service: 'auth',
148
+ path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}/publish`,
149
+ tags: ['live-write'],
150
+ },
151
+ 'workflows.steps': {
152
+ method: 'PUT',
153
+ service: 'auth',
154
+ path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}/steps`,
155
+ tags: ['live-write'],
156
+ },
157
+ 'workflows.update': {
158
+ method: 'PATCH',
159
+ service: 'auth',
160
+ path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
161
+ tags: ['live-write'],
162
+ },
163
+ 'workflows.validate': {
164
+ method: 'POST',
165
+ service: 'quoxflow',
166
+ path: ({ workflowId }) => `/api/workflows/${workflowId}/validate`,
167
+ tags: ['live-safe'],
168
+ },
169
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 'x.*' endpoints — the X (Twitter) plugin's governed REST surface on the
3
+ * collector (services/collector/routes/xRoutes.js, mounted at /x with
4
+ * requireServiceOrUserAuth + requirePluginEntitlement('x')).
5
+ *
6
+ * Most `quox x` verbs go through the agent tool path (v1.tools.execute) and
7
+ * need no fragment here. This one is the exception: media upload is a
8
+ * multipart REST route, so the CLI posts a FormData body straight to it
9
+ * (quox#592 — the media-upload gap: the endpoint existed for the dashboard
10
+ * Compose UI but had no CLI reach).
11
+ *
12
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
13
+ */
14
+
15
+ export const x = {
16
+ 'x.media.upload': {
17
+ method: 'POST',
18
+ service: 'collector',
19
+ path: () => `/x/media`,
20
+ tags: ['live-write'],
21
+ },
22
+ // GET /x/activity: recent claims + ledger + live budget (camelCase), org-scoped. `quox x status`
23
+ // reads the budget from here.
24
+ 'x.activity': {
25
+ method: 'GET',
26
+ service: 'collector',
27
+ path: () => `/x/activity`,
28
+ tags: ['live-safe'],
29
+ },
30
+ };
31
+
32
+ export default x;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * QuoxCLI endpoint map — thin re-export shim.
3
+ *
4
+ * The endpoint map was split into per-domain fragment files under
5
+ * ./endpoints/ (see ./endpoints/index.js for the aggregation + fragment
6
+ * convention doc). This file is kept as a stable import path so the ~50
7
+ * existing call sites across lib/commands, lib/tui/views, lib/tui/hooks,
8
+ * and lib/core don't need to change: `import { ... } from '../../api/endpoints.js'`
9
+ * keeps working unchanged.
10
+ *
11
+ * Do not add new endpoints here — add them to the appropriate fragment
12
+ * file under ./endpoints/ (or create a new one) instead.
13
+ */
14
+
15
+ export { ENDPOINTS, resolveEndpoint } from './endpoints/index.js';
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Action Tracker commands (read-only): `quox actions list | get`.
3
+ *
4
+ * #839 / #891: the agent has action_list but the CLI had no verb, so Action
5
+ * Tracker answers could not be checked against CLI truth. These verbs call the
6
+ * SAME governed tool the Action Tracker UI and the agent use (POST
7
+ * /api/v1/tools/execute, tool_name action_list), so chat, UI and CLI read one
8
+ * source. Writes (add/move/update/delete) stay in chat and the UI for now.
9
+ */
10
+
11
+ import { formatOutput, formatDetail } from '../core/output.js';
12
+ import { QuoxError } from '../core/errors.js';
13
+ import { executeGovernedTool } from './tool.js';
14
+
15
+ const STATUSES = ['todo', 'doing', 'done', 'all'];
16
+
17
+ async function listItems(ctx, { status = 'all', limit = 100, scope } = {}) {
18
+ if (!STATUSES.includes(status)) {
19
+ throw new QuoxError(`--status must be one of ${STATUSES.join(', ')}`);
20
+ }
21
+ const input = { status, limit: Math.min(Math.max(Number(limit) || 20, 1), 100) };
22
+ if (scope) input.scope_id = scope;
23
+ const data = await executeGovernedTool(ctx, 'action_list', input);
24
+ const result = data && data.result !== undefined ? data.result : data;
25
+ if (!result || result.success === false) {
26
+ throw new QuoxError(`action_list failed: ${(result && (result.error || result.message)) || 'no result'}`);
27
+ }
28
+ return Array.isArray(result.items) ? result.items : [];
29
+ }
30
+
31
+ export function registerActionsCommands(program, ctx) {
32
+ const actions = program
33
+ .command('actions')
34
+ .description('Action Tracker items (read-only; add and move items in chat or the dashboard)');
35
+
36
+ actions
37
+ .command('list')
38
+ .description('List action items')
39
+ .option('--status <status>', 'todo, doing, done or all', 'all')
40
+ .option('--limit <n>', 'max items (1-100)', '100')
41
+ .option('--scope <scopeId>', 'only items in this team/department/division scope')
42
+ .action(async (options) => {
43
+ const items = await listItems({ ...ctx, program }, options);
44
+ formatOutput({
45
+ columns: ['id', 'status', 'priority', 'title', 'dueDate'],
46
+ headers: ['ID', 'Status', 'Priority', 'Title', 'Due'],
47
+ rows: items.map((i) => ({ ...i, dueDate: i.dueDate || '-' })),
48
+ }, { raw: items });
49
+ });
50
+
51
+ actions
52
+ .command('get')
53
+ .description('Show one action item by id')
54
+ .argument('<id>', 'action item id (from `quox actions list`)')
55
+ .action(async (id) => {
56
+ const items = await listItems({ ...ctx, program }, { status: 'all', limit: 100 });
57
+ const item = items.find((i) => i.id === id);
58
+ if (!item) throw new QuoxError(`No action item ${id} among the latest 100 items.`);
59
+ formatDetail(item);
60
+ });
61
+ }