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.
- package/LICENSE +35 -0
- package/README.md +142 -2
- package/bin/quox.js +292 -0
- package/bin/quoxon.js +8 -0
- package/lib/api/endpoints/admin.js +125 -0
- package/lib/api/endpoints/aee.js +38 -0
- package/lib/api/endpoints/agent-attach.js +126 -0
- package/lib/api/endpoints/agents.js +56 -0
- package/lib/api/endpoints/assistants.js +50 -0
- package/lib/api/endpoints/audit.js +14 -0
- package/lib/api/endpoints/auth.js +50 -0
- package/lib/api/endpoints/awareness.js +34 -0
- package/lib/api/endpoints/backup-schedules.js +20 -0
- package/lib/api/endpoints/backups.js +86 -0
- package/lib/api/endpoints/brain.js +140 -0
- package/lib/api/endpoints/budgets.js +62 -0
- package/lib/api/endpoints/calendarq.js +71 -0
- package/lib/api/endpoints/catalog.js +14 -0
- package/lib/api/endpoints/chat.js +54 -0
- package/lib/api/endpoints/consent.js +26 -0
- package/lib/api/endpoints/contactsq.js +66 -0
- package/lib/api/endpoints/conversations.js +32 -0
- package/lib/api/endpoints/custom-roles.js +92 -0
- package/lib/api/endpoints/divisions.js +56 -0
- package/lib/api/endpoints/domains.js +38 -0
- package/lib/api/endpoints/engagement.js +231 -0
- package/lib/api/endpoints/engine.js +11 -0
- package/lib/api/endpoints/entity.js +50 -0
- package/lib/api/endpoints/executions.js +32 -0
- package/lib/api/endpoints/file.js +20 -0
- package/lib/api/endpoints/files.js +26 -0
- package/lib/api/endpoints/github.js +21 -0
- package/lib/api/endpoints/governance.js +43 -0
- package/lib/api/endpoints/hat.js +36 -0
- package/lib/api/endpoints/inbox.js +32 -0
- package/lib/api/endpoints/inboxq.js +120 -0
- package/lib/api/endpoints/index.js +228 -0
- package/lib/api/endpoints/invites.js +19 -0
- package/lib/api/endpoints/llm-policy.js +43 -0
- package/lib/api/endpoints/lucid.js +89 -0
- package/lib/api/endpoints/members.js +32 -0
- package/lib/api/endpoints/memory.js +75 -0
- package/lib/api/endpoints/mfa.js +32 -0
- package/lib/api/endpoints/mon.js +178 -0
- package/lib/api/endpoints/notesq.js +43 -0
- package/lib/api/endpoints/objectives.js +62 -0
- package/lib/api/endpoints/orgs.js +38 -0
- package/lib/api/endpoints/plugins.js +134 -0
- package/lib/api/endpoints/powers.js +75 -0
- package/lib/api/endpoints/prompts.js +69 -0
- package/lib/api/endpoints/qlarity.js +122 -0
- package/lib/api/endpoints/quoxbox.js +55 -0
- package/lib/api/endpoints/quoxchat.js +54 -0
- package/lib/api/endpoints/quoxflow.js +32 -0
- package/lib/api/endpoints/quoxplan.js +114 -0
- package/lib/api/endpoints/quoxseo.js +108 -0
- package/lib/api/endpoints/reach.js +47 -0
- package/lib/api/endpoints/runs.js +38 -0
- package/lib/api/endpoints/safety.js +46 -0
- package/lib/api/endpoints/scim.js +46 -0
- package/lib/api/endpoints/scopes.js +14 -0
- package/lib/api/endpoints/security.js +69 -0
- package/lib/api/endpoints/setup.js +90 -0
- package/lib/api/endpoints/skills.js +180 -0
- package/lib/api/endpoints/sso.js +67 -0
- package/lib/api/endpoints/tags.js +32 -0
- package/lib/api/endpoints/teams.js +56 -0
- package/lib/api/endpoints/telephony.js +46 -0
- package/lib/api/endpoints/tg.js +56 -0
- package/lib/api/endpoints/tools.js +50 -0
- package/lib/api/endpoints/traces.js +157 -0
- package/lib/api/endpoints/triggers.js +70 -0
- package/lib/api/endpoints/user-library.js +41 -0
- package/lib/api/endpoints/users.js +20 -0
- package/lib/api/endpoints/v1.js +499 -0
- package/lib/api/endpoints/vault.js +192 -0
- package/lib/api/endpoints/voice.js +22 -0
- package/lib/api/endpoints/volt.js +84 -0
- package/lib/api/endpoints/ward.js +40 -0
- package/lib/api/endpoints/webhooks.js +46 -0
- package/lib/api/endpoints/workflows.js +162 -0
- package/lib/api/endpoints/x.js +24 -0
- package/lib/api/endpoints.js +15 -0
- package/lib/commands/admin.js +359 -0
- package/lib/commands/aee.js +99 -0
- package/lib/commands/agent.js +201 -0
- package/lib/commands/agentAttach.js +1440 -0
- package/lib/commands/approvals.js +47 -0
- package/lib/commands/assistant.js +114 -0
- package/lib/commands/auth.js +458 -0
- package/lib/commands/awareness.js +88 -0
- package/lib/commands/backup.js +373 -0
- package/lib/commands/brain.js +994 -0
- package/lib/commands/budget.js +241 -0
- package/lib/commands/build.js +156 -0
- package/lib/commands/calendar.js +216 -0
- package/lib/commands/capabilities.js +34 -0
- package/lib/commands/chat.js +240 -0
- package/lib/commands/claude.js +354 -0
- package/lib/commands/config-cmd.js +106 -0
- package/lib/commands/consent.js +84 -0
- package/lib/commands/contacts.js +967 -0
- package/lib/commands/contactsSelftest.js +132 -0
- package/lib/commands/conversation.js +74 -0
- package/lib/commands/department.js +75 -0
- package/lib/commands/dev.js +620 -0
- package/lib/commands/devResident.js +314 -0
- package/lib/commands/devSupervisor.js +1050 -0
- package/lib/commands/discord.js +96 -0
- package/lib/commands/doctor.js +181 -0
- package/lib/commands/domain.js +114 -0
- package/lib/commands/done.js +277 -0
- package/lib/commands/engagement.js +586 -0
- package/lib/commands/entity.js +119 -0
- package/lib/commands/facebook.js +212 -0
- package/lib/commands/file.js +128 -0
- package/lib/commands/fleet.js +882 -0
- package/lib/commands/governance.js +638 -0
- package/lib/commands/gripe.js +324 -0
- package/lib/commands/hat.js +205 -0
- package/lib/commands/helpers.js +79 -0
- package/lib/commands/inbox.js +122 -0
- package/lib/commands/instagram.js +264 -0
- package/lib/commands/integration.js +100 -0
- package/lib/commands/inventory.js +115 -0
- package/lib/commands/invites.js +45 -0
- package/lib/commands/licence.js +280 -0
- package/lib/commands/linkedin.js +178 -0
- package/lib/commands/llm-policy.js +117 -0
- package/lib/commands/llm.js +45 -0
- package/lib/commands/lucid.js +591 -0
- package/lib/commands/mail.js +531 -0
- package/lib/commands/memory.js +284 -0
- package/lib/commands/mon.js +514 -0
- package/lib/commands/monitoring.js +86 -0
- package/lib/commands/motion.js +22 -0
- package/lib/commands/notes.js +1246 -0
- package/lib/commands/notesBatch.js +160 -0
- package/lib/commands/notesBridges.js +56 -0
- package/lib/commands/notesLinks.js +60 -0
- package/lib/commands/notification.js +57 -0
- package/lib/commands/nucleus.js +92 -0
- package/lib/commands/objective.js +229 -0
- package/lib/commands/onboard.js +328 -0
- package/lib/commands/open.js +56 -0
- package/lib/commands/org.js +266 -0
- package/lib/commands/plan.js +906 -0
- package/lib/commands/plugin-doctor.js +1091 -0
- package/lib/commands/plugin.js +539 -0
- package/lib/commands/policy.js +78 -0
- package/lib/commands/powers.js +296 -0
- package/lib/commands/prompt.js +350 -0
- package/lib/commands/qlarity.js +690 -0
- package/lib/commands/quoxbox.js +270 -0
- package/lib/commands/quoxchat.js +266 -0
- package/lib/commands/quoxseo.js +340 -0
- package/lib/commands/reach.js +158 -0
- package/lib/commands/role.js +286 -0
- package/lib/commands/run.js +132 -0
- package/lib/commands/safety.js +107 -0
- package/lib/commands/scim.js +88 -0
- package/lib/commands/scope.js +58 -0
- package/lib/commands/security.js +157 -0
- package/lib/commands/service.js +89 -0
- package/lib/commands/settings.js +99 -0
- package/lib/commands/setup.js +543 -0
- package/lib/commands/skillManifest.js +113 -0
- package/lib/commands/skillRightsFormat.js +38 -0
- package/lib/commands/skills.js +644 -0
- package/lib/commands/slot.js +1198 -0
- package/lib/commands/sso.js +229 -0
- package/lib/commands/status.js +137 -0
- package/lib/commands/tag.js +91 -0
- package/lib/commands/team.js +140 -0
- package/lib/commands/tg.js +240 -0
- package/lib/commands/tiktok.js +218 -0
- package/lib/commands/tool.js +216 -0
- package/lib/commands/trace.js +525 -0
- package/lib/commands/trigger.js +128 -0
- package/lib/commands/vault.js +1424 -0
- package/lib/commands/voice.js +182 -0
- package/lib/commands/volt.js +528 -0
- package/lib/commands/watch.js +115 -0
- package/lib/commands/webhook.js +137 -0
- package/lib/commands/workflow.js +503 -0
- package/lib/commands/x.js +439 -0
- package/lib/core/actingAs.js +136 -0
- package/lib/core/aee.js +53 -0
- package/lib/core/agentAlias.js +163 -0
- package/lib/core/approvalContext.js +61 -0
- package/lib/core/auth.js +350 -0
- package/lib/core/banner.js +143 -0
- package/lib/core/brainPrime.js +90 -0
- package/lib/core/callerSource.js +129 -0
- package/lib/core/claudeLs.js +94 -0
- package/lib/core/client.js +584 -0
- package/lib/core/completions.js +163 -0
- package/lib/core/config.js +551 -0
- package/lib/core/confirm.js +37 -0
- package/lib/core/deeplinks.js +76 -0
- package/lib/core/doneEngineFetch.js +219 -0
- package/lib/core/errors.js +132 -0
- package/lib/core/global-flags.js +90 -0
- package/lib/core/governedSession.js +402 -0
- package/lib/core/lazyCommands.js +119 -0
- package/lib/core/liveSessionsReport.js +112 -0
- package/lib/core/org-override.js +52 -0
- package/lib/core/output.js +239 -0
- package/lib/core/prodEnv.js +7 -0
- package/lib/core/quoxglyph.js +158 -0
- package/lib/core/residentAlarm.js +282 -0
- package/lib/core/residentAuth.js +243 -0
- package/lib/core/residentPump.js +229 -0
- package/lib/core/residentSeed.js +104 -0
- package/lib/core/sessionHeartbeat.js +192 -0
- package/lib/core/sessionsOverview.js +160 -0
- package/lib/core/slotKeeper.js +282 -0
- package/lib/core/supervisorEngine.js +864 -0
- package/lib/core/systemdInstaller.js +256 -0
- package/lib/core/version.js +87 -0
- package/lib/core/websiteSession.js +148 -0
- package/lib/lucid/LucidIntro.jsx +105 -0
- package/lib/lucid/blind.js +71 -0
- package/lib/lucid/deck.js +32 -0
- package/lib/lucid/fmt.js +139 -0
- package/lib/lucid/sitrep.js +173 -0
- package/lib/plugins/loader.js +93 -0
- package/lib/quoxon/activity.js +104 -0
- package/lib/quoxon/api.js +473 -0
- package/lib/quoxon/app.js +1262 -0
- package/lib/quoxon/capabilities.js +75 -0
- package/lib/quoxon/commands.js +154 -0
- package/lib/quoxon/connect.js +467 -0
- package/lib/quoxon/connectCard.js +28 -0
- package/lib/quoxon/context.js +68 -0
- package/lib/quoxon/copy.js +33 -0
- package/lib/quoxon/demo.fixtures.js +24 -0
- package/lib/quoxon/demo.js +35 -0
- package/lib/quoxon/egg.js +36 -0
- package/lib/quoxon/events.js +458 -0
- package/lib/quoxon/gallery.js +223 -0
- package/lib/quoxon/indicator.js +193 -0
- package/lib/quoxon/intent.js +41 -0
- package/lib/quoxon/keys.js +121 -0
- package/lib/quoxon/main.js +244 -0
- package/lib/quoxon/markdown.js +317 -0
- package/lib/quoxon/model.js +205 -0
- package/lib/quoxon/motion/clock.js +69 -0
- package/lib/quoxon/motion/color.js +35 -0
- package/lib/quoxon/motion/frame.js +14 -0
- package/lib/quoxon/motion/reveal.js +54 -0
- package/lib/quoxon/motion/ring.js +79 -0
- package/lib/quoxon/objects/agent.js +61 -0
- package/lib/quoxon/objects/crystal.js +100 -0
- package/lib/quoxon/objects/fetch.js +170 -0
- package/lib/quoxon/objects/index.js +85 -0
- package/lib/quoxon/objects/ladder.js +71 -0
- package/lib/quoxon/objects/memory.js +44 -0
- package/lib/quoxon/objects/model.js +118 -0
- package/lib/quoxon/objects/proof.js +110 -0
- package/lib/quoxon/objects/skill.js +105 -0
- package/lib/quoxon/objects/view.js +76 -0
- package/lib/quoxon/objects/workflow.js +119 -0
- package/lib/quoxon/observers.js +42 -0
- package/lib/quoxon/onboarding/copy.js +235 -0
- package/lib/quoxon/onboarding/credential.js +95 -0
- package/lib/quoxon/onboarding/detect.js +22 -0
- package/lib/quoxon/onboarding/finish.js +119 -0
- package/lib/quoxon/onboarding/index.js +67 -0
- package/lib/quoxon/onboarding/installRunner.js +225 -0
- package/lib/quoxon/onboarding/intent.js +53 -0
- package/lib/quoxon/onboarding/journey.js +73 -0
- package/lib/quoxon/onboarding/preflight.js +142 -0
- package/lib/quoxon/onboarding/runner.js +58 -0
- package/lib/quoxon/onboarding/view.js +625 -0
- package/lib/quoxon/print.js +94 -0
- package/lib/quoxon/qart.js +379 -0
- package/lib/quoxon/qglyph.js +143 -0
- package/lib/quoxon/qhello.js +58 -0
- package/lib/quoxon/qmotion.js +111 -0
- package/lib/quoxon/render.js +648 -0
- package/lib/quoxon/roster.js +221 -0
- package/lib/quoxon/route.js +38 -0
- package/lib/quoxon/rules.js +130 -0
- package/lib/quoxon/session.js +68 -0
- package/lib/quoxon/skills.js +30 -0
- package/lib/quoxon/slash/compact.js +90 -0
- package/lib/quoxon/slash/ledger.js +83 -0
- package/lib/quoxon/slash/listView.js +28 -0
- package/lib/quoxon/slash/palette.js +104 -0
- package/lib/quoxon/slash/paletteController.js +59 -0
- package/lib/quoxon/slash/panels.js +101 -0
- package/lib/quoxon/slash/picker.js +38 -0
- package/lib/quoxon/slash/restart.js +144 -0
- package/lib/quoxon/slash/resume.js +59 -0
- package/lib/quoxon/slash/settings.js +50 -0
- package/lib/quoxon/sound/index.js +186 -0
- package/lib/quoxon/sound/mapping.js +119 -0
- package/lib/quoxon/sound/output.js +52 -0
- package/lib/quoxon/sound/synth.js +122 -0
- package/lib/quoxon/term.js +106 -0
- package/lib/quoxon/textBuffer.js +242 -0
- package/lib/quoxon/theme.js +253 -0
- package/lib/quoxon/transcript.js +150 -0
- package/lib/quoxon/web/qface.js +81 -0
- package/lib/quoxon/welcome.js +52 -0
- package/lib/tui/app.jsx +289 -0
- package/lib/tui/components/Breadcrumb.jsx +42 -0
- package/lib/tui/components/ChatInput.jsx +68 -0
- package/lib/tui/components/Confirm.jsx +32 -0
- package/lib/tui/components/DataTable.jsx +270 -0
- package/lib/tui/components/DetailPanel.jsx +241 -0
- package/lib/tui/components/HelpOverlay.jsx +67 -0
- package/lib/tui/components/Layout.jsx +129 -0
- package/lib/tui/components/Palette.jsx +141 -0
- package/lib/tui/components/SearchInput.jsx +125 -0
- package/lib/tui/components/Sparkline.jsx +55 -0
- package/lib/tui/components/StatusBar.jsx +133 -0
- package/lib/tui/components/Toast.jsx +52 -0
- package/lib/tui/hooks/useApi.js +44 -0
- package/lib/tui/hooks/useHealth.js +90 -0
- package/lib/tui/hooks/usePolledApi.js +86 -0
- package/lib/tui/hooks/useTerminalSize.js +46 -0
- package/lib/tui/index.js +56 -0
- package/lib/tui/intro/Intro.jsx +332 -0
- package/lib/tui/jsx-loader.js +32 -0
- package/lib/tui/keys.js +87 -0
- package/lib/tui/registry.js +49 -0
- package/lib/tui/theme.js +103 -0
- package/lib/tui/views/AdminView.jsx +398 -0
- package/lib/tui/views/AgentView.jsx +204 -0
- package/lib/tui/views/BackupView.jsx +225 -0
- package/lib/tui/views/BrainView.jsx +223 -0
- package/lib/tui/views/ChatView.jsx +468 -0
- package/lib/tui/views/FilesView.jsx +218 -0
- package/lib/tui/views/FleetView.jsx +234 -0
- package/lib/tui/views/GovernanceView.jsx +453 -0
- package/lib/tui/views/HealthView.jsx +216 -0
- package/lib/tui/views/InboxView.jsx +228 -0
- package/lib/tui/views/LucidDeck.jsx +727 -0
- package/lib/tui/views/MainMenu.jsx +123 -0
- package/lib/tui/views/MemoryView.jsx +377 -0
- package/lib/tui/views/ObjectivesView.jsx +230 -0
- package/lib/tui/views/OrgView.jsx +229 -0
- package/lib/tui/views/ToolView.jsx +221 -0
- package/lib/tui/views/VaultView.jsx +422 -0
- package/lib/tui/views/WorkflowView.jsx +329 -0
- 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
|
+
};
|