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