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,126 @@
1
+ /**
2
+ * 'agent-attach.*' endpoints — QUOXIDENTITY P1 (docs/QUOXIDENTITY_P1_CONTRACT.md,
3
+ * territory C). Lease lifecycle lives on the auth service (services/auth,
4
+ * territory A); the attach kit is served by the collector (services/collector,
5
+ * territory B) and is fetched with the short-TTL attach JWT, not the caller's
6
+ * normal session token.
7
+ *
8
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
9
+ */
10
+
11
+ export const agentAttach = {
12
+ 'agent-attach.lease.create': {
13
+ method: 'POST',
14
+ service: 'auth',
15
+ path: ({ agentId }) => `/api/agent-attach/${encodeURIComponent(agentId)}/lease`,
16
+ tags: ['live-write'],
17
+ },
18
+ 'agent-attach.lease.heartbeat': {
19
+ method: 'POST',
20
+ service: 'auth',
21
+ path: ({ leaseId }) => `/api/agent-attach/lease/${encodeURIComponent(leaseId)}/heartbeat`,
22
+ tags: ['live-write'],
23
+ },
24
+ 'agent-attach.lease.release': {
25
+ method: 'POST',
26
+ service: 'auth',
27
+ path: ({ leaseId }) => `/api/agent-attach/lease/${encodeURIComponent(leaseId)}/release`,
28
+ tags: ['live-write'],
29
+ },
30
+ 'agent-attach.status': {
31
+ method: 'GET',
32
+ service: 'auth',
33
+ path: ({ agentId }) => `/api/agent-attach/${encodeURIComponent(agentId)}/status`,
34
+ tags: ['live-safe'],
35
+ },
36
+ // P1 grant model (owner decision: per-agent grant, default owner-only). The
37
+ // auth routes exist server-side; these fragments + the grant/revoke/list
38
+ // verbs are what make them reachable. Org owner/admin only.
39
+ 'agent-attach.grants.add': {
40
+ method: 'POST',
41
+ service: 'auth',
42
+ path: ({ agentId }) => `/api/agent-attach/${encodeURIComponent(agentId)}/grants`,
43
+ tags: ['live-write'],
44
+ },
45
+ 'agent-attach.grants.remove': {
46
+ method: 'DELETE',
47
+ service: 'auth',
48
+ path: ({ agentId, granteeUserId }) =>
49
+ `/api/agent-attach/${encodeURIComponent(agentId)}/grants/${encodeURIComponent(granteeUserId)}`,
50
+ tags: ['live-write'],
51
+ },
52
+ 'agent-attach.grants.list': {
53
+ method: 'GET',
54
+ service: 'auth',
55
+ path: ({ agentId }) => `/api/agent-attach/${encodeURIComponent(agentId)}/grants`,
56
+ tags: ['live-safe'],
57
+ },
58
+ // QUOXIDENTITY P10: roster-wide (attach-any) grant. Org owner/admin only.
59
+ 'agent-attach.grants.add-all': {
60
+ method: 'POST',
61
+ service: 'auth',
62
+ path: () => `/api/agent-attach/grants/all`,
63
+ tags: ['live-write'],
64
+ },
65
+ 'agent-attach.grants.remove-all': {
66
+ method: 'DELETE',
67
+ service: 'auth',
68
+ path: ({ granteeUserId }) => `/api/agent-attach/grants/all/${encodeURIComponent(granteeUserId)}`,
69
+ tags: ['live-write'],
70
+ },
71
+ // Served by the collector, not auth: the kit is fetched with the attach
72
+ // JWT (Authorization header set explicitly by the caller via noAuth+headers),
73
+ // never the caller's own session token.
74
+ 'agent-attach.kit': {
75
+ method: 'GET',
76
+ service: 'collector',
77
+ path: () => `/api/v1/agent-attach/kit`,
78
+ tags: ['live-safe'],
79
+ },
80
+ // P2 (docs/QUOXIDENTITY_P2_CONTRACT.md, territory D/E): stores a handoff
81
+ // note before the CLI releases the lease, so the next session attached to
82
+ // this agent resumes with continuity. Same gate shape as the kit route:
83
+ // attach-lease-bearing callers only, authenticated with the attach JWT.
84
+ 'agent-attach.handoff': {
85
+ method: 'POST',
86
+ service: 'collector',
87
+ path: () => `/api/v1/agent-attach/handoff`,
88
+ tags: ['live-write'],
89
+ },
90
+ // P4 (docs/QUOXIDENTITY_P4_CONTRACT.md §5): detach witnessing symmetry.
91
+ // Witness-only: does NOT release the lease (auth, territory A, owns lease
92
+ // state). Same gate shape as the kit/handoff routes: attach-lease-bearing
93
+ // callers only, authenticated with the attach JWT. The CLI posts this
94
+ // between releasing a checked-out slot and releasing the lease.
95
+ 'agent-attach.detach': {
96
+ method: 'POST',
97
+ service: 'collector',
98
+ path: () => `/api/v1/agent-attach/detach`,
99
+ tags: ['live-write'],
100
+ },
101
+ // P3 (docs/QUOXIDENTITY_P3_CONTRACT.md, territory F/G): binding an agent
102
+ // identity to a durable slot ADDRESS (dev_slots row). Served by the
103
+ // collector next to the kit route, same auth gate pattern. PUT/DELETE are
104
+ // org admin only (binding an address is an admin act); GET is open to any
105
+ // org member or an attach-token caller. Slot HTTP shapes themselves
106
+ // (checkout/release/say/etc.) are NOT duplicated here: the CLI reuses
107
+ // v1.slots.* from ./v1.js for those.
108
+ 'agent-attach.slot-binding.set': {
109
+ method: 'PUT',
110
+ service: 'collector',
111
+ path: ({ agentId }) => `/api/v1/agent-attach/${encodeURIComponent(agentId)}/slot-binding`,
112
+ tags: ['live-write'],
113
+ },
114
+ 'agent-attach.slot-binding.delete': {
115
+ method: 'DELETE',
116
+ service: 'collector',
117
+ path: ({ agentId }) => `/api/v1/agent-attach/${encodeURIComponent(agentId)}/slot-binding`,
118
+ tags: ['live-write'],
119
+ },
120
+ 'agent-attach.slot-binding.get': {
121
+ method: 'GET',
122
+ service: 'collector',
123
+ path: ({ agentId }) => `/api/v1/agent-attach/${encodeURIComponent(agentId)}/slot-binding`,
124
+ tags: ['live-safe'],
125
+ },
126
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * 'agents.*' 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 agents = {
8
+ 'agents.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/agents`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'agents.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, agentId }) => `/api/orgs/${orgId}/agents/${agentId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'agents.get': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId, agentId }) => `/api/orgs/${orgId}/agents/${agentId}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'agents.list': {
27
+ method: 'GET',
28
+ service: 'auth',
29
+ path: ({ orgId }) => `/api/orgs/${orgId}/agents`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'agents.tools.create': {
33
+ method: 'POST',
34
+ service: 'auth',
35
+ path: ({ orgId, agentId }) => `/api/orgs/${orgId}/agents/${agentId}/tools`,
36
+ tags: ['live-write'],
37
+ },
38
+ 'agents.tools.delete': {
39
+ method: 'DELETE',
40
+ service: 'auth',
41
+ path: ({ orgId, agentId, id }) => `/api/orgs/${orgId}/agents/${agentId}/tools/${id}`,
42
+ tags: ['live-write'],
43
+ },
44
+ 'agents.tools.list': {
45
+ method: 'GET',
46
+ service: 'auth',
47
+ path: ({ orgId, agentId }) => `/api/orgs/${orgId}/agents/${agentId}/tools`,
48
+ tags: ['live-safe'],
49
+ },
50
+ 'agents.update': {
51
+ method: 'PATCH',
52
+ service: 'auth',
53
+ path: ({ orgId, agentId }) => `/api/orgs/${orgId}/agents/${agentId}`,
54
+ tags: ['live-write'],
55
+ },
56
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 'assistants.*' 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 assistants = {
8
+ 'assistants.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/assistants`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'assistants.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, assistantId }) => `/api/orgs/${orgId}/assistants/${assistantId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'assistants.deploy': {
21
+ method: 'POST',
22
+ service: 'auth',
23
+ path: ({ orgId, assistantId }) => `/api/orgs/${orgId}/assistants/${assistantId}/deploy`,
24
+ tags: ['live-write'],
25
+ },
26
+ 'assistants.fork': {
27
+ method: 'POST',
28
+ service: 'auth',
29
+ path: ({ orgId, assistantId }) => `/api/orgs/${orgId}/assistants/${assistantId}/fork`,
30
+ tags: ['live-write'],
31
+ },
32
+ 'assistants.get': {
33
+ method: 'GET',
34
+ service: 'auth',
35
+ path: ({ orgId, assistantId }) => `/api/orgs/${orgId}/assistants/${assistantId}`,
36
+ tags: ['live-safe'],
37
+ },
38
+ 'assistants.list': {
39
+ method: 'GET',
40
+ service: 'auth',
41
+ path: ({ orgId }) => `/api/orgs/${orgId}/assistants`,
42
+ tags: ['live-safe'],
43
+ },
44
+ 'assistants.update': {
45
+ method: 'PATCH',
46
+ service: 'auth',
47
+ path: ({ orgId, assistantId }) => `/api/orgs/${orgId}/assistants/${assistantId}`,
48
+ tags: ['live-write'],
49
+ },
50
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 'audit.*' 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 audit = {
8
+ 'audit.list': {
9
+ method: 'GET',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/audit`,
12
+ tags: ['live-safe'],
13
+ },
14
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * 'auth.*' 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 auth = {
8
+ 'auth.me.list': {
9
+ method: 'GET',
10
+ service: 'auth',
11
+ path: () => `/api/auth/me`,
12
+ tags: ['live-safe'],
13
+ },
14
+ // QuoxSound: the CLI writes the same server-side `soundProfile` preference
15
+ // the dashboard does (PATCH merges top-level preference namespaces).
16
+ 'auth.me.update': {
17
+ method: 'PATCH',
18
+ service: 'auth',
19
+ path: () => `/api/auth/me`,
20
+ tags: ['live-write'],
21
+ },
22
+ // fleet #390: PATCH /me/password already existed and worked, but nothing
23
+ // in the CLI exposed it, so rotating your own password meant hand-rolling
24
+ // a curl with a bearer token.
25
+ 'auth.me.password': {
26
+ method: 'PATCH',
27
+ service: 'auth',
28
+ path: () => `/api/auth/me/password`,
29
+ tags: ['live-write'],
30
+ },
31
+ 'auth.signup': {
32
+ method: 'POST',
33
+ service: 'auth',
34
+ path: () => `/api/auth/signup`,
35
+ tags: ['live-write'],
36
+ },
37
+ // QUOXON-C2c: one-time dashboard sign-in link (10 min, single-use, user+org bound).
38
+ 'auth.login-link': {
39
+ method: 'POST',
40
+ service: 'auth',
41
+ path: () => `/api/auth/login-link`,
42
+ tags: ['live-write'],
43
+ },
44
+ 'auth.switch-org': {
45
+ method: 'POST',
46
+ service: 'auth',
47
+ path: () => `/api/auth/switch-org`,
48
+ tags: ['live-write'],
49
+ },
50
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 'awareness.*' endpoints: QuoxAwareness ledger (cross-surface situational awareness).
3
+ * Collector routes: POST/GET /api/v1/awareness, GET /api/v1/awareness/summary,
4
+ * DELETE /api/v1/awareness/:key. Org-scoped, requireServiceOrUserAuth.
5
+ *
6
+ * See cli/lib/api/endpoints/index.js for the fragment convention.
7
+ */
8
+
9
+ export const awareness = {
10
+ 'awareness.post': {
11
+ method: 'POST',
12
+ service: 'collector',
13
+ path: () => `/api/v1/awareness`,
14
+ tags: ['live-write'],
15
+ },
16
+ 'awareness.list': {
17
+ method: 'GET',
18
+ service: 'collector',
19
+ path: () => `/api/v1/awareness`,
20
+ tags: ['live-safe'],
21
+ },
22
+ 'awareness.summary': {
23
+ method: 'GET',
24
+ service: 'collector',
25
+ path: () => `/api/v1/awareness/summary`,
26
+ tags: ['live-safe'],
27
+ },
28
+ 'awareness.remove': {
29
+ method: 'DELETE',
30
+ service: 'collector',
31
+ path: ({ key }) => `/api/v1/awareness/${encodeURIComponent(key)}`,
32
+ tags: ['live-write'],
33
+ },
34
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 'backup-schedules.*' 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 backupSchedules = {
8
+ 'backup-schedules.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/backup-schedules`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'backup-schedules.list': {
15
+ method: 'GET',
16
+ service: 'auth',
17
+ path: ({ orgId }) => `/api/orgs/${orgId}/backup-schedules`,
18
+ tags: ['live-safe'],
19
+ },
20
+ };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * 'backups.*' 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 backups = {
8
+ 'backups.create': {
9
+ method: 'POST',
10
+ service: 'auth',
11
+ path: ({ orgId }) => `/api/orgs/${orgId}/backups`,
12
+ tags: ['live-write'],
13
+ },
14
+ 'backups.delete': {
15
+ method: 'DELETE',
16
+ service: 'auth',
17
+ path: ({ orgId, backupId }) => `/api/orgs/${orgId}/backups/${backupId}`,
18
+ tags: ['live-write'],
19
+ },
20
+ 'backups.get': {
21
+ method: 'GET',
22
+ service: 'auth',
23
+ path: ({ orgId, backupId }) => `/api/orgs/${orgId}/backups/${backupId}`,
24
+ tags: ['live-safe'],
25
+ },
26
+ 'backups.list': {
27
+ method: 'GET',
28
+ service: 'auth',
29
+ path: ({ orgId }) => `/api/orgs/${orgId}/backups`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'backups.restore': {
33
+ method: 'POST',
34
+ service: 'auth',
35
+ path: ({ orgId, backupId }) => `/api/orgs/${orgId}/backups/${backupId}/restore`,
36
+ tags: ['live-write'],
37
+ },
38
+ 'backups.verify': {
39
+ method: 'POST',
40
+ service: 'auth',
41
+ path: ({ orgId, backupId }) => `/api/orgs/${orgId}/backups/${backupId}/verify`,
42
+ tags: ['live-write'],
43
+ },
44
+
45
+ // ── G2d slice 3: the INSTANCE-ADMIN, SERVER-WIDE lane ───────────────────
46
+ // Everything above is the per-ORG tenant lane (:orgId scoped). These are
47
+ // the whole-box lane behind services/auth/routes/admin-backups.js: no org
48
+ // in the path, instance-admin only, and the work runs on the governed
49
+ // host-side runner. Driven by `quox backup server …`.
50
+ 'backups.server.list': {
51
+ method: 'GET',
52
+ service: 'auth',
53
+ path: () => '/api/admin/backups',
54
+ tags: ['live-safe'],
55
+ },
56
+ 'backups.server.status': {
57
+ method: 'GET',
58
+ service: 'auth',
59
+ path: () => '/api/admin/backups/status',
60
+ tags: ['live-safe'],
61
+ },
62
+ 'backups.server.create': {
63
+ method: 'POST',
64
+ service: 'auth',
65
+ path: () => '/api/admin/backups',
66
+ tags: ['live-write'],
67
+ },
68
+ 'backups.server.download': {
69
+ method: 'GET',
70
+ service: 'auth',
71
+ path: ({ archiveId }) => `/api/admin/backups/${encodeURIComponent(archiveId)}/download`,
72
+ tags: ['live-safe'],
73
+ },
74
+ 'backups.server.restore': {
75
+ method: 'POST',
76
+ service: 'auth',
77
+ path: ({ archiveId }) => `/api/admin/backups/${encodeURIComponent(archiveId)}/restore`,
78
+ tags: ['live-write'],
79
+ },
80
+ 'backups.server.restoreStatus': {
81
+ method: 'GET',
82
+ service: 'auth',
83
+ path: () => '/api/admin/backups/restore-status',
84
+ tags: ['live-safe'],
85
+ },
86
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * 'brain.*' endpoints — Quox Qortex (services/quoxbrain, port 3106).
3
+ * Mirrors the 'memory.*' fragment (./memory.js) convention. See
4
+ * cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
5
+ *
6
+ * Route confirmation (services/quoxbrain/server.js): brain.search.list is a
7
+ * POST (not GET) — the route takes { query, limit, offset, ... } in the
8
+ * request body, not a query string. Response shape: { results, tookMs }.
9
+ */
10
+
11
+ export const brain = {
12
+ 'brain.note.get': {
13
+ method: 'GET',
14
+ service: 'quoxbrain',
15
+ path: ({ id }) => `/notes/${id}`,
16
+ tags: ['live-safe'],
17
+ },
18
+ 'brain.search.list': {
19
+ method: 'POST',
20
+ service: 'quoxbrain',
21
+ path: () => `/brain/search`,
22
+ tags: ['live-safe'],
23
+ },
24
+ // ONE-BRAIN CX2: token-budgeted context pack. Body { query, tokenBudget? };
25
+ // shape { passages, tokensUsed, insufficient, relevance, retrieval }.
26
+ 'brain.context.pack': {
27
+ method: 'POST',
28
+ service: 'quoxbrain',
29
+ path: () => `/brain/context`,
30
+ tags: ['live-safe'],
31
+ },
32
+ // BRAIN2-V3 A2: capture a note into the caller's NotesQ vault
33
+ // (services/quoxbrain/lib/capture.js). Body { text?, title?, url?, tags? };
34
+ // shape { noteId, status: created|updated|unchanged, title }.
35
+ 'brain.capture.create': {
36
+ method: 'POST',
37
+ service: 'quoxbrain',
38
+ path: () => `/brain/capture`,
39
+ tags: ['write'],
40
+ },
41
+ 'brain.status.list': {
42
+ method: 'GET',
43
+ service: 'quoxbrain',
44
+ path: () => `/brain/status`,
45
+ tags: ['live-safe'],
46
+ },
47
+ // BRAIN2-AUDIT: the usage ledger (services/quoxbrain/server.js
48
+ // GET /brain/usage, org-scoped by the authenticate middleware) — "is it
49
+ // used?" as a visible number. Shape: { week, total, lastAgentQueryAt,
50
+ // lastSearchAt }, each period carrying per-surface counts plus a
51
+ // byExternalSource breakdown.
52
+ 'brain.usage.list': {
53
+ method: 'GET',
54
+ service: 'quoxbrain',
55
+ path: () => `/brain/usage`,
56
+ tags: ['live-safe'],
57
+ },
58
+ // BRAIN2-W13 A 118: durable per-turn citation records (GET /brain/citations?session=&limit=).
59
+ 'brain.citations.list': {
60
+ method: 'GET',
61
+ service: 'quoxbrain',
62
+ path: () => `/brain/citations`,
63
+ tags: ['live-safe'],
64
+ },
65
+ // ONE-BRAIN CX5: relevance judgements (the labelled eval set).
66
+ 'brain.judgements.create': {
67
+ method: 'POST',
68
+ service: 'quoxbrain',
69
+ path: () => `/brain/judgements`,
70
+ tags: ['write'],
71
+ },
72
+ 'brain.judgements.list': {
73
+ method: 'GET',
74
+ service: 'quoxbrain',
75
+ path: () => `/brain/judgements`,
76
+ tags: ['live-safe'],
77
+ },
78
+ // ONE-BRAIN CX6: topic subscriptions ("tell my slot when new notes about X land").
79
+ 'brain.subscriptions.create': {
80
+ method: 'POST',
81
+ service: 'quoxbrain',
82
+ path: () => `/brain/subscriptions`,
83
+ tags: ['write'],
84
+ },
85
+ // ONE-BRAIN CX6: the Feed's source registry (collector feedApiHandlers.js).
86
+ 'brain.sources.list': {
87
+ method: 'GET',
88
+ service: 'collector',
89
+ path: () => `/api/feed/sources`,
90
+ tags: ['live-safe'],
91
+ },
92
+ 'brain.sources.update': {
93
+ method: 'PUT',
94
+ service: 'collector',
95
+ path: ({ type }) => `/api/feed/sources/${encodeURIComponent(type)}`,
96
+ tags: ['write'],
97
+ },
98
+ 'brain.subscriptions.list': {
99
+ method: 'GET',
100
+ service: 'quoxbrain',
101
+ path: () => `/brain/subscriptions`,
102
+ tags: ['live-safe'],
103
+ },
104
+ 'brain.subscriptions.delete': {
105
+ method: 'DELETE',
106
+ service: 'quoxbrain',
107
+ path: ({ id }) => `/brain/subscriptions/${encodeURIComponent(id)}`,
108
+ tags: ['write'],
109
+ },
110
+ // BRAIN2-AUDIT: "Ask Qortex" starter questions generated from the caller's
111
+ // own corpus (services/quoxbrain/lib/suggestions.js, GET /brain/suggestions).
112
+ // Shape: { suggestions:[{question,reason,source,noteId}], message?, generatedAt }.
113
+ 'brain.suggestions.list': {
114
+ method: 'GET',
115
+ service: 'quoxbrain',
116
+ path: () => `/brain/suggestions`,
117
+ tags: ['live-safe'],
118
+ },
119
+ // BRAIN2-V3 B3: daily brief (services/quoxbrain/lib/brief.js, GET /brain/brief?since=24h).
120
+ 'brain.brief.get': {
121
+ method: 'GET',
122
+ service: 'quoxbrain',
123
+ path: () => `/brain/brief`,
124
+ tags: ['live-safe'],
125
+ },
126
+ // BRAIN2-W8: portable export of the caller's visible notes (services/quoxbrain
127
+ // GET /export). ?format=jsonl (default, application/x-ndjson) | markdown (tar).
128
+ 'brain.export.get': {
129
+ method: 'GET',
130
+ service: 'quoxbrain',
131
+ path: () => `/export`,
132
+ tags: ['live-safe'],
133
+ },
134
+ 'brain.vaults.list': {
135
+ method: 'GET',
136
+ service: 'quoxbrain',
137
+ path: () => `/vaults`,
138
+ tags: ['live-safe'],
139
+ },
140
+ };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * 'budgets.*' endpoints — WP3.2 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #7).
3
+ * See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
4
+ *
5
+ * Backend: quoxflow (NOT the auth service, NOT proxied by collector) —
6
+ * quoxflow/src/api/routes/budgets.ts, mounted at `/api/budgets` (see
7
+ * quoxflow/src/api/app.ts). `service: 'quoxflow'` resolves via the
8
+ * SERVICE_PORTS.quoxflow=3200 entry (see cli/lib/api/endpoints/triggers.js
9
+ * header for the full access-path decision this fragment reuses).
10
+ *
11
+ * Org scoping is via `?org_id=` QUERY PARAM on GET (list/get/usage), NOT a
12
+ * path segment — unlike triggers.ts, this route IS org-checked server-side:
13
+ * - list requires `org_id` (400 org_id_required if missing) and filters
14
+ * `budgetStore.listBudgets({ org_id })` — no cross-tenant leak.
15
+ * - get/usage: `org_id` is optional on the query, but if present is
16
+ * checked against the budget's own `org_id` (403 forbidden on mismatch).
17
+ * Omitting it entirely returns the budget regardless of owner org — the
18
+ * CLI always sends org_id here to stay on the safe/scoped path.
19
+ * - create: `org_id` required in the POST body.
20
+ * - update (PATCH): `org_id` required in the body, checked against the
21
+ * existing budget's org_id (403 on mismatch) before applying the patch.
22
+ * - delete: `org_id` required in the body, checked the same way.
23
+ */
24
+
25
+ export const budgets = {
26
+ 'budgets.list': {
27
+ method: 'GET',
28
+ service: 'quoxflow',
29
+ path: () => `/api/budgets`,
30
+ tags: ['live-safe'],
31
+ },
32
+ 'budgets.get': {
33
+ method: 'GET',
34
+ service: 'quoxflow',
35
+ path: ({ id }) => `/api/budgets/${id}`,
36
+ tags: ['live-safe'],
37
+ },
38
+ 'budgets.create': {
39
+ method: 'POST',
40
+ service: 'quoxflow',
41
+ path: () => `/api/budgets`,
42
+ tags: ['live-write'],
43
+ },
44
+ 'budgets.update': {
45
+ method: 'PATCH',
46
+ service: 'quoxflow',
47
+ path: ({ id }) => `/api/budgets/${id}`,
48
+ tags: ['live-write'],
49
+ },
50
+ 'budgets.delete': {
51
+ method: 'DELETE',
52
+ service: 'quoxflow',
53
+ path: ({ id }) => `/api/budgets/${id}`,
54
+ tags: ['live-write'],
55
+ },
56
+ 'budgets.usage': {
57
+ method: 'GET',
58
+ service: 'quoxflow',
59
+ path: ({ id }) => `/api/budgets/${id}/usage`,
60
+ tags: ['live-safe'],
61
+ },
62
+ };