quoxcli 0.0.0-stage → 0.3.1
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 +144 -2
- package/bin/quox.js +265 -0
- package/bin/quoxon.js +8 -0
- package/lib/api/endpoints/admin.js +151 -0
- package/lib/api/endpoints/aee.js +38 -0
- package/lib/api/endpoints/agent-attach.js +126 -0
- package/lib/api/endpoints/agent-schedules.js +26 -0
- package/lib/api/endpoints/agents.js +63 -0
- package/lib/api/endpoints/assistants.js +62 -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/away.js +15 -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 +61 -0
- package/lib/api/endpoints/consent.js +26 -0
- package/lib/api/endpoints/contactsq.js +68 -0
- package/lib/api/endpoints/conversations.js +46 -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 +45 -0
- package/lib/api/endpoints/fetchAllowlist.js +27 -0
- package/lib/api/endpoints/file.js +20 -0
- package/lib/api/endpoints/files.js +40 -0
- package/lib/api/endpoints/github.js +21 -0
- package/lib/api/endpoints/governance.js +43 -0
- package/lib/api/endpoints/hat.js +66 -0
- package/lib/api/endpoints/inbox.js +52 -0
- package/lib/api/endpoints/inboxq.js +120 -0
- package/lib/api/endpoints/index.js +242 -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 +94 -0
- package/lib/api/endpoints/mfa.js +32 -0
- package/lib/api/endpoints/mind.js +13 -0
- package/lib/api/endpoints/mon.js +184 -0
- package/lib/api/endpoints/notesq.js +43 -0
- package/lib/api/endpoints/objectives.js +68 -0
- package/lib/api/endpoints/orgs.js +38 -0
- package/lib/api/endpoints/plugins.js +152 -0
- package/lib/api/endpoints/powers.js +75 -0
- package/lib/api/endpoints/presence.js +33 -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 +121 -0
- package/lib/api/endpoints/quoxseo.js +114 -0
- package/lib/api/endpoints/reach.js +47 -0
- package/lib/api/endpoints/router.js +17 -0
- package/lib/api/endpoints/runs.js +38 -0
- package/lib/api/endpoints/safety.js +53 -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 +200 -0
- package/lib/api/endpoints/sso.js +67 -0
- package/lib/api/endpoints/stepup.js +20 -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 +96 -0
- package/lib/api/endpoints/user-library.js +41 -0
- package/lib/api/endpoints/users.js +20 -0
- package/lib/api/endpoints/v1.js +585 -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 +47 -0
- package/lib/api/endpoints/webhooks.js +46 -0
- package/lib/api/endpoints/workflows.js +169 -0
- package/lib/api/endpoints/x.js +32 -0
- package/lib/api/endpoints.js +15 -0
- package/lib/commands/actions.js +61 -0
- package/lib/commands/admin.js +375 -0
- package/lib/commands/aee.js +99 -0
- package/lib/commands/agent.js +337 -0
- package/lib/commands/agentAttach.js +1528 -0
- package/lib/commands/approvals.js +119 -0
- package/lib/commands/aside.js +24 -0
- package/lib/commands/ask.js +144 -0
- package/lib/commands/assistant.js +169 -0
- package/lib/commands/auth.js +464 -0
- package/lib/commands/awareness.js +88 -0
- package/lib/commands/backup.js +377 -0
- package/lib/commands/brain.js +1085 -0
- package/lib/commands/budget.js +241 -0
- package/lib/commands/build.js +170 -0
- package/lib/commands/calendar.js +216 -0
- package/lib/commands/capabilities.js +34 -0
- package/lib/commands/chat.js +295 -0
- package/lib/commands/claude.js +380 -0
- package/lib/commands/config-cmd.js +106 -0
- package/lib/commands/consent.js +84 -0
- package/lib/commands/contacts.js +1016 -0
- package/lib/commands/contactsSelftest.js +132 -0
- package/lib/commands/conversation.js +105 -0
- package/lib/commands/dashboard.js +43 -0
- package/lib/commands/department.js +96 -0
- package/lib/commands/dev.js +620 -0
- package/lib/commands/devResident.js +326 -0
- package/lib/commands/devSupervisor.js +1062 -0
- package/lib/commands/discord.js +132 -0
- package/lib/commands/doctor.js +181 -0
- package/lib/commands/domain.js +114 -0
- package/lib/commands/done.js +347 -0
- package/lib/commands/engagement.js +597 -0
- package/lib/commands/entity.js +119 -0
- package/lib/commands/facebook.js +212 -0
- package/lib/commands/fetchAllowlist.js +71 -0
- package/lib/commands/file.js +165 -0
- package/lib/commands/fleet.js +1189 -0
- package/lib/commands/governance.js +647 -0
- package/lib/commands/gripe.js +355 -0
- package/lib/commands/hat.js +374 -0
- package/lib/commands/helpers.js +96 -0
- package/lib/commands/hyperion.js +58 -0
- package/lib/commands/inbox.js +173 -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 +139 -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 +597 -0
- package/lib/commands/mail.js +531 -0
- package/lib/commands/memory.js +361 -0
- package/lib/commands/mind.js +71 -0
- package/lib/commands/mon.js +581 -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 +123 -0
- package/lib/commands/objective.js +240 -0
- package/lib/commands/offload.js +89 -0
- package/lib/commands/onboard.js +329 -0
- package/lib/commands/open.js +56 -0
- package/lib/commands/org.js +276 -0
- package/lib/commands/peek.js +28 -0
- package/lib/commands/plan.js +944 -0
- package/lib/commands/plugin-doctor.js +1091 -0
- package/lib/commands/plugin.js +649 -0
- package/lib/commands/policy.js +78 -0
- package/lib/commands/powers.js +296 -0
- package/lib/commands/presence.js +89 -0
- package/lib/commands/prompt.js +350 -0
- package/lib/commands/provider.js +159 -0
- package/lib/commands/qlarity.js +706 -0
- package/lib/commands/quoxbox.js +270 -0
- package/lib/commands/quoxchat.js +275 -0
- package/lib/commands/quoxseo.js +378 -0
- package/lib/commands/reach.js +159 -0
- package/lib/commands/role.js +286 -0
- package/lib/commands/router.js +77 -0
- package/lib/commands/rows.js +358 -0
- package/lib/commands/run.js +187 -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/server.js +292 -0
- package/lib/commands/service.js +89 -0
- package/lib/commands/settings.js +99 -0
- package/lib/commands/setup.js +569 -0
- package/lib/commands/skillManifest.js +113 -0
- package/lib/commands/skillRightsFormat.js +38 -0
- package/lib/commands/skills.js +687 -0
- package/lib/commands/slot.js +1451 -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 +142 -0
- package/lib/commands/tg.js +240 -0
- package/lib/commands/tiktok.js +218 -0
- package/lib/commands/tips.js +23 -0
- package/lib/commands/tool.js +304 -0
- package/lib/commands/trace.js +530 -0
- package/lib/commands/trigger.js +223 -0
- package/lib/commands/update.js +46 -0
- package/lib/commands/vault.js +1447 -0
- package/lib/commands/vm.js +237 -0
- package/lib/commands/voice.js +213 -0
- package/lib/commands/volt.js +570 -0
- package/lib/commands/walkthrough.js +32 -0
- package/lib/commands/watch.js +167 -0
- package/lib/commands/webhook.js +137 -0
- package/lib/commands/welcome.js +14 -0
- package/lib/commands/workflow.js +660 -0
- package/lib/commands/x.js +448 -0
- package/lib/core/actingAs.js +136 -0
- package/lib/core/activeSummary.js +186 -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/aside.js +54 -0
- package/lib/core/askDecision.js +60 -0
- package/lib/core/auth.js +501 -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/cliBuild.js +62 -0
- package/lib/core/client.js +693 -0
- package/lib/core/commandRegistrars.js +121 -0
- package/lib/core/completions.js +163 -0
- package/lib/core/config.js +669 -0
- package/lib/core/confirm.js +37 -0
- package/lib/core/customHats.js +168 -0
- package/lib/core/deeplinks.js +76 -0
- package/lib/core/doneEngineFetch.js +227 -0
- package/lib/core/errors.js +441 -0
- package/lib/core/global-flags.js +190 -0
- package/lib/core/governedSession.js +402 -0
- package/lib/core/hyperion.js +102 -0
- package/lib/core/inboxResolution.js +65 -0
- package/lib/core/lazyCommands.js +122 -0
- package/lib/core/liveSessionsReport.js +112 -0
- package/lib/core/offload.js +504 -0
- package/lib/core/org-override.js +52 -0
- package/lib/core/orgResolve.js +70 -0
- package/lib/core/output.js +239 -0
- package/lib/core/peek.js +126 -0
- package/lib/core/prodEnv.js +7 -0
- package/lib/core/profileUsers.js +51 -0
- package/lib/core/promptCancel.js +18 -0
- package/lib/core/quoxglyph.js +158 -0
- package/lib/core/repoPath.js +11 -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 +106 -0
- package/lib/core/rootOptions.js +39 -0
- package/lib/core/router.js +168 -0
- package/lib/core/selfUpdate.js +188 -0
- package/lib/core/sessionHeartbeat.js +192 -0
- package/lib/core/sessionsOverview.js +224 -0
- package/lib/core/slotKeeper.js +527 -0
- package/lib/core/slotWake.js +120 -0
- package/lib/core/supervisorEngine.js +933 -0
- package/lib/core/systemdInstaller.js +256 -0
- package/lib/core/version.js +87 -0
- package/lib/core/vm.js +361 -0
- package/lib/core/vmTui.js +86 -0
- package/lib/core/walkthrough.js +35 -0
- package/lib/hyperion/deck.js +29 -0
- package/lib/lucid/LucidCard.jsx +68 -0
- package/lib/lucid/LucidIntro.jsx +92 -0
- package/lib/lucid/blind.js +71 -0
- package/lib/lucid/cards.js +86 -0
- package/lib/lucid/deck.js +32 -0
- package/lib/lucid/fmt.js +139 -0
- package/lib/lucid/markdown.js +81 -0
- package/lib/lucid/motion.js +56 -0
- package/lib/lucid/sitrep.js +173 -0
- package/lib/plugins/loader.js +93 -0
- package/lib/quoxon/activity.js +116 -0
- package/lib/quoxon/aocl.js +117 -0
- package/lib/quoxon/api.js +952 -0
- package/lib/quoxon/app.js +4032 -0
- package/lib/quoxon/approvalFacts.js +94 -0
- package/lib/quoxon/approvalsView.js +325 -0
- package/lib/quoxon/asideView.js +40 -0
- package/lib/quoxon/ask.js +121 -0
- package/lib/quoxon/away.js +52 -0
- package/lib/quoxon/bang.js +224 -0
- package/lib/quoxon/bulkRisk.js +17 -0
- package/lib/quoxon/capabilities.js +82 -0
- package/lib/quoxon/cells.js +53 -0
- package/lib/quoxon/commandShort.js +112 -0
- package/lib/quoxon/commands.js +479 -0
- package/lib/quoxon/connect.js +654 -0
- package/lib/quoxon/connectCard.js +45 -0
- package/lib/quoxon/consent.js +86 -0
- package/lib/quoxon/context.js +68 -0
- package/lib/quoxon/copy.js +34 -0
- package/lib/quoxon/countdownLine.js +11 -0
- package/lib/quoxon/demo.autoplay.js +29 -0
- package/lib/quoxon/demo.fixtures.js +24 -0
- package/lib/quoxon/demo.js +76 -0
- package/lib/quoxon/devObserver.js +20 -0
- package/lib/quoxon/dividerAocl.js +191 -0
- package/lib/quoxon/dividerRule.js +57 -0
- package/lib/quoxon/dragonModes.js +150 -0
- package/lib/quoxon/dragonView.js +41 -0
- package/lib/quoxon/earlyInput.js +40 -0
- package/lib/quoxon/echo.js +15 -0
- package/lib/quoxon/egg.js +36 -0
- package/lib/quoxon/events.js +677 -0
- package/lib/quoxon/feedback.js +50 -0
- package/lib/quoxon/gallery.js +237 -0
- package/lib/quoxon/handoffOffer.js +78 -0
- package/lib/quoxon/hatSwitch.js +37 -0
- package/lib/quoxon/headless.js +161 -0
- package/lib/quoxon/hostUrls.js +41 -0
- package/lib/quoxon/indicator.js +197 -0
- package/lib/quoxon/intent.js +52 -0
- package/lib/quoxon/keys.js +164 -0
- package/lib/quoxon/launcher.js +103 -0
- package/lib/quoxon/main.js +176 -0
- package/lib/quoxon/markdown.js +341 -0
- package/lib/quoxon/markdownSettle.js +19 -0
- package/lib/quoxon/matrixDomains.json +46 -0
- package/lib/quoxon/mentions.js +90 -0
- package/lib/quoxon/mind.js +103 -0
- package/lib/quoxon/mode.js +46 -0
- package/lib/quoxon/model.js +311 -0
- package/lib/quoxon/modelPrefs.js +345 -0
- package/lib/quoxon/motion/clock.js +70 -0
- package/lib/quoxon/motion/color.js +35 -0
- package/lib/quoxon/motion/frame.js +14 -0
- package/lib/quoxon/motion/level.js +91 -0
- package/lib/quoxon/motion/reveal.js +54 -0
- package/lib/quoxon/motion/ring.js +79 -0
- package/lib/quoxon/mouse.js +211 -0
- package/lib/quoxon/noai.js +57 -0
- package/lib/quoxon/objects/agent.js +61 -0
- package/lib/quoxon/objects/away.js +72 -0
- package/lib/quoxon/objects/crystal.js +100 -0
- package/lib/quoxon/objects/fetch.js +182 -0
- package/lib/quoxon/objects/fleet.js +149 -0
- package/lib/quoxon/objects/health.js +186 -0
- package/lib/quoxon/objects/index.js +106 -0
- package/lib/quoxon/objects/ladder.js +71 -0
- package/lib/quoxon/objects/memory.js +44 -0
- package/lib/quoxon/objects/mirror.js +137 -0
- package/lib/quoxon/objects/model.js +118 -0
- package/lib/quoxon/objects/peek.js +17 -0
- package/lib/quoxon/objects/proof.js +110 -0
- package/lib/quoxon/objects/prove.js +130 -0
- package/lib/quoxon/objects/replay.js +125 -0
- package/lib/quoxon/objects/sitrep.js +58 -0
- package/lib/quoxon/objects/skill.js +105 -0
- package/lib/quoxon/objects/view.js +87 -0
- package/lib/quoxon/objects/workflow.js +119 -0
- package/lib/quoxon/observers.js +42 -0
- package/lib/quoxon/onboarding/copy.js +263 -0
- package/lib/quoxon/onboarding/credential.js +108 -0
- package/lib/quoxon/onboarding/detect.js +22 -0
- package/lib/quoxon/onboarding/dockerOffer.js +45 -0
- package/lib/quoxon/onboarding/failureCause.js +33 -0
- package/lib/quoxon/onboarding/finish.js +134 -0
- package/lib/quoxon/onboarding/index.js +94 -0
- package/lib/quoxon/onboarding/installRunner.js +284 -0
- package/lib/quoxon/onboarding/intent.js +53 -0
- package/lib/quoxon/onboarding/journey.js +73 -0
- package/lib/quoxon/onboarding/preflight.js +156 -0
- package/lib/quoxon/onboarding/probe.js +65 -0
- package/lib/quoxon/onboarding/runner.js +58 -0
- package/lib/quoxon/onboarding/view.js +682 -0
- package/lib/quoxon/orgLabel.js +10 -0
- package/lib/quoxon/orgSwitch.js +33 -0
- package/lib/quoxon/ownBroadcast.js +22 -0
- package/lib/quoxon/palette.js +43 -0
- package/lib/quoxon/print.js +98 -0
- package/lib/quoxon/profileSwitch.js +53 -0
- package/lib/quoxon/promptHistory.js +41 -0
- package/lib/quoxon/providers.js +48 -0
- package/lib/quoxon/qart.js +348 -0
- package/lib/quoxon/qdragon.js +410 -0
- package/lib/quoxon/qdragonFly.js +61 -0
- package/lib/quoxon/qdragonScenes.js +282 -0
- package/lib/quoxon/qeyes.js +213 -0
- package/lib/quoxon/qglyph.js +143 -0
- package/lib/quoxon/qhello.js +58 -0
- package/lib/quoxon/qmotion.js +132 -0
- package/lib/quoxon/render.js +1167 -0
- package/lib/quoxon/resend.js +72 -0
- package/lib/quoxon/roster.js +307 -0
- package/lib/quoxon/route.js +39 -0
- package/lib/quoxon/rows.js +711 -0
- package/lib/quoxon/rowsStore.js +80 -0
- package/lib/quoxon/rules.js +130 -0
- package/lib/quoxon/screenContext.js +150 -0
- package/lib/quoxon/screenFrames.js +254 -0
- package/lib/quoxon/session.js +238 -0
- package/lib/quoxon/sessionDead.js +17 -0
- package/lib/quoxon/signin.js +125 -0
- package/lib/quoxon/skills.js +30 -0
- package/lib/quoxon/slash/agents.js +112 -0
- package/lib/quoxon/slash/argSources.js +65 -0
- package/lib/quoxon/slash/args.js +65 -0
- package/lib/quoxon/slash/automate.js +89 -0
- package/lib/quoxon/slash/broadcast.js +140 -0
- package/lib/quoxon/slash/broadcastRun.js +108 -0
- package/lib/quoxon/slash/card.js +30 -0
- package/lib/quoxon/slash/challenge.js +114 -0
- package/lib/quoxon/slash/cliCommand.js +53 -0
- package/lib/quoxon/slash/cliLeaves.json +948 -0
- package/lib/quoxon/slash/compact.js +90 -0
- package/lib/quoxon/slash/confirm.js +30 -0
- package/lib/quoxon/slash/crystallize.js +69 -0
- package/lib/quoxon/slash/dashboard.js +136 -0
- package/lib/quoxon/slash/draft.js +54 -0
- package/lib/quoxon/slash/hatWalk.js +206 -0
- package/lib/quoxon/slash/inverses.js +77 -0
- package/lib/quoxon/slash/killer.js +24 -0
- package/lib/quoxon/slash/killerApi.js +16 -0
- package/lib/quoxon/slash/ledger.js +88 -0
- package/lib/quoxon/slash/listView.js +30 -0
- package/lib/quoxon/slash/modelCmd.js +261 -0
- package/lib/quoxon/slash/palette.js +118 -0
- package/lib/quoxon/slash/paletteController.js +169 -0
- package/lib/quoxon/slash/panels.js +116 -0
- package/lib/quoxon/slash/picker.js +56 -0
- package/lib/quoxon/slash/restart.js +202 -0
- package/lib/quoxon/slash/resume.js +59 -0
- package/lib/quoxon/slash/rowCmd.js +157 -0
- package/lib/quoxon/slash/rowWalk.js +175 -0
- package/lib/quoxon/slash/settings.js +60 -0
- package/lib/quoxon/slash/spawn.js +177 -0
- package/lib/quoxon/slash/stepUp.js +274 -0
- package/lib/quoxon/slash/stepUpCard.js +60 -0
- package/lib/quoxon/slash/stepUpCmds.js +78 -0
- package/lib/quoxon/slash/undoApi.js +38 -0
- package/lib/quoxon/slash/undoCmd.js +49 -0
- package/lib/quoxon/slash/undoWish.js +15 -0
- package/lib/quoxon/slash/watch.js +164 -0
- package/lib/quoxon/slash/wish.js +23 -0
- package/lib/quoxon/slash/wishCmd.js +32 -0
- package/lib/quoxon/slotChat.js +300 -0
- package/lib/quoxon/slotFormat.js +195 -0
- package/lib/quoxon/slotRun.js +131 -0
- package/lib/quoxon/sound/index.js +186 -0
- package/lib/quoxon/sound/mapping.js +120 -0
- package/lib/quoxon/sound/output.js +52 -0
- package/lib/quoxon/sound/synth.js +122 -0
- package/lib/quoxon/stray.js +22 -0
- package/lib/quoxon/suggestCommand.js +59 -0
- package/lib/quoxon/term.js +141 -0
- package/lib/quoxon/textBuffer.js +416 -0
- package/lib/quoxon/theme.js +286 -0
- package/lib/quoxon/tips.js +433 -0
- package/lib/quoxon/toolError.js +41 -0
- package/lib/quoxon/transcript.js +188 -0
- package/lib/quoxon/web/qface.js +89 -0
- package/lib/quoxon/welcome.js +52 -0
- package/lib/quoxon/whatsnew.js +136 -0
- package/lib/quoxon/whatsnew.jsonl +89 -0
- package/lib/quoxon/windowOrg.js +113 -0
- package/lib/server/diag.js +129 -0
- package/lib/server/doctor.js +71 -0
- package/lib/server/install.js +149 -0
- package/lib/server/pluginEnable.js +161 -0
- package/lib/server/skew.js +56 -0
- package/lib/server/snapshot.js +131 -0
- package/lib/server/status.js +128 -0
- package/lib/server/sys.js +65 -0
- package/lib/server/uninstall.js +63 -0
- package/lib/server/update.js +234 -0
- package/lib/toolOutputShape.js +315 -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/HyperionDeck.jsx +79 -0
- package/lib/tui/views/InboxView.jsx +228 -0
- package/lib/tui/views/LucidDeck.jsx +719 -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 +75 -4
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Systemd USER unit installer for the resident supervisor, Option A
|
|
3
|
+
* persistence (DEVSUITE-DEVMODE follow-on, quox#453 phase 15 follow-on).
|
|
4
|
+
*
|
|
5
|
+
* A resident's `quox dev supervisor run` proved out one-shot passes; this
|
|
6
|
+
* module is the delivery half: a `Restart=always` systemd --user unit so the
|
|
7
|
+
* runner answers its slot channel with no session open and comes back after
|
|
8
|
+
* a crash, a logout, or a reboot (the last of those needs `loginctl
|
|
9
|
+
* enable-linger`, see installSupervisorService below).
|
|
10
|
+
*
|
|
11
|
+
* GOVERNANCE NOTE: installing this unit is deliberately NOT the autonomy
|
|
12
|
+
* grant. The unit only ever answers a message when the human-gated
|
|
13
|
+
* server-side switch (`quox dev supervisor enable`, requireHumanAdmin on the
|
|
14
|
+
* collector) is on, see supervisorEngine.js's kill-switch check in
|
|
15
|
+
* runPollOnce. A resident may install its own service on its own host (the
|
|
16
|
+
* scoped self-service pattern), while a human still decides whether it may
|
|
17
|
+
* act. Installing the unit and being allowed to act are two different
|
|
18
|
+
* switches on purpose.
|
|
19
|
+
*
|
|
20
|
+
* Every systemctl/loginctl call goes through one injectable `execFn` seam
|
|
21
|
+
* (see realExecFn below) so this is fully testable without touching the
|
|
22
|
+
* real system: tests pass a fake execFn and never spawn systemctl.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { execFile } from 'node:child_process';
|
|
26
|
+
import { promisify } from 'node:util';
|
|
27
|
+
import { homedir } from 'node:os';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
|
|
30
|
+
const execFileAsync = promisify(execFile);
|
|
31
|
+
|
|
32
|
+
export const SERVICE_NAME = 'quox-resident-supervisor.service';
|
|
33
|
+
export const DEFAULT_RESTART_SEC = 10;
|
|
34
|
+
|
|
35
|
+
// Item 2 (found by the acceptance owner driving this on a real host,
|
|
36
|
+
// 2026-08-23): `systemctl --user enable --now` reporting success only
|
|
37
|
+
// proves systemd ACCEPTED the unit, not that it stayed up. A unit whose
|
|
38
|
+
// ExecStart dies immediately (the item 1 slot bug is exactly this) is
|
|
39
|
+
// already crash-looping under Restart=always by the time enable returns.
|
|
40
|
+
// Give it a few seconds, then read the live state back through the same
|
|
41
|
+
// injectable execFn seam before calling install a success.
|
|
42
|
+
export const DEFAULT_VERIFY_DELAY_MS = 3000;
|
|
43
|
+
|
|
44
|
+
export function defaultUnitDir() {
|
|
45
|
+
return join(homedir(), '.config', 'systemd', 'user');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function defaultUnitPath() {
|
|
49
|
+
return join(defaultUnitDir(), SERVICE_NAME);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Build the unit file content. Pure string building, no I/O, so it is
|
|
54
|
+
* trivially snapshot-testable.
|
|
55
|
+
*
|
|
56
|
+
* `env`: extra `Environment=KEY=VALUE` lines, baked in at install time
|
|
57
|
+
* (item 1, live outage 2026-08-23). A systemd unit inherits none of the
|
|
58
|
+
* caller's shell environment, so this is how a resident's reach-back URLs
|
|
59
|
+
* (QUOX_URL/QUOX_AUTH_URL/QUOX_COLLECTOR_URL/QUOX_INSECURE) survive into a
|
|
60
|
+
* unit that runs with no login shell present. A value containing a newline
|
|
61
|
+
* or a quote would break the unit file's own line-based format, or the
|
|
62
|
+
* shell-like word-splitting systemd applies to `Environment=`, so it is
|
|
63
|
+
* refused outright rather than escaped: an unrenderable value is a defect
|
|
64
|
+
* in the caller, not something this function should paper over.
|
|
65
|
+
*/
|
|
66
|
+
export function buildUnitFile({ quoxBin, extraArgs = [], restartSec = DEFAULT_RESTART_SEC, home = homedir(), env = {} } = {}) {
|
|
67
|
+
const bin = quoxBin || 'quox';
|
|
68
|
+
const argsSuffix = extraArgs.length ? ` ${extraArgs.join(' ')}` : '';
|
|
69
|
+
const envLines = Object.entries(env || {}).map(([key, value]) => {
|
|
70
|
+
const v = String(value);
|
|
71
|
+
if (/[\n"']/.test(v)) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`buildUnitFile: refusing to bake ${key} into the unit: its value contains a newline or a quote character `
|
|
74
|
+
+ `(value withheld from this message). Fix the source value rather than escaping it.`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
return `Environment=${key}=${v}`;
|
|
78
|
+
});
|
|
79
|
+
return [
|
|
80
|
+
'[Unit]',
|
|
81
|
+
'Description=Quox resident supervisor (answers the slot channel headlessly, no session open)',
|
|
82
|
+
'After=network-online.target',
|
|
83
|
+
'Wants=network-online.target',
|
|
84
|
+
'',
|
|
85
|
+
'[Service]',
|
|
86
|
+
'Type=simple',
|
|
87
|
+
`ExecStart=${bin} dev supervisor run --service${argsSuffix}`,
|
|
88
|
+
'Restart=always',
|
|
89
|
+
`RestartSec=${restartSec}`,
|
|
90
|
+
`Environment=HOME=${home}`,
|
|
91
|
+
...envLines,
|
|
92
|
+
'',
|
|
93
|
+
'[Install]',
|
|
94
|
+
'WantedBy=default.target',
|
|
95
|
+
'',
|
|
96
|
+
].join('\n');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Real systemctl/loginctl runner (the non-test default). Never throws for a
|
|
101
|
+
* nonzero exit: callers read `.ok`/`.stderr`, so a failed `enable-linger`
|
|
102
|
+
* (e.g. no permission) is data, not a crash.
|
|
103
|
+
*/
|
|
104
|
+
export async function realExecFn(cmd, args) {
|
|
105
|
+
return execFileAsync(cmd, args, { timeout: 15000 });
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Parses `systemctl --user show <unit> -p A,B,C` stdout ("KEY=value" per line) into an object. */
|
|
109
|
+
function parseSystemctlShow(stdout) {
|
|
110
|
+
const props = {};
|
|
111
|
+
for (const line of String(stdout || '').split('\n')) {
|
|
112
|
+
const idx = line.indexOf('=');
|
|
113
|
+
if (idx === -1) continue;
|
|
114
|
+
props[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
|
|
115
|
+
}
|
|
116
|
+
return props;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async function runExec(execFn, cmd, args) {
|
|
120
|
+
try {
|
|
121
|
+
const res = await execFn(cmd, args);
|
|
122
|
+
return { ok: true, code: 0, stdout: (res && res.stdout) || '', stderr: (res && res.stderr) || '' };
|
|
123
|
+
} catch (err) {
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
code: err && err.code != null ? err.code : 1,
|
|
127
|
+
stdout: (err && err.stdout) || '',
|
|
128
|
+
stderr: (err && (err.stderr || err.message)) || String(err),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Write the unit, reload the daemon, enable + start it now, and attempt
|
|
135
|
+
* linger. Every step's outcome is reported back rather than thrown, because
|
|
136
|
+
* a partial success (unit written, enabled, but linger refused) is the
|
|
137
|
+
* single most important case this reports honestly: the service DOES start
|
|
138
|
+
* now, but will not survive a reboot or logout until linger is granted.
|
|
139
|
+
*/
|
|
140
|
+
export async function installSupervisorService({
|
|
141
|
+
execFn,
|
|
142
|
+
writeFileFn,
|
|
143
|
+
mkdirFn,
|
|
144
|
+
unitPath = defaultUnitPath(),
|
|
145
|
+
unitDir = defaultUnitDir(),
|
|
146
|
+
unitContent,
|
|
147
|
+
user,
|
|
148
|
+
// Injectable so tests never wait the real delay. Defaults to a real sleep
|
|
149
|
+
// outside tests, same seam discipline as execFn/writeFileFn/mkdirFn.
|
|
150
|
+
sleepFn = (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
151
|
+
verifyDelayMs = DEFAULT_VERIFY_DELAY_MS,
|
|
152
|
+
}) {
|
|
153
|
+
mkdirFn(unitDir, { recursive: true });
|
|
154
|
+
writeFileFn(unitPath, unitContent);
|
|
155
|
+
|
|
156
|
+
const reload = await runExec(execFn, 'systemctl', ['--user', 'daemon-reload']);
|
|
157
|
+
const enable = await runExec(execFn, 'systemctl', ['--user', 'enable', '--now', SERVICE_NAME]);
|
|
158
|
+
const linger = await runExec(execFn, 'loginctl', ['enable-linger', user]);
|
|
159
|
+
|
|
160
|
+
// Item 2: post-start verification. Only meaningful once `enable --now`
|
|
161
|
+
// itself reported success — if enable failed outright there is nothing
|
|
162
|
+
// running to crash-loop, and the enable_error above already says so.
|
|
163
|
+
let verified = false;
|
|
164
|
+
let active = false;
|
|
165
|
+
let restartCount = null;
|
|
166
|
+
let crashLoop = false;
|
|
167
|
+
let crashJournal = null;
|
|
168
|
+
if (enable.ok) {
|
|
169
|
+
await sleepFn(verifyDelayMs);
|
|
170
|
+
const show = await runExec(execFn, 'systemctl', ['--user', 'show', SERVICE_NAME, '-p', 'NRestarts,ActiveState,SubState']);
|
|
171
|
+
verified = true;
|
|
172
|
+
if (show.ok) {
|
|
173
|
+
const props = parseSystemctlShow(show.stdout);
|
|
174
|
+
active = props.ActiveState === 'active';
|
|
175
|
+
const n = Number(props.NRestarts);
|
|
176
|
+
restartCount = Number.isFinite(n) ? n : null;
|
|
177
|
+
// Restart=always means one crash silently reads as "started fine"
|
|
178
|
+
// unless something checks back: any restart already counted, or a
|
|
179
|
+
// state that isn't active, in our short observation window is a
|
|
180
|
+
// crash loop, not a success, however cheerfully `enable --now` read.
|
|
181
|
+
crashLoop = !active || (restartCount != null && restartCount > 0);
|
|
182
|
+
} else {
|
|
183
|
+
// Could not read the live state back at all: never claim success on
|
|
184
|
+
// silence — same "an error body is not data" discipline as the rest
|
|
185
|
+
// of this codebase's proof-before-claim rule.
|
|
186
|
+
crashLoop = true;
|
|
187
|
+
}
|
|
188
|
+
if (crashLoop) {
|
|
189
|
+
const journal = await runExec(execFn, 'journalctl', ['--user', '-u', SERVICE_NAME, '-n', '20', '--no-pager']);
|
|
190
|
+
crashJournal = journal.ok ? journal.stdout : null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
unit_path: unitPath,
|
|
196
|
+
daemon_reloaded: reload.ok,
|
|
197
|
+
daemon_reload_error: reload.ok ? null : (reload.stderr || `exit ${reload.code}`),
|
|
198
|
+
enabled: enable.ok,
|
|
199
|
+
enable_error: enable.ok ? null : (enable.stderr || `exit ${enable.code}`),
|
|
200
|
+
linger_enabled: linger.ok,
|
|
201
|
+
linger_error: linger.ok ? null : (linger.stderr || `exit ${linger.code}`),
|
|
202
|
+
verified,
|
|
203
|
+
active,
|
|
204
|
+
restart_count: restartCount,
|
|
205
|
+
crash_loop: crashLoop,
|
|
206
|
+
crash_journal: crashJournal,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export async function uninstallSupervisorService({
|
|
211
|
+
execFn,
|
|
212
|
+
existsFn,
|
|
213
|
+
unlinkFn,
|
|
214
|
+
unitPath = defaultUnitPath(),
|
|
215
|
+
}) {
|
|
216
|
+
const disable = await runExec(execFn, 'systemctl', ['--user', 'disable', '--now', SERVICE_NAME]);
|
|
217
|
+
|
|
218
|
+
let removed = false;
|
|
219
|
+
if (existsFn(unitPath)) {
|
|
220
|
+
unlinkFn(unitPath);
|
|
221
|
+
removed = true;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const reload = await runExec(execFn, 'systemctl', ['--user', 'daemon-reload']);
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
disabled: disable.ok,
|
|
228
|
+
disable_error: disable.ok ? null : (disable.stderr || `exit ${disable.code}`),
|
|
229
|
+
unit_removed: removed,
|
|
230
|
+
daemon_reloaded: reload.ok,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Read-only install/enable/active/linger report for `quox dev supervisor
|
|
236
|
+
* status`. Never throws: an unreadable systemctl/loginctl reports as
|
|
237
|
+
* false/unknown rather than crashing a status check.
|
|
238
|
+
*/
|
|
239
|
+
export async function getServiceInstallStatus({
|
|
240
|
+
execFn,
|
|
241
|
+
existsFn,
|
|
242
|
+
unitPath = defaultUnitPath(),
|
|
243
|
+
user,
|
|
244
|
+
}) {
|
|
245
|
+
const installed = existsFn(unitPath);
|
|
246
|
+
const enabledRes = await runExec(execFn, 'systemctl', ['--user', 'is-enabled', SERVICE_NAME]);
|
|
247
|
+
const activeRes = await runExec(execFn, 'systemctl', ['--user', 'is-active', SERVICE_NAME]);
|
|
248
|
+
const lingerRes = await runExec(execFn, 'loginctl', ['show-user', user, '--property=Linger', '--value']);
|
|
249
|
+
|
|
250
|
+
return {
|
|
251
|
+
installed,
|
|
252
|
+
enabled: enabledRes.stdout.trim() === 'enabled',
|
|
253
|
+
active: activeRes.stdout.trim() === 'active',
|
|
254
|
+
linger: lingerRes.stdout.trim().toLowerCase() === 'yes',
|
|
255
|
+
};
|
|
256
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI version + drift resolution — shared so `quox --version` (bin/quox.js)
|
|
3
|
+
* and `quox doctor` (commands/doctor.js) report the SAME facts and can never
|
|
4
|
+
* disagree about which build is running. Closes quoxai/quox#610.
|
|
5
|
+
*
|
|
6
|
+
* Every git call is fully guarded (stderr discarded, failure swallowed) so
|
|
7
|
+
* version/drift resolution can never break a command: a plain-package install
|
|
8
|
+
* with no .git, a missing git binary, or a detached worktree all degrade to a
|
|
9
|
+
* sensible fallback rather than throwing.
|
|
10
|
+
*
|
|
11
|
+
* Note on cost: bin/quox.js keeps its argv guard at the CALL SITE (it only
|
|
12
|
+
* calls resolveCliVersion() when --version/-V is actually present) so normal
|
|
13
|
+
* commands stay zero-cost. doctor calls both freely — the user explicitly ran
|
|
14
|
+
* a diagnostic, so spawning git is expected there.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { execFileSync } from 'node:child_process';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { dirname, resolve } from 'node:path';
|
|
20
|
+
|
|
21
|
+
export const BASE_VERSION = '0.3.1';
|
|
22
|
+
|
|
23
|
+
// The CLI source root (…/cli). version.js lives at cli/lib/core/, so two
|
|
24
|
+
// levels up is the tree whose HEAD identifies the running build.
|
|
25
|
+
const CLI_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
26
|
+
|
|
27
|
+
function git(args) {
|
|
28
|
+
return execFileSync('git', ['-C', CLI_ROOT, ...args], {
|
|
29
|
+
encoding: 'utf8',
|
|
30
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
31
|
+
}).trim();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Human version string: "0.1.0 (7bac4f67, session/vulcan)" — or bare
|
|
36
|
+
* "0.1.0" when git facts are unavailable. Unlike the drift check this never
|
|
37
|
+
* needs origin/main, so it works on a shallow or rem-less clone.
|
|
38
|
+
*/
|
|
39
|
+
export function resolveCliVersion() {
|
|
40
|
+
try {
|
|
41
|
+
const sha = git(['rev-parse', '--short', 'HEAD']);
|
|
42
|
+
if (!sha) return BASE_VERSION;
|
|
43
|
+
let ref = '';
|
|
44
|
+
try { ref = git(['rev-parse', '--abbrev-ref', 'HEAD']); } catch { /* detached HEAD / no ref */ }
|
|
45
|
+
const label = ref && ref !== 'HEAD' ? ref : 'detached';
|
|
46
|
+
return `${BASE_VERSION} (${sha}, ${label})`;
|
|
47
|
+
} catch {
|
|
48
|
+
return BASE_VERSION;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Drift of the running worktree vs the LAST-FETCHED origin/main.
|
|
54
|
+
*
|
|
55
|
+
* Deliberately does NOT fetch: a health check must not hang on a slow remote
|
|
56
|
+
* or block on credentials. The count therefore reflects the last fetch, which
|
|
57
|
+
* the detail line states plainly. This mirrors scripts/quox-cli-refresh.sh's
|
|
58
|
+
* `git rev-list --count HEAD..origin/main` so doctor and the refresh tool agree
|
|
59
|
+
* (#607 shipped the refresh side).
|
|
60
|
+
*
|
|
61
|
+
* @returns {{status:'ok'|'stale'|'unknown'|'skip', detail:string}}
|
|
62
|
+
* ok — HEAD == origin/main
|
|
63
|
+
* stale — behind origin/main; nudge quox-cli-refresh
|
|
64
|
+
* unknown — no origin/main ref locally (never fetched here)
|
|
65
|
+
* skip — not a git worktree (plain-package install)
|
|
66
|
+
*/
|
|
67
|
+
export function checkCliDrift() {
|
|
68
|
+
let head;
|
|
69
|
+
try {
|
|
70
|
+
head = git(['rev-parse', 'HEAD']);
|
|
71
|
+
} catch {
|
|
72
|
+
return { status: 'skip', detail: 'not a git worktree' };
|
|
73
|
+
}
|
|
74
|
+
let remote;
|
|
75
|
+
try {
|
|
76
|
+
remote = git(['rev-parse', 'origin/main']);
|
|
77
|
+
} catch {
|
|
78
|
+
return { status: 'unknown', detail: 'no origin/main ref (never fetched here)' };
|
|
79
|
+
}
|
|
80
|
+
if (head === remote) return { status: 'ok', detail: 'up to date with origin/main' };
|
|
81
|
+
let behind = '?';
|
|
82
|
+
try { behind = git(['rev-list', '--count', 'HEAD..origin/main']); } catch { /* keep ? */ }
|
|
83
|
+
return {
|
|
84
|
+
status: 'stale',
|
|
85
|
+
detail: `${behind} commit(s) behind origin/main (run quox-cli-refresh) — reflects last fetch`,
|
|
86
|
+
};
|
|
87
|
+
}
|