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,69 @@
1
+ /**
2
+ * 'security.*' 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/orgSecurity.js, mounted at plain `/api`
6
+ * (server.js:580 `app.use('/api', orgSecurityRoutes)`) — org-scoped IN the
7
+ * URL (`/api/orgs/:orgId/security/...`). Gated enterprise-tier +
8
+ * ORG_MANAGE_SETTINGS. Verified at the handler: session-policy and
9
+ * ip-allowlist both resolve through `req.org.id`; mfa reads/writes
10
+ * `req.org.security_flags_json` directly off the already-org-scoped
11
+ * `req.org` row. No cross-tenant path.
12
+ *
13
+ * NAMING NOTE: the source file is `orgSecurity.js` but this fragment is
14
+ * named `security.js` (not `org-security.js`) so its endpoint keys can use
15
+ * the `security.*` prefix required by the fragment guard
16
+ * (test/api/endpoints-fragments.test.js requires key prefix === filename
17
+ * minus '.js'). A domain of `org-security` would force `org-security.*`
18
+ * keys instead. `security` does NOT collide with the existing `mfa.js`
19
+ * fragment — that file covers the PERSONAL user MFA enrollment endpoints
20
+ * (`/api/mfa/setup|disable|verify-setup|backup-codes`), distinct from this
21
+ * ORG-LEVEL MFA policy (`/api/orgs/:orgId/security/mfa`, which sets the
22
+ * org-wide required/optional/disabled mode, not a specific user's MFA
23
+ * enrollment).
24
+ */
25
+
26
+ export const security = {
27
+ 'security.ip-allowlist.add': {
28
+ method: 'POST',
29
+ service: 'auth',
30
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/ip-allowlist`,
31
+ tags: ['live-write'],
32
+ },
33
+ 'security.ip-allowlist.list': {
34
+ method: 'GET',
35
+ service: 'auth',
36
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/ip-allowlist`,
37
+ tags: ['live-safe'],
38
+ },
39
+ 'security.ip-allowlist.remove': {
40
+ method: 'DELETE',
41
+ service: 'auth',
42
+ path: ({ orgId, entryId }) => `/api/orgs/${orgId}/security/ip-allowlist/${entryId}`,
43
+ tags: ['live-write'],
44
+ },
45
+ 'security.mfa.get': {
46
+ method: 'GET',
47
+ service: 'auth',
48
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/mfa`,
49
+ tags: ['live-safe'],
50
+ },
51
+ 'security.mfa.set': {
52
+ method: 'PUT',
53
+ service: 'auth',
54
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/mfa`,
55
+ tags: ['live-write'],
56
+ },
57
+ 'security.session-policy.get': {
58
+ method: 'GET',
59
+ service: 'auth',
60
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/session-policy`,
61
+ tags: ['live-safe'],
62
+ },
63
+ 'security.session-policy.set': {
64
+ method: 'PUT',
65
+ service: 'auth',
66
+ path: ({ orgId }) => `/api/orgs/${orgId}/security/session-policy`,
67
+ tags: ['live-write'],
68
+ },
69
+ };
@@ -0,0 +1,90 @@
1
+ /**
2
+ * 'setup.*' 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 setup = {
8
+ 'setup.admin': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: () => `/api/setup/admin`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'setup.config': {
15
+ method: 'POST',
16
+ service: 'auth',
17
+ path: () => `/api/setup/config`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'setup.config.list': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: () => `/api/setup/config`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'setup.licensing.activate': {
27
+ method: 'POST',
28
+ service: 'auth',
29
+ path: () => `/api/setup/licensing/activate`,
30
+ tags: ['live-write'],
31
+ },
32
+ // LICENSE-LAUNCH LL-8-dash: device-code activation (no key paste). Both are
33
+ // instance-admin gated on the auth service, which holds the conversation
34
+ // with the control plane.
35
+ 'setup.licensing.device.start': {
36
+ method: 'POST',
37
+ service: 'auth',
38
+ path: () => `/api/setup/licensing/device/start`,
39
+ tags: ['live-write'],
40
+ },
41
+ 'setup.licensing.device.poll': {
42
+ method: 'POST',
43
+ service: 'auth',
44
+ path: () => `/api/setup/licensing/device/poll`,
45
+ tags: ['live-write'],
46
+ },
47
+ 'setup.licensing.deactivate': {
48
+ method: 'POST',
49
+ service: 'auth',
50
+ path: () => `/api/setup/licensing/deactivate`,
51
+ tags: ['live-write'],
52
+ },
53
+ 'setup.licensing.entitlements.list': {
54
+ method: 'GET',
55
+ service: 'auth',
56
+ path: () => `/api/setup/licensing/entitlements`,
57
+ tags: ['live-safe'],
58
+ },
59
+ // GRIPE-715: `quox licence` phase 1.
60
+ 'setup.licensing.status': {
61
+ method: 'GET',
62
+ service: 'auth',
63
+ path: () => `/api/setup/licensing/status`,
64
+ tags: ['live-safe'],
65
+ },
66
+ 'setup.licensing.refresh': {
67
+ method: 'POST',
68
+ service: 'auth',
69
+ path: () => `/api/setup/licensing/refresh`,
70
+ tags: ['live-write'],
71
+ },
72
+ 'setup.licensing.seats.list': {
73
+ method: 'GET',
74
+ service: 'auth',
75
+ path: ({ pluginId }) => `/api/setup/licensing/seats/${encodeURIComponent(pluginId)}`,
76
+ tags: ['live-safe'],
77
+ },
78
+ 'setup.licensing.seats.releaseDead': {
79
+ method: 'POST',
80
+ service: 'auth',
81
+ path: ({ pluginId }) => `/api/setup/licensing/seats/${encodeURIComponent(pluginId)}/release-dead`,
82
+ tags: ['live-write'],
83
+ },
84
+ 'setup.status.list': {
85
+ method: 'GET',
86
+ service: 'auth',
87
+ path: () => `/api/setup/status`,
88
+ tags: ['live-safe'],
89
+ },
90
+ };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * 'skills.*' endpoints — WP2.3 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #3).
3
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
4
+ *
5
+ * Skill execution, the QSKL-SAFETY review queue, and Crystal lifecycle
6
+ * writes (from-execution / promote-draft / rollback-to-version). All of
7
+ * these are DIRECT to quoxflow (service: 'quoxflow', port 3200), NOT
8
+ * proxied by the collector — the collector only hand-mounts three
9
+ * read-only proxy routes (GET /quoxflow/skills[/:id], evidence,
10
+ * observations; see endpoints/quoxflow.js), confirmed by grepping
11
+ * services/collector/server.js for 'quoxflow'. Same access-path
12
+ * precedent as endpoints/triggers.js and endpoints/workflows.js
13
+ * ('workflows.activate'/'workflows.deactivate').
14
+ *
15
+ * Route provenance (read directly from quoxflow source, not inferred):
16
+ *
17
+ * - skills.run
18
+ * POST /api/workflows/:id/execute
19
+ * quoxflow/src/api/routes/executions.ts:206 (createWorkflowExecuteRoute),
20
+ * mounted at app.route('/api/workflows', workflowExecuteRoutes) (app.ts:243).
21
+ * Body: { triggerData?, async?: boolean (default false), orgId?: string }.
22
+ * Sync (default): runs to completion, 200/500 with the execution result.
23
+ * Async (async:true): fire-and-forget, 202 { executionId, status: 'running' }.
24
+ * "Crystals ARE workflows" — running a skill/crystal IS this route with
25
+ * the skill's/crystal's sourceWorkflowId as :id.
26
+ *
27
+ * - skills.reviewQueue.list / .get / .approve / .reject
28
+ * quoxflow/src/api/routes/quox-skills.ts:392-553 (QSKL-SAFETY.F).
29
+ * GET /api/quox-skills/review-queue?status=pending|approved|rejected
30
+ * (defaults to 'pending' if status is omitted/invalid)
31
+ * GET /api/quox-skills/review-queue/:qid
32
+ * POST /api/quox-skills/review-queue/:qid/approve body: { comment?: string }
33
+ * POST /api/quox-skills/review-queue/:qid/reject body: { comment?: string }
34
+ * Org-scoped correctly (verified, unlike the triggers.* cross-tenant
35
+ * finding): resolveOrgId() takes orgId from the JWT in prod; each row's
36
+ * org_id is checked against the caller's orgId, 403 on mismatch, and the
37
+ * list query itself is `listByStatus(status, orgId)` — this route does
38
+ * NOT reproduce the unscoped-list bug found in quoxflow triggers.
39
+ *
40
+ * - skills.fromExecution / .promoteDraft / .rollbackToVersion
41
+ * quoxflow/src/api/routes/skills.ts (legacy Crystal Skill Library,
42
+ * mounted at app.route('/api/skills', skillsRoutes), app.ts ~256).
43
+ * POST /api/skills/from-execution body: { workflowId, workflowName? }
44
+ * Idempotent: 200 + existing record if one already exists for the
45
+ * source workflow, else 201 on fresh crystallisation, 422 NOT_READY
46
+ * if the execution history doesn't yet support crystallisation.
47
+ * POST /api/skills/promote-draft body: { executionId, orgTier? }
48
+ * orgTier defaults to 'tier_a' (blocked, 402) if omitted — CLI must
49
+ * pass --tier tier_b explicitly to succeed.
50
+ * POST /api/skills/rollback-to-version body: { sourceWorkflowId, targetVersion: number }
51
+ * Writes a NEW version copying the target version's content (201), or
52
+ * 200 + the unchanged latest if targetVersion is already latest.
53
+ */
54
+
55
+ export const skills = {
56
+ // SKILLRIGHTS #478 Phase 14, sealed execution pilot. Collector routes
57
+ // (server.js /api/v1/skills/sealed[...]): the sealed content lives at the
58
+ // collector, encrypted at rest, and is never returned by the read routes
59
+ // below, only the manifest (name, description, inputContract,
60
+ // contentSha256, createdAt) comes back. See
61
+ // docs/SEALED_EXECUTION_PILOT_DESIGN.md for the full contract and the
62
+ // binding claims language every one of these commands must carry.
63
+ 'skills.sealed.create': {
64
+ method: 'POST',
65
+ service: 'collector',
66
+ path: () => `/api/v1/skills/sealed`,
67
+ tags: ['skip-live'], // uploads real skill content; never in a live-contract sweep
68
+ },
69
+ 'skills.sealed.list': {
70
+ method: 'GET',
71
+ service: 'collector',
72
+ path: () => `/api/v1/skills/sealed`,
73
+ tags: ['live-safe'],
74
+ },
75
+ 'skills.sealed.get': {
76
+ method: 'GET',
77
+ service: 'collector',
78
+ path: ({ sealedId }) => `/api/v1/skills/sealed/${sealedId}`,
79
+ tags: ['live-safe'],
80
+ },
81
+ 'skills.sealed.invoke': {
82
+ method: 'POST',
83
+ service: 'collector',
84
+ path: ({ sealedId }) => `/api/v1/skills/sealed/${sealedId}/invoke`,
85
+ tags: ['skip-live'], // executes real methodology with real side effects
86
+ },
87
+ // SKILLRIGHTS #478 Phase 10 — governed skill protection. Unlike every
88
+ // other fragment here these two ARE collector routes (server.js
89
+ // /api/v1/skills/protect + /protections): the collector owns the org
90
+ // signing call, the open-registry registration and the AEE/WARD witness.
91
+ 'skills.protect': {
92
+ method: 'POST',
93
+ service: 'collector',
94
+ path: () => `/api/v1/skills/protect`,
95
+ tags: ['skip-live'], // registers in the real public registry; never in a live-contract sweep
96
+ },
97
+ 'skills.protections': {
98
+ method: 'GET',
99
+ service: 'collector',
100
+ path: () => `/api/v1/skills/protections`,
101
+ tags: ['live-safe'],
102
+ },
103
+ // SKILLRIGHTS #478 Phase 11 — affirmative acceptance (collector). The offer
104
+ // presents the exact artefact hash, declared rights, terms bytes and a
105
+ // single-use challenge; the POST records assent to exactly that, before any
106
+ // download under the 'require-acceptance' policy is authorized. Both are
107
+ // USER-only server-side: a service key is refused with user_assent_required,
108
+ // so neither belongs in a service-credentialled live sweep.
109
+ 'skills.acceptance.offer': {
110
+ method: 'GET',
111
+ service: 'collector',
112
+ path: ({ packId } = {}) => `/api/v1/skills/acceptance/offer${packId ? `?packId=${encodeURIComponent(packId)}` : ''}`,
113
+ tags: ['skip-live'],
114
+ },
115
+ 'skills.acceptance.record': {
116
+ method: 'POST',
117
+ service: 'collector',
118
+ path: () => `/api/v1/skills/acceptance`,
119
+ tags: ['skip-live'], // records a real, append-only acceptance of licence terms
120
+ },
121
+ // Phase 12: the org rights disclosure ledger (read-model, collector).
122
+ 'skills.rightsLedger': {
123
+ method: 'GET',
124
+ service: 'collector',
125
+ path: () => `/api/v1/skills/rights-ledger`,
126
+ tags: ['live-safe'],
127
+ },
128
+ 'skills.fromExecution': {
129
+ method: 'POST',
130
+ service: 'quoxflow',
131
+ path: () => `/api/skills/from-execution`,
132
+ tags: ['live-write'],
133
+ },
134
+ 'skills.promoteDraft': {
135
+ method: 'POST',
136
+ service: 'quoxflow',
137
+ path: () => `/api/skills/promote-draft`,
138
+ tags: ['live-write'],
139
+ },
140
+ 'skills.reviewQueue.approve': {
141
+ method: 'POST',
142
+ service: 'quoxflow',
143
+ path: ({ qid }) => `/api/quox-skills/review-queue/${qid}/approve`,
144
+ tags: ['live-write'],
145
+ },
146
+ 'skills.reviewQueue.get': {
147
+ method: 'GET',
148
+ service: 'quoxflow',
149
+ path: ({ qid }) => `/api/quox-skills/review-queue/${qid}`,
150
+ tags: ['live-safe'],
151
+ },
152
+ 'skills.reviewQueue.list': {
153
+ method: 'GET',
154
+ service: 'quoxflow',
155
+ path: () => `/api/quox-skills/review-queue`,
156
+ tags: ['live-safe'],
157
+ },
158
+ 'skills.reviewQueue.reject': {
159
+ method: 'POST',
160
+ service: 'quoxflow',
161
+ path: ({ qid }) => `/api/quox-skills/review-queue/${qid}/reject`,
162
+ tags: ['live-write'],
163
+ },
164
+ 'skills.rollbackToVersion': {
165
+ method: 'POST',
166
+ service: 'quoxflow',
167
+ path: () => `/api/skills/rollback-to-version`,
168
+ tags: ['live-write'],
169
+ },
170
+ // POST /api/workflows/:id/execute — deliberately NOT tagged 'live-write'.
171
+ // It actually runs a workflow/crystal (side effects beyond a rejected
172
+ // write); 'skip-live' keeps it out of the live-contract harness entirely
173
+ // per the WP2.3 brief ("Do NOT seed execute as live").
174
+ 'skills.run': {
175
+ method: 'POST',
176
+ service: 'quoxflow',
177
+ path: ({ id }) => `/api/workflows/${id}/execute`,
178
+ tags: ['skip-live'],
179
+ },
180
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 'sso.*' 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/sso.js, mounted at plain `/api`
6
+ * (server.js:639 `app.use('/api', ssoRoutes)`). The admin CRUD routes below
7
+ * are org-scoped IN the URL (`/api/orgs/:orgId/sso/providers...`) and gated
8
+ * enterprise-tier + ORG_MANAGE_SSO (`chain` in sso.js). Verified at the
9
+ * handler: GET/POST/PATCH/DELETE all resolve the provider through
10
+ * `req.org.id`, so cross-org access is not possible via these routes.
11
+ *
12
+ * The OIDC/SAML browser-flow routes (`/sso/discover`, `/sso/providers/:id/
13
+ * login`, `/callback`, `/saml-login`, `/acs`) are intentionally OUT OF SCOPE
14
+ * for this work package — they are 302-redirect / form-post handshake
15
+ * endpoints, not CLI-shaped.
16
+ *
17
+ * BACKEND FINDING: `sso.providers.samlMetadata` is NOT org-scoped in the
18
+ * URL, unlike the admin CRUD routes. The handler (sso.js:315,
19
+ * `GET /sso/providers/:providerId/saml-metadata`) is grouped with the
20
+ * public SAML user-flow section — no auth/org/plan/capability chain at
21
+ * all, by design ("Public — no PII in metadata" per the route's own
22
+ * docstring). It looks up the provider by `providerId` alone and 400s if
23
+ * that provider's protocol isn't 'saml'. The plan's endpoint list assumed
24
+ * an `/orgs/:orgId/...` shape for this route; the real route has no orgId
25
+ * segment. Reproduced faithfully here — do not add an orgId param to this
26
+ * path without changing the backend route first.
27
+ */
28
+
29
+ export const sso = {
30
+ 'sso.providers.create': {
31
+ method: 'POST',
32
+ service: 'auth',
33
+ path: ({ orgId }) => `/api/orgs/${orgId}/sso/providers`,
34
+ tags: ['live-write'],
35
+ },
36
+ 'sso.providers.delete': {
37
+ method: 'DELETE',
38
+ service: 'auth',
39
+ path: ({ orgId, providerId }) => `/api/orgs/${orgId}/sso/providers/${providerId}`,
40
+ tags: ['live-write'],
41
+ },
42
+ 'sso.providers.get': {
43
+ method: 'GET',
44
+ service: 'auth',
45
+ path: ({ orgId, providerId }) => `/api/orgs/${orgId}/sso/providers/${providerId}`,
46
+ tags: ['live-safe'],
47
+ },
48
+ 'sso.providers.list': {
49
+ method: 'GET',
50
+ service: 'auth',
51
+ path: ({ orgId }) => `/api/orgs/${orgId}/sso/providers`,
52
+ tags: ['live-safe'],
53
+ },
54
+ // Public route — no orgId segment. See the BACKEND FINDING above.
55
+ 'sso.providers.saml-metadata': {
56
+ method: 'GET',
57
+ service: 'auth',
58
+ path: ({ providerId }) => `/api/sso/providers/${providerId}/saml-metadata`,
59
+ tags: ['live-safe'],
60
+ },
61
+ 'sso.providers.update': {
62
+ method: 'PATCH',
63
+ service: 'auth',
64
+ path: ({ orgId, providerId }) => `/api/orgs/${orgId}/sso/providers/${providerId}`,
65
+ tags: ['live-write'],
66
+ },
67
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 'tags.*' 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 tags = {
8
+ 'tags.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/tags`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'tags.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, tagId }) => `/api/orgs/${orgId}/tags/${tagId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'tags.list': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId }) => `/api/orgs/${orgId}/tags`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'tags.update': {
27
+ method: 'PATCH',
28
+ service: 'auth',
29
+ path: ({ orgId, tagId }) => `/api/orgs/${orgId}/tags/${tagId}`,
30
+ tags: ['live-write'],
31
+ },
32
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 'teams.*' 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 teams = {
8
+ 'teams.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/teams`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'teams.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, teamId }) => `/api/orgs/${orgId}/teams/${teamId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'teams.get': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId, teamId }) => `/api/orgs/${orgId}/teams/${teamId}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'teams.list': {
27
+ method: 'GET',
28
+ service: 'auth',
29
+ path: ({ orgId }) => `/api/orgs/${orgId}/teams`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'teams.members.create': {
33
+ method: 'POST',
34
+ service: 'auth',
35
+ path: ({ orgId, teamId }) => `/api/orgs/${orgId}/teams/${teamId}/members`,
36
+ tags: ['live-write'],
37
+ },
38
+ 'teams.members.delete': {
39
+ method: 'DELETE',
40
+ service: 'auth',
41
+ path: ({ orgId, teamId, user }) => `/api/orgs/${orgId}/teams/${teamId}/members/${user}`,
42
+ tags: ['live-write'],
43
+ },
44
+ 'teams.provisionRoom': {
45
+ method: 'POST',
46
+ service: 'tasks',
47
+ path: ({ teamId }) => `/api/teams/${teamId}/provision-room`,
48
+ tags: ['live-write'],
49
+ },
50
+ 'teams.update': {
51
+ method: 'PATCH',
52
+ service: 'auth',
53
+ path: ({ orgId, teamId }) => `/api/orgs/${orgId}/teams/${teamId}`,
54
+ tags: ['live-write'],
55
+ },
56
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 'telephony.*' endpoints: per-number org binding for QuoxVoice (quox#695).
3
+ * Collector routes: GET/PUT/DELETE /api/v1/telephony/numbers[/:number],
4
+ * org-scoped (org_id query), PUT/DELETE are org-admin only.
5
+ *
6
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
7
+ */
8
+
9
+ export const telephony = {
10
+ 'telephony.numbers.list': {
11
+ method: 'GET',
12
+ service: 'collector',
13
+ path: () => `/api/v1/telephony/numbers`,
14
+ tags: ['live-safe'],
15
+ },
16
+ 'telephony.numbers.set': {
17
+ method: 'PUT',
18
+ service: 'collector',
19
+ path: ({ number }) => `/api/v1/telephony/numbers/${encodeURIComponent(number)}`,
20
+ tags: ['live-write'],
21
+ },
22
+ 'telephony.numbers.remove': {
23
+ method: 'DELETE',
24
+ service: 'collector',
25
+ path: ({ number }) => `/api/v1/telephony/numbers/${encodeURIComponent(number)}`,
26
+ tags: ['live-write'],
27
+ },
28
+ 'telephony.identities.list': {
29
+ method: 'GET',
30
+ service: 'collector',
31
+ path: () => `/api/v1/telephony/identities`,
32
+ tags: ['live-safe'],
33
+ },
34
+ 'telephony.identities.set': {
35
+ method: 'PUT',
36
+ service: 'collector',
37
+ path: ({ number }) => `/api/v1/telephony/identities/${encodeURIComponent(number)}`,
38
+ tags: ['live-write'],
39
+ },
40
+ 'telephony.identities.remove': {
41
+ method: 'DELETE',
42
+ service: 'collector',
43
+ path: ({ number }) => `/api/v1/telephony/identities/${encodeURIComponent(number)}`,
44
+ tags: ['live-write'],
45
+ },
46
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 'tg.*' endpoints — Telegram Pro (QTG-PRO P0), collector-direct
3
+ * (services/collector/server.js), no org segment in the URL — same shape
4
+ * as `quoxbox.*`/`quoxplan.*`/`traces.*`/`aee.*`/`mon.*`. Every route below
5
+ * is `requireServiceOrUserAuth()` server-side (X-Service-Key /
6
+ * INTERNAL_SERVICE_KEY or a user JWT), not org-scoped.
7
+ *
8
+ * - tg.status: GET /telegram-pro/onboarding/status (server.js, thin wrapper
9
+ * around services/collector/lib/telegramPro/onboardingService.js
10
+ * getOnboardingStatus()). Optional ?bot_id= query param.
11
+ * - tg.bindOwner: POST /telegram-pro/onboarding/bind-owner (onboardingService
12
+ * bindOwner()) — 409 when a primary owner binding already exists for the
13
+ * bot/chat, body carries the existing binding.
14
+ * - tg.leases.list: GET /session-leases (sessionLeaseStore.list()) — terminal
15
+ * identity leases for parallel Claude Code sessions on this dev box.
16
+ * - tg.webhook.info: GET /webhook/telegram/info — bot_id is NOT yet honored
17
+ * server-side (single-bot lookup only); passed through here so the CLI is
18
+ * forward-compatible once the backend adds per-bot support.
19
+ * - tg.webhook.setup: POST /webhook/telegram/setup — registers the webhook
20
+ * with Telegram and persists config via the auth service.
21
+ *
22
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
23
+ */
24
+
25
+ export const tg = {
26
+ 'tg.status': {
27
+ method: 'GET',
28
+ service: 'collector',
29
+ path: () => `/telegram-pro/onboarding/status`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'tg.bindOwner': {
33
+ method: 'POST',
34
+ service: 'collector',
35
+ path: () => `/telegram-pro/onboarding/bind-owner`,
36
+ tags: ['live-write'],
37
+ },
38
+ 'tg.leases.list': {
39
+ method: 'GET',
40
+ service: 'collector',
41
+ path: () => `/session-leases`,
42
+ tags: ['live-safe'],
43
+ },
44
+ 'tg.webhook.info': {
45
+ method: 'GET',
46
+ service: 'collector',
47
+ path: () => `/webhook/telegram/info`,
48
+ tags: ['live-safe'],
49
+ },
50
+ 'tg.webhook.setup': {
51
+ method: 'POST',
52
+ service: 'collector',
53
+ path: () => `/webhook/telegram/setup`,
54
+ tags: ['live-write'],
55
+ },
56
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 'tools.*' 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 tools = {
8
+ 'tools.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/tools`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'tools.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, toolId }) => `/api/orgs/${orgId}/tools/${toolId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'tools.get': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId, toolId }) => `/api/orgs/${orgId}/tools/${toolId}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'tools.install-to-scope': {
27
+ method: 'POST',
28
+ service: 'auth',
29
+ path: () => `/api/tools/install-to-scope`,
30
+ tags: ['live-write'],
31
+ },
32
+ 'tools.list': {
33
+ method: 'GET',
34
+ service: 'auth',
35
+ path: ({ orgId }) => `/api/orgs/${orgId}/tools`,
36
+ tags: ['live-safe'],
37
+ },
38
+ 'tools.publish': {
39
+ method: 'POST',
40
+ service: 'auth',
41
+ path: ({ orgId, toolId }) => `/api/orgs/${orgId}/tools/${toolId}/publish`,
42
+ tags: ['live-write'],
43
+ },
44
+ 'tools.update': {
45
+ method: 'PATCH',
46
+ service: 'auth',
47
+ path: ({ orgId, toolId }) => `/api/orgs/${orgId}/tools/${toolId}`,
48
+ tags: ['live-write'],
49
+ },
50
+ };