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,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `quox done` — Quox DoneEngine from the terminal.
|
|
3
|
+
*
|
|
4
|
+
* The house gate is that nothing ships without CLI support, and the north star
|
|
5
|
+
* is Claude running Quox headless. That matters more here than for most
|
|
6
|
+
* surfaces: DoneEngine's primary users are AGENTS, not people. "Is this
|
|
7
|
+
* actually done?" is a question something asks before it acts, so a completion
|
|
8
|
+
* engine reachable only from a dashboard fails its own premise.
|
|
9
|
+
*
|
|
10
|
+
* This is a thin wrapper over the quox-gauge engine rather than a
|
|
11
|
+
* reimplementation. Two implementations of a rule set is how a rule set
|
|
12
|
+
* drifts, which is the thing DoneEngine exists to catch, so there is exactly
|
|
13
|
+
* one engine and the CLI shells out to it.
|
|
14
|
+
*
|
|
15
|
+
* ENGINE RESOLUTION (#456, extended by the fetch follow-on below): defaults
|
|
16
|
+
* to ~/quox-gauge/gauge.mjs, which only ever existed on the box quox-gauge
|
|
17
|
+
* was developed on, so every other dev-enabled host got a bare "not found"
|
|
18
|
+
* error. `quox dev enable` delivers the engine to /opt/quoxgauge and points
|
|
19
|
+
* QUOX_DONEENGINE_PATH at it via the generated CLI wrapper (see
|
|
20
|
+
* devServerRefresh.js), so a fresh dev-enabled host resolves it there
|
|
21
|
+
* without any local checkout.
|
|
22
|
+
*
|
|
23
|
+
* FETCH FOLLOW-ON: enable is correctly human-gated (requireHumanAdmin), so a
|
|
24
|
+
* RESIDENT agent with a missing or stale engine on a host nobody has run
|
|
25
|
+
* `quox dev enable` on had no self-service path — permanently stuck waiting
|
|
26
|
+
* on a human. `quox done fetch` closes that: it pulls the same public bundle
|
|
27
|
+
* (/download/quoxgauge-bundle.tar.gz) directly and installs it, no human in
|
|
28
|
+
* the loop, no new permission (see cli/lib/core/doneEngineFetch.js for the
|
|
29
|
+
* fetch/extract/verify logic). Resolution now also checks a user-local
|
|
30
|
+
* fallback (~/.local/share/quox/gauge/gauge.mjs), which is where fetch lands
|
|
31
|
+
* when /opt/quoxgauge is not writable and there is no passwordless sudo. A
|
|
32
|
+
* missing engine or packs directory names `quox done fetch` first (the
|
|
33
|
+
* self-service fix) and `quox dev enable` second.
|
|
34
|
+
*
|
|
35
|
+
* EXIT CODES are the contract, and `check` passes the engine's through
|
|
36
|
+
* unchanged:
|
|
37
|
+
* 0 CLEAR every gate in the pack passes and the running code agrees
|
|
38
|
+
* 1 REFUSED a named gate fails; reasons are printed
|
|
39
|
+
* 2 UNKNOWN insufficient evidence to say either way
|
|
40
|
+
*
|
|
41
|
+
* UNKNOWN is deliberately not folded into either neighbour. Treating "no
|
|
42
|
+
* evidence" as approval is the exact failure this engine was built after, and
|
|
43
|
+
* treating it as refusal trains people to ignore refusals.
|
|
44
|
+
*
|
|
45
|
+
* ADVISORY. `quox done check` never blocks anything. Whether DoneEngine may
|
|
46
|
+
* refuse a deploy is an open owner decision on the DONEENGINE stream, and a
|
|
47
|
+
* tool that started refusing other people's deploys before that was settled
|
|
48
|
+
* would be taking a governance power nobody granted it.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
import { spawnSync } from 'node:child_process';
|
|
52
|
+
import fs from 'node:fs';
|
|
53
|
+
import os from 'node:os';
|
|
54
|
+
import path from 'node:path';
|
|
55
|
+
import {
|
|
56
|
+
resolveFetchDestination,
|
|
57
|
+
fetchEngine,
|
|
58
|
+
inspectInstall,
|
|
59
|
+
OPT_GAUGE_DIR,
|
|
60
|
+
userLocalGaugeDir,
|
|
61
|
+
legacyGaugeDir,
|
|
62
|
+
} from '../core/doneEngineFetch.js';
|
|
63
|
+
import { printSuccess, printInfo } from '../core/output.js';
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Engine resolution order (see the FETCH FOLLOW-ON note above):
|
|
67
|
+
* 1. QUOX_DONEENGINE_PATH (explicit override, wins even if the file is
|
|
68
|
+
* missing — the honest "not found" error below still needs a concrete
|
|
69
|
+
* path to name)
|
|
70
|
+
* 2. /opt/quoxgauge/gauge.mjs — where `quox dev enable` and a sudo-capable
|
|
71
|
+
* `quox done fetch` both put it
|
|
72
|
+
* 3. ~/.local/share/quox/gauge/gauge.mjs — where `quox done fetch` puts it
|
|
73
|
+
* when /opt/quoxgauge is not writable and there is no passwordless sudo
|
|
74
|
+
* 4. ~/quox-gauge/gauge.mjs — legacy default, kept as the final fallback so
|
|
75
|
+
* the error message always names a concrete path
|
|
76
|
+
*
|
|
77
|
+
* Exported (rather than inlined into the ENGINE constant) so this order is
|
|
78
|
+
* unit-testable with an injected existsSync/env/home instead of the real
|
|
79
|
+
* filesystem.
|
|
80
|
+
*/
|
|
81
|
+
export function resolveEnginePath({ env = process.env, existsSync = fs.existsSync, home = os.homedir() } = {}) {
|
|
82
|
+
if (env.QUOX_DONEENGINE_PATH) return env.QUOX_DONEENGINE_PATH;
|
|
83
|
+
const optPath = path.join(OPT_GAUGE_DIR, 'gauge.mjs');
|
|
84
|
+
if (existsSync(optPath)) return optPath;
|
|
85
|
+
const userLocalPath = path.join(userLocalGaugeDir(home), 'gauge.mjs');
|
|
86
|
+
if (existsSync(userLocalPath)) return userLocalPath;
|
|
87
|
+
return path.join(legacyGaugeDir(home), 'gauge.mjs');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const ENGINE = resolveEnginePath();
|
|
91
|
+
|
|
92
|
+
function engineMissingMessage(engine) {
|
|
93
|
+
return `DoneEngine not found at ${engine}\n`
|
|
94
|
+
+ 'Self-heal: `quox done fetch` pulls the engine bundle straight from '
|
|
95
|
+
+ 'the collector, no human in the loop. Otherwise `quox dev enable` '
|
|
96
|
+
+ 'delivers it to /opt/quoxgauge as part of full dev-server '
|
|
97
|
+
+ 'provisioning. Or set QUOX_DONEENGINE_PATH to a checkout.\n';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function runEngine(args, engine = ENGINE) {
|
|
101
|
+
if (!fs.existsSync(engine)) {
|
|
102
|
+
process.stderr.write(engineMissingMessage(engine));
|
|
103
|
+
// 2, not 1: a missing engine is "cannot tell", not "refused".
|
|
104
|
+
return 2;
|
|
105
|
+
}
|
|
106
|
+
const r = spawnSync(process.execPath, [engine, ...args], { stdio: 'inherit' });
|
|
107
|
+
if (r.error) {
|
|
108
|
+
process.stderr.write(`DoneEngine failed to run: ${r.error.message}\n`);
|
|
109
|
+
return 2;
|
|
110
|
+
}
|
|
111
|
+
return r.status ?? 2;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* VISIBILITY GATE (#988 follow-on). Public installs do not ship DoneEngine
|
|
116
|
+
* (its bundle is built from the private quox-gauge repo and delivered to dev
|
|
117
|
+
* servers by `quox dev enable`), so listing `quox done` in their help
|
|
118
|
+
* advertises a command that can only fail. It is listed only when an engine
|
|
119
|
+
* is installed locally, decided from the filesystem alone with the same
|
|
120
|
+
* resolution the runner uses: building help never makes a network call.
|
|
121
|
+
* QUOX_HELP_INCLUDE_GATED=1 lists it regardless; the generators that scrape
|
|
122
|
+
* `--help` into the command trees set it so those trees do not depend on
|
|
123
|
+
* which host ran them.
|
|
124
|
+
*/
|
|
125
|
+
export function isDoneEngineInstalled({ env = process.env, home = os.homedir(), fsOps } = {}) {
|
|
126
|
+
const ops = fsOps || { existsSync: fs.existsSync, readdirSync: fs.readdirSync };
|
|
127
|
+
const engine = resolveEnginePath({ env, existsSync: ops.existsSync, home });
|
|
128
|
+
return inspectInstall(path.dirname(engine), ops).healthy;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function defaultExecFn(cmd, args) {
|
|
132
|
+
return spawnSync(cmd, args, { encoding: 'utf8' });
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function defaultIsWritable(dir) {
|
|
136
|
+
let probe = dir;
|
|
137
|
+
while (!fs.existsSync(probe)) {
|
|
138
|
+
const parent = path.dirname(probe);
|
|
139
|
+
if (parent === probe) break;
|
|
140
|
+
probe = parent;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
fs.accessSync(probe, fs.constants.W_OK);
|
|
144
|
+
return true;
|
|
145
|
+
} catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function defaultFsOps() {
|
|
151
|
+
return {
|
|
152
|
+
existsSync: fs.existsSync,
|
|
153
|
+
readdirSync: fs.readdirSync,
|
|
154
|
+
writeFileSync: fs.writeFileSync,
|
|
155
|
+
rmSync: fs.rmSync,
|
|
156
|
+
isWritable: defaultIsWritable,
|
|
157
|
+
mkdtemp: () => fs.mkdtempSync(path.join(os.tmpdir(), 'quoxgauge-backup-')),
|
|
158
|
+
tmpFile: () => path.join(os.tmpdir(), `quoxgauge-bundle-${process.pid}-${Date.now()}.tar.gz`),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export function registerDoneCommands(program, ctx = {}) {
|
|
163
|
+
const env = ctx.env || process.env;
|
|
164
|
+
const home = ctx.home || os.homedir();
|
|
165
|
+
// Tests inject fsOps/env/home; the real CLI keeps the import-time ENGINE.
|
|
166
|
+
const injected = !!(ctx.fsOps || ctx.env || ctx.home);
|
|
167
|
+
const currentEngine = () => (injected
|
|
168
|
+
? resolveEnginePath({ env, existsSync: (ctx.fsOps || fs).existsSync, home })
|
|
169
|
+
: ENGINE);
|
|
170
|
+
const visible = env.QUOX_HELP_INCLUDE_GATED === '1'
|
|
171
|
+
|| isDoneEngineInstalled({ env, home, fsOps: ctx.fsOps });
|
|
172
|
+
|
|
173
|
+
const fetchDeps = () => ({
|
|
174
|
+
execFn: ctx.execFn || defaultExecFn,
|
|
175
|
+
isWritable: ctx.isWritable || defaultIsWritable,
|
|
176
|
+
fsOps: ctx.fsOps || defaultFsOps(),
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Resolve a runnable engine for a subcommand. Present: use it, no network.
|
|
181
|
+
* Absent: try the existing fetch path once. A collector 404
|
|
182
|
+
* (DONEENGINE_NOT_SHIPPED) means this is a public install: refuse with that
|
|
183
|
+
* message and exit 2, having changed nothing. A bundle that IS available
|
|
184
|
+
* (a dev collector) installs and the freshly fetched engine runs.
|
|
185
|
+
*/
|
|
186
|
+
async function ensureEngine() {
|
|
187
|
+
const engine = currentEngine();
|
|
188
|
+
const exists = (ctx.fsOps || fs).existsSync(engine);
|
|
189
|
+
if (exists || !ctx.client || env.QUOX_DONEENGINE_PATH) return { engine };
|
|
190
|
+
const { execFn, isWritable, fsOps } = fetchDeps();
|
|
191
|
+
const { dest, needsSudo } = resolveFetchDestination({ env, isWritable, execFn });
|
|
192
|
+
try {
|
|
193
|
+
await fetchEngine({ dest, needsSudo, force: false, client: ctx.client, execFn, fsOps });
|
|
194
|
+
return { engine: path.join(dest, 'gauge.mjs') };
|
|
195
|
+
} catch (err) {
|
|
196
|
+
if (err.code === 'DONEENGINE_NOT_SHIPPED') {
|
|
197
|
+
process.stderr.write(`quox done: ${err.message}\n`);
|
|
198
|
+
return { code: 2 };
|
|
199
|
+
}
|
|
200
|
+
process.stderr.write(`quox done: engine fetch failed: ${err.message}\n`);
|
|
201
|
+
return { engine };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async function runGuarded(args) {
|
|
206
|
+
const r = await ensureEngine();
|
|
207
|
+
if (r.code !== undefined) return r.code;
|
|
208
|
+
return runEngine(args, r.engine);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const done = program
|
|
212
|
+
.command('done', { hidden: !visible })
|
|
213
|
+
.description('Quox DoneEngine: is this actually done, and what is the evidence?');
|
|
214
|
+
|
|
215
|
+
done
|
|
216
|
+
.command('check [subject]')
|
|
217
|
+
.description('Can this ship? exit 0 clear, 1 refused with reasons, 2 unknown. Advisory: never blocks.')
|
|
218
|
+
.option('--pack <id>', 'rule pack to judge against', 'launch-spine')
|
|
219
|
+
.option('--json', 'structured verdict for agents')
|
|
220
|
+
.option('--root <path>', 'judge <subject> in this repo, reading its own STATUS map with the selected pack (e.g. a plugin with --pack plugin)')
|
|
221
|
+
.action(async (subject, options) => {
|
|
222
|
+
const args = ['--can-ship', subject || 'all', '--pack', options.pack];
|
|
223
|
+
if (options.root) {
|
|
224
|
+
if (!subject) {
|
|
225
|
+
process.stderr.write('quox done check: --root needs a subject (the surface to judge in that repo).\n');
|
|
226
|
+
process.exitCode = 2;
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
args.push('--subject', subject, '--root', path.resolve(options.root));
|
|
230
|
+
}
|
|
231
|
+
if (options.json) args.push('--json');
|
|
232
|
+
process.exitCode = await runGuarded(args);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
done
|
|
236
|
+
.command('checklist [pack]')
|
|
237
|
+
.description('The builder checklist GENERATED from a pack (every gate the engine judges); --check verifies a doc that embeds it')
|
|
238
|
+
.option('--check <file>', 'exit 1 if the checklist block in this file has drifted from the pack')
|
|
239
|
+
.action(async (pack, options) => {
|
|
240
|
+
const args = ['--checklist', pack || 'plugin'];
|
|
241
|
+
if (options.check) args.push('--check', path.resolve(options.check));
|
|
242
|
+
process.exitCode = await runGuarded(args);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
done
|
|
246
|
+
.command('board')
|
|
247
|
+
.description('Estate scoreboard: every surface, score, attested gates, deploy state')
|
|
248
|
+
.option('--json', 'machine-readable, includes raw deploy state')
|
|
249
|
+
.option('--dod', 'per-surface gates, split by evidence class')
|
|
250
|
+
.option('--no-deploy', 'skip docker/git; Deployed Ready becomes unknown, which is not a pass')
|
|
251
|
+
.action(async (options) => {
|
|
252
|
+
const args = [];
|
|
253
|
+
if (options.json) args.push('--json');
|
|
254
|
+
if (options.dod) args.push('--dod');
|
|
255
|
+
if (options.deploy === false) args.push('--no-deploy');
|
|
256
|
+
process.exitCode = await runGuarded(args);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
done
|
|
260
|
+
.command('bar [pack]')
|
|
261
|
+
.description('One rule pack against its subjects: BOTH finish lines, build and deployed')
|
|
262
|
+
.option('--snapshot', 'append this reading to the snapshot history')
|
|
263
|
+
.option('--org <id>', 'measure FOR this org: plan evidence reads as it, the snapshot is stamped with it (default: the pack\'s own org field)')
|
|
264
|
+
.action(async (pack, options) => {
|
|
265
|
+
const args = pack ? ['--pack', pack] : ['--launch'];
|
|
266
|
+
if (options.snapshot) args.push('--snapshot');
|
|
267
|
+
if (options.org) args.push('--org', options.org);
|
|
268
|
+
process.exitCode = await runGuarded(args);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
done
|
|
272
|
+
.command('history [pack]')
|
|
273
|
+
.description('Movement between snapshots, regressions listed first')
|
|
274
|
+
.action(async (pack) => {
|
|
275
|
+
process.exitCode = await runGuarded(pack ? ['--history', '--pack', pack] : ['--history']);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
done
|
|
279
|
+
.command('packs')
|
|
280
|
+
.description('List available rule packs')
|
|
281
|
+
.action(async () => {
|
|
282
|
+
const r = await ensureEngine();
|
|
283
|
+
if (r.code !== undefined) { process.exitCode = r.code; return; }
|
|
284
|
+
const dir = path.join(path.dirname(r.engine), 'packs');
|
|
285
|
+
if (!fs.existsSync(dir)) {
|
|
286
|
+
process.stderr.write(
|
|
287
|
+
`No packs directory at ${dir}\n` +
|
|
288
|
+
'This usually means the engine delivery is missing or stale. ' +
|
|
289
|
+
'Run `quox done fetch` to self-heal it (no human needed), or ' +
|
|
290
|
+
're-run `quox dev enable`, or set QUOX_DONEENGINE_PATH to a ' +
|
|
291
|
+
'checkout that has one.\n',
|
|
292
|
+
);
|
|
293
|
+
process.exitCode = 2;
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
for (const f of fs.readdirSync(dir).filter((x) => x.endsWith('.json')).sort()) {
|
|
297
|
+
try {
|
|
298
|
+
const p = JSON.parse(fs.readFileSync(path.join(dir, f), 'utf8'));
|
|
299
|
+
const scoped = p.subjects ? `${p.subjects.length} subjects` : 'base pack';
|
|
300
|
+
process.stdout.write(`${(p.id || f).padEnd(16)} v${p.version || '?'} ${scoped} ${p.name || ''}\n`);
|
|
301
|
+
} catch {
|
|
302
|
+
process.stdout.write(`${f} (unreadable)\n`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
done
|
|
308
|
+
.command('fetch')
|
|
309
|
+
.description('Self-fetch the DoneEngine bundle, no human in the loop (quox#456 follow-on)')
|
|
310
|
+
.option('--dest <path>', 'install destination (default: $QUOX_DONEENGINE_HOME, else /opt/quoxgauge if writable/sudo-reachable, else ~/.local/share/quox/gauge)')
|
|
311
|
+
.option('--force', 'refetch and reinstall even if the current install already looks healthy')
|
|
312
|
+
.action(async (options) => {
|
|
313
|
+
const client = ctx.client;
|
|
314
|
+
if (!client) {
|
|
315
|
+
process.stderr.write('quox done fetch: no HTTP client available in this context.\n');
|
|
316
|
+
process.exitCode = 2;
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const { execFn, isWritable, fsOps } = fetchDeps();
|
|
320
|
+
|
|
321
|
+
const { dest, reason, needsSudo } = resolveFetchDestination({
|
|
322
|
+
destOption: options.dest,
|
|
323
|
+
env,
|
|
324
|
+
isWritable,
|
|
325
|
+
execFn,
|
|
326
|
+
});
|
|
327
|
+
process.stdout.write(`Destination: ${dest} (${reason})\n`);
|
|
328
|
+
|
|
329
|
+
try {
|
|
330
|
+
const result = await fetchEngine({ dest, needsSudo, force: !!options.force, client, execFn, fsOps });
|
|
331
|
+
if (result.status === 'noop') {
|
|
332
|
+
printInfo(result.message);
|
|
333
|
+
} else {
|
|
334
|
+
printSuccess(result.message);
|
|
335
|
+
}
|
|
336
|
+
} catch (err) {
|
|
337
|
+
process.stderr.write(`quox done fetch failed: ${err.message}\n`);
|
|
338
|
+
// A public install's 404 is "this install has no DoneEngine", not a
|
|
339
|
+
// transient failure: exit 2 like every other "cannot tell" here.
|
|
340
|
+
process.exitCode = err.code === 'DONEENGINE_NOT_SHIPPED' ? 2 : 1;
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
return done;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
export default registerDoneCommands;
|