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,157 @@
1
+ /**
2
+ * 'traces.*' endpoints — TRV (Trace Replay & Visualization) API, added as
3
+ * part of WP4.1 (STREAM_CLI_PARITY_PLAN.md §2.3 #8).
4
+ *
5
+ * Backend: services/collector/server.js, mounted at plain `/traces` (NOT
6
+ * org-scoped in the URL — collector-direct, same pattern as aee.js/chat.js).
7
+ * Verified at the handlers (server.js:11718-12348).
8
+ *
9
+ * ORG-SCOPING FINDING (backend, not fixed here — feeds the multi-tenant
10
+ * audit): none of the three list reads below (traces.list, replaySessions.list,
11
+ * comparisons.list, correlations.list) filter by org, despite the write side
12
+ * accepting an optional `org_id` body field on create:
13
+ * - `GET /traces` queries the `envelopes` table, which has NO org_id
14
+ * column at all (see migrations/aee/000-baseline.sql) — every trace on
15
+ * the instance is returned regardless of caller.
16
+ * - `GET /traces/replay-sessions`, `GET /traces/comparisons`, and
17
+ * `GET /traces/correlations` all run a bare `SELECT * ... LIMIT ? OFFSET ?`
18
+ * with no `WHERE org_id = ?` (server.js:2014/2026/2037 prepared
19
+ * statements), even though `replay_sessions.org_id`, `trace_comparisons
20
+ * .org_id`, and `trace_correlations.org_id` columns exist WITH indexes
21
+ * built specifically for this (migrations/volt/000-baseline.sql:175-206)
22
+ * — org_id is stored on write but never used to filter on read. Same
23
+ * "leak" shape as the triggers.* / workflows.list findings documented in
24
+ * endpoints/triggers.js and endpoints/workflows.js. Not fixed here —
25
+ * out of scope for a CLI work package; flagging for the multi-tenant
26
+ * audit that requested this check.
27
+ */
28
+
29
+ export const traces = {
30
+ // ── Trace assembly (TRV-2) ──
31
+ 'traces.list': {
32
+ method: 'GET',
33
+ service: 'collector',
34
+ path: () => `/traces`,
35
+ tags: ['live-safe'],
36
+ },
37
+ 'traces.get': {
38
+ method: 'GET',
39
+ service: 'collector',
40
+ path: ({ id }) => `/traces/${id}`,
41
+ tags: ['live-safe'],
42
+ },
43
+ 'traces.simulate': {
44
+ method: 'POST',
45
+ service: 'collector',
46
+ path: ({ id }) => `/traces/${id}/simulate`,
47
+ tags: ['live-write'],
48
+ },
49
+ 'traces.compare': {
50
+ method: 'POST',
51
+ service: 'collector',
52
+ path: () => `/traces/compare`,
53
+ tags: ['live-write'],
54
+ },
55
+
56
+ // ── Replay sessions (TRV-1) ──
57
+ 'traces.replaySessions.create': {
58
+ method: 'POST',
59
+ service: 'collector',
60
+ path: () => `/traces/replay-sessions`,
61
+ tags: ['live-write'],
62
+ },
63
+ 'traces.replaySessions.list': {
64
+ method: 'GET',
65
+ service: 'collector',
66
+ path: () => `/traces/replay-sessions`,
67
+ tags: ['live-safe'],
68
+ },
69
+ 'traces.replaySessions.get': {
70
+ method: 'GET',
71
+ service: 'collector',
72
+ path: ({ id }) => `/traces/replay-sessions/${id}`,
73
+ tags: ['live-safe'],
74
+ },
75
+ 'traces.replaySessions.update': {
76
+ method: 'PUT',
77
+ service: 'collector',
78
+ path: ({ id }) => `/traces/replay-sessions/${id}`,
79
+ tags: ['live-write'],
80
+ },
81
+ 'traces.replaySessions.delete': {
82
+ method: 'DELETE',
83
+ service: 'collector',
84
+ path: ({ id }) => `/traces/replay-sessions/${id}`,
85
+ tags: ['live-write'],
86
+ },
87
+ 'traces.replaySessions.deleteAll': {
88
+ method: 'DELETE',
89
+ service: 'collector',
90
+ path: () => `/traces/replay-sessions`,
91
+ tags: ['live-write'],
92
+ },
93
+
94
+ // ── Comparisons (TRV-1) ──
95
+ 'traces.comparisons.create': {
96
+ method: 'POST',
97
+ service: 'collector',
98
+ path: () => `/traces/comparisons`,
99
+ tags: ['live-write'],
100
+ },
101
+ 'traces.comparisons.list': {
102
+ method: 'GET',
103
+ service: 'collector',
104
+ path: () => `/traces/comparisons`,
105
+ tags: ['live-safe'],
106
+ },
107
+ 'traces.comparisons.get': {
108
+ method: 'GET',
109
+ service: 'collector',
110
+ path: ({ id }) => `/traces/comparisons/${id}`,
111
+ tags: ['live-safe'],
112
+ },
113
+ 'traces.comparisons.update': {
114
+ method: 'PUT',
115
+ service: 'collector',
116
+ path: ({ id }) => `/traces/comparisons/${id}`,
117
+ tags: ['live-write'],
118
+ },
119
+ 'traces.comparisons.delete': {
120
+ method: 'DELETE',
121
+ service: 'collector',
122
+ path: ({ id }) => `/traces/comparisons/${id}`,
123
+ tags: ['live-write'],
124
+ },
125
+ 'traces.comparisons.deleteAll': {
126
+ method: 'DELETE',
127
+ service: 'collector',
128
+ path: () => `/traces/comparisons`,
129
+ tags: ['live-write'],
130
+ },
131
+
132
+ // ── Correlation cache (TRV-1) ──
133
+ 'traces.correlations.get': {
134
+ method: 'GET',
135
+ service: 'collector',
136
+ path: ({ runId }) => `/traces/correlations/${runId}`,
137
+ tags: ['live-safe'],
138
+ },
139
+ 'traces.correlations.create': {
140
+ method: 'POST',
141
+ service: 'collector',
142
+ path: () => `/traces/correlations`,
143
+ tags: ['live-write'],
144
+ },
145
+ 'traces.correlations.list': {
146
+ method: 'GET',
147
+ service: 'collector',
148
+ path: () => `/traces/correlations`,
149
+ tags: ['live-safe'],
150
+ },
151
+ 'traces.correlations.delete': {
152
+ method: 'DELETE',
153
+ service: 'collector',
154
+ path: ({ runId }) => `/traces/correlations/${runId}`,
155
+ tags: ['live-write'],
156
+ },
157
+ };
@@ -0,0 +1,70 @@
1
+ /**
2
+ * 'triggers.*' 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
+ * STEP 0 — quoxflow access path decision (documented here so future quoxflow
6
+ * work packages don't have to re-derive it):
7
+ *
8
+ * DIRECT to quoxflow (service: 'quoxflow'), NOT via the collector proxy.
9
+ *
10
+ * Evidence:
11
+ * - services/collector/server.js proxies quoxflow ONLY on three explicit,
12
+ * hand-mounted paths: `GET /quoxflow/evidence`, `GET /quoxflow/observations`,
13
+ * `GET /quoxflow/skills[/:id]` (server.js ~19140-19260, "STUDY-REV P6.C —
14
+ * QuoxFlow evidence + observations proxy" / "CLI-COCKPIT — QuoxFlow
15
+ * skill-library (QSKL) read-only proxy"). Nothing forwards `/api/triggers/*`
16
+ * or `/api/workflows/:id/activate|deactivate` — grepping server.js for
17
+ * 'quoxflow' turns up no catch-all proxy, only these three routes plus
18
+ * health-check plumbing. Fable's note that collector proxies are
19
+ * per-path explicit (not a wildcard) is confirmed live in this file.
20
+ * - quoxflow/src/api/app.ts mounts `createTriggersRoutes` at `app.route('/api/triggers', ...)`
21
+ * and `createWorkflowLifecycleRoutes` at `app.route('/api/workflows', ...)`
22
+ * (both confirmed by reading app.ts directly) — i.e. the real paths are
23
+ * `/api/triggers/webhooks|schedules|events` and
24
+ * `/api/workflows/:id/activate|deactivate`, neither proxied by collector.
25
+ * - quoxflow/src/api/middleware/auth.ts verifies the SAME JWT_SECRET as the
26
+ * QuoxCORE auth service, so a normal `quox login` bearer token is valid
27
+ * against quoxflow directly with zero extra auth plumbing.
28
+ * - cli/lib/commands/doctor.js already references `service: 'quoxflow',
29
+ * port: 3200` for its health check, establishing the service name — but
30
+ * cli/lib/core/config.js's SERVICE_PORTS never actually had a `quoxflow`
31
+ * key, so that health check silently resolved to the wrong URL (falls
32
+ * through to the base profile URL, unmodified port). Fixed alongside
33
+ * this fragment by adding `quoxflow: 3200` to SERVICE_PORTS, matching
34
+ * docker-compose.yml's `127.0.0.1:${QUOXFLOW_PORT:-3200}:3200` mapping.
35
+ *
36
+ * Conclusion: direct is both the only reachable path AND now correctly
37
+ * wired (QUOX_QUOXFLOW_URL env override still available per the standard
38
+ * getServiceUrl() convention for non-docker-compose deployments).
39
+ *
40
+ * BACKEND FINDING (not fixed here — flagged for triage): none of
41
+ * GET /api/triggers/webhooks, /schedules, or /events accept or filter by an
42
+ * org/workflow scope — quoxflow/src/api/routes/triggers.ts calls
43
+ * `config.webhookRegistry.getAll()` / `config.eventBus.getSubscriptions()`
44
+ * unfiltered, returning every registered trigger across every org/workflow
45
+ * on the instance. This is a cross-tenant read surface; the CLI commands
46
+ * here pass the data through as-is (no client-side org filtering exists to
47
+ * mask it) and this comment intentionally does not silently filter either,
48
+ * since a client-side filter would hide the real gap instead of surfacing it.
49
+ */
50
+
51
+ export const triggers = {
52
+ 'triggers.events': {
53
+ method: 'GET',
54
+ service: 'quoxflow',
55
+ path: () => `/api/triggers/events`,
56
+ tags: ['live-safe'],
57
+ },
58
+ 'triggers.schedules': {
59
+ method: 'GET',
60
+ service: 'quoxflow',
61
+ path: () => `/api/triggers/schedules`,
62
+ tags: ['live-safe'],
63
+ },
64
+ 'triggers.webhooks': {
65
+ method: 'GET',
66
+ service: 'quoxflow',
67
+ path: () => `/api/triggers/webhooks`,
68
+ tags: ['live-safe'],
69
+ },
70
+ };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 'user-library.*' 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
+ * Per-org/per-user saved workflow library ("My Library"). Backend: the auth
6
+ * service (NOT quoxflow, NOT proxied) — services/auth/routes/user-library.js,
7
+ * mounted at plain `/api` (server.js:724), so the router's own
8
+ * `/orgs/:orgId/user-library` paths are the real, final routes.
9
+ *
10
+ * Always scoped to `user_id = req.user.id` in addition to `org_id` (see the
11
+ * route file's own header comment) — another user in the same org cannot see
12
+ * or delete these entries. No cross-tenant/cross-user leak found here, unlike
13
+ * the quoxflow triggers.* list routes.
14
+ *
15
+ * POST /api/orgs/:orgId/user-library body: { name, description?, definition_json, source?, source_workflow_id?, tags? }
16
+ * 201 { entry } | 400 name/definition_json missing | 409 duplicate name
17
+ * GET /api/orgs/:orgId/user-library query: { source? } ('curated'|'n8n-imported'|'mine')
18
+ * 200 { entries: [...] } ordered by updated_at DESC
19
+ * DELETE /api/orgs/:orgId/user-library/:id 200 { ok: true } | 404 (not found or wrong owner — same code, no leak)
20
+ */
21
+
22
+ export const userLibrary = {
23
+ 'user-library.create': {
24
+ method: 'POST',
25
+ service: 'auth',
26
+ path: ({ orgId }) => `/api/orgs/${orgId}/user-library`,
27
+ tags: ['live-write'],
28
+ },
29
+ 'user-library.delete': {
30
+ method: 'DELETE',
31
+ service: 'auth',
32
+ path: ({ orgId, id }) => `/api/orgs/${orgId}/user-library/${id}`,
33
+ tags: ['live-write'],
34
+ },
35
+ 'user-library.list': {
36
+ method: 'GET',
37
+ service: 'auth',
38
+ path: ({ orgId }) => `/api/orgs/${orgId}/user-library`,
39
+ tags: ['live-safe'],
40
+ },
41
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 'users.*' 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 users = {
8
+ 'users.me.notification-channels.list': {
9
+ method: 'GET',
10
+ service: 'auth',
11
+ path: () => `/api/users/me/notification-channels`,
12
+ tags: ['live-safe'],
13
+ },
14
+ 'users.me.notification-channels.update': {
15
+ method: 'PUT',
16
+ service: 'auth',
17
+ path: ({ type }) => `/api/users/me/notification-channels/${type}`,
18
+ tags: ['live-write'],
19
+ },
20
+ };