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,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'voice.*' endpoints: QuoxVoice Console call history + aggregate insights
|
|
3
|
+
* (org-scoped reads). Split out of telephony.js so every key matches its
|
|
4
|
+
* fragment's domain.
|
|
5
|
+
*
|
|
6
|
+
* See cli/lib/api/endpoints/index.js for the fragment convention.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const voice = {
|
|
10
|
+
'voice.calls.list': {
|
|
11
|
+
method: 'GET',
|
|
12
|
+
service: 'collector',
|
|
13
|
+
path: () => `/api/v1/voice/calls`,
|
|
14
|
+
tags: ['live-safe'],
|
|
15
|
+
},
|
|
16
|
+
'voice.insights.get': {
|
|
17
|
+
method: 'GET',
|
|
18
|
+
service: 'collector',
|
|
19
|
+
path: () => `/api/v1/voice/insights`,
|
|
20
|
+
tags: ['live-safe'],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'volt.*' 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 volt = {
|
|
8
|
+
'volt.cert.get': {
|
|
9
|
+
method: 'GET',
|
|
10
|
+
service: 'collector',
|
|
11
|
+
path: ({ certId }) => `/volt/cert/${certId}`,
|
|
12
|
+
tags: ['live-safe'],
|
|
13
|
+
},
|
|
14
|
+
'volt.cert.run.get': {
|
|
15
|
+
method: 'GET',
|
|
16
|
+
service: 'collector',
|
|
17
|
+
path: ({ runId }) => `/volt/cert/run/${runId}`,
|
|
18
|
+
tags: ['live-safe'],
|
|
19
|
+
},
|
|
20
|
+
'volt.certify': {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
service: 'collector',
|
|
23
|
+
path: () => `/volt/certify`,
|
|
24
|
+
tags: ['live-write'],
|
|
25
|
+
},
|
|
26
|
+
'volt.certs.list': {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
service: 'collector',
|
|
29
|
+
path: () => `/volt/certs`,
|
|
30
|
+
tags: ['live-safe'],
|
|
31
|
+
},
|
|
32
|
+
'volt.certs.stats.list': {
|
|
33
|
+
method: 'GET',
|
|
34
|
+
service: 'collector',
|
|
35
|
+
path: () => `/volt/certs/stats`,
|
|
36
|
+
tags: ['live-safe'],
|
|
37
|
+
},
|
|
38
|
+
// 2026-08-19 (proof-loop): these two routes existed on the collector with no
|
|
39
|
+
// CLI verb reaching them, so `quox volt verify` — which only accepts a local
|
|
40
|
+
// FILE — could not be pointed at real product evidence. The chain
|
|
41
|
+
// run -> bundle -> verify was broken at exactly the step a customer needs to
|
|
42
|
+
// check a receipt themselves, which is the whole "keep the receipt" pitch.
|
|
43
|
+
'volt.run.bundle.get': {
|
|
44
|
+
method: 'GET',
|
|
45
|
+
service: 'collector',
|
|
46
|
+
path: ({ runId }) => `/volt/runs/${runId}/bundle`,
|
|
47
|
+
tags: ['live-safe'],
|
|
48
|
+
},
|
|
49
|
+
'volt.bundle.download': {
|
|
50
|
+
method: 'GET',
|
|
51
|
+
service: 'collector',
|
|
52
|
+
path: ({ bundleId }) => `/volt/bundles/${bundleId}/download`,
|
|
53
|
+
tags: ['live-safe'],
|
|
54
|
+
},
|
|
55
|
+
// fleet #447: the bundle persisted per-run at completion is manifest_only
|
|
56
|
+
// (no events_ndjson, see voltContentStore.js), so `quox volt fetch` writing
|
|
57
|
+
// it straight to disk gave `quox volt verify` a file it could never
|
|
58
|
+
// chain-verify (bare MISSING_EVENTS). This is the missing verb: build the
|
|
59
|
+
// full bundle (manifest + events_ndjson) from the run's stored events on
|
|
60
|
+
// demand, then `volt.bundle.download` above fetches it.
|
|
61
|
+
'volt.bundle.create': {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
service: 'collector',
|
|
64
|
+
path: () => `/volt/bundles/create`,
|
|
65
|
+
tags: ['live-write'],
|
|
66
|
+
},
|
|
67
|
+
// SEO-MOAT (owner ruling 2026-09-03): minimal witnessed acceptance verdict.
|
|
68
|
+
// The evidence chain proves what happened; this records whether it WORKED —
|
|
69
|
+
// an attestation by a human or calling system, witnessed as its own VOLT
|
|
70
|
+
// run pinning the target's head_hash. actor_type is credential-derived
|
|
71
|
+
// server-side, never self-asserted.
|
|
72
|
+
'volt.run.acceptance.post': {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
service: 'collector',
|
|
75
|
+
path: ({ runId }) => `/volt/runs/${runId}/acceptance`,
|
|
76
|
+
tags: ['live-write'],
|
|
77
|
+
},
|
|
78
|
+
'volt.run.acceptance.get': {
|
|
79
|
+
method: 'GET',
|
|
80
|
+
service: 'collector',
|
|
81
|
+
path: ({ runId }) => `/volt/runs/${runId}/acceptance`,
|
|
82
|
+
tags: ['live-safe'],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'ward.*' 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 ward = {
|
|
8
|
+
'ward.chains.list': {
|
|
9
|
+
method: 'GET',
|
|
10
|
+
service: 'collector',
|
|
11
|
+
path: () => `/ward/chains`,
|
|
12
|
+
tags: ['live-safe'],
|
|
13
|
+
},
|
|
14
|
+
'ward.entries.list': {
|
|
15
|
+
method: 'GET',
|
|
16
|
+
service: 'collector',
|
|
17
|
+
path: () => `/ward/entries`,
|
|
18
|
+
tags: ['live-safe'],
|
|
19
|
+
},
|
|
20
|
+
'ward.stats.list': {
|
|
21
|
+
method: 'GET',
|
|
22
|
+
service: 'collector',
|
|
23
|
+
path: () => `/ward/stats`,
|
|
24
|
+
tags: ['live-safe'],
|
|
25
|
+
},
|
|
26
|
+
'ward.verify': {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
service: 'collector',
|
|
29
|
+
path: () => `/ward/verify`,
|
|
30
|
+
tags: ['live-write'],
|
|
31
|
+
},
|
|
32
|
+
// #622: bounded single-action receipt verification (entry → covering signed
|
|
33
|
+
// tip only). Safe on the production chain where 'ward.verify' is not.
|
|
34
|
+
'ward.verify_receipt': {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
service: 'collector',
|
|
37
|
+
path: () => `/ward/verify-receipt`,
|
|
38
|
+
tags: ['live-safe'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'webhooks.*' 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
|
+
* Backend: services/auth/routes/webhooks.js, mounted at plain `/api`
|
|
6
|
+
* (server.js:641 `app.use('/api', webhooksRoutes)`) — routes are org-scoped
|
|
7
|
+
* IN the URL (`/api/orgs/:orgId/webhooks...`), unlike prompts.js. Gated
|
|
8
|
+
* enterprise-tier + ORG_MANAGE_SETTINGS (requirePlan('enterprise') +
|
|
9
|
+
* resolveCap(Capabilities.ORG_MANAGE_SETTINGS) — services/auth/routes/webhooks.js
|
|
10
|
+
* `chain`). Expect 402/403 on non-enterprise orgs; that's a real route, not
|
|
11
|
+
* a phantom.
|
|
12
|
+
*
|
|
13
|
+
* These are org WEBHOOK SUBSCRIBERS (team_event fan-out targets), distinct
|
|
14
|
+
* from quoxflow's workflow-trigger webhooks in ./triggers.js — the latter
|
|
15
|
+
* are inbound webhook paths registered by an activated workflow node; these
|
|
16
|
+
* are outbound subscriptions this org owns for receiving team_event
|
|
17
|
+
* notifications. SCIM tokens + team-events reads on the same router file
|
|
18
|
+
* are explicitly out of scope for this WP (separate work packages).
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export const webhooks = {
|
|
22
|
+
'webhooks.create': {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
service: 'auth',
|
|
25
|
+
path: ({ orgId }) => `/api/orgs/${orgId}/webhooks`,
|
|
26
|
+
tags: ['live-write'],
|
|
27
|
+
},
|
|
28
|
+
'webhooks.delete': {
|
|
29
|
+
method: 'DELETE',
|
|
30
|
+
service: 'auth',
|
|
31
|
+
path: ({ orgId, id }) => `/api/orgs/${orgId}/webhooks/${id}`,
|
|
32
|
+
tags: ['live-write'],
|
|
33
|
+
},
|
|
34
|
+
'webhooks.list': {
|
|
35
|
+
method: 'GET',
|
|
36
|
+
service: 'auth',
|
|
37
|
+
path: ({ orgId }) => `/api/orgs/${orgId}/webhooks`,
|
|
38
|
+
tags: ['live-safe'],
|
|
39
|
+
},
|
|
40
|
+
'webhooks.rotate': {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
service: 'auth',
|
|
43
|
+
path: ({ orgId, id }) => `/api/orgs/${orgId}/webhooks/${id}/rotate`,
|
|
44
|
+
tags: ['live-write'],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'workflows.*' 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
|
+
* WP2.5 (docs/STREAM_CLI_PARITY_PLAN.md §2.3 #5 — `quox workflow apply/validate/import`):
|
|
7
|
+
* the 'workflows.apply*'/'workflows.importN8n'/'workflows.importObjective'/'workflows.validate'
|
|
8
|
+
* entries below are DIRECT to quoxflow (service: 'quoxflow'), same access-path precedent as
|
|
9
|
+
* 'workflows.activate'/'workflows.deactivate' above. They are DELIBERATELY separate keys from
|
|
10
|
+
* 'workflows.create'/'workflows.update' (which hit the AUTH service's org-scoped, lightweight
|
|
11
|
+
* workflows table used by the pre-existing `workflow create`/`workflow update` commands) — the
|
|
12
|
+
* quoxflow store is a completely different backend (full Workflow/DAG execution schema, no
|
|
13
|
+
* orgId in the path) and reusing the same key names would have silently overwritten the auth
|
|
14
|
+
* entries in this object literal (no error — endpoints-fragments.test.js's duplicate-key guard
|
|
15
|
+
* only checks ACROSS fragment files, not within one file's own object literal).
|
|
16
|
+
*
|
|
17
|
+
* Route provenance (quoxflow/src/api/routes/workflows.ts, mounted at app.route('/api/workflows', ...)):
|
|
18
|
+
* - applyCreate: POST /api/workflows — body validated by WorkflowSchema (core/workflow.ts),
|
|
19
|
+
* which requires `id` as a non-optional field — i.e. even "create" needs a caller-supplied
|
|
20
|
+
* id; the store's save() is an upsert (`ON CONFLICT (id) DO UPDATE`), so POSTing an id that
|
|
21
|
+
* already exists silently updates it instead of erroring.
|
|
22
|
+
* - applyGet: GET /api/workflows/:id — used internally by `workflow apply`'s diff-preview to
|
|
23
|
+
* fetch the current stored definition before a PUT.
|
|
24
|
+
* - applyUpdate: PUT /api/workflows/:id — partial merge (name/description/notes/definition, or
|
|
25
|
+
* top-level nodes/edges/variables/metadata/tags), NOT validated against WorkflowSchema.
|
|
26
|
+
* - validate: POST /api/workflows/:id/validate — validates the ALREADY-STORED workflow by id;
|
|
27
|
+
* takes no body at all (no validateBody on this route). It does NOT validate arbitrary local
|
|
28
|
+
* file content — only whatever is currently persisted under that id.
|
|
29
|
+
* - importN8n: POST /api/workflows/import-n8n — body { workflow: unknown, options?: { generateIds?, includePositions? } }.
|
|
30
|
+
* - importObjective: POST /api/workflows/import-objective — body { template: {...}, schedule?: { cron, timezone? }, options?: { activate?, includeApprovalGate? } }.
|
|
31
|
+
*
|
|
32
|
+
* BACKEND FINDING (not fixed here — flagged for triage, see also the identical finding
|
|
33
|
+
* documented in endpoints/triggers.js): GET /api/workflows (list, quoxflow) does NOT filter by
|
|
34
|
+
* org at all — `createWorkflowRoutes`'s `app.get('/', ...)` calls `deps.workflowStore.list({
|
|
35
|
+
* limit, offset, active })` with no orgId, and neither `InMemoryWorkflowStore.list()` nor
|
|
36
|
+
* `PostgresWorkflowStore.list()` (workflow-store.ts) accept or filter on one — `ListOptions`
|
|
37
|
+
* has no orgId field. Worse than triggers.*: `PostgresWorkflowStore.save()` doesn't even INSERT
|
|
38
|
+
* an org_id value (relies on the column's DB-level `DEFAULT 'default'`), so every workflow
|
|
39
|
+
* created via this quoxflow-direct path is invisible to any per-org filtering that might be
|
|
40
|
+
* bolted on later unless a migration backfills it. Same cross-tenant-leak shape as the
|
|
41
|
+
* triggers.* finding — every org's workflows are visible to every other org's caller via this
|
|
42
|
+
* endpoint today. Not seeded as a CLI endpoint in this file (no CLI command reads it), so it
|
|
43
|
+
* isn't reachable via `quox workflow ...` — flagged here purely because WP2.5 was asked to
|
|
44
|
+
* check it while reading this route file for the apply/validate/import work.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
export const workflows = {
|
|
48
|
+
// WP2.2: lifecycle routes live in QUOXFLOW (not auth), unlike every other
|
|
49
|
+
// 'workflows.*' entry in this file. quoxflow/src/api/routes/workflows-lifecycle.ts
|
|
50
|
+
// mounts at /api/workflows (app.ts), registering/unregistering triggers on
|
|
51
|
+
// activate/deactivate. org_id travels in the body (optional tenant-ownership
|
|
52
|
+
// check — see route handler), NOT the URL, so no orgId path param here.
|
|
53
|
+
'workflows.activate': {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
service: 'quoxflow',
|
|
56
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}/activate`,
|
|
57
|
+
tags: ['live-write'],
|
|
58
|
+
},
|
|
59
|
+
'workflows.applyCreate': {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
service: 'quoxflow',
|
|
62
|
+
path: () => `/api/workflows`,
|
|
63
|
+
tags: ['live-write'],
|
|
64
|
+
},
|
|
65
|
+
'workflows.applyGet': {
|
|
66
|
+
method: 'GET',
|
|
67
|
+
service: 'quoxflow',
|
|
68
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}`,
|
|
69
|
+
tags: ['live-safe'],
|
|
70
|
+
},
|
|
71
|
+
// fleet #465: GET /api/workflows (list), same quoxflow-direct precedent as
|
|
72
|
+
// 'workflows.applyGet' above. Added so `workflow list` can read the engine
|
|
73
|
+
// store's own list route instead of only the auth-service store, which
|
|
74
|
+
// quoxflow's write paths (activate/applyCreate/applyUpdate) never touch.
|
|
75
|
+
'workflows.applyList': {
|
|
76
|
+
method: 'GET',
|
|
77
|
+
service: 'quoxflow',
|
|
78
|
+
path: () => `/api/workflows`,
|
|
79
|
+
tags: ['live-safe'],
|
|
80
|
+
},
|
|
81
|
+
// quoxflow#7: execute an engine-store workflow directly (the auth-service
|
|
82
|
+
// runs route only knows auth-store workflows). Org comes from the caller's
|
|
83
|
+
// auth context server-side, like the other quoxflow-direct entries.
|
|
84
|
+
'workflows.applyExecute': {
|
|
85
|
+
method: 'POST',
|
|
86
|
+
service: 'quoxflow',
|
|
87
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}/execute`,
|
|
88
|
+
tags: ['live-write'],
|
|
89
|
+
},
|
|
90
|
+
'workflows.applyUpdate': {
|
|
91
|
+
method: 'PUT',
|
|
92
|
+
service: 'quoxflow',
|
|
93
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}`,
|
|
94
|
+
tags: ['live-write'],
|
|
95
|
+
},
|
|
96
|
+
'workflows.create': {
|
|
97
|
+
method: 'POST',
|
|
98
|
+
service: 'auth',
|
|
99
|
+
path: ({ orgId }) => `/api/orgs/${orgId}/workflows`,
|
|
100
|
+
tags: ['live-write'],
|
|
101
|
+
},
|
|
102
|
+
'workflows.deactivate': {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
service: 'quoxflow',
|
|
105
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}/deactivate`,
|
|
106
|
+
tags: ['live-write'],
|
|
107
|
+
},
|
|
108
|
+
'workflows.delete': {
|
|
109
|
+
method: 'DELETE',
|
|
110
|
+
service: 'auth',
|
|
111
|
+
path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
|
|
112
|
+
tags: ['live-write'],
|
|
113
|
+
},
|
|
114
|
+
'workflows.get': {
|
|
115
|
+
method: 'GET',
|
|
116
|
+
service: 'auth',
|
|
117
|
+
path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
|
|
118
|
+
tags: ['live-safe'],
|
|
119
|
+
},
|
|
120
|
+
'workflows.importN8n': {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
service: 'quoxflow',
|
|
123
|
+
path: () => `/api/workflows/import-n8n`,
|
|
124
|
+
tags: ['live-write'],
|
|
125
|
+
},
|
|
126
|
+
'workflows.importObjective': {
|
|
127
|
+
method: 'POST',
|
|
128
|
+
service: 'quoxflow',
|
|
129
|
+
path: () => `/api/workflows/import-objective`,
|
|
130
|
+
tags: ['live-write'],
|
|
131
|
+
},
|
|
132
|
+
'workflows.list': {
|
|
133
|
+
method: 'GET',
|
|
134
|
+
service: 'auth',
|
|
135
|
+
path: ({ orgId }) => `/api/orgs/${orgId}/workflows`,
|
|
136
|
+
tags: ['live-safe'],
|
|
137
|
+
},
|
|
138
|
+
'workflows.publish': {
|
|
139
|
+
method: 'POST',
|
|
140
|
+
service: 'auth',
|
|
141
|
+
path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}/publish`,
|
|
142
|
+
tags: ['live-write'],
|
|
143
|
+
},
|
|
144
|
+
'workflows.steps': {
|
|
145
|
+
method: 'PUT',
|
|
146
|
+
service: 'auth',
|
|
147
|
+
path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}/steps`,
|
|
148
|
+
tags: ['live-write'],
|
|
149
|
+
},
|
|
150
|
+
'workflows.update': {
|
|
151
|
+
method: 'PATCH',
|
|
152
|
+
service: 'auth',
|
|
153
|
+
path: ({ orgId, workflowId }) => `/api/orgs/${orgId}/workflows/${workflowId}`,
|
|
154
|
+
tags: ['live-write'],
|
|
155
|
+
},
|
|
156
|
+
'workflows.validate': {
|
|
157
|
+
method: 'POST',
|
|
158
|
+
service: 'quoxflow',
|
|
159
|
+
path: ({ workflowId }) => `/api/workflows/${workflowId}/validate`,
|
|
160
|
+
tags: ['live-safe'],
|
|
161
|
+
},
|
|
162
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'x.*' endpoints — the X (Twitter) plugin's governed REST surface on the
|
|
3
|
+
* collector (services/collector/routes/xRoutes.js, mounted at /x with
|
|
4
|
+
* requireServiceOrUserAuth + requirePluginEntitlement('x')).
|
|
5
|
+
*
|
|
6
|
+
* Most `quox x` verbs go through the agent tool path (v1.tools.execute) and
|
|
7
|
+
* need no fragment here. This one is the exception: media upload is a
|
|
8
|
+
* multipart REST route, so the CLI posts a FormData body straight to it
|
|
9
|
+
* (quox#592 — the media-upload gap: the endpoint existed for the dashboard
|
|
10
|
+
* Compose UI but had no CLI reach).
|
|
11
|
+
*
|
|
12
|
+
* See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export const x = {
|
|
16
|
+
'x.media.upload': {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
service: 'collector',
|
|
19
|
+
path: () => `/x/media`,
|
|
20
|
+
tags: ['live-write'],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default x;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuoxCLI endpoint map — thin re-export shim.
|
|
3
|
+
*
|
|
4
|
+
* The endpoint map was split into per-domain fragment files under
|
|
5
|
+
* ./endpoints/ (see ./endpoints/index.js for the aggregation + fragment
|
|
6
|
+
* convention doc). This file is kept as a stable import path so the ~50
|
|
7
|
+
* existing call sites across lib/commands, lib/tui/views, lib/tui/hooks,
|
|
8
|
+
* and lib/core don't need to change: `import { ... } from '../../api/endpoints.js'`
|
|
9
|
+
* keeps working unchanged.
|
|
10
|
+
*
|
|
11
|
+
* Do not add new endpoints here — add them to the appropriate fragment
|
|
12
|
+
* file under ./endpoints/ (or create a new one) instead.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export { ENDPOINTS, resolveEndpoint } from './endpoints/index.js';
|