quoxcli 0.3.1 → 0.5.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/CHANGELOG.md +61 -0
- package/README.md +2 -2
- package/bin/quox.js +19 -1
- package/bin/quoxon.js +6 -1
- package/lib/api/endpoints/actions.js +15 -0
- package/lib/api/endpoints/admin.js +27 -0
- package/lib/api/endpoints/agent-attach.js +7 -0
- package/lib/api/endpoints/blog.js +16 -0
- package/lib/api/endpoints/chat.js +7 -0
- package/lib/api/endpoints/compliance.js +25 -0
- package/lib/api/endpoints/contactsq.js +4 -0
- package/lib/api/endpoints/devServerRegistry.js +25 -0
- package/lib/api/endpoints/engagement.js +26 -0
- package/lib/api/endpoints/evidence.js +20 -0
- package/lib/api/endpoints/hat.js +14 -0
- package/lib/api/endpoints/inbox.js +6 -0
- package/lib/api/endpoints/inboxq.js +19 -0
- package/lib/api/endpoints/index.js +14 -0
- package/lib/api/endpoints/loops.js +26 -0
- package/lib/api/endpoints/mon.js +295 -0
- package/lib/api/endpoints/objectives.js +6 -0
- package/lib/api/endpoints/quoxseo.js +6 -0
- package/lib/api/endpoints/server.js +21 -0
- package/lib/api/endpoints/setup.js +6 -0
- package/lib/api/endpoints/tools.js +13 -0
- package/lib/api/endpoints/v1.js +47 -0
- package/lib/commands/actions.js +81 -11
- package/lib/commands/admin.js +35 -0
- package/lib/commands/agent.js +11 -4
- package/lib/commands/agentAttach.js +61 -7
- package/lib/commands/approvals.js +198 -3
- package/lib/commands/ask.js +4 -2
- package/lib/commands/auth.js +64 -11
- package/lib/commands/backup.js +11 -4
- package/lib/commands/blog.js +110 -0
- package/lib/commands/capabilities.js +3 -2
- package/lib/commands/chat.js +142 -28
- package/lib/commands/chatCompanion.js +27 -0
- package/lib/commands/chatState.js +45 -0
- package/lib/commands/claude.js +7 -33
- package/lib/commands/compliance.js +109 -0
- package/lib/commands/connect.js +69 -0
- package/lib/commands/contacts.js +85 -4
- package/lib/commands/contactsSendAt.js +21 -0
- package/lib/commands/dev.js +6 -8
- package/lib/commands/doctor.js +22 -3
- package/lib/commands/engagement.js +90 -0
- package/lib/commands/evidence.js +155 -0
- package/lib/commands/ext.js +23 -0
- package/lib/commands/fleet.js +25 -0
- package/lib/commands/gripe.js +24 -13
- package/lib/commands/hat.js +76 -0
- package/lib/commands/image.js +68 -0
- package/lib/commands/inbox.js +37 -3
- package/lib/commands/inboxq.js +147 -0
- package/lib/commands/kuma.js +1123 -0
- package/lib/commands/kumaSla.js +174 -0
- package/lib/commands/licence.js +39 -1
- package/lib/commands/licenceLinkView.js +311 -0
- package/lib/commands/linkedin.js +19 -0
- package/lib/commands/loop.js +318 -0
- package/lib/commands/lucid.js +1 -0
- package/lib/commands/mail.js +161 -20
- package/lib/commands/memory.js +68 -4
- package/lib/commands/memorySync.js +158 -0
- package/lib/commands/mon.js +55 -144
- package/lib/commands/notes.js +29 -7
- package/lib/commands/notesSeal.js +259 -0
- package/lib/commands/objective.js +53 -3
- package/lib/commands/offload.js +2 -3
- package/lib/commands/org.js +21 -4
- package/lib/commands/plan.js +17 -0
- package/lib/commands/provider.js +87 -8
- package/lib/commands/qlarity.js +32 -1
- package/lib/commands/quoxseo.js +31 -0
- package/lib/commands/research.js +79 -0
- package/lib/commands/rows.js +9 -0
- package/lib/commands/run.js +20 -2
- package/lib/commands/scope.js +2 -2
- package/lib/commands/server.js +150 -0
- package/lib/commands/setup.js +127 -75
- package/lib/commands/shortcut.js +41 -0
- package/lib/commands/skills.js +24 -5
- package/lib/commands/slot.js +49 -9
- package/lib/commands/status.js +92 -44
- package/lib/commands/tool.js +30 -0
- package/lib/commands/vault.js +6 -3
- package/lib/commands/vm.js +2 -2
- package/lib/commands/walkthrough.js +14 -2
- package/lib/commands/watch.js +11 -2
- package/lib/commands/wazuh.js +824 -0
- package/lib/commands/wazuhIntake.js +317 -0
- package/lib/commands/wazuhReport.js +192 -0
- package/lib/commands/workflow.js +47 -4
- package/lib/commands/x.js +50 -0
- package/lib/commands/youtube.js +172 -0
- package/lib/core/actionItems.js +115 -0
- package/lib/core/agentAlias.js +2 -0
- package/lib/core/agentFamilies.js +7 -0
- package/lib/core/announce.js +86 -0
- package/lib/core/auth.js +20 -2
- package/lib/core/callMe.js +118 -0
- package/lib/core/client.js +37 -3
- package/lib/core/commandRegistrars.js +17 -0
- package/lib/core/config.js +29 -3
- package/lib/core/confirm.js +68 -7
- package/lib/core/crossOrgApprovals.js +69 -0
- package/lib/core/errors.js +52 -1
- package/lib/core/findingReconcile.js +90 -0
- package/lib/core/global-flags.js +1 -1
- package/lib/core/governedSession.js +136 -8
- package/lib/core/inboxResolution.js +3 -2
- package/lib/core/liveSessionsReport.js +1 -1
- package/lib/core/loginGuard.js +73 -0
- package/lib/core/loopGlyph.js +97 -0
- package/lib/core/offload.js +73 -7
- package/lib/core/org-override.js +5 -1
- package/lib/core/output.js +8 -8
- package/lib/core/profileTrust.js +182 -0
- package/lib/core/quoxglyph.js +22 -1
- package/lib/core/router.js +14 -0
- package/lib/core/sessionHeartbeat.js +12 -8
- package/lib/core/shortcut.js +83 -0
- package/lib/core/stepUpPrompt.js +99 -0
- package/lib/core/version.js +1 -1
- package/lib/core/vm.js +5 -0
- package/lib/core/walkthrough.js +9 -5
- package/lib/dragon/companionView.js +34 -0
- package/lib/dragon/frames.js +118 -0
- package/lib/dragon/jobs.js +123 -0
- package/lib/dragon/renderWorker.js +15 -0
- package/lib/dragon/select.js +72 -0
- package/lib/evidence/bundleExport.js +47 -0
- package/lib/evidence/bundleVerify.js +77 -0
- package/lib/quoxon/EXTENSIONS.md +146 -0
- package/lib/quoxon/api.js +364 -27
- package/lib/quoxon/app.js +1629 -183
- package/lib/quoxon/approvalBatch.js +117 -0
- package/lib/quoxon/approvalFacts.js +64 -8
- package/lib/quoxon/approvalSentence.js +48 -0
- package/lib/quoxon/approvalsView.js +124 -7
- package/lib/quoxon/autoOpen.js +94 -0
- package/lib/quoxon/backgroundWork.js +59 -0
- package/lib/quoxon/bang.js +1 -1
- package/lib/quoxon/capabilities.js +7 -2
- package/lib/quoxon/commandShort.js +22 -3
- package/lib/quoxon/commands.js +110 -15
- package/lib/quoxon/connect.js +5 -3
- package/lib/quoxon/countdownLine.js +10 -1
- package/lib/quoxon/deck.js +30 -0
- package/lib/quoxon/deckLazy.js +58 -0
- package/lib/quoxon/demo.autoplay.js +1 -1
- package/lib/quoxon/demo.js +3 -1
- package/lib/quoxon/destructive.js +35 -0
- package/lib/quoxon/dividerAocl.js +4 -3
- package/lib/quoxon/dividerRule.js +3 -3
- package/lib/quoxon/dnd.js +71 -0
- package/lib/quoxon/dragonCompanion.js +285 -0
- package/lib/quoxon/dragonModes.js +1 -0
- package/lib/quoxon/dragonMoments.js +160 -0
- package/lib/quoxon/dragonReads.js +68 -0
- package/lib/quoxon/dragonView.js +2 -2
- package/lib/quoxon/echo.js +1 -0
- package/lib/quoxon/events.js +67 -10
- package/lib/quoxon/extensions.js +636 -0
- package/lib/quoxon/gripeQueue.js +135 -0
- package/lib/quoxon/inboxView.js +182 -0
- package/lib/quoxon/installCli.js +79 -0
- package/lib/quoxon/keys.js +4 -4
- package/lib/quoxon/loopCard.js +460 -0
- package/lib/quoxon/loopCards.js +189 -0
- package/lib/quoxon/loopStream.js +98 -0
- package/lib/quoxon/mailView.js +71 -0
- package/lib/quoxon/main.js +29 -5
- package/lib/quoxon/markdown.js +1 -1
- package/lib/quoxon/model.js +15 -0
- package/lib/quoxon/mouse.js +12 -1
- package/lib/quoxon/neverAnswered.js +20 -0
- package/lib/quoxon/objectiveOffer.js +82 -0
- package/lib/quoxon/objects/away.js +43 -5
- package/lib/quoxon/objects/index.js +22 -4
- package/lib/quoxon/objects/model.js +33 -0
- package/lib/quoxon/objects/proof.js +12 -4
- package/lib/quoxon/onboarding/connectServer.js +162 -0
- package/lib/quoxon/onboarding/copy.js +6 -0
- package/lib/quoxon/onboarding/index.js +5 -43
- package/lib/quoxon/onboarding/probe.js +20 -1
- package/lib/quoxon/onboarding/shortcutOffer.js +28 -0
- package/lib/quoxon/onboarding/view.js +16 -3
- package/lib/quoxon/orgSwitch.js +49 -1
- package/lib/quoxon/planSteps.js +51 -0
- package/lib/quoxon/print.js +8 -3
- package/lib/quoxon/profileSwitch.js +7 -0
- package/lib/quoxon/promptHistory.js +3 -1
- package/lib/quoxon/qdragonFly.js +7 -6
- package/lib/quoxon/qmotion.js +17 -0
- package/lib/quoxon/render.js +187 -41
- package/lib/quoxon/roster.js +36 -17
- package/lib/quoxon/rosterSessions.js +44 -0
- package/lib/quoxon/rows.js +244 -1
- package/lib/quoxon/screenContext.js +1 -1
- package/lib/quoxon/secretShape.js +86 -0
- package/lib/quoxon/serverChip.js +42 -0
- package/lib/quoxon/session.js +10 -0
- package/lib/quoxon/slash/agents.js +2 -1
- package/lib/quoxon/slash/argSources.js +9 -2
- package/lib/quoxon/slash/args.js +4 -2
- package/lib/quoxon/slash/broadcast.js +18 -5
- package/lib/quoxon/slash/broadcastRun.js +13 -2
- package/lib/quoxon/slash/cliCommand.js +42 -1
- package/lib/quoxon/slash/cliLeaves.json +139 -2
- package/lib/quoxon/slash/evidenceCmd.js +34 -0
- package/lib/quoxon/slash/hatWalk.js +1 -1
- package/lib/quoxon/slash/palette.js +23 -2
- package/lib/quoxon/slash/paletteController.js +10 -4
- package/lib/quoxon/slash/qpeCmd.js +35 -0
- package/lib/quoxon/slash/restart.js +31 -4
- package/lib/quoxon/slash/resume.js +18 -1
- package/lib/quoxon/slash/stepUp.js +5 -5
- package/lib/quoxon/slash/stepUpCmds.js +74 -1
- package/lib/quoxon/slash/todoCmd.js +122 -0
- package/lib/quoxon/slashSpinner.js +35 -0
- package/lib/quoxon/slotAttach.js +8 -0
- package/lib/quoxon/slotChat.js +17 -0
- package/lib/quoxon/slotFormat.js +1 -1
- package/lib/quoxon/slotOutbox.js +113 -0
- package/lib/quoxon/suggestCommand.js +34 -3
- package/lib/quoxon/term.js +25 -1
- package/lib/quoxon/toolCards.js +30 -0
- package/lib/quoxon/transcript.js +2 -1
- package/lib/quoxon/welcome.js +1 -1
- package/lib/quoxon/whatsnew.js +1 -1
- package/lib/quoxon/whatsnew.jsonl +81 -0
- package/lib/quoxon/windowOrg.js +11 -1
- package/lib/server/devServers.js +137 -0
- package/lib/server/installFlow.js +168 -0
- package/lib/server/status.js +15 -1
- package/lib/toolOutputShape.js +55 -0
- package/package.json +4 -2
- package/vendor/dragonlab/SOURCE +4 -0
- package/vendor/dragonlab/design/cipher/v1/cipher-master.svg +46 -0
- package/vendor/dragonlab/design/cipher/v2/character.mjs +49 -0
- package/vendor/dragonlab/design/cipher/v2/review.mjs +33 -0
- package/vendor/dragonlab/design/cipher/v2/watch.mjs +56 -0
- package/vendor/dragonlab/design/drago/v1/character.mjs +19 -0
- package/vendor/dragonlab/design/drago/v1/drago-master.svg +56 -0
- package/vendor/dragonlab/design/drago/v2/character.mjs +87 -0
- package/vendor/dragonlab/design/drago/v4/character.mjs +67 -0
- package/vendor/dragonlab/design/drago/v4/profile.mjs +35 -0
- package/vendor/dragonlab/design/drago/v4/review.mjs +33 -0
- package/vendor/dragonlab/design/drago/v4/watch.mjs +56 -0
- package/vendor/dragonlab/design/hyperion/v1/hyperion-master.svg +56 -0
- package/vendor/dragonlab/design/hyperion/v2/character.mjs +79 -0
- package/vendor/dragonlab/design/hyperion/v2/review.mjs +33 -0
- package/vendor/dragonlab/design/hyperion/v2/watch.mjs +56 -0
- package/vendor/dragonlab/design/lucid/recovery/arrival.mjs +22 -0
- package/vendor/dragonlab/design/lucid/recovery/character.mjs +106 -0
- package/vendor/dragonlab/design/lucid/recovery/layout.mjs +50 -0
- package/vendor/dragonlab/design/lucid/recovery/lucid-master.svg +78 -0
- package/vendor/dragonlab/design/lucid/recovery/motion.mjs +42 -0
- package/vendor/dragonlab/design/lucid/recovery/render.mjs +121 -0
- package/vendor/dragonlab/design/lucid/recovery/review.mjs +68 -0
- package/vendor/dragonlab/design/lucid/recovery/verify.mjs +84 -0
- package/vendor/dragonlab/design/lucid/recovery/watch.mjs +56 -0
- package/vendor/dragonlab/design/quoxperticus/v2/quoxperticus-master.svg +59 -0
- package/vendor/dragonlab/design/quoxperticus/v3/character.mjs +43 -0
- package/vendor/dragonlab/design/quoxperticus/v4/character.mjs +57 -0
- package/vendor/dragonlab/design/quoxperticus/v4/review.mjs +35 -0
- package/vendor/dragonlab/design/quoxperticus/v4/watch.mjs +56 -0
- package/vendor/dragonlab/design/seer/v1/seer-master.svg +53 -0
- package/vendor/dragonlab/design/seer/v2/character.mjs +88 -0
- package/vendor/dragonlab/design/seer/v3/character.mjs +33 -0
- package/vendor/dragonlab/design/seer/v4/character.mjs +66 -0
- package/vendor/dragonlab/design/seer/v4/review.mjs +33 -0
- package/vendor/dragonlab/design/seer/v4/watch.mjs +56 -0
- package/vendor/dragonlab/design/stage3/companion-review.mjs +28 -0
- package/vendor/dragonlab/design/stage3/sentinel-art.js +39 -0
- package/vendor/dragonlab/design/stage3/sentinel-braille.js +216 -0
- package/vendor/dragonlab/design/stage3/sentinel-character.js +257 -0
- package/vendor/dragonlab/design/stage3/sentinel-icon.js +103 -0
- package/vendor/dragonlab/design/stage3/sentinel-warden-eyes.js +95 -0
- package/vendor/dragonlab/design/stage3/svg-coverage.js +148 -0
- package/vendor/dragonlab/design/vulcan/v1/character.mjs +34 -0
- package/vendor/dragonlab/design/vulcan/v1/vulcan-master.svg +57 -0
- package/vendor/dragonlab/design/vulcan/v2/character.mjs +39 -0
- package/vendor/dragonlab/design/vulcan/v3/character.mjs +41 -0
- package/vendor/dragonlab/design/vulcan/v3/review.mjs +35 -0
- package/vendor/dragonlab/design/vulcan/v3/watch.mjs +56 -0
- package/vendor/dragonlab/factory/svg-rig-contour.mjs +64 -0
- package/vendor/dragonlab/factory/svg-rig.mjs +63 -0
- package/vendor/dragonlab/integration/companions-v1/characters.mjs +108 -0
- package/vendor/dragonlab/integration/companions-v1/cipher.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/companion.mjs +63 -0
- package/vendor/dragonlab/integration/companions-v1/drago.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/hyperion.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/lucid.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/quoxperticus.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/seer.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/sentinel.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/view.mjs +28 -0
- package/vendor/dragonlab/integration/companions-v1/vulcan.mjs +2 -0
- package/vendor/dragonlab/integration/hyperion-v3/activity.mjs +76 -0
- package/vendor/dragonlab/lib/power-effects.js +294 -0
- package/vendor/dragonlab/lib/power-registry.js +74 -0
- package/vendor/dragonlab/vendor/quox-dragon/qart.js +348 -0
- package/vendor/dragonlab/vendor/quox-dragon/qeyes.js +213 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
User-visible changes to the `quoxcli` package. Items marked *(unproven)* ship in
|
|
4
|
+
the package and pass their tests, but nobody has run them end to end from the
|
|
5
|
+
published package yet.
|
|
6
|
+
|
|
7
|
+
## 0.5.0 (unreleased)
|
|
8
|
+
|
|
9
|
+
### New commands
|
|
10
|
+
- `quox wazuh`: first-class Wazuh commands. `agents`, `fim`, `sca`, `rootcheck`
|
|
11
|
+
and `coverage` are reads. `vulns --priority` ranks CVEs by CISA KEV, EPSS,
|
|
12
|
+
CVSS and how many hosts each one hits (driven live across the fleet before
|
|
13
|
+
this release). Fleet-wide reads cover up to 200 active agents (it was a
|
|
14
|
+
silent 25 before).
|
|
15
|
+
- `quox wazuh report generate | list | show | verify`: signed vulnerability
|
|
16
|
+
reports. `verify` works offline against a pinned PEM or a raw key.
|
|
17
|
+
*(unproven from the package)*
|
|
18
|
+
- `quox wazuh connect`, `quox wazuh hooks create | list | rotate | delete | install`,
|
|
19
|
+
`quox wazuh incidents [--open] [--since] | show | close | diagnose | escalate`
|
|
20
|
+
and `quox wazuh triage`. Writes go through one approval per call.
|
|
21
|
+
*(unproven from the package)*
|
|
22
|
+
- `quox compliance reports list | show` (read): framework, period, score,
|
|
23
|
+
status per control and sampled evidence ids. `quox compliance jobs list`, and
|
|
24
|
+
jobs can now be named. *(unproven from the package)*
|
|
25
|
+
- `quox tool installed` and `quox tool uninstall`, to read back and undo a
|
|
26
|
+
`quox tool install`. *(unproven from the package)*
|
|
27
|
+
- `quox approvals approve | deny | list` by id or short tail, `quox approvals withdraw`
|
|
28
|
+
(the requester takes its own hold back), and `quox approvals call-me [status|on|off]`
|
|
29
|
+
(needs the quox-voice licence).
|
|
30
|
+
- `quox connect <url>` with certificate pinning per profile (`--trust-cert`,
|
|
31
|
+
`--fingerprint`), and `quox server install` (with `--dry-run`, `--yes`, `--json`).
|
|
32
|
+
- `quox notes seal init | status | new | open | edit | print`: ENQRYPT sealed
|
|
33
|
+
notes. Encryption happens on your machine and the server stores only the
|
|
34
|
+
envelope. *(unproven from the package)*
|
|
35
|
+
- `quox admin users verify-email <email> --reason` (step-up PIN).
|
|
36
|
+
- `quox memory sync`: Claude file memory is saved to Quox memory too
|
|
37
|
+
(idempotent; credential-shaped text is refused).
|
|
38
|
+
- `quox inbox unread <id...>`, `quox x whoami | accounts`, `quox linkedin whoami`,
|
|
39
|
+
`quox workflow create | apply | import-n8n --activate` (a plain create is not armed).
|
|
40
|
+
|
|
41
|
+
### Terminal UI (quoxon)
|
|
42
|
+
- New approvals and questions open by themselves as the walkthrough card.
|
|
43
|
+
- Approve verbs ask for the step-up PIN on a terminal; destructive approvals
|
|
44
|
+
need the target name typed.
|
|
45
|
+
- Do not disturb and `/sleep` survive restarts; `/morningreport` gives a grouped
|
|
46
|
+
digest of what arrived while you were away.
|
|
47
|
+
- `/mail` reads triaged email (read-only), `/outbox` queues `/say` sends that
|
|
48
|
+
failed on connectivity and sends them in order once you are back online.
|
|
49
|
+
- Other-org approvals show on the bar, with a hint about how many more are waiting.
|
|
50
|
+
- A secret paste guard asks before it sends text that looks like a credential,
|
|
51
|
+
and redacts it from history.
|
|
52
|
+
- Extensions hot-reload, and extension host contract v1 is out (panels, tabs,
|
|
53
|
+
settings).
|
|
54
|
+
|
|
55
|
+
### Fixes
|
|
56
|
+
- An explicit `-p <profile>` with no session now fails, instead of quietly
|
|
57
|
+
using the service key.
|
|
58
|
+
- `quox workflow update` finds engine workflows. `quox run list` fills in its
|
|
59
|
+
columns again.
|
|
60
|
+
- Watch and loop streams back off and give up cleanly, instead of polling forever.
|
|
61
|
+
- Docs links point at quox.ai/cli.
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npm install -g quoxcli
|
|
|
12
12
|
|
|
13
13
|
Needs Node.js 20 or later. This installs two commands: `quox`, and `quoxon` (an alias that opens the conversation).
|
|
14
14
|
|
|
15
|
-
Docs: https://
|
|
15
|
+
Docs: https://quox.ai/cli/docs/quickstart/
|
|
16
16
|
|
|
17
17
|
## Prerequisite: a running QuoxCORE
|
|
18
18
|
|
|
@@ -142,4 +142,4 @@ export NODE_EXTRA_CA_CERTS=/path/to/your-ca.pem
|
|
|
142
142
|
Quox Community Source Licence 1.0. This is source-available software, not open source. You may self-host and inspect it freely; redistribution and repackaging are restricted. Read the full text in the `LICENSE` file or at https://github.com/quoxai/quoxcore.
|
|
143
143
|
|
|
144
144
|
Website: https://quox.ai
|
|
145
|
-
CLI home: https://
|
|
145
|
+
CLI home: https://quox.ai/cli
|
package/bin/quox.js
CHANGED
|
@@ -11,6 +11,14 @@ if (!process.env.QUOX_SESSION_ID && process.env.QUOX_SESSION_ID_FILE) {
|
|
|
11
11
|
try { process.env.QUOX_SESSION_ID = (await import('node:fs')).readFileSync(process.env.QUOX_SESSION_ID_FILE, 'utf8').trim(); } catch { /* turn ended: no session */ }
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
// ONBOARD-P1: a profile that trusts its server's own certificate (quox connect) makes this run trust it too, via a
|
|
15
|
+
// one-time re-run with NODE_EXTRA_CA_CERTS set for this process tree only. Before anything else loads.
|
|
16
|
+
{
|
|
17
|
+
const { reexecWithProfileTrust } = await import('../lib/core/profileTrust.js');
|
|
18
|
+
const code = reexecWithProfileTrust(process.argv.slice(2), process.env);
|
|
19
|
+
if (code !== null) process.exit(code);
|
|
20
|
+
}
|
|
21
|
+
|
|
14
22
|
// CORTEX-BENCH: Node's fetch parses HTTP with a WebAssembly module, and V8
|
|
15
23
|
// recompiles it at the optimising tier on a background thread; Node waits for
|
|
16
24
|
// that compile before exiting, adding 350-700ms to every short command after
|
|
@@ -167,7 +175,17 @@ if (process.argv.includes('--no-color') || process.env.NO_COLOR) {
|
|
|
167
175
|
const config = loadConfig(resolveProfileFlagFromArgv(process.argv.slice(2)));
|
|
168
176
|
const auth = createAuth(config);
|
|
169
177
|
const client = createClient(config, auth);
|
|
170
|
-
|
|
178
|
+
// A client on the SAME user's token for another org the user belongs to (minted per org, window scope, never moves the
|
|
179
|
+
// profile's org). Lazy: nothing is minted unless a verb asks (approvals --org, the "more waiting in <org>" hint).
|
|
180
|
+
let _orgClients = null;
|
|
181
|
+
const clientForOrg = async (orgId) => {
|
|
182
|
+
if (!_orgClients) {
|
|
183
|
+
const { createWindowClient } = await import('../lib/quoxon/windowOrg.js');
|
|
184
|
+
_orgClients = createWindowClient({ config, auth, createClient }).clientForOrg;
|
|
185
|
+
}
|
|
186
|
+
return _orgClients(orgId);
|
|
187
|
+
};
|
|
188
|
+
const ctx = { config, auth, client, program, clientForOrg };
|
|
171
189
|
|
|
172
190
|
// Register all command groups
|
|
173
191
|
// Command groups, in registration order. CORTEX-BENCH (quox#7xx CLI startup):
|
package/bin/quoxon.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import '../lib/core/prodEnv.js'; // first: production React unless NODE_ENV is set (before anything loads React)
|
|
3
|
-
|
|
3
|
+
{
|
|
4
|
+
const { reexecWithProfileTrust } = await import('../lib/core/profileTrust.js');
|
|
5
|
+
const code = reexecWithProfileTrust(process.argv.slice(2), process.env);
|
|
6
|
+
if (code !== null) process.exit(code);
|
|
7
|
+
}
|
|
8
|
+
const { main } = await import('../lib/quoxon/main.js');
|
|
4
9
|
|
|
5
10
|
main().catch((err) => {
|
|
6
11
|
console.error(err?.message || err);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'actions.*' endpoints — Action Tracker items through the collector proxy
|
|
3
|
+
* (services/collector/server.js /api/v1/actions*, which forwards to the auth
|
|
4
|
+
* service's org-scoped actions routes with the caller's own bearer token).
|
|
5
|
+
* No org segment in the URL: the collector takes the org from the verified JWT.
|
|
6
|
+
*
|
|
7
|
+
* See cli/lib/api/endpoints/index.js for the fragment convention.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const actions = {
|
|
11
|
+
'actions.list': { method: 'GET', service: 'collector', path: () => '/api/v1/actions', tags: ['live-safe'] },
|
|
12
|
+
'actions.create': { method: 'POST', service: 'collector', path: () => '/api/v1/actions', tags: ['live-write'] },
|
|
13
|
+
'actions.update': { method: 'PATCH', service: 'collector', path: ({ id }) => `/api/v1/actions/${id}`, tags: ['live-write'] },
|
|
14
|
+
'actions.delete': { method: 'DELETE', service: 'collector', path: ({ id }) => `/api/v1/actions/${id}`, tags: ['live-write'] },
|
|
15
|
+
};
|
|
@@ -17,6 +17,13 @@ export const admin = {
|
|
|
17
17
|
path: () => '/api/admin/agent-identities',
|
|
18
18
|
tags: ['admin-write'],
|
|
19
19
|
},
|
|
20
|
+
// ADMIN-VERIFY-EMAIL: instance-admin + human + step-up (scope override). Served by services/auth/routes/admin.js.
|
|
21
|
+
'admin.users.verify_email': {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
service: 'auth',
|
|
24
|
+
path: () => '/api/admin/users/verify-email',
|
|
25
|
+
tags: ['admin-write'],
|
|
26
|
+
},
|
|
20
27
|
// Instance basics after setup (app URL etc). Served by services/auth/routes/admin-instance.js.
|
|
21
28
|
'admin.instance.basics.get': {
|
|
22
29
|
method: 'GET',
|
|
@@ -43,6 +50,26 @@ export const admin = {
|
|
|
43
50
|
path: () => '/api/admin/instance/lan-targets',
|
|
44
51
|
tags: ['admin-write'],
|
|
45
52
|
},
|
|
53
|
+
// SECURITY containment (2026-10-26): orgs allowed to run QLoop loops in-server (core-local). Served by
|
|
54
|
+
// services/auth/routes/admin-instance.js; writes are instance-admin only.
|
|
55
|
+
'admin.instance.core_local_orgs.list': {
|
|
56
|
+
method: 'GET',
|
|
57
|
+
service: 'auth',
|
|
58
|
+
path: () => '/api/admin/instance/core-local-orgs',
|
|
59
|
+
tags: ['live-safe'],
|
|
60
|
+
},
|
|
61
|
+
'admin.instance.core_local_orgs.add': {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
service: 'auth',
|
|
64
|
+
path: () => '/api/admin/instance/core-local-orgs',
|
|
65
|
+
tags: ['admin-write'],
|
|
66
|
+
},
|
|
67
|
+
'admin.instance.core_local_orgs.remove': {
|
|
68
|
+
method: 'DELETE',
|
|
69
|
+
service: 'auth',
|
|
70
|
+
path: ({ orgId }) => `/api/admin/instance/core-local-orgs/${orgId}`,
|
|
71
|
+
tags: ['admin-write'],
|
|
72
|
+
},
|
|
46
73
|
'admin.config.update': {
|
|
47
74
|
method: 'PATCH',
|
|
48
75
|
service: 'auth',
|
|
@@ -27,6 +27,13 @@ export const agentAttach = {
|
|
|
27
27
|
path: ({ leaseId }) => `/api/agent-attach/lease/${encodeURIComponent(leaseId)}/release`,
|
|
28
28
|
tags: ['live-write'],
|
|
29
29
|
},
|
|
30
|
+
// Org-wide list of live attaches (org owner/admin). Feeds `quox agent attaches` and the quoxon /roster.
|
|
31
|
+
'agent-attach.list': {
|
|
32
|
+
method: 'GET',
|
|
33
|
+
service: 'auth',
|
|
34
|
+
path: () => '/api/agent-attach',
|
|
35
|
+
tags: ['live-safe'],
|
|
36
|
+
},
|
|
30
37
|
'agent-attach.status': {
|
|
31
38
|
method: 'GET',
|
|
32
39
|
service: 'auth',
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'blog.*' endpoints: BLOG-DRAFT. Blog drafts are NotesQ notes in the blog-drafts collection,
|
|
3
|
+
* submitted and handed to the blog publisher through the collector
|
|
4
|
+
* (services/collector/lib/blogDraftRoutes.js). Nothing here publishes.
|
|
5
|
+
*
|
|
6
|
+
* See cli/lib/api/endpoints/index.js for the fragment convention.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const B = '/api/v1/blog/drafts';
|
|
10
|
+
|
|
11
|
+
export const blog = {
|
|
12
|
+
'blog.drafts.submit': { method: 'POST', service: 'collector', path: () => B, tags: ['live-write'] },
|
|
13
|
+
'blog.drafts.list': { method: 'GET', service: 'collector', path: () => B, tags: ['live-safe'] },
|
|
14
|
+
'blog.drafts.get': { method: 'GET', service: 'collector', path: ({ id }) => `${B}/${id}`, tags: ['live-safe'] },
|
|
15
|
+
'blog.drafts.published': { method: 'POST', service: 'collector', path: ({ id }) => `${B}/${id}/published`, tags: ['live-write'] },
|
|
16
|
+
};
|
|
@@ -11,6 +11,13 @@ export const chat = {
|
|
|
11
11
|
path: () => `/chat/claude`,
|
|
12
12
|
tags: ['live-write'],
|
|
13
13
|
},
|
|
14
|
+
// CHAT-TIMEOUTS: poll an async chat turn (POST /chat/claude with Prefer: respond-async) by id.
|
|
15
|
+
'chat.turn.get': {
|
|
16
|
+
method: 'GET',
|
|
17
|
+
service: 'collector',
|
|
18
|
+
path: ({ id }) => `/chat/turns/${encodeURIComponent(id)}`,
|
|
19
|
+
tags: ['live-safe'],
|
|
20
|
+
},
|
|
14
21
|
'chat.status.list': {
|
|
15
22
|
method: 'GET',
|
|
16
23
|
service: 'collector',
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'compliance.*' endpoints: scheduled compliance report jobs and generated reports.
|
|
3
|
+
* See cli/lib/api/endpoints/index.js for aggregation + the fragment convention.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const compliance = {
|
|
7
|
+
'compliance.jobs.list': {
|
|
8
|
+
method: 'GET',
|
|
9
|
+
service: 'collector',
|
|
10
|
+
path: () => `/compliance/jobs`,
|
|
11
|
+
tags: ['live-safe'],
|
|
12
|
+
},
|
|
13
|
+
'compliance.reports.list': {
|
|
14
|
+
method: 'GET',
|
|
15
|
+
service: 'collector',
|
|
16
|
+
path: () => `/compliance/reports`,
|
|
17
|
+
tags: ['live-safe'],
|
|
18
|
+
},
|
|
19
|
+
'compliance.reports.get': {
|
|
20
|
+
method: 'GET',
|
|
21
|
+
service: 'collector',
|
|
22
|
+
path: ({ id }) => `/compliance/reports/${encodeURIComponent(id)}`,
|
|
23
|
+
tags: ['live-safe'],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
@@ -64,5 +64,9 @@ export const contactsq = {
|
|
|
64
64
|
'contactsq.policy': { method: 'POST', service: 'collector', path: ({ id }) => `${B}/contacts/${id}/policy`, tags: ['live-safe'] },
|
|
65
65
|
'contactsq.handoffs.add': { method: 'POST', service: 'collector', path: ({ id }) => `${B}/contacts/${id}/handoffs` },
|
|
66
66
|
'contactsq.handoffs': { method: 'GET', service: 'collector', path: ({ id }) => `${B}/contacts/${id}/handoffs`, tags: ['live-safe'] },
|
|
67
|
+
// Scheduled sends: a human send (now or --at), the pending queue, cancel.
|
|
68
|
+
'contactsq.sends.create': { method: 'POST', service: 'collector', path: () => `${B}/sends`, tags: ['live-write'] },
|
|
69
|
+
'contactsq.sends.scheduled': { method: 'GET', service: 'collector', path: () => `${B}/sends/scheduled`, tags: ['live-safe'] },
|
|
70
|
+
'contactsq.sends.cancel': { method: 'POST', service: 'collector', path: ({ id }) => `${B}/sends/scheduled/${id}/cancel`, tags: ['live-write'] },
|
|
67
71
|
'contactsq.settings.update': { method: 'PUT', service: 'collector', path: () => `${B}/settings`, tags: ['live-write'] },
|
|
68
72
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'devServerRegistry.*' endpoints: the org-scoped dev-server registry behind `quox server list|mark|go`
|
|
3
|
+
* and the TUI server chip (DEVFLEET). Collector-owned (services/collector/lib/devServerRegistryRoutes.js).
|
|
4
|
+
*
|
|
5
|
+
* See cli/lib/api/endpoints/index.js for the fragment convention.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const devServerRegistry = {
|
|
9
|
+
'devServerRegistry.list': {
|
|
10
|
+
method: 'GET',
|
|
11
|
+
service: 'collector',
|
|
12
|
+
path: () => `/api/v1/dev-server-registry`,
|
|
13
|
+
tags: ['live-safe'],
|
|
14
|
+
},
|
|
15
|
+
'devServerRegistry.put': {
|
|
16
|
+
method: 'PUT',
|
|
17
|
+
service: 'collector',
|
|
18
|
+
path: ({ name }) => `/api/v1/dev-server-registry/${encodeURIComponent(name)}`,
|
|
19
|
+
},
|
|
20
|
+
'devServerRegistry.remove': {
|
|
21
|
+
method: 'DELETE',
|
|
22
|
+
service: 'collector',
|
|
23
|
+
path: ({ name }) => `/api/v1/dev-server-registry/${encodeURIComponent(name)}`,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
@@ -36,6 +36,12 @@ export const engagement = {
|
|
|
36
36
|
path: ({ id }) => `/api/v1/security/engagements/${id}`,
|
|
37
37
|
tags: ['live-safe'],
|
|
38
38
|
},
|
|
39
|
+
'engagement.verify': {
|
|
40
|
+
method: 'GET',
|
|
41
|
+
service: 'collector',
|
|
42
|
+
path: ({ id }) => `/api/v1/security/engagements/${id}/verify`,
|
|
43
|
+
tags: ['live-safe'],
|
|
44
|
+
},
|
|
39
45
|
// Per-engagement gripe target: which repo a finding filed from this
|
|
40
46
|
// engagement goes to, and which org's GitHub connector token files it.
|
|
41
47
|
// lib/securityEngagement.js's setEngagementGripeTarget.
|
|
@@ -141,6 +147,26 @@ export const engagement = {
|
|
|
141
147
|
path: ({ findingId }) => `/api/v1/security/findings/${findingId}/resolve`,
|
|
142
148
|
tags: ['live-write'],
|
|
143
149
|
},
|
|
150
|
+
// SITREP-FINDINGS: reconcile a finding against gathered evidence (issue state, fix commit
|
|
151
|
+
// landed or deployed). The collector decides; lib/securityFindings.js reconcileFinding.
|
|
152
|
+
'engagement.findings.reconcile': {
|
|
153
|
+
method: 'POST',
|
|
154
|
+
service: 'collector',
|
|
155
|
+
path: ({ findingId }) => `/api/v1/security/findings/${findingId}/reconcile`,
|
|
156
|
+
tags: ['live-write'],
|
|
157
|
+
},
|
|
158
|
+
'engagement.findings.reconciliations': {
|
|
159
|
+
method: 'GET',
|
|
160
|
+
service: 'collector',
|
|
161
|
+
path: ({ findingId }) => `/api/v1/security/findings/${findingId}/reconciliations`,
|
|
162
|
+
tags: ['live-safe'],
|
|
163
|
+
},
|
|
164
|
+
'engagement.findings.open': {
|
|
165
|
+
method: 'GET',
|
|
166
|
+
service: 'collector',
|
|
167
|
+
path: () => '/api/v1/security/findings/open',
|
|
168
|
+
tags: ['live-safe'],
|
|
169
|
+
},
|
|
144
170
|
// Re-grade a finding's severity after it was reported (quox#601). Governed +
|
|
145
171
|
// witnessed; a reason is required. lib/securityFindings.js regradeFinding.
|
|
146
172
|
'engagement.findings.regrade': {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'evidence.*' endpoints (DEVFLEET EV-1): read-only status of the evidence stores.
|
|
3
|
+
* Collector route, instance admin only (enforced server-side).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const evidence = {
|
|
7
|
+
'evidence.status': {
|
|
8
|
+
method: 'GET',
|
|
9
|
+
service: 'collector',
|
|
10
|
+
path: () => `/api/v1/admin/evidence/status`,
|
|
11
|
+
tags: ['live-safe'],
|
|
12
|
+
},
|
|
13
|
+
// The signed zip for one conversation (collector GET /aee/conversation/:corr/bundle?format=zip), org-scoped server-side.
|
|
14
|
+
'evidence.bundle': {
|
|
15
|
+
method: 'GET',
|
|
16
|
+
service: 'collector',
|
|
17
|
+
path: ({ corr }) => `/aee/conversation/${encodeURIComponent(corr)}/bundle`,
|
|
18
|
+
tags: ['live-safe'],
|
|
19
|
+
},
|
|
20
|
+
};
|
package/lib/api/endpoints/hat.js
CHANGED
|
@@ -63,4 +63,18 @@ export const hat = {
|
|
|
63
63
|
service: 'auth',
|
|
64
64
|
path: ({ orgId, hatId }) => `/api/orgs/${orgId}/quoxhat/hats/${encodeURIComponent(hatId)}/reset-to-template`,
|
|
65
65
|
},
|
|
66
|
+
// Merge-upgrade (2026-10-19): 3-way merge of an org-edited built-in onto the current
|
|
67
|
+
// template. Preview is a dry run (writes nothing); upgrade appends one system-authored
|
|
68
|
+
// revision (audited quoxhat.hat.template_merged) and refuses a stale preview (409).
|
|
69
|
+
'hat.upgrade.preview': {
|
|
70
|
+
method: 'GET',
|
|
71
|
+
service: 'auth',
|
|
72
|
+
path: ({ orgId, hatId }) => `/api/orgs/${orgId}/quoxhat/hats/${encodeURIComponent(hatId)}/upgrade-preview`,
|
|
73
|
+
tags: ['live-safe'],
|
|
74
|
+
},
|
|
75
|
+
'hat.upgrade': {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
service: 'auth',
|
|
78
|
+
path: ({ orgId, hatId }) => `/api/orgs/${orgId}/quoxhat/hats/${encodeURIComponent(hatId)}/upgrade`,
|
|
79
|
+
},
|
|
66
80
|
};
|
|
@@ -30,6 +30,12 @@ export const inbox = {
|
|
|
30
30
|
path: ({ orgId, itemId }) => `/api/orgs/${orgId}/inbox/${itemId}/respond`,
|
|
31
31
|
tags: ['live-write'],
|
|
32
32
|
},
|
|
33
|
+
'inbox.withdraw': {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
service: 'auth',
|
|
36
|
+
path: ({ orgId, itemId }) => `/api/orgs/${orgId}/inbox/${itemId}/withdraw`,
|
|
37
|
+
tags: ['live-write'],
|
|
38
|
+
},
|
|
33
39
|
// quox ask: a session files a decision request (one inbox item) and waits for the human's answer.
|
|
34
40
|
'inbox.decision.create': {
|
|
35
41
|
method: 'POST',
|
|
@@ -26,6 +26,19 @@ export const inboxq = {
|
|
|
26
26
|
path: ({ accountId }) => `/api/v1/inboxq/accounts/${accountId}`,
|
|
27
27
|
tags: ['live-write'],
|
|
28
28
|
},
|
|
29
|
+
// quox#1504: per-account TLS certificate pin (human org admin only).
|
|
30
|
+
'inboxq.accounts.tlsPin': {
|
|
31
|
+
method: 'PUT',
|
|
32
|
+
service: 'collector',
|
|
33
|
+
path: ({ accountId }) => `/api/v1/inboxq/accounts/${encodeURIComponent(accountId)}/tls-pin`,
|
|
34
|
+
tags: ['live-write'],
|
|
35
|
+
},
|
|
36
|
+
'inboxq.syncStatus': {
|
|
37
|
+
method: 'GET',
|
|
38
|
+
service: 'collector',
|
|
39
|
+
path: () => `/api/v1/inboxq/sync-status`,
|
|
40
|
+
tags: ['live-safe'],
|
|
41
|
+
},
|
|
29
42
|
'inboxq.messages.get': {
|
|
30
43
|
method: 'GET',
|
|
31
44
|
service: 'collector',
|
|
@@ -99,6 +112,12 @@ export const inboxq = {
|
|
|
99
112
|
path: ({ watchId }) => `/api/v1/inboxq/watches/${watchId}/active`,
|
|
100
113
|
tags: ['live-write'],
|
|
101
114
|
},
|
|
115
|
+
'inboxq.watches.delete': {
|
|
116
|
+
method: 'DELETE',
|
|
117
|
+
service: 'collector',
|
|
118
|
+
path: ({ watchId }) => `/api/v1/inboxq/watches/${watchId}`,
|
|
119
|
+
tags: ['live-write'],
|
|
120
|
+
},
|
|
102
121
|
'inboxq.proposals.list': {
|
|
103
122
|
method: 'GET',
|
|
104
123
|
service: 'collector',
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
* of silently landing in the wrong file.
|
|
51
51
|
*/
|
|
52
52
|
|
|
53
|
+
import { actions } from './actions.js';
|
|
53
54
|
import { admin } from './admin.js';
|
|
54
55
|
import { aee } from './aee.js';
|
|
55
56
|
import { agentAttach } from './agent-attach.js';
|
|
@@ -61,6 +62,7 @@ import { awareness } from './awareness.js';
|
|
|
61
62
|
import { router } from './router.js';
|
|
62
63
|
import { mind } from './mind.js';
|
|
63
64
|
import { lucid } from './lucid.js';
|
|
65
|
+
import { loops } from './loops.js';
|
|
64
66
|
import { away } from './away.js';
|
|
65
67
|
import { presence } from './presence.js';
|
|
66
68
|
import { invites } from './invites.js';
|
|
@@ -72,6 +74,7 @@ import { budgets } from './budgets.js';
|
|
|
72
74
|
import { calendarq } from './calendarq.js';
|
|
73
75
|
import { catalog } from './catalog.js';
|
|
74
76
|
import { chat } from './chat.js';
|
|
77
|
+
import { compliance } from './compliance.js';
|
|
75
78
|
import { consent } from './consent.js';
|
|
76
79
|
import { conversations } from './conversations.js';
|
|
77
80
|
import { customRoles } from './custom-roles.js';
|
|
@@ -83,10 +86,12 @@ import { engine } from './engine.js';
|
|
|
83
86
|
import { executions } from './executions.js';
|
|
84
87
|
import { file } from './file.js';
|
|
85
88
|
import { files } from './files.js';
|
|
89
|
+
import { evidence } from './evidence.js';
|
|
86
90
|
import { governance } from './governance.js';
|
|
87
91
|
import { inbox } from './inbox.js';
|
|
88
92
|
import { inboxq } from './inboxq.js';
|
|
89
93
|
import { notesq } from './notesq.js';
|
|
94
|
+
import { blog } from './blog.js';
|
|
90
95
|
import { contactsq } from './contactsq.js';
|
|
91
96
|
import { x } from './x.js';
|
|
92
97
|
import { llmPolicy } from './llm-policy.js';
|
|
@@ -106,6 +111,7 @@ import { quoxflow } from './quoxflow.js';
|
|
|
106
111
|
import { quoxplan } from './quoxplan.js';
|
|
107
112
|
import { qlarity } from './qlarity.js';
|
|
108
113
|
import { fetchAllowlist } from './fetchAllowlist.js';
|
|
114
|
+
import { devServerRegistry } from './devServerRegistry.js';
|
|
109
115
|
import { quoxseo } from './quoxseo.js';
|
|
110
116
|
import { telephony } from './telephony.js';
|
|
111
117
|
import { voice } from './voice.js';
|
|
@@ -115,6 +121,7 @@ import { runs } from './runs.js';
|
|
|
115
121
|
import { scim } from './scim.js';
|
|
116
122
|
import { scopes } from './scopes.js';
|
|
117
123
|
import { security } from './security.js';
|
|
124
|
+
import { server } from './server.js';
|
|
118
125
|
import { setup } from './setup.js';
|
|
119
126
|
import { skills } from './skills.js';
|
|
120
127
|
import { sso } from './sso.js';
|
|
@@ -136,6 +143,7 @@ import { webhooks } from './webhooks.js';
|
|
|
136
143
|
import { workflows } from './workflows.js';
|
|
137
144
|
|
|
138
145
|
export const ENDPOINTS = {
|
|
146
|
+
...actions,
|
|
139
147
|
...admin,
|
|
140
148
|
...aee,
|
|
141
149
|
...agentAttach,
|
|
@@ -147,6 +155,7 @@ export const ENDPOINTS = {
|
|
|
147
155
|
...router,
|
|
148
156
|
...mind,
|
|
149
157
|
...lucid,
|
|
158
|
+
...loops,
|
|
150
159
|
...away,
|
|
151
160
|
...presence,
|
|
152
161
|
...invites,
|
|
@@ -158,6 +167,7 @@ export const ENDPOINTS = {
|
|
|
158
167
|
...calendarq,
|
|
159
168
|
...catalog,
|
|
160
169
|
...chat,
|
|
170
|
+
...compliance,
|
|
161
171
|
...consent,
|
|
162
172
|
...conversations,
|
|
163
173
|
...customRoles,
|
|
@@ -169,10 +179,12 @@ export const ENDPOINTS = {
|
|
|
169
179
|
...executions,
|
|
170
180
|
...file,
|
|
171
181
|
...files,
|
|
182
|
+
...evidence,
|
|
172
183
|
...governance,
|
|
173
184
|
...inbox,
|
|
174
185
|
...inboxq,
|
|
175
186
|
...notesq,
|
|
187
|
+
...blog,
|
|
176
188
|
...contactsq,
|
|
177
189
|
...x,
|
|
178
190
|
...llmPolicy,
|
|
@@ -192,6 +204,7 @@ export const ENDPOINTS = {
|
|
|
192
204
|
...quoxplan,
|
|
193
205
|
...qlarity,
|
|
194
206
|
...fetchAllowlist,
|
|
207
|
+
...devServerRegistry,
|
|
195
208
|
...quoxseo,
|
|
196
209
|
...telephony,
|
|
197
210
|
...voice,
|
|
@@ -201,6 +214,7 @@ export const ENDPOINTS = {
|
|
|
201
214
|
...scim,
|
|
202
215
|
...scopes,
|
|
203
216
|
...security,
|
|
217
|
+
...server,
|
|
204
218
|
...setup,
|
|
205
219
|
...skills,
|
|
206
220
|
...sso,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 'loops.*' endpoints: QLOOP-LIVE, observe a loop as it runs.
|
|
3
|
+
* Served by the collector (/api/v1/loops/*), which forwards the caller's identity to the tasks
|
|
4
|
+
* service that owns the durable per-loop event log. Contract: ~/quoxon-work/qloop-live-design.md section 1.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const loops = {
|
|
8
|
+
'loops.list': {
|
|
9
|
+
method: 'GET',
|
|
10
|
+
service: 'collector',
|
|
11
|
+
path: () => `/api/v1/loops`,
|
|
12
|
+
tags: ['live-safe'],
|
|
13
|
+
},
|
|
14
|
+
'loops.get': {
|
|
15
|
+
method: 'GET',
|
|
16
|
+
service: 'collector',
|
|
17
|
+
path: ({ id }) => `/api/v1/loops/${id}`,
|
|
18
|
+
tags: ['live-safe'],
|
|
19
|
+
},
|
|
20
|
+
'loops.events': {
|
|
21
|
+
method: 'STREAM',
|
|
22
|
+
service: 'collector',
|
|
23
|
+
path: ({ id }) => `/api/v1/loops/${id}/events`,
|
|
24
|
+
tags: ['live-safe'],
|
|
25
|
+
},
|
|
26
|
+
};
|