quoxcli 0.0.0-stage → 0.2.0

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 (348) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +142 -2
  3. package/bin/quox.js +292 -0
  4. package/bin/quoxon.js +8 -0
  5. package/lib/api/endpoints/admin.js +125 -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/agents.js +56 -0
  9. package/lib/api/endpoints/assistants.js +50 -0
  10. package/lib/api/endpoints/audit.js +14 -0
  11. package/lib/api/endpoints/auth.js +50 -0
  12. package/lib/api/endpoints/awareness.js +34 -0
  13. package/lib/api/endpoints/backup-schedules.js +20 -0
  14. package/lib/api/endpoints/backups.js +86 -0
  15. package/lib/api/endpoints/brain.js +140 -0
  16. package/lib/api/endpoints/budgets.js +62 -0
  17. package/lib/api/endpoints/calendarq.js +71 -0
  18. package/lib/api/endpoints/catalog.js +14 -0
  19. package/lib/api/endpoints/chat.js +54 -0
  20. package/lib/api/endpoints/consent.js +26 -0
  21. package/lib/api/endpoints/contactsq.js +66 -0
  22. package/lib/api/endpoints/conversations.js +32 -0
  23. package/lib/api/endpoints/custom-roles.js +92 -0
  24. package/lib/api/endpoints/divisions.js +56 -0
  25. package/lib/api/endpoints/domains.js +38 -0
  26. package/lib/api/endpoints/engagement.js +231 -0
  27. package/lib/api/endpoints/engine.js +11 -0
  28. package/lib/api/endpoints/entity.js +50 -0
  29. package/lib/api/endpoints/executions.js +32 -0
  30. package/lib/api/endpoints/file.js +20 -0
  31. package/lib/api/endpoints/files.js +26 -0
  32. package/lib/api/endpoints/github.js +21 -0
  33. package/lib/api/endpoints/governance.js +43 -0
  34. package/lib/api/endpoints/hat.js +36 -0
  35. package/lib/api/endpoints/inbox.js +32 -0
  36. package/lib/api/endpoints/inboxq.js +120 -0
  37. package/lib/api/endpoints/index.js +228 -0
  38. package/lib/api/endpoints/invites.js +19 -0
  39. package/lib/api/endpoints/llm-policy.js +43 -0
  40. package/lib/api/endpoints/lucid.js +89 -0
  41. package/lib/api/endpoints/members.js +32 -0
  42. package/lib/api/endpoints/memory.js +75 -0
  43. package/lib/api/endpoints/mfa.js +32 -0
  44. package/lib/api/endpoints/mon.js +178 -0
  45. package/lib/api/endpoints/notesq.js +43 -0
  46. package/lib/api/endpoints/objectives.js +62 -0
  47. package/lib/api/endpoints/orgs.js +38 -0
  48. package/lib/api/endpoints/plugins.js +134 -0
  49. package/lib/api/endpoints/powers.js +75 -0
  50. package/lib/api/endpoints/prompts.js +69 -0
  51. package/lib/api/endpoints/qlarity.js +122 -0
  52. package/lib/api/endpoints/quoxbox.js +55 -0
  53. package/lib/api/endpoints/quoxchat.js +54 -0
  54. package/lib/api/endpoints/quoxflow.js +32 -0
  55. package/lib/api/endpoints/quoxplan.js +114 -0
  56. package/lib/api/endpoints/quoxseo.js +108 -0
  57. package/lib/api/endpoints/reach.js +47 -0
  58. package/lib/api/endpoints/runs.js +38 -0
  59. package/lib/api/endpoints/safety.js +46 -0
  60. package/lib/api/endpoints/scim.js +46 -0
  61. package/lib/api/endpoints/scopes.js +14 -0
  62. package/lib/api/endpoints/security.js +69 -0
  63. package/lib/api/endpoints/setup.js +90 -0
  64. package/lib/api/endpoints/skills.js +180 -0
  65. package/lib/api/endpoints/sso.js +67 -0
  66. package/lib/api/endpoints/tags.js +32 -0
  67. package/lib/api/endpoints/teams.js +56 -0
  68. package/lib/api/endpoints/telephony.js +46 -0
  69. package/lib/api/endpoints/tg.js +56 -0
  70. package/lib/api/endpoints/tools.js +50 -0
  71. package/lib/api/endpoints/traces.js +157 -0
  72. package/lib/api/endpoints/triggers.js +70 -0
  73. package/lib/api/endpoints/user-library.js +41 -0
  74. package/lib/api/endpoints/users.js +20 -0
  75. package/lib/api/endpoints/v1.js +499 -0
  76. package/lib/api/endpoints/vault.js +192 -0
  77. package/lib/api/endpoints/voice.js +22 -0
  78. package/lib/api/endpoints/volt.js +84 -0
  79. package/lib/api/endpoints/ward.js +40 -0
  80. package/lib/api/endpoints/webhooks.js +46 -0
  81. package/lib/api/endpoints/workflows.js +162 -0
  82. package/lib/api/endpoints/x.js +24 -0
  83. package/lib/api/endpoints.js +15 -0
  84. package/lib/commands/admin.js +359 -0
  85. package/lib/commands/aee.js +99 -0
  86. package/lib/commands/agent.js +201 -0
  87. package/lib/commands/agentAttach.js +1440 -0
  88. package/lib/commands/approvals.js +47 -0
  89. package/lib/commands/assistant.js +114 -0
  90. package/lib/commands/auth.js +458 -0
  91. package/lib/commands/awareness.js +88 -0
  92. package/lib/commands/backup.js +373 -0
  93. package/lib/commands/brain.js +994 -0
  94. package/lib/commands/budget.js +241 -0
  95. package/lib/commands/build.js +156 -0
  96. package/lib/commands/calendar.js +216 -0
  97. package/lib/commands/capabilities.js +34 -0
  98. package/lib/commands/chat.js +240 -0
  99. package/lib/commands/claude.js +354 -0
  100. package/lib/commands/config-cmd.js +106 -0
  101. package/lib/commands/consent.js +84 -0
  102. package/lib/commands/contacts.js +967 -0
  103. package/lib/commands/contactsSelftest.js +132 -0
  104. package/lib/commands/conversation.js +74 -0
  105. package/lib/commands/department.js +75 -0
  106. package/lib/commands/dev.js +620 -0
  107. package/lib/commands/devResident.js +314 -0
  108. package/lib/commands/devSupervisor.js +1050 -0
  109. package/lib/commands/discord.js +96 -0
  110. package/lib/commands/doctor.js +181 -0
  111. package/lib/commands/domain.js +114 -0
  112. package/lib/commands/done.js +277 -0
  113. package/lib/commands/engagement.js +586 -0
  114. package/lib/commands/entity.js +119 -0
  115. package/lib/commands/facebook.js +212 -0
  116. package/lib/commands/file.js +128 -0
  117. package/lib/commands/fleet.js +882 -0
  118. package/lib/commands/governance.js +638 -0
  119. package/lib/commands/gripe.js +324 -0
  120. package/lib/commands/hat.js +205 -0
  121. package/lib/commands/helpers.js +79 -0
  122. package/lib/commands/inbox.js +122 -0
  123. package/lib/commands/instagram.js +264 -0
  124. package/lib/commands/integration.js +100 -0
  125. package/lib/commands/inventory.js +115 -0
  126. package/lib/commands/invites.js +45 -0
  127. package/lib/commands/licence.js +280 -0
  128. package/lib/commands/linkedin.js +178 -0
  129. package/lib/commands/llm-policy.js +117 -0
  130. package/lib/commands/llm.js +45 -0
  131. package/lib/commands/lucid.js +591 -0
  132. package/lib/commands/mail.js +531 -0
  133. package/lib/commands/memory.js +284 -0
  134. package/lib/commands/mon.js +514 -0
  135. package/lib/commands/monitoring.js +86 -0
  136. package/lib/commands/motion.js +22 -0
  137. package/lib/commands/notes.js +1246 -0
  138. package/lib/commands/notesBatch.js +160 -0
  139. package/lib/commands/notesBridges.js +56 -0
  140. package/lib/commands/notesLinks.js +60 -0
  141. package/lib/commands/notification.js +57 -0
  142. package/lib/commands/nucleus.js +92 -0
  143. package/lib/commands/objective.js +229 -0
  144. package/lib/commands/onboard.js +328 -0
  145. package/lib/commands/open.js +56 -0
  146. package/lib/commands/org.js +266 -0
  147. package/lib/commands/plan.js +906 -0
  148. package/lib/commands/plugin-doctor.js +1091 -0
  149. package/lib/commands/plugin.js +539 -0
  150. package/lib/commands/policy.js +78 -0
  151. package/lib/commands/powers.js +296 -0
  152. package/lib/commands/prompt.js +350 -0
  153. package/lib/commands/qlarity.js +690 -0
  154. package/lib/commands/quoxbox.js +270 -0
  155. package/lib/commands/quoxchat.js +266 -0
  156. package/lib/commands/quoxseo.js +340 -0
  157. package/lib/commands/reach.js +158 -0
  158. package/lib/commands/role.js +286 -0
  159. package/lib/commands/run.js +132 -0
  160. package/lib/commands/safety.js +107 -0
  161. package/lib/commands/scim.js +88 -0
  162. package/lib/commands/scope.js +58 -0
  163. package/lib/commands/security.js +157 -0
  164. package/lib/commands/service.js +89 -0
  165. package/lib/commands/settings.js +99 -0
  166. package/lib/commands/setup.js +543 -0
  167. package/lib/commands/skillManifest.js +113 -0
  168. package/lib/commands/skillRightsFormat.js +38 -0
  169. package/lib/commands/skills.js +644 -0
  170. package/lib/commands/slot.js +1198 -0
  171. package/lib/commands/sso.js +229 -0
  172. package/lib/commands/status.js +137 -0
  173. package/lib/commands/tag.js +91 -0
  174. package/lib/commands/team.js +140 -0
  175. package/lib/commands/tg.js +240 -0
  176. package/lib/commands/tiktok.js +218 -0
  177. package/lib/commands/tool.js +216 -0
  178. package/lib/commands/trace.js +525 -0
  179. package/lib/commands/trigger.js +128 -0
  180. package/lib/commands/vault.js +1424 -0
  181. package/lib/commands/voice.js +182 -0
  182. package/lib/commands/volt.js +528 -0
  183. package/lib/commands/watch.js +115 -0
  184. package/lib/commands/webhook.js +137 -0
  185. package/lib/commands/workflow.js +503 -0
  186. package/lib/commands/x.js +439 -0
  187. package/lib/core/actingAs.js +136 -0
  188. package/lib/core/aee.js +53 -0
  189. package/lib/core/agentAlias.js +163 -0
  190. package/lib/core/approvalContext.js +61 -0
  191. package/lib/core/auth.js +350 -0
  192. package/lib/core/banner.js +143 -0
  193. package/lib/core/brainPrime.js +90 -0
  194. package/lib/core/callerSource.js +129 -0
  195. package/lib/core/claudeLs.js +94 -0
  196. package/lib/core/client.js +584 -0
  197. package/lib/core/completions.js +163 -0
  198. package/lib/core/config.js +551 -0
  199. package/lib/core/confirm.js +37 -0
  200. package/lib/core/deeplinks.js +76 -0
  201. package/lib/core/doneEngineFetch.js +219 -0
  202. package/lib/core/errors.js +132 -0
  203. package/lib/core/global-flags.js +90 -0
  204. package/lib/core/governedSession.js +402 -0
  205. package/lib/core/lazyCommands.js +119 -0
  206. package/lib/core/liveSessionsReport.js +112 -0
  207. package/lib/core/org-override.js +52 -0
  208. package/lib/core/output.js +239 -0
  209. package/lib/core/prodEnv.js +7 -0
  210. package/lib/core/quoxglyph.js +158 -0
  211. package/lib/core/residentAlarm.js +282 -0
  212. package/lib/core/residentAuth.js +243 -0
  213. package/lib/core/residentPump.js +229 -0
  214. package/lib/core/residentSeed.js +104 -0
  215. package/lib/core/sessionHeartbeat.js +192 -0
  216. package/lib/core/sessionsOverview.js +160 -0
  217. package/lib/core/slotKeeper.js +282 -0
  218. package/lib/core/supervisorEngine.js +864 -0
  219. package/lib/core/systemdInstaller.js +256 -0
  220. package/lib/core/version.js +87 -0
  221. package/lib/core/websiteSession.js +148 -0
  222. package/lib/lucid/LucidIntro.jsx +105 -0
  223. package/lib/lucid/blind.js +71 -0
  224. package/lib/lucid/deck.js +32 -0
  225. package/lib/lucid/fmt.js +139 -0
  226. package/lib/lucid/sitrep.js +173 -0
  227. package/lib/plugins/loader.js +93 -0
  228. package/lib/quoxon/activity.js +104 -0
  229. package/lib/quoxon/api.js +473 -0
  230. package/lib/quoxon/app.js +1262 -0
  231. package/lib/quoxon/capabilities.js +75 -0
  232. package/lib/quoxon/commands.js +154 -0
  233. package/lib/quoxon/connect.js +467 -0
  234. package/lib/quoxon/connectCard.js +28 -0
  235. package/lib/quoxon/context.js +68 -0
  236. package/lib/quoxon/copy.js +33 -0
  237. package/lib/quoxon/demo.fixtures.js +24 -0
  238. package/lib/quoxon/demo.js +35 -0
  239. package/lib/quoxon/egg.js +36 -0
  240. package/lib/quoxon/events.js +458 -0
  241. package/lib/quoxon/gallery.js +223 -0
  242. package/lib/quoxon/indicator.js +193 -0
  243. package/lib/quoxon/intent.js +41 -0
  244. package/lib/quoxon/keys.js +121 -0
  245. package/lib/quoxon/main.js +244 -0
  246. package/lib/quoxon/markdown.js +317 -0
  247. package/lib/quoxon/model.js +205 -0
  248. package/lib/quoxon/motion/clock.js +69 -0
  249. package/lib/quoxon/motion/color.js +35 -0
  250. package/lib/quoxon/motion/frame.js +14 -0
  251. package/lib/quoxon/motion/reveal.js +54 -0
  252. package/lib/quoxon/motion/ring.js +79 -0
  253. package/lib/quoxon/objects/agent.js +61 -0
  254. package/lib/quoxon/objects/crystal.js +100 -0
  255. package/lib/quoxon/objects/fetch.js +170 -0
  256. package/lib/quoxon/objects/index.js +85 -0
  257. package/lib/quoxon/objects/ladder.js +71 -0
  258. package/lib/quoxon/objects/memory.js +44 -0
  259. package/lib/quoxon/objects/model.js +118 -0
  260. package/lib/quoxon/objects/proof.js +110 -0
  261. package/lib/quoxon/objects/skill.js +105 -0
  262. package/lib/quoxon/objects/view.js +76 -0
  263. package/lib/quoxon/objects/workflow.js +119 -0
  264. package/lib/quoxon/observers.js +42 -0
  265. package/lib/quoxon/onboarding/copy.js +235 -0
  266. package/lib/quoxon/onboarding/credential.js +95 -0
  267. package/lib/quoxon/onboarding/detect.js +22 -0
  268. package/lib/quoxon/onboarding/finish.js +119 -0
  269. package/lib/quoxon/onboarding/index.js +67 -0
  270. package/lib/quoxon/onboarding/installRunner.js +225 -0
  271. package/lib/quoxon/onboarding/intent.js +53 -0
  272. package/lib/quoxon/onboarding/journey.js +73 -0
  273. package/lib/quoxon/onboarding/preflight.js +142 -0
  274. package/lib/quoxon/onboarding/runner.js +58 -0
  275. package/lib/quoxon/onboarding/view.js +625 -0
  276. package/lib/quoxon/print.js +94 -0
  277. package/lib/quoxon/qart.js +379 -0
  278. package/lib/quoxon/qglyph.js +143 -0
  279. package/lib/quoxon/qhello.js +58 -0
  280. package/lib/quoxon/qmotion.js +111 -0
  281. package/lib/quoxon/render.js +648 -0
  282. package/lib/quoxon/roster.js +221 -0
  283. package/lib/quoxon/route.js +38 -0
  284. package/lib/quoxon/rules.js +130 -0
  285. package/lib/quoxon/session.js +68 -0
  286. package/lib/quoxon/skills.js +30 -0
  287. package/lib/quoxon/slash/compact.js +90 -0
  288. package/lib/quoxon/slash/ledger.js +83 -0
  289. package/lib/quoxon/slash/listView.js +28 -0
  290. package/lib/quoxon/slash/palette.js +104 -0
  291. package/lib/quoxon/slash/paletteController.js +59 -0
  292. package/lib/quoxon/slash/panels.js +101 -0
  293. package/lib/quoxon/slash/picker.js +38 -0
  294. package/lib/quoxon/slash/restart.js +144 -0
  295. package/lib/quoxon/slash/resume.js +59 -0
  296. package/lib/quoxon/slash/settings.js +50 -0
  297. package/lib/quoxon/sound/index.js +186 -0
  298. package/lib/quoxon/sound/mapping.js +119 -0
  299. package/lib/quoxon/sound/output.js +52 -0
  300. package/lib/quoxon/sound/synth.js +122 -0
  301. package/lib/quoxon/term.js +106 -0
  302. package/lib/quoxon/textBuffer.js +242 -0
  303. package/lib/quoxon/theme.js +253 -0
  304. package/lib/quoxon/transcript.js +150 -0
  305. package/lib/quoxon/web/qface.js +81 -0
  306. package/lib/quoxon/welcome.js +52 -0
  307. package/lib/tui/app.jsx +289 -0
  308. package/lib/tui/components/Breadcrumb.jsx +42 -0
  309. package/lib/tui/components/ChatInput.jsx +68 -0
  310. package/lib/tui/components/Confirm.jsx +32 -0
  311. package/lib/tui/components/DataTable.jsx +270 -0
  312. package/lib/tui/components/DetailPanel.jsx +241 -0
  313. package/lib/tui/components/HelpOverlay.jsx +67 -0
  314. package/lib/tui/components/Layout.jsx +129 -0
  315. package/lib/tui/components/Palette.jsx +141 -0
  316. package/lib/tui/components/SearchInput.jsx +125 -0
  317. package/lib/tui/components/Sparkline.jsx +55 -0
  318. package/lib/tui/components/StatusBar.jsx +133 -0
  319. package/lib/tui/components/Toast.jsx +52 -0
  320. package/lib/tui/hooks/useApi.js +44 -0
  321. package/lib/tui/hooks/useHealth.js +90 -0
  322. package/lib/tui/hooks/usePolledApi.js +86 -0
  323. package/lib/tui/hooks/useTerminalSize.js +46 -0
  324. package/lib/tui/index.js +56 -0
  325. package/lib/tui/intro/Intro.jsx +332 -0
  326. package/lib/tui/jsx-loader.js +32 -0
  327. package/lib/tui/keys.js +87 -0
  328. package/lib/tui/registry.js +49 -0
  329. package/lib/tui/theme.js +103 -0
  330. package/lib/tui/views/AdminView.jsx +398 -0
  331. package/lib/tui/views/AgentView.jsx +204 -0
  332. package/lib/tui/views/BackupView.jsx +225 -0
  333. package/lib/tui/views/BrainView.jsx +223 -0
  334. package/lib/tui/views/ChatView.jsx +468 -0
  335. package/lib/tui/views/FilesView.jsx +218 -0
  336. package/lib/tui/views/FleetView.jsx +234 -0
  337. package/lib/tui/views/GovernanceView.jsx +453 -0
  338. package/lib/tui/views/HealthView.jsx +216 -0
  339. package/lib/tui/views/InboxView.jsx +228 -0
  340. package/lib/tui/views/LucidDeck.jsx +727 -0
  341. package/lib/tui/views/MainMenu.jsx +123 -0
  342. package/lib/tui/views/MemoryView.jsx +377 -0
  343. package/lib/tui/views/ObjectivesView.jsx +230 -0
  344. package/lib/tui/views/OrgView.jsx +229 -0
  345. package/lib/tui/views/ToolView.jsx +221 -0
  346. package/lib/tui/views/VaultView.jsx +422 -0
  347. package/lib/tui/views/WorkflowView.jsx +329 -0
  348. package/package.json +72 -4
