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.
Files changed (516) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +144 -2
  3. package/bin/quox.js +265 -0
  4. package/bin/quoxon.js +8 -0
  5. package/lib/api/endpoints/admin.js +151 -0
  6. package/lib/api/endpoints/aee.js +38 -0
  7. package/lib/api/endpoints/agent-attach.js +126 -0
  8. package/lib/api/endpoints/agent-schedules.js +26 -0
  9. package/lib/api/endpoints/agents.js +63 -0
  10. package/lib/api/endpoints/assistants.js +62 -0
  11. package/lib/api/endpoints/audit.js +14 -0
  12. package/lib/api/endpoints/auth.js +50 -0
  13. package/lib/api/endpoints/awareness.js +34 -0
  14. package/lib/api/endpoints/away.js +15 -0
  15. package/lib/api/endpoints/backup-schedules.js +20 -0
  16. package/lib/api/endpoints/backups.js +86 -0
  17. package/lib/api/endpoints/brain.js +140 -0
  18. package/lib/api/endpoints/budgets.js +62 -0
  19. package/lib/api/endpoints/calendarq.js +71 -0
  20. package/lib/api/endpoints/catalog.js +14 -0
  21. package/lib/api/endpoints/chat.js +61 -0
  22. package/lib/api/endpoints/consent.js +26 -0
  23. package/lib/api/endpoints/contactsq.js +68 -0
  24. package/lib/api/endpoints/conversations.js +46 -0
  25. package/lib/api/endpoints/custom-roles.js +92 -0
  26. package/lib/api/endpoints/divisions.js +56 -0
  27. package/lib/api/endpoints/domains.js +38 -0
  28. package/lib/api/endpoints/engagement.js +231 -0
  29. package/lib/api/endpoints/engine.js +11 -0
  30. package/lib/api/endpoints/entity.js +50 -0
  31. package/lib/api/endpoints/executions.js +45 -0
  32. package/lib/api/endpoints/fetchAllowlist.js +27 -0
  33. package/lib/api/endpoints/file.js +20 -0
  34. package/lib/api/endpoints/files.js +40 -0
  35. package/lib/api/endpoints/github.js +21 -0
  36. package/lib/api/endpoints/governance.js +43 -0
  37. package/lib/api/endpoints/hat.js +66 -0
  38. package/lib/api/endpoints/inbox.js +52 -0
  39. package/lib/api/endpoints/inboxq.js +120 -0
  40. package/lib/api/endpoints/index.js +242 -0
  41. package/lib/api/endpoints/invites.js +19 -0
  42. package/lib/api/endpoints/llm-policy.js +43 -0
  43. package/lib/api/endpoints/lucid.js +89 -0
  44. package/lib/api/endpoints/members.js +32 -0
  45. package/lib/api/endpoints/memory.js +94 -0
  46. package/lib/api/endpoints/mfa.js +32 -0
  47. package/lib/api/endpoints/mind.js +13 -0
  48. package/lib/api/endpoints/mon.js +184 -0
  49. package/lib/api/endpoints/notesq.js +43 -0
  50. package/lib/api/endpoints/objectives.js +68 -0
  51. package/lib/api/endpoints/orgs.js +38 -0
  52. package/lib/api/endpoints/plugins.js +152 -0
  53. package/lib/api/endpoints/powers.js +75 -0
  54. package/lib/api/endpoints/presence.js +33 -0
  55. package/lib/api/endpoints/prompts.js +69 -0
  56. package/lib/api/endpoints/qlarity.js +122 -0
  57. package/lib/api/endpoints/quoxbox.js +55 -0
  58. package/lib/api/endpoints/quoxchat.js +54 -0
  59. package/lib/api/endpoints/quoxflow.js +32 -0
  60. package/lib/api/endpoints/quoxplan.js +121 -0
  61. package/lib/api/endpoints/quoxseo.js +114 -0
  62. package/lib/api/endpoints/reach.js +47 -0
  63. package/lib/api/endpoints/router.js +17 -0
  64. package/lib/api/endpoints/runs.js +38 -0
  65. package/lib/api/endpoints/safety.js +53 -0
  66. package/lib/api/endpoints/scim.js +46 -0
  67. package/lib/api/endpoints/scopes.js +14 -0
  68. package/lib/api/endpoints/security.js +69 -0
  69. package/lib/api/endpoints/setup.js +90 -0
  70. package/lib/api/endpoints/skills.js +200 -0
  71. package/lib/api/endpoints/sso.js +67 -0
  72. package/lib/api/endpoints/stepup.js +20 -0
  73. package/lib/api/endpoints/tags.js +32 -0
  74. package/lib/api/endpoints/teams.js +56 -0
  75. package/lib/api/endpoints/telephony.js +46 -0
  76. package/lib/api/endpoints/tg.js +56 -0
  77. package/lib/api/endpoints/tools.js +50 -0
  78. package/lib/api/endpoints/traces.js +157 -0
  79. package/lib/api/endpoints/triggers.js +96 -0
  80. package/lib/api/endpoints/user-library.js +41 -0
  81. package/lib/api/endpoints/users.js +20 -0
  82. package/lib/api/endpoints/v1.js +585 -0
  83. package/lib/api/endpoints/vault.js +192 -0
  84. package/lib/api/endpoints/voice.js +22 -0
  85. package/lib/api/endpoints/volt.js +84 -0
  86. package/lib/api/endpoints/ward.js +47 -0
  87. package/lib/api/endpoints/webhooks.js +46 -0
  88. package/lib/api/endpoints/workflows.js +169 -0
  89. package/lib/api/endpoints/x.js +32 -0
  90. package/lib/api/endpoints.js +15 -0
  91. package/lib/commands/actions.js +61 -0
  92. package/lib/commands/admin.js +375 -0
  93. package/lib/commands/aee.js +99 -0
  94. package/lib/commands/agent.js +337 -0
  95. package/lib/commands/agentAttach.js +1528 -0
  96. package/lib/commands/approvals.js +119 -0
  97. package/lib/commands/aside.js +24 -0
  98. package/lib/commands/ask.js +144 -0
  99. package/lib/commands/assistant.js +169 -0
  100. package/lib/commands/auth.js +464 -0
  101. package/lib/commands/awareness.js +88 -0
  102. package/lib/commands/backup.js +377 -0
  103. package/lib/commands/brain.js +1085 -0
  104. package/lib/commands/budget.js +241 -0
  105. package/lib/commands/build.js +170 -0
  106. package/lib/commands/calendar.js +216 -0
  107. package/lib/commands/capabilities.js +34 -0
  108. package/lib/commands/chat.js +295 -0
  109. package/lib/commands/claude.js +380 -0
  110. package/lib/commands/config-cmd.js +106 -0
  111. package/lib/commands/consent.js +84 -0
  112. package/lib/commands/contacts.js +1016 -0
  113. package/lib/commands/contactsSelftest.js +132 -0
  114. package/lib/commands/conversation.js +105 -0
  115. package/lib/commands/dashboard.js +43 -0
  116. package/lib/commands/department.js +96 -0
  117. package/lib/commands/dev.js +620 -0
  118. package/lib/commands/devResident.js +326 -0
  119. package/lib/commands/devSupervisor.js +1062 -0
  120. package/lib/commands/discord.js +132 -0
  121. package/lib/commands/doctor.js +181 -0
  122. package/lib/commands/domain.js +114 -0
  123. package/lib/commands/done.js +347 -0
  124. package/lib/commands/engagement.js +597 -0
  125. package/lib/commands/entity.js +119 -0
  126. package/lib/commands/facebook.js +212 -0
  127. package/lib/commands/fetchAllowlist.js +71 -0
  128. package/lib/commands/file.js +165 -0
  129. package/lib/commands/fleet.js +1189 -0
  130. package/lib/commands/governance.js +647 -0
  131. package/lib/commands/gripe.js +355 -0
  132. package/lib/commands/hat.js +374 -0
  133. package/lib/commands/helpers.js +96 -0
  134. package/lib/commands/hyperion.js +58 -0
  135. package/lib/commands/inbox.js +173 -0
  136. package/lib/commands/instagram.js +264 -0
  137. package/lib/commands/integration.js +100 -0
  138. package/lib/commands/inventory.js +115 -0
  139. package/lib/commands/invites.js +45 -0
  140. package/lib/commands/licence.js +139 -0
  141. package/lib/commands/linkedin.js +178 -0
  142. package/lib/commands/llm-policy.js +117 -0
  143. package/lib/commands/llm.js +45 -0
  144. package/lib/commands/lucid.js +597 -0
  145. package/lib/commands/mail.js +531 -0
  146. package/lib/commands/memory.js +361 -0
  147. package/lib/commands/mind.js +71 -0
  148. package/lib/commands/mon.js +581 -0
  149. package/lib/commands/monitoring.js +86 -0
  150. package/lib/commands/motion.js +22 -0
  151. package/lib/commands/notes.js +1246 -0
  152. package/lib/commands/notesBatch.js +160 -0
  153. package/lib/commands/notesBridges.js +56 -0
  154. package/lib/commands/notesLinks.js +60 -0
  155. package/lib/commands/notification.js +57 -0
  156. package/lib/commands/nucleus.js +123 -0
  157. package/lib/commands/objective.js +240 -0
  158. package/lib/commands/offload.js +89 -0
  159. package/lib/commands/onboard.js +329 -0
  160. package/lib/commands/open.js +56 -0
  161. package/lib/commands/org.js +276 -0
  162. package/lib/commands/peek.js +28 -0
  163. package/lib/commands/plan.js +944 -0
  164. package/lib/commands/plugin-doctor.js +1091 -0
  165. package/lib/commands/plugin.js +649 -0
  166. package/lib/commands/policy.js +78 -0
  167. package/lib/commands/powers.js +296 -0
  168. package/lib/commands/presence.js +89 -0
  169. package/lib/commands/prompt.js +350 -0
  170. package/lib/commands/provider.js +159 -0
  171. package/lib/commands/qlarity.js +706 -0
  172. package/lib/commands/quoxbox.js +270 -0
  173. package/lib/commands/quoxchat.js +275 -0
  174. package/lib/commands/quoxseo.js +378 -0
  175. package/lib/commands/reach.js +159 -0
  176. package/lib/commands/role.js +286 -0
  177. package/lib/commands/router.js +77 -0
  178. package/lib/commands/rows.js +358 -0
  179. package/lib/commands/run.js +187 -0
  180. package/lib/commands/safety.js +107 -0
  181. package/lib/commands/scim.js +88 -0
  182. package/lib/commands/scope.js +58 -0
  183. package/lib/commands/security.js +157 -0
  184. package/lib/commands/server.js +292 -0
  185. package/lib/commands/service.js +89 -0
  186. package/lib/commands/settings.js +99 -0
  187. package/lib/commands/setup.js +569 -0
  188. package/lib/commands/skillManifest.js +113 -0
  189. package/lib/commands/skillRightsFormat.js +38 -0
  190. package/lib/commands/skills.js +687 -0
  191. package/lib/commands/slot.js +1451 -0
  192. package/lib/commands/sso.js +229 -0
  193. package/lib/commands/status.js +137 -0
  194. package/lib/commands/tag.js +91 -0
  195. package/lib/commands/team.js +142 -0
  196. package/lib/commands/tg.js +240 -0
  197. package/lib/commands/tiktok.js +218 -0
  198. package/lib/commands/tips.js +23 -0
  199. package/lib/commands/tool.js +304 -0
  200. package/lib/commands/trace.js +530 -0
  201. package/lib/commands/trigger.js +223 -0
  202. package/lib/commands/update.js +46 -0
  203. package/lib/commands/vault.js +1447 -0
  204. package/lib/commands/vm.js +237 -0
  205. package/lib/commands/voice.js +213 -0
  206. package/lib/commands/volt.js +570 -0
  207. package/lib/commands/walkthrough.js +32 -0
  208. package/lib/commands/watch.js +167 -0
  209. package/lib/commands/webhook.js +137 -0
  210. package/lib/commands/welcome.js +14 -0
  211. package/lib/commands/workflow.js +660 -0
  212. package/lib/commands/x.js +448 -0
  213. package/lib/core/actingAs.js +136 -0
  214. package/lib/core/activeSummary.js +186 -0
  215. package/lib/core/aee.js +53 -0
  216. package/lib/core/agentAlias.js +163 -0
  217. package/lib/core/approvalContext.js +61 -0
  218. package/lib/core/aside.js +54 -0
  219. package/lib/core/askDecision.js +60 -0
  220. package/lib/core/auth.js +501 -0
  221. package/lib/core/banner.js +143 -0
  222. package/lib/core/brainPrime.js +90 -0
  223. package/lib/core/callerSource.js +129 -0
  224. package/lib/core/claudeLs.js +94 -0
  225. package/lib/core/cliBuild.js +62 -0
  226. package/lib/core/client.js +693 -0
  227. package/lib/core/commandRegistrars.js +121 -0
  228. package/lib/core/completions.js +163 -0
  229. package/lib/core/config.js +669 -0
  230. package/lib/core/confirm.js +37 -0
  231. package/lib/core/customHats.js +168 -0
  232. package/lib/core/deeplinks.js +76 -0
  233. package/lib/core/doneEngineFetch.js +227 -0
  234. package/lib/core/errors.js +441 -0
  235. package/lib/core/global-flags.js +190 -0
  236. package/lib/core/governedSession.js +402 -0
  237. package/lib/core/hyperion.js +102 -0
  238. package/lib/core/inboxResolution.js +65 -0
  239. package/lib/core/lazyCommands.js +122 -0
  240. package/lib/core/liveSessionsReport.js +112 -0
  241. package/lib/core/offload.js +504 -0
  242. package/lib/core/org-override.js +52 -0
  243. package/lib/core/orgResolve.js +70 -0
  244. package/lib/core/output.js +239 -0
  245. package/lib/core/peek.js +126 -0
  246. package/lib/core/prodEnv.js +7 -0
  247. package/lib/core/profileUsers.js +51 -0
  248. package/lib/core/promptCancel.js +18 -0
  249. package/lib/core/quoxglyph.js +158 -0
  250. package/lib/core/repoPath.js +11 -0
  251. package/lib/core/residentAlarm.js +282 -0
  252. package/lib/core/residentAuth.js +243 -0
  253. package/lib/core/residentPump.js +229 -0
  254. package/lib/core/residentSeed.js +106 -0
  255. package/lib/core/rootOptions.js +39 -0
  256. package/lib/core/router.js +168 -0
  257. package/lib/core/selfUpdate.js +188 -0
  258. package/lib/core/sessionHeartbeat.js +192 -0
  259. package/lib/core/sessionsOverview.js +224 -0
  260. package/lib/core/slotKeeper.js +527 -0
  261. package/lib/core/slotWake.js +120 -0
  262. package/lib/core/supervisorEngine.js +933 -0
  263. package/lib/core/systemdInstaller.js +256 -0
  264. package/lib/core/version.js +87 -0
  265. package/lib/core/vm.js +361 -0
  266. package/lib/core/vmTui.js +86 -0
  267. package/lib/core/walkthrough.js +35 -0
  268. package/lib/hyperion/deck.js +29 -0
  269. package/lib/lucid/LucidCard.jsx +68 -0
  270. package/lib/lucid/LucidIntro.jsx +92 -0
  271. package/lib/lucid/blind.js +71 -0
  272. package/lib/lucid/cards.js +86 -0
  273. package/lib/lucid/deck.js +32 -0
  274. package/lib/lucid/fmt.js +139 -0
  275. package/lib/lucid/markdown.js +81 -0
  276. package/lib/lucid/motion.js +56 -0
  277. package/lib/lucid/sitrep.js +173 -0
  278. package/lib/plugins/loader.js +93 -0
  279. package/lib/quoxon/activity.js +116 -0
  280. package/lib/quoxon/aocl.js +117 -0
  281. package/lib/quoxon/api.js +952 -0
  282. package/lib/quoxon/app.js +4032 -0
  283. package/lib/quoxon/approvalFacts.js +94 -0
  284. package/lib/quoxon/approvalsView.js +325 -0
  285. package/lib/quoxon/asideView.js +40 -0
  286. package/lib/quoxon/ask.js +121 -0
  287. package/lib/quoxon/away.js +52 -0
  288. package/lib/quoxon/bang.js +224 -0
  289. package/lib/quoxon/bulkRisk.js +17 -0
  290. package/lib/quoxon/capabilities.js +82 -0
  291. package/lib/quoxon/cells.js +53 -0
  292. package/lib/quoxon/commandShort.js +112 -0
  293. package/lib/quoxon/commands.js +479 -0
  294. package/lib/quoxon/connect.js +654 -0
  295. package/lib/quoxon/connectCard.js +45 -0
  296. package/lib/quoxon/consent.js +86 -0
  297. package/lib/quoxon/context.js +68 -0
  298. package/lib/quoxon/copy.js +34 -0
  299. package/lib/quoxon/countdownLine.js +11 -0
  300. package/lib/quoxon/demo.autoplay.js +29 -0
  301. package/lib/quoxon/demo.fixtures.js +24 -0
  302. package/lib/quoxon/demo.js +76 -0
  303. package/lib/quoxon/devObserver.js +20 -0
  304. package/lib/quoxon/dividerAocl.js +191 -0
  305. package/lib/quoxon/dividerRule.js +57 -0
  306. package/lib/quoxon/dragonModes.js +150 -0
  307. package/lib/quoxon/dragonView.js +41 -0
  308. package/lib/quoxon/earlyInput.js +40 -0
  309. package/lib/quoxon/echo.js +15 -0
  310. package/lib/quoxon/egg.js +36 -0
  311. package/lib/quoxon/events.js +677 -0
  312. package/lib/quoxon/feedback.js +50 -0
  313. package/lib/quoxon/gallery.js +237 -0
  314. package/lib/quoxon/handoffOffer.js +78 -0
  315. package/lib/quoxon/hatSwitch.js +37 -0
  316. package/lib/quoxon/headless.js +161 -0
  317. package/lib/quoxon/hostUrls.js +41 -0
  318. package/lib/quoxon/indicator.js +197 -0
  319. package/lib/quoxon/intent.js +52 -0
  320. package/lib/quoxon/keys.js +164 -0
  321. package/lib/quoxon/launcher.js +103 -0
  322. package/lib/quoxon/main.js +176 -0
  323. package/lib/quoxon/markdown.js +341 -0
  324. package/lib/quoxon/markdownSettle.js +19 -0
  325. package/lib/quoxon/matrixDomains.json +46 -0
  326. package/lib/quoxon/mentions.js +90 -0
  327. package/lib/quoxon/mind.js +103 -0
  328. package/lib/quoxon/mode.js +46 -0
  329. package/lib/quoxon/model.js +311 -0
  330. package/lib/quoxon/modelPrefs.js +345 -0
  331. package/lib/quoxon/motion/clock.js +70 -0
  332. package/lib/quoxon/motion/color.js +35 -0
  333. package/lib/quoxon/motion/frame.js +14 -0
  334. package/lib/quoxon/motion/level.js +91 -0
  335. package/lib/quoxon/motion/reveal.js +54 -0
  336. package/lib/quoxon/motion/ring.js +79 -0
  337. package/lib/quoxon/mouse.js +211 -0
  338. package/lib/quoxon/noai.js +57 -0
  339. package/lib/quoxon/objects/agent.js +61 -0
  340. package/lib/quoxon/objects/away.js +72 -0
  341. package/lib/quoxon/objects/crystal.js +100 -0
  342. package/lib/quoxon/objects/fetch.js +182 -0
  343. package/lib/quoxon/objects/fleet.js +149 -0
  344. package/lib/quoxon/objects/health.js +186 -0
  345. package/lib/quoxon/objects/index.js +106 -0
  346. package/lib/quoxon/objects/ladder.js +71 -0
  347. package/lib/quoxon/objects/memory.js +44 -0
  348. package/lib/quoxon/objects/mirror.js +137 -0
  349. package/lib/quoxon/objects/model.js +118 -0
  350. package/lib/quoxon/objects/peek.js +17 -0
  351. package/lib/quoxon/objects/proof.js +110 -0
  352. package/lib/quoxon/objects/prove.js +130 -0
  353. package/lib/quoxon/objects/replay.js +125 -0
  354. package/lib/quoxon/objects/sitrep.js +58 -0
  355. package/lib/quoxon/objects/skill.js +105 -0
  356. package/lib/quoxon/objects/view.js +87 -0
  357. package/lib/quoxon/objects/workflow.js +119 -0
  358. package/lib/quoxon/observers.js +42 -0
  359. package/lib/quoxon/onboarding/copy.js +263 -0
  360. package/lib/quoxon/onboarding/credential.js +108 -0
  361. package/lib/quoxon/onboarding/detect.js +22 -0
  362. package/lib/quoxon/onboarding/dockerOffer.js +45 -0
  363. package/lib/quoxon/onboarding/failureCause.js +33 -0
  364. package/lib/quoxon/onboarding/finish.js +134 -0
  365. package/lib/quoxon/onboarding/index.js +94 -0
  366. package/lib/quoxon/onboarding/installRunner.js +284 -0
  367. package/lib/quoxon/onboarding/intent.js +53 -0
  368. package/lib/quoxon/onboarding/journey.js +73 -0
  369. package/lib/quoxon/onboarding/preflight.js +156 -0
  370. package/lib/quoxon/onboarding/probe.js +65 -0
  371. package/lib/quoxon/onboarding/runner.js +58 -0
  372. package/lib/quoxon/onboarding/view.js +682 -0
  373. package/lib/quoxon/orgLabel.js +10 -0
  374. package/lib/quoxon/orgSwitch.js +33 -0
  375. package/lib/quoxon/ownBroadcast.js +22 -0
  376. package/lib/quoxon/palette.js +43 -0
  377. package/lib/quoxon/print.js +98 -0
  378. package/lib/quoxon/profileSwitch.js +53 -0
  379. package/lib/quoxon/promptHistory.js +41 -0
  380. package/lib/quoxon/providers.js +48 -0
  381. package/lib/quoxon/qart.js +348 -0
  382. package/lib/quoxon/qdragon.js +410 -0
  383. package/lib/quoxon/qdragonFly.js +61 -0
  384. package/lib/quoxon/qdragonScenes.js +282 -0
  385. package/lib/quoxon/qeyes.js +213 -0
  386. package/lib/quoxon/qglyph.js +143 -0
  387. package/lib/quoxon/qhello.js +58 -0
  388. package/lib/quoxon/qmotion.js +132 -0
  389. package/lib/quoxon/render.js +1167 -0
  390. package/lib/quoxon/resend.js +72 -0
  391. package/lib/quoxon/roster.js +307 -0
  392. package/lib/quoxon/route.js +39 -0
  393. package/lib/quoxon/rows.js +711 -0
  394. package/lib/quoxon/rowsStore.js +80 -0
  395. package/lib/quoxon/rules.js +130 -0
  396. package/lib/quoxon/screenContext.js +150 -0
  397. package/lib/quoxon/screenFrames.js +254 -0
  398. package/lib/quoxon/session.js +238 -0
  399. package/lib/quoxon/sessionDead.js +17 -0
  400. package/lib/quoxon/signin.js +125 -0
  401. package/lib/quoxon/skills.js +30 -0
  402. package/lib/quoxon/slash/agents.js +112 -0
  403. package/lib/quoxon/slash/argSources.js +65 -0
  404. package/lib/quoxon/slash/args.js +65 -0
  405. package/lib/quoxon/slash/automate.js +89 -0
  406. package/lib/quoxon/slash/broadcast.js +140 -0
  407. package/lib/quoxon/slash/broadcastRun.js +108 -0
  408. package/lib/quoxon/slash/card.js +30 -0
  409. package/lib/quoxon/slash/challenge.js +114 -0
  410. package/lib/quoxon/slash/cliCommand.js +53 -0
  411. package/lib/quoxon/slash/cliLeaves.json +948 -0
  412. package/lib/quoxon/slash/compact.js +90 -0
  413. package/lib/quoxon/slash/confirm.js +30 -0
  414. package/lib/quoxon/slash/crystallize.js +69 -0
  415. package/lib/quoxon/slash/dashboard.js +136 -0
  416. package/lib/quoxon/slash/draft.js +54 -0
  417. package/lib/quoxon/slash/hatWalk.js +206 -0
  418. package/lib/quoxon/slash/inverses.js +77 -0
  419. package/lib/quoxon/slash/killer.js +24 -0
  420. package/lib/quoxon/slash/killerApi.js +16 -0
  421. package/lib/quoxon/slash/ledger.js +88 -0
  422. package/lib/quoxon/slash/listView.js +30 -0
  423. package/lib/quoxon/slash/modelCmd.js +261 -0
  424. package/lib/quoxon/slash/palette.js +118 -0
  425. package/lib/quoxon/slash/paletteController.js +169 -0
  426. package/lib/quoxon/slash/panels.js +116 -0
  427. package/lib/quoxon/slash/picker.js +56 -0
  428. package/lib/quoxon/slash/restart.js +202 -0
  429. package/lib/quoxon/slash/resume.js +59 -0
  430. package/lib/quoxon/slash/rowCmd.js +157 -0
  431. package/lib/quoxon/slash/rowWalk.js +175 -0
  432. package/lib/quoxon/slash/settings.js +60 -0
  433. package/lib/quoxon/slash/spawn.js +177 -0
  434. package/lib/quoxon/slash/stepUp.js +274 -0
  435. package/lib/quoxon/slash/stepUpCard.js +60 -0
  436. package/lib/quoxon/slash/stepUpCmds.js +78 -0
  437. package/lib/quoxon/slash/undoApi.js +38 -0
  438. package/lib/quoxon/slash/undoCmd.js +49 -0
  439. package/lib/quoxon/slash/undoWish.js +15 -0
  440. package/lib/quoxon/slash/watch.js +164 -0
  441. package/lib/quoxon/slash/wish.js +23 -0
  442. package/lib/quoxon/slash/wishCmd.js +32 -0
  443. package/lib/quoxon/slotChat.js +300 -0
  444. package/lib/quoxon/slotFormat.js +195 -0
  445. package/lib/quoxon/slotRun.js +131 -0
  446. package/lib/quoxon/sound/index.js +186 -0
  447. package/lib/quoxon/sound/mapping.js +120 -0
  448. package/lib/quoxon/sound/output.js +52 -0
  449. package/lib/quoxon/sound/synth.js +122 -0
  450. package/lib/quoxon/stray.js +22 -0
  451. package/lib/quoxon/suggestCommand.js +59 -0
  452. package/lib/quoxon/term.js +141 -0
  453. package/lib/quoxon/textBuffer.js +416 -0
  454. package/lib/quoxon/theme.js +286 -0
  455. package/lib/quoxon/tips.js +433 -0
  456. package/lib/quoxon/toolError.js +41 -0
  457. package/lib/quoxon/transcript.js +188 -0
  458. package/lib/quoxon/web/qface.js +89 -0
  459. package/lib/quoxon/welcome.js +52 -0
  460. package/lib/quoxon/whatsnew.js +136 -0
  461. package/lib/quoxon/whatsnew.jsonl +89 -0
  462. package/lib/quoxon/windowOrg.js +113 -0
  463. package/lib/server/diag.js +129 -0
  464. package/lib/server/doctor.js +71 -0
  465. package/lib/server/install.js +149 -0
  466. package/lib/server/pluginEnable.js +161 -0
  467. package/lib/server/skew.js +56 -0
  468. package/lib/server/snapshot.js +131 -0
  469. package/lib/server/status.js +128 -0
  470. package/lib/server/sys.js +65 -0
  471. package/lib/server/uninstall.js +63 -0
  472. package/lib/server/update.js +234 -0
  473. package/lib/toolOutputShape.js +315 -0
  474. package/lib/tui/app.jsx +289 -0
  475. package/lib/tui/components/Breadcrumb.jsx +42 -0
  476. package/lib/tui/components/ChatInput.jsx +68 -0
  477. package/lib/tui/components/Confirm.jsx +32 -0
  478. package/lib/tui/components/DataTable.jsx +270 -0
  479. package/lib/tui/components/DetailPanel.jsx +241 -0
  480. package/lib/tui/components/HelpOverlay.jsx +67 -0
  481. package/lib/tui/components/Layout.jsx +129 -0
  482. package/lib/tui/components/Palette.jsx +141 -0
  483. package/lib/tui/components/SearchInput.jsx +125 -0
  484. package/lib/tui/components/Sparkline.jsx +55 -0
  485. package/lib/tui/components/StatusBar.jsx +133 -0
  486. package/lib/tui/components/Toast.jsx +52 -0
  487. package/lib/tui/hooks/useApi.js +44 -0
  488. package/lib/tui/hooks/useHealth.js +90 -0
  489. package/lib/tui/hooks/usePolledApi.js +86 -0
  490. package/lib/tui/hooks/useTerminalSize.js +46 -0
  491. package/lib/tui/index.js +56 -0
  492. package/lib/tui/intro/Intro.jsx +332 -0
  493. package/lib/tui/jsx-loader.js +32 -0
  494. package/lib/tui/keys.js +87 -0
  495. package/lib/tui/registry.js +49 -0
  496. package/lib/tui/theme.js +103 -0
  497. package/lib/tui/views/AdminView.jsx +398 -0
  498. package/lib/tui/views/AgentView.jsx +204 -0
  499. package/lib/tui/views/BackupView.jsx +225 -0
  500. package/lib/tui/views/BrainView.jsx +223 -0
  501. package/lib/tui/views/ChatView.jsx +468 -0
  502. package/lib/tui/views/FilesView.jsx +218 -0
  503. package/lib/tui/views/FleetView.jsx +234 -0
  504. package/lib/tui/views/GovernanceView.jsx +453 -0
  505. package/lib/tui/views/HealthView.jsx +216 -0
  506. package/lib/tui/views/HyperionDeck.jsx +79 -0
  507. package/lib/tui/views/InboxView.jsx +228 -0
  508. package/lib/tui/views/LucidDeck.jsx +719 -0
  509. package/lib/tui/views/MainMenu.jsx +123 -0
  510. package/lib/tui/views/MemoryView.jsx +377 -0
  511. package/lib/tui/views/ObjectivesView.jsx +230 -0
  512. package/lib/tui/views/OrgView.jsx +229 -0
  513. package/lib/tui/views/ToolView.jsx +221 -0
  514. package/lib/tui/views/VaultView.jsx +422 -0
  515. package/lib/tui/views/WorkflowView.jsx +329 -0
  516. 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
+ }