@@ -0,0 +1,122 @@
1
+ /**
2
+ * 'qlarity.*' endpoints — Qlarity, governed browser inspection for dev servers
3
+ * (DEVSUITE-CLARIFY). Proxied through the collector
4
+ * (services/collector/server.js: app.all('/api/v1/qlarity/*', ...) rewrites to
5
+ * QLARITY_URL/api/v1/*, port 3109).
6
+ *
7
+ * Unlike the quoxplan proxy, this one is org-resolved and licence-gated from
8
+ * its first commit, so every call here can return 403 for an unlicensed org.
9
+ * That is the gate working, not a fault, and the command layer says so.
10
+ *
11
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
12
+ */
13
+
14
+ export const qlarity = {
15
+ 'qlarity.health': {
16
+ method: 'GET',
17
+ service: 'collector',
18
+ path: () => `/api/v1/qlarity/health`,
19
+ tags: ['live-safe'],
20
+ },
21
+ 'qlarity.inspectors.list': {
22
+ method: 'GET',
23
+ service: 'collector',
24
+ path: () => `/api/v1/qlarity/inspectors`,
25
+ tags: ['live-safe'],
26
+ },
27
+ // NO-ENV-ONLY-CONFIG: the per-ORG allowlist a customer can actually manage.
28
+ // Distinct from 'qlarity.allowlist' above, which reports the install-wide
29
+ // env-var list the operator set. These are collector-owned routes, not
30
+ // proxied to the QLarity service, hence the different path prefix.
31
+ 'qlarity.orgAllowlist.list': {
32
+ method: 'GET',
33
+ service: 'collector',
34
+ path: () => `/api/v1/qlarity-allowlist`,
35
+ tags: ['live-safe'],
36
+ },
37
+ 'qlarity.orgAllowlist.add': {
38
+ method: 'POST',
39
+ service: 'collector',
40
+ path: () => `/api/v1/qlarity-allowlist`,
41
+ },
42
+ 'qlarity.orgAllowlist.remove': {
43
+ method: 'DELETE',
44
+ service: 'collector',
45
+ path: ({ origin }) => `/api/v1/qlarity-allowlist?origin=${encodeURIComponent(origin)}`,
46
+ },
47
+ 'qlarity.allowlist': {
48
+ method: 'GET',
49
+ service: 'collector',
50
+ path: () => `/api/v1/qlarity/allowlist`,
51
+ tags: ['live-safe'],
52
+ },
53
+ 'qlarity.sessions.list': {
54
+ method: 'GET',
55
+ service: 'collector',
56
+ path: () => `/api/v1/qlarity/sessions`,
57
+ tags: ['live-safe'],
58
+ },
59
+ 'qlarity.session.create': {
60
+ method: 'POST',
61
+ service: 'collector',
62
+ path: () => `/api/v1/qlarity/sessions`,
63
+ },
64
+ 'qlarity.session.close': {
65
+ method: 'DELETE',
66
+ service: 'collector',
67
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}`,
68
+ },
69
+ 'qlarity.session.open': {
70
+ method: 'POST',
71
+ service: 'collector',
72
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/open`,
73
+ },
74
+ 'qlarity.session.inspect': {
75
+ method: 'POST',
76
+ service: 'collector',
77
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/inspect`,
78
+ },
79
+ 'qlarity.session.blocked': {
80
+ method: 'GET',
81
+ service: 'collector',
82
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/blocked`,
83
+ tags: ['live-safe'],
84
+ },
85
+ 'qlarity.session.console': {
86
+ method: 'GET',
87
+ service: 'collector',
88
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/console`,
89
+ tags: ['live-safe'],
90
+ },
91
+ 'qlarity.session.network': {
92
+ method: 'GET',
93
+ service: 'collector',
94
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/network`,
95
+ tags: ['live-safe'],
96
+ },
97
+ 'qlarity.session.screenshot': {
98
+ method: 'POST',
99
+ service: 'collector',
100
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/screenshot`,
101
+ },
102
+ /** Always files an approval; never executes inline. */
103
+ 'qlarity.session.eval': {
104
+ method: 'POST',
105
+ service: 'collector',
106
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/eval`,
107
+ },
108
+ /**
109
+ * Governed authed-session bootstrap (issue #15). Body carries
110
+ * `credential_id` (a stored `browser_login` vault credential), never a raw
111
+ * password — the collector resolves it server-side and forwards the
112
+ * resolved fields to qlarity on the internal network only. See
113
+ * server.js's resolveQlarityLoginCredential.
114
+ */
115
+ 'qlarity.session.login': {
116
+ method: 'POST',
117
+ service: 'collector',
118
+ path: (p) => `/api/v1/qlarity/sessions/${p.sessionId}/login`,
119
+ },
120
+ };
121
+
122
+ export default qlarity;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 'quoxbox.*' endpoints — QuoxBox governed Mac-mini agent gateway, proxied
3
+ * through the collector (services/collector/routes/quoxbox-proxy.js,
4
+ * mounted at /api/quoxbox). Collector-direct, no org segment in the URL —
5
+ * same shape as `traces.*`/`aee.*`/`mon.*`. requireAuth() is applied to
6
+ * every route server-side (org-scoped, no anonymous access), but the
7
+ * gateway itself (and its bearer token) never reach the browser/CLI.
8
+ *
9
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
10
+ */
11
+
12
+ export const quoxbox = {
13
+ 'quoxbox.live': {
14
+ method: 'GET',
15
+ service: 'collector',
16
+ path: () => `/api/quoxbox/live`,
17
+ tags: ['live-safe'],
18
+ },
19
+ 'quoxbox.workflows.list': {
20
+ method: 'GET',
21
+ service: 'collector',
22
+ path: () => `/api/quoxbox/workflows`,
23
+ tags: ['live-safe'],
24
+ },
25
+ 'quoxbox.task.run': {
26
+ method: 'POST',
27
+ service: 'collector',
28
+ path: () => `/api/quoxbox/task/run`,
29
+ tags: ['live-write'],
30
+ },
31
+ 'quoxbox.task.get': {
32
+ method: 'GET',
33
+ service: 'collector',
34
+ path: ({ taskId }) => `/api/quoxbox/task/${taskId}`,
35
+ tags: ['live-safe'],
36
+ },
37
+ 'quoxbox.approve': {
38
+ method: 'POST',
39
+ service: 'collector',
40
+ path: ({ approvalId }) => `/api/quoxbox/approve/${approvalId}`,
41
+ tags: ['live-write'],
42
+ },
43
+ 'quoxbox.deny': {
44
+ method: 'POST',
45
+ service: 'collector',
46
+ path: ({ approvalId }) => `/api/quoxbox/deny/${approvalId}`,
47
+ tags: ['live-write'],
48
+ },
49
+ 'quoxbox.mode.set': {
50
+ method: 'POST',
51
+ service: 'collector',
52
+ path: () => `/api/quoxbox/mode`,
53
+ tags: ['live-write'],
54
+ },
55
+ };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 'quoxchat.*' endpoints — QuoxChat website-widget management (auth service,
3
+ * services/auth/routes/widgets.js, mounted at plain `/api`, requireOrgMembership).
4
+ *
5
+ * Covers the QuoxChat Pro operator availability surface: `operator_online` and
6
+ * `office_hours_json` live on the widget row and are toggled via the widget
7
+ * PATCH route (plan-gated fields return 402 `plan_upgrade_required`).
8
+ *
9
+ * Live-support desk parity (QuoxChat Pro /live-support view): conversations
10
+ * list/transcript come from services/auth/routes/widgets.js; operator-reply
11
+ * comes from the separate org-authed router in
12
+ * services/auth/routes/internal-widget-matrix.js (widgetConversationOrgRouter,
13
+ * mounted at plain `/api` in server.js), which derives sender identity
14
+ * server-side and 409s when the conversation isn't `handed_off`.
15
+ */
16
+
17
+ export const quoxchat = {
18
+ 'quoxchat.widgets.get': {
19
+ method: 'GET',
20
+ service: 'auth',
21
+ path: ({ orgId, widgetId }) => `/api/orgs/${orgId}/widgets/${widgetId}`,
22
+ tags: ['live-safe'],
23
+ },
24
+ 'quoxchat.widgets.list': {
25
+ method: 'GET',
26
+ service: 'auth',
27
+ path: ({ orgId }) => `/api/orgs/${orgId}/widgets`,
28
+ tags: ['live-safe'],
29
+ },
30
+ 'quoxchat.widgets.update': {
31
+ method: 'PATCH',
32
+ service: 'auth',
33
+ path: ({ orgId, widgetId }) => `/api/orgs/${orgId}/widgets/${widgetId}`,
34
+ tags: ['live-write'],
35
+ },
36
+ 'quoxchat.conversations.list': {
37
+ method: 'GET',
38
+ service: 'auth',
39
+ path: ({ orgId, widgetId }) => `/api/orgs/${orgId}/widgets/${widgetId}/conversations`,
40
+ tags: ['live-safe'],
41
+ },
42
+ 'quoxchat.conversations.messages.list': {
43
+ method: 'GET',
44
+ service: 'auth',
45
+ path: ({ orgId, widgetId, conversationId }) => `/api/orgs/${orgId}/widgets/${widgetId}/conversations/${conversationId}/messages`,
46
+ tags: ['live-safe'],
47
+ },
48
+ 'quoxchat.conversations.reply.create': {
49
+ method: 'POST',
50
+ service: 'auth',
51
+ path: ({ orgId, widgetId, conversationId }) => `/api/orgs/${orgId}/widgets/${widgetId}/conversations/${conversationId}/operator-reply`,
52
+ tags: ['live-write'],
53
+ },
54
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 'quoxflow.*' 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 quoxflow = {
8
+ 'quoxflow.evidence.list': {
9
+ method: 'GET',
10
+ service: 'collector',
11
+ path: () => `/quoxflow/evidence`,
12
+ tags: ['live-safe'],
13
+ },
14
+ 'quoxflow.observations.list': {
15
+ method: 'GET',
16
+ service: 'collector',
17
+ path: () => `/quoxflow/observations`,
18
+ tags: ['live-safe'],
19
+ },
20
+ 'quoxflow.skills.get': {
21
+ method: 'GET',
22
+ service: 'collector',
23
+ path: ({ id }) => `/quoxflow/skills/${id}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'quoxflow.skills.list': {
27
+ method: 'GET',
28
+ service: 'collector',
29
+ path: () => `/quoxflow/skills`,
30
+ tags: ['live-safe'],
31
+ },
32
+ };
@@ -0,0 +1,114 @@
1
+ /**
2
+ * 'quoxplan.*' endpoints — QuoxPlan (the productised planning suite,
3
+ * STREAM_QUOXPLAN_PLAN.md), proxied through the collector
4
+ * (services/collector/server.js: app.all('/api/v1/quoxplan/*', ...) rewrites
5
+ * to QUOXPLAN_URL/api/v1/*, port 3107). Collector-direct, no org segment in
6
+ * the URL — same shape as `quoxbox.*`/`traces.*`/`aee.*`/`mon.*`: the proxy
7
+ * applies requireServiceOrUserAuth() server-side, no per-org scoping yet
8
+ * (QuoxPlan is dummy-data-only until the P5 multi-tenant phase).
9
+ *
10
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
11
+ */
12
+
13
+ export const quoxplan = {
14
+ 'quoxplan.roadmaps.list': {
15
+ method: 'GET',
16
+ service: 'collector',
17
+ path: () => `/api/v1/quoxplan/roadmaps`,
18
+ tags: ['live-safe'],
19
+ },
20
+ // Roadmap-create primitive (ONBOARD step 0): there was no `roadmap create`
21
+ // verb, only list. The wizard needs a governed way to give a fresh tenant
22
+ // its own roadmap. Collector proxies POST /api/v1/quoxplan/roadmaps to the
23
+ // QuoxPlan server, same governed path as every other quoxplan.* entry.
24
+ 'quoxplan.roadmaps.create': {
25
+ method: 'POST',
26
+ service: 'collector',
27
+ path: () => `/api/v1/quoxplan/roadmaps`,
28
+ tags: ['live-write'],
29
+ },
30
+ 'quoxplan.roadmap.streams.list': {
31
+ method: 'GET',
32
+ service: 'collector',
33
+ path: ({ roadmapId }) => `/api/v1/quoxplan/roadmaps/${roadmapId}/streams`,
34
+ tags: ['live-safe'],
35
+ },
36
+ 'quoxplan.roadmap.timeline.get': {
37
+ method: 'GET',
38
+ service: 'collector',
39
+ path: ({ roadmapId }) => `/api/v1/quoxplan/roadmaps/${roadmapId}/timeline`,
40
+ tags: ['live-safe'],
41
+ },
42
+ 'quoxplan.roadmap.reprioritise': {
43
+ method: 'POST',
44
+ service: 'collector',
45
+ path: ({ roadmapId }) => `/api/v1/quoxplan/roadmaps/${roadmapId}/reprioritise`,
46
+ tags: ['live-write'],
47
+ },
48
+ 'quoxplan.roadmap.streams.create': {
49
+ method: 'POST',
50
+ service: 'collector',
51
+ path: ({ roadmapId }) => `/api/v1/quoxplan/roadmaps/${roadmapId}/streams`,
52
+ tags: ['live-write'],
53
+ },
54
+ 'quoxplan.roadmap.export.get': {
55
+ method: 'GET',
56
+ service: 'collector',
57
+ path: ({ roadmapId }) => `/api/v1/quoxplan/roadmaps/${roadmapId}/export`,
58
+ tags: ['live-safe'],
59
+ },
60
+ 'quoxplan.stream.get': {
61
+ method: 'GET',
62
+ service: 'collector',
63
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}`,
64
+ tags: ['live-safe'],
65
+ },
66
+ 'quoxplan.stream.update': {
67
+ method: 'PATCH',
68
+ service: 'collector',
69
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}`,
70
+ tags: ['live-write'],
71
+ },
72
+ 'quoxplan.stream.rename': {
73
+ method: 'POST',
74
+ service: 'collector',
75
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}/rename`,
76
+ tags: ['live-write'],
77
+ },
78
+ 'quoxplan.stream.notes.create': {
79
+ method: 'POST',
80
+ service: 'collector',
81
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}/notes`,
82
+ tags: ['live-write'],
83
+ },
84
+ 'quoxplan.stream.phases.create': {
85
+ method: 'POST',
86
+ service: 'collector',
87
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}/phases`,
88
+ tags: ['live-write'],
89
+ },
90
+ 'quoxplan.phase.update': {
91
+ method: 'PATCH',
92
+ service: 'collector',
93
+ path: ({ phaseId }) => `/api/v1/quoxplan/phases/${phaseId}`,
94
+ tags: ['live-write'],
95
+ },
96
+ 'quoxplan.phase.delete': {
97
+ method: 'DELETE',
98
+ service: 'collector',
99
+ path: ({ phaseId }) => `/api/v1/quoxplan/phases/${phaseId}`,
100
+ tags: ['live-write'],
101
+ },
102
+ 'quoxplan.stream.plan.put': {
103
+ method: 'PUT',
104
+ service: 'collector',
105
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}/plan`,
106
+ tags: ['live-write'],
107
+ },
108
+ 'quoxplan.stream.plan.versions.list': {
109
+ method: 'GET',
110
+ service: 'collector',
111
+ path: ({ id }) => `/api/v1/quoxplan/streams/${id}/plan/versions`,
112
+ tags: ['live-safe'],
113
+ },
114
+ };
@@ -0,0 +1,108 @@
1
+ /**
2
+ * 'quoxseo.*' endpoints — QuoxSEO, the witnessed SEO warehouse (QUOXSEO S2).
3
+ * Proxied through the collector (services/collector/server.js:
4
+ * app.all('/api/v1/quoxseo/*', ...) rewrites to QUOXSEO_URL/api/v1/*, port
5
+ * 3110, repo quoxai/quox-seo). Entitlement-gated from the first commit; a
6
+ * 403 is the licence gate working. The surface is read-only by design bar
7
+ * ONE governed mutation, site registration (quox#583): ingest and witnessing
8
+ * run on a server-side timer, never through HTTP.
9
+ *
10
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
11
+ */
12
+
13
+ export const quoxseo = {
14
+ 'quoxseo.health': {
15
+ method: 'GET',
16
+ service: 'collector',
17
+ path: () => `/api/v1/quoxseo/health`,
18
+ tags: ['live-safe'],
19
+ },
20
+ 'quoxseo.summary': {
21
+ method: 'GET',
22
+ service: 'collector',
23
+ path: () => `/api/v1/quoxseo/summary`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'quoxseo.urls': {
27
+ method: 'GET',
28
+ service: 'collector',
29
+ path: ({ query = '' }) => `/api/v1/quoxseo/urls${query}`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'quoxseo.url.detail': {
33
+ method: 'GET',
34
+ service: 'collector',
35
+ path: ({ path: urlPath }) => `/api/v1/quoxseo/urls/detail?path=${encodeURIComponent(urlPath)}`,
36
+ tags: ['live-safe'],
37
+ },
38
+ 'quoxseo.crawls': {
39
+ method: 'GET',
40
+ service: 'collector',
41
+ path: () => `/api/v1/quoxseo/crawls`,
42
+ tags: ['live-safe'],
43
+ },
44
+ 'quoxseo.changes': {
45
+ method: 'GET',
46
+ service: 'collector',
47
+ path: ({ query = '' }) => `/api/v1/quoxseo/changes${query}`,
48
+ tags: ['live-safe'],
49
+ },
50
+ 'quoxseo.verify': {
51
+ method: 'GET',
52
+ service: 'collector',
53
+ path: () => `/api/v1/quoxseo/verify`,
54
+ tags: ['live-safe'],
55
+ },
56
+ 'quoxseo.trends': {
57
+ method: 'GET',
58
+ service: 'collector',
59
+ path: ({ query = '' }) => `/api/v1/quoxseo/trends${query}`,
60
+ tags: ['live-safe'],
61
+ },
62
+ 'quoxseo.inspection': {
63
+ method: 'GET',
64
+ service: 'collector',
65
+ path: ({ query = '' }) => `/api/v1/quoxseo/inspection${query}`,
66
+ tags: ['live-safe'],
67
+ },
68
+ // quox#583: the org's registered properties, and the one governed write.
69
+ 'quoxseo.sites': {
70
+ method: 'GET',
71
+ service: 'collector',
72
+ path: () => `/api/v1/quoxseo/properties`,
73
+ tags: ['live-safe'],
74
+ },
75
+ 'quoxseo.sites.add': {
76
+ method: 'POST',
77
+ service: 'collector',
78
+ path: () => `/api/v1/quoxseo/sites`,
79
+ },
80
+ // quox#676: governed report delivery (email via instance SMTP and/or the HITL
81
+ // inbox, AEE-witnessed at the collector).
82
+ 'quoxseo.report.deliver': {
83
+ method: 'POST',
84
+ service: 'collector',
85
+ path: () => `/api/v1/quoxseo/report/deliver`,
86
+ },
87
+ // Paid layer (DataForSEO), read-only over data already bought and persisted
88
+ // by the CLI/scheduler; these three never trigger a paid DataForSEO call
89
+ // themselves. See quox-seo/server/src/server.mjs for the route handlers.
90
+ 'quoxseo.keywords': {
91
+ method: 'GET',
92
+ service: 'collector',
93
+ path: ({ query = '' }) => `/api/v1/quoxseo/keywords${query}`,
94
+ tags: ['live-safe'],
95
+ },
96
+ 'quoxseo.gaps': {
97
+ method: 'GET',
98
+ service: 'collector',
99
+ path: ({ query = '' }) => `/api/v1/quoxseo/gaps${query}`,
100
+ tags: ['live-safe'],
101
+ },
102
+ 'quoxseo.backlinks': {
103
+ method: 'GET',
104
+ service: 'collector',
105
+ path: ({ query = '' }) => `/api/v1/quoxseo/backlinks${query}`,
106
+ tags: ['live-safe'],
107
+ },
108
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 'reach.*' endpoints — an agent's governed blast radius (BLAST-RADIUS-P0/P1/P2).
3
+ * Proxied straight through to the collector route:
4
+ * services/collector/server.js: GET /orgs/:orgId/agents/:agentId/reach
5
+ * (requireServiceOrUserAuth: JWT or service key).
6
+ *
7
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
8
+ */
9
+
10
+ export const reach = {
11
+ 'reach.agent.get': {
12
+ method: 'GET',
13
+ service: 'collector',
14
+ path: (p) => `/orgs/${p.orgId}/agents/${p.agentId}/reach`,
15
+ tags: ['live-safe'],
16
+ },
17
+ // BLAST-RADIUS-P4: predicted-vs-actual least-privilege report.
18
+ // services/collector/server.js: GET /orgs/:orgId/agents/:agentId/reach/least-privilege
19
+ 'reach.agent.leastPrivilege': {
20
+ method: 'GET',
21
+ service: 'collector',
22
+ path: (p) => `/orgs/${p.orgId}/agents/${p.agentId}/reach/least-privilege${p.days ? `?days=${encodeURIComponent(p.days)}` : ''}`,
23
+ tags: ['live-safe'],
24
+ },
25
+ // OPGOV quox#573: org-wide rollup of the same grant graph (the agent CMDB).
26
+ // services/collector/server.js: GET /orgs/:orgId/inventory
27
+ // OPGOV quox#573 phase 3: witnessed drift vs the last stored snapshot.
28
+ // services/collector/server.js: GET /orgs/:orgId/inventory/drift
29
+ 'reach.org.inventory.drift': {
30
+ method: 'GET',
31
+ service: 'collector',
32
+ path: (p) => `/orgs/${p.orgId}/inventory/drift`,
33
+ },
34
+ 'reach.org.inventory': {
35
+ method: 'GET',
36
+ service: 'collector',
37
+ path: (p) => {
38
+ const q = [];
39
+ if (p.days) q.push(`days=${encodeURIComponent(p.days)}`);
40
+ if (p.unused === true) q.push('unused=true');
41
+ return `/orgs/${p.orgId}/inventory${q.length ? `?${q.join('&')}` : ''}`;
42
+ },
43
+ tags: ['live-safe'],
44
+ },
45
+ };
46
+
47
+ export default reach;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 'runs.*' 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 runs = {
8
+ 'runs.cancel': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId, runId }) => `/api/orgs/${orgId}/runs/${runId}/cancel`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'runs.create': {
15
+ method: 'POST',
16
+ service: 'auth',
17
+ path: ({ orgId }) => `/api/orgs/${orgId}/runs`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'runs.get': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId, pollRunId }) => `/api/orgs/${orgId}/runs/${pollRunId}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'runs.list': {
27
+ method: 'GET',
28
+ service: 'auth',
29
+ path: ({ orgId }) => `/api/orgs/${orgId}/runs`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'runs.resume': {
33
+ method: 'POST',
34
+ service: 'auth',
35
+ path: ({ orgId, runId }) => `/api/orgs/${orgId}/runs/${runId}/resume`,
36
+ tags: ['live-write'],
37
+ },
38
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 'safety.*' endpoints — kill switch / DEFCON (quox#503/#505/#506/#507).
3
+ * Collector routes/safetyGate.js, mounted at /api/v1/safety behind
4
+ * requireServiceOrUserAuth(); mutations additionally require a HUMAN admin
5
+ * server-side (requireHumanAdmin rejects agent/resident/service tokens BY
6
+ * DESIGN — an agent must never flip its own kill switch).
7
+ */
8
+
9
+ export const safety = {
10
+ 'safety.status': {
11
+ method: 'GET',
12
+ service: 'collector',
13
+ path: () => `/api/v1/safety/status`,
14
+ tags: ['live-safe'],
15
+ },
16
+ 'safety.gate': {
17
+ method: 'GET',
18
+ service: 'collector',
19
+ path: ({ agentId }) => `/api/v1/safety/gate?agent_id=${encodeURIComponent(agentId)}`,
20
+ tags: ['live-safe'],
21
+ },
22
+ 'safety.estop': {
23
+ method: 'POST',
24
+ service: 'collector',
25
+ path: ({ agentId }) => `/api/v1/safety/kill-switch/${encodeURIComponent(agentId)}`,
26
+ tags: ['live-write'],
27
+ },
28
+ 'safety.release': {
29
+ method: 'DELETE',
30
+ service: 'collector',
31
+ path: ({ agentId }) => `/api/v1/safety/kill-switch/${encodeURIComponent(agentId)}`,
32
+ tags: ['live-write'],
33
+ },
34
+ 'safety.defcon': {
35
+ method: 'POST',
36
+ service: 'collector',
37
+ path: () => `/api/v1/safety/defcon`,
38
+ tags: ['live-write'],
39
+ },
40
+ 'safety.history': {
41
+ method: 'GET',
42
+ service: 'collector',
43
+ path: () => `/api/v1/safety/history`,
44
+ tags: ['live-safe'],
45
+ },
46
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 'scim.*' endpoints — WP3.1 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #6).
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 `app.use('/api', webhooksRoutes)`) — org-scoped IN the URL
7
+ * (`/api/orgs/:orgId/scim/tokens...`). Same enterprise-tier +
8
+ * ORG_MANAGE_SETTINGS `chain` as the webhooks.* routes on this router, but
9
+ * a distinct resource (SCIM bearer tokens for IdP-driven directory sync,
10
+ * not team_event fan-out subscribers) — deliberately out of scope for the
11
+ * `webhooks.*` fragment/WP2.2 per that fragment's header note, and given
12
+ * its own domain here.
13
+ *
14
+ * Verified at the handler: list/create/delete all resolve through
15
+ * `req.org.id` (services/auth/utils/scimTokens.js — every query includes
16
+ * `WHERE org_id = ?`), so a tokenId from another org cannot be revoked.
17
+ *
18
+ * `scim.tokens.create`'s response body is NOT wrapped in `{ token: {...} }`
19
+ * — it's the raw `{ id, token }` shape returned by `createScimToken()`
20
+ * (webhooks.js `res.status(201).json(out)`), where `token` is the
21
+ * plaintext bearer credential, shown exactly once. Every other route on
22
+ * this fragment (and `webhooks.*`) wraps its payload under a named key;
23
+ * this one does not. Reproduced faithfully — do not add a wrapper key
24
+ * without changing the backend route.
25
+ */
26
+
27
+ export const scim = {
28
+ 'scim.tokens.create': {
29
+ method: 'POST',
30
+ service: 'auth',
31
+ path: ({ orgId }) => `/api/orgs/${orgId}/scim/tokens`,
32
+ tags: ['live-write'],
33
+ },
34
+ 'scim.tokens.delete': {
35
+ method: 'DELETE',
36
+ service: 'auth',
37
+ path: ({ orgId, tokenId }) => `/api/orgs/${orgId}/scim/tokens/${tokenId}`,
38
+ tags: ['live-write'],
39
+ },
40
+ 'scim.tokens.list': {
41
+ method: 'GET',
42
+ service: 'auth',
43
+ path: ({ orgId }) => `/api/orgs/${orgId}/scim/tokens`,
44
+ tags: ['live-safe'],
45
+ },
46
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 'scopes.*' 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 scopes = {
8
+ 'scopes.list': {
9
+ method: 'GET',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/scopes`,
12
+ tags: ['live-safe'],
13
+ },
14
+ };