lurqrun 0.1.6 → 0.1.8

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 (239) hide show
  1. package/README.md +311 -139
  2. package/dist/auditHandler-VWCXSDVO.js +24 -0
  3. package/dist/autopilotInit-Q62MX5M6.js +178 -0
  4. package/dist/bin/lurq.js +3255 -23319
  5. package/dist/browserAuth-J7APSD4P.js +96 -0
  6. package/dist/cache-AEAKCV4I.js +12 -0
  7. package/dist/check-2JTQDQA6.js +2613 -0
  8. package/dist/check-PQSQ2MMA.js +192 -0
  9. package/dist/checkUpgrade-5YW77OBL.js +24 -0
  10. package/dist/chunk-2GAYNIHG.js +40 -0
  11. package/dist/chunk-2O6Z37IT.js +423 -0
  12. package/dist/chunk-2WD4QAH4.js +116 -0
  13. package/dist/chunk-3676XOBU.js +2235 -0
  14. package/dist/chunk-3D2MPGOQ.js +181 -0
  15. package/dist/chunk-3GHJR7XR.js +2049 -0
  16. package/dist/chunk-4ESO33J6.js +34 -0
  17. package/dist/chunk-4JHDSVIN.js +1229 -0
  18. package/dist/chunk-4KCPOMG6.js +68 -0
  19. package/dist/chunk-53SG6XWA.js +141 -0
  20. package/dist/chunk-5ABNDB3I.js +37 -0
  21. package/dist/chunk-5ALIJFDA.js +114 -0
  22. package/dist/chunk-63MUJNZL.js +318 -0
  23. package/dist/chunk-64ZF7KO4.js +1571 -0
  24. package/dist/chunk-6DM6UQFD.js +318 -0
  25. package/dist/chunk-6EQ3ARXA.js +304 -0
  26. package/dist/chunk-6L67QMCP.js +92 -0
  27. package/dist/chunk-72Y2FDVS.js +172 -0
  28. package/dist/chunk-A3TYI2TF.js +288 -0
  29. package/dist/chunk-B2UUYRBX.js +536 -0
  30. package/dist/chunk-BJT2LHAR.js +320 -0
  31. package/dist/chunk-BM3LF5T6.js +132 -0
  32. package/dist/chunk-BN3NM47Q.js +214 -0
  33. package/dist/chunk-BUALU27S.js +123 -0
  34. package/dist/chunk-C6GLE626.js +160 -0
  35. package/dist/chunk-D3K6IZVR.js +12845 -0
  36. package/dist/chunk-D3VTZS7V.js +222 -0
  37. package/dist/chunk-DM37MTOO.js +636 -0
  38. package/dist/chunk-DONTW3NE.js +171 -0
  39. package/dist/chunk-DSROTZ3Z.js +38 -0
  40. package/dist/chunk-ELGCAM7P.js +184 -0
  41. package/dist/chunk-EQCXENKZ.js +130 -0
  42. package/dist/chunk-EYAKM6YN.js +96 -0
  43. package/dist/chunk-FDFPMBCA.js +112 -0
  44. package/dist/chunk-FVYFV5HA.js +154 -0
  45. package/dist/chunk-GE37NVLN.js +15 -0
  46. package/dist/chunk-GM5Y555O.js +143 -0
  47. package/dist/chunk-GRJXQBQZ.js +793 -0
  48. package/dist/chunk-HWFX4BC4.js +177 -0
  49. package/dist/chunk-I3M2KJXB.js +56 -0
  50. package/dist/chunk-IFNONGRQ.js +603 -0
  51. package/dist/chunk-J3U2CPSK.js +136 -0
  52. package/dist/chunk-J6XQ7OPZ.js +74 -0
  53. package/dist/chunk-KMV4Y6R3.js +127 -0
  54. package/dist/chunk-KP5ZDDPE.js +340 -0
  55. package/dist/chunk-KYKSZ3XZ.js +202 -0
  56. package/dist/chunk-LEGPB7DO.js +81 -0
  57. package/dist/chunk-LUAKDHLZ.js +40 -0
  58. package/dist/chunk-MHUEVBVO.js +35 -0
  59. package/dist/chunk-MYGSLK44.js +37 -0
  60. package/dist/chunk-NEZNAPPN.js +41 -0
  61. package/dist/chunk-NPVN2THM.js +197 -0
  62. package/dist/chunk-NYZU5NCW.js +23 -0
  63. package/dist/chunk-O4KHCV6I.js +320 -0
  64. package/dist/chunk-ONDVTXUO.js +240 -0
  65. package/dist/chunk-OTJFHESY.js +176 -0
  66. package/dist/chunk-P6MIKSPY.js +243 -0
  67. package/dist/chunk-Q5VPF4WI.js +26 -0
  68. package/dist/chunk-QCRBX3LV.js +165 -0
  69. package/dist/chunk-QKGYDMWB.js +7409 -0
  70. package/dist/chunk-QSL6QN5X.js +115 -0
  71. package/dist/chunk-QUIMQ7YL.js +73 -0
  72. package/dist/chunk-RG3YLU6E.js +49 -0
  73. package/dist/chunk-SHCEBP3J.js +107 -0
  74. package/dist/chunk-SHZFOSXC.js +462 -0
  75. package/dist/chunk-SOXFMMXC.js +151 -0
  76. package/dist/chunk-TDTYV6QI.js +119 -0
  77. package/dist/chunk-TNTXWSYA.js +19 -0
  78. package/dist/chunk-TUXQ32WE.js +2251 -0
  79. package/dist/chunk-VGCDRK3S.js +37 -0
  80. package/dist/chunk-VLRHFMGJ.js +58 -0
  81. package/dist/chunk-WHX2ZFCG.js +4048 -0
  82. package/dist/chunk-X4W64MHU.js +2005 -0
  83. package/dist/chunk-XBQA4I36.js +92 -0
  84. package/dist/chunk-XGOV6KV4.js +413 -0
  85. package/dist/chunk-XIFQIFSZ.js +940 -0
  86. package/dist/chunk-XLXPVN3Y.js +15393 -0
  87. package/dist/chunk-ZJMLQ37G.js +90 -0
  88. package/dist/client-MU4EUDZV.js +15 -0
  89. package/dist/commands-UOOTMBKA.js +1023 -0
  90. package/dist/compat-Q5DVPITN.js +201 -0
  91. package/dist/constants-DJFOFZ44.js +24 -0
  92. package/dist/dashboardIssue-KBKLQMGC.js +274 -0
  93. package/dist/diff-I4SNUHU3.js +13 -0
  94. package/dist/dist-4XXIXHHZ.js +12945 -0
  95. package/dist/domains-VRT4BRVZ.js +14 -0
  96. package/dist/e2b-FVPHDULZ.js +172 -0
  97. package/dist/env-UN6KGZ7S.js +15 -0
  98. package/dist/envCheck-KUPTORFQ.js +71 -0
  99. package/dist/extract-6WG265BL.js +455 -0
  100. package/dist/fetch-PJ3SC32M.js +22 -0
  101. package/dist/firstTouch-COJCMOB3.js +55 -0
  102. package/dist/fix-3EDWNKW3.js +220 -0
  103. package/dist/handlers-4Q37WIFT.js +55 -0
  104. package/dist/hook-NA66XJLC.js +412 -0
  105. package/dist/http-25GJ6SKK.js +6928 -0
  106. package/dist/ingestQueue-FSVJC3AA.js +37 -0
  107. package/dist/install-G2HHXYJ2.js +20 -0
  108. package/dist/installSkill-5TIMYIJZ.js +70 -0
  109. package/dist/inventory-5AWSLJYU.js +31 -0
  110. package/dist/local-XPZMRH5R.js +13 -0
  111. package/dist/manifest-ENMIC54B.js +13 -0
  112. package/dist/mcp-PENLL2PK.js +500 -0
  113. package/dist/mcpConfig-3LYPRY5Q.js +80 -0
  114. package/dist/mcpHandlers-PO7GENA7.js +22 -0
  115. package/dist/mcpScan-ULP626TQ.js +1735 -0
  116. package/dist/mcpScanWorkflow-27O44FOE.js +98 -0
  117. package/dist/mcpStack-ZNYIFXZ5.js +20 -0
  118. package/dist/model-ASMZWLM7.js +214 -0
  119. package/dist/packages-RWF2LXST.js +40 -0
  120. package/dist/plan-SDILIDZT.js +465 -0
  121. package/dist/planView-ZAKRTGVS.js +82 -0
  122. package/dist/policy-JAGNMQJI.js +115 -0
  123. package/dist/probe-3IK646WN.js +610 -0
  124. package/dist/publicUpgrades-WTBGLDIK.js +42 -0
  125. package/dist/references-I6Y4BSRR.js +16 -0
  126. package/dist/release-7IU2R4YG.js +128 -0
  127. package/dist/remote-FN6225AH.js +42 -0
  128. package/dist/rename-OS6JYBZQ.js +204 -0
  129. package/dist/reportRuns-O4X7ZFTX.js +77 -0
  130. package/dist/safeFetch-COERXGFN.js +19 -0
  131. package/dist/sandbox-SAPSRKEI.js +39 -0
  132. package/dist/sarif-WLVJFJ7U.js +125 -0
  133. package/dist/server-OLTY3NYT.js +59 -0
  134. package/dist/surface-7MHE3RL7.js +143 -0
  135. package/dist/surface-JS2XU3U3.js +38 -0
  136. package/dist/surfaceHandlers-4B6TMZ34.js +20 -0
  137. package/dist/typecheck-NGOKNAJY.js +282 -0
  138. package/dist/types-M5JP2W3D.js +10 -0
  139. package/dist/uninstall-I2IJP5JZ.js +200 -0
  140. package/dist/upgrade-FS26DJGG.js +650 -0
  141. package/dist/upgradePlan-ZS5IOVMZ.js +181 -0
  142. package/dist/upkeepHandler-VFGYXJKB.js +13 -0
  143. package/dist/userConfig-ICASHI47.js +20 -0
  144. package/dist/watch-OCNEUXG6.js +204 -0
  145. package/package.json +26 -20
  146. package/templates/agent-rules.md +4 -4
  147. package/templates/skill-instructions.md +35 -17
  148. package/dist/bin/lurq.js.map +0 -1
  149. package/dist/index.d.ts +0 -805
  150. package/dist/index.js +0 -23570
  151. package/dist/index.js.map +0 -1
  152. package/drizzle/0000_confused_fabian_cortez.sql +0 -54
  153. package/drizzle/0001_aspiring_timeslip.sql +0 -15
  154. package/drizzle/0002_lyrical_lila_cheney.sql +0 -14
  155. package/drizzle/0003_violet_giant_girl.sql +0 -14
  156. package/drizzle/0004_slim_valeria_richards.sql +0 -15
  157. package/drizzle/0005_petite_luke_cage.sql +0 -12
  158. package/drizzle/0006_calm_nighthawk.sql +0 -3
  159. package/drizzle/0007_slimy_naoko.sql +0 -1
  160. package/drizzle/0008_peaceful_tigra.sql +0 -1
  161. package/drizzle/0009_smooth_harrier.sql +0 -10
  162. package/drizzle/0010_curved_amphibian.sql +0 -2
  163. package/drizzle/0011_compat_provenance_closures.sql +0 -11
  164. package/drizzle/0012_api_surfaces.sql +0 -9
  165. package/drizzle/0013_nice_thanos.sql +0 -1
  166. package/drizzle/0014_luxuriant_malcolm_colcord.sql +0 -10
  167. package/drizzle/0015_past_fat_cobra.sql +0 -11
  168. package/drizzle/0016_futuristic_junta.sql +0 -50
  169. package/drizzle/0017_absent_grandmaster.sql +0 -20
  170. package/drizzle/0018_rainy_proemial_gods.sql +0 -1
  171. package/drizzle/0019_dashing_korvac.sql +0 -11
  172. package/drizzle/0020_normal_vulture.sql +0 -3
  173. package/drizzle/0021_dazzling_blue_shield.sql +0 -17
  174. package/drizzle/0022_massive_ghost_rider.sql +0 -24
  175. package/drizzle/0023_next_shatterstar.sql +0 -1
  176. package/drizzle/0024_dusty_maelstrom.sql +0 -15
  177. package/drizzle/0025_gifted_harpoon.sql +0 -5
  178. package/drizzle/0026_awesome_mordo.sql +0 -1
  179. package/drizzle/0027_charming_ulik.sql +0 -2
  180. package/drizzle/0028_romantic_loners.sql +0 -2
  181. package/drizzle/0029_busy_korvac.sql +0 -16
  182. package/drizzle/0030_steady_mathemanic.sql +0 -6
  183. package/drizzle/0031_redundant_maginty.sql +0 -2
  184. package/drizzle/0032_stack_resolutions.sql +0 -14
  185. package/drizzle/0033_graceful_tyger_tiger.sql +0 -3
  186. package/drizzle/0034_uneven_thunderbird.sql +0 -1
  187. package/drizzle/0035_api_key_scopes.sql +0 -1
  188. package/drizzle/0036_policy_audit.sql +0 -21
  189. package/drizzle/0037_subscription_seats.sql +0 -1
  190. package/drizzle/0038_symbol_offsets.sql +0 -2
  191. package/drizzle/0039_mcp_runtime_scans.sql +0 -80
  192. package/drizzle/0040_subscription_overage_and_interval.sql +0 -4
  193. package/drizzle/0041_account_email.sql +0 -38
  194. package/drizzle/0042_alert_channels.sql +0 -21
  195. package/drizzle/meta/0000_snapshot.json +0 -370
  196. package/drizzle/meta/0001_snapshot.json +0 -482
  197. package/drizzle/meta/0002_snapshot.json +0 -575
  198. package/drizzle/meta/0003_snapshot.json +0 -667
  199. package/drizzle/meta/0004_snapshot.json +0 -769
  200. package/drizzle/meta/0005_snapshot.json +0 -864
  201. package/drizzle/meta/0006_snapshot.json +0 -882
  202. package/drizzle/meta/0007_snapshot.json +0 -876
  203. package/drizzle/meta/0008_snapshot.json +0 -882
  204. package/drizzle/meta/0009_snapshot.json +0 -948
  205. package/drizzle/meta/0010_snapshot.json +0 -969
  206. package/drizzle/meta/0011_snapshot.json +0 -1049
  207. package/drizzle/meta/0012_snapshot.json +0 -1115
  208. package/drizzle/meta/0013_snapshot.json +0 -1121
  209. package/drizzle/meta/0014_snapshot.json +0 -1190
  210. package/drizzle/meta/0015_snapshot.json +0 -1280
  211. package/drizzle/meta/0016_snapshot.json +0 -1683
  212. package/drizzle/meta/0017_snapshot.json +0 -1834
  213. package/drizzle/meta/0018_snapshot.json +0 -1834
  214. package/drizzle/meta/0019_snapshot.json +0 -1909
  215. package/drizzle/meta/0020_snapshot.json +0 -1921
  216. package/drizzle/meta/0021_snapshot.json +0 -2045
  217. package/drizzle/meta/0022_snapshot.json +0 -2246
  218. package/drizzle/meta/0023_snapshot.json +0 -2252
  219. package/drizzle/meta/0024_snapshot.json +0 -2375
  220. package/drizzle/meta/0025_snapshot.json +0 -2407
  221. package/drizzle/meta/0026_snapshot.json +0 -2413
  222. package/drizzle/meta/0027_snapshot.json +0 -2425
  223. package/drizzle/meta/0028_snapshot.json +0 -2438
  224. package/drizzle/meta/0029_snapshot.json +0 -2546
  225. package/drizzle/meta/0030_snapshot.json +0 -2586
  226. package/drizzle/meta/0031_snapshot.json +0 -2598
  227. package/drizzle/meta/0032_snapshot.json +0 -2699
  228. package/drizzle/meta/0033_snapshot.json +0 -2712
  229. package/drizzle/meta/0034_snapshot.json +0 -2719
  230. package/drizzle/meta/0035_snapshot.json +0 -2726
  231. package/drizzle/meta/0036_snapshot.json +0 -2876
  232. package/drizzle/meta/0037_snapshot.json +0 -2883
  233. package/drizzle/meta/0038_snapshot.json +0 -2895
  234. package/drizzle/meta/0039_snapshot.json +0 -3501
  235. package/drizzle/meta/0040_snapshot.json +0 -3527
  236. package/drizzle/meta/0041_snapshot.json +0 -3824
  237. package/drizzle/meta/0042_snapshot.json +0 -3960
  238. package/drizzle/meta/_journal.json +0 -307
  239. package/src/data/seed.json +0 -253
package/README.md CHANGED
@@ -2,187 +2,300 @@
2
2
 
3
3
  # lurq
4
4
 
5
- **The verification layer for AI coding agents to ship unbreakable code.**
5
+ **The verification layer for everything your agent installs.**
6
6
 
7
- A live index of npm scored from public signals and co-installation through a sandbox. Use lurq
8
- through an MCP server, CLI, HTTP API, or an installable agent skill.
7
+ Your coding agent picks npm packages from memory. lurq checks them against the live
8
+ registry, security advisories, shipped type definitions and real co-installs, before
9
+ anything lands in `package.json`.
9
10
 
10
11
  [![npm version](https://img.shields.io/npm/v/lurqrun?color=%230b7285&label=npm)](https://www.npmjs.com/package/lurqrun)
11
12
  [![npm downloads](https://img.shields.io/npm/dm/lurqrun?color=%230b7285)](https://www.npmjs.com/package/lurqrun)
13
+ [![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.jadenryu%2Flurq-6E56CF)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.jadenryu/lurq)
12
14
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
13
15
  [![node](https://img.shields.io/badge/node-%3E%3D20-339933?logo=node.js&logoColor=white)](https://nodejs.org)
14
- [![MCP](https://img.shields.io/badge/MCP-compatible-6E56CF)](https://modelcontextprotocol.io)
15
16
 
16
- [Quick start](#quick-start) · [MCP tools](#mcp-tools) · [CLI](#cli) · [Autopilot](#autopilot) · [How ranking works](#how-ranking-works) · [Docs](https://lurq.run/docs)
17
+ [Install](#install) · [For AI agents](#for-ai-agents) · [MCP tools](#mcp-tools) · [CLI](#cli) · [Autopilot](#autopilot) · [Docs](https://www.lurq.run/docs)
17
18
 
18
19
  </div>
19
20
 
21
+ ```text
22
+ $ lurq verify lodahs
23
+ lodahs ✗ do not install 0.0.1-security (latest) without review
24
+ • name closely mimics "lodash" — possible typosquat
25
+ • 1 critical/high advisory(ies) recorded against this package
26
+ risk flags: possible-typosquat-of:lodash, low-downloads, single-maintainer, has-known-advisory
27
+
28
+ $ lurq verify zod
29
+ zod ✓ no supply-chain problems found in 4.6.4 (latest)
30
+ weekly dl: 209.2M confidence: proven advisories: 0
31
+
32
+ $ lurq compat next @auth/core next-auth
33
+ next + @auth/core + next-auth conflict
34
+ peer-deps next-auth needs peer @auth/core@0.34.3, but the stack uses @auth/core@0.41.3
35
+ ```
36
+
37
+ Real output, not a mockup. Your agent gets the same answers over MCP.
38
+
20
39
  ---
21
40
 
22
- ## Why
41
+ ## Why your agent needs this
23
42
 
24
- Your agent is terrible at resolving dependency matrices and maintaining old projects, leading to stack version drift.
43
+ A model's knowledge of npm stops at its training cutoff. The registry doesn't.
25
44
 
26
- lurq reads the shipped code instead and caches it so we can diff surfaces across versions. lurq upgrades stacks and reports failures before they can even happen. lurq is what the agent checks first when planning, updating, or deploying any project.
45
+ - **Invented and typosquatted names.** Agents confidently install packages that don't exist, or that
46
+ exist only because someone registered the misspelling.
47
+ - **APIs that moved.** Of the 38,752 packages lurq tracks, 2,725 shipped a new major version between
48
+ May 1 and September 13, 2026. Code written from memory calls functions that were renamed or removed.
49
+ - **Stacks that don't install together.** Every package can be healthy on its own while the set
50
+ fails on a peer or engine range. That usually surfaces at deploy.
27
51
 
28
- lurq's information comes from readable and executable sources. These include analyzing advisories, release cadence, deprecations, and sandboxing. Compatibility edges are
29
- minted continuously and stored in a Postgres database. Responses are
30
- compact and token-budgeted so lurq works alongside your agent.
52
+ lurq answers from evidence it can show: **47,238 packages scored, 4.2M versions tracked, 34,843 API
53
+ surfaces extracted from shipped code, and 27M co-install pairs**, refreshed daily from npm, GitHub,
54
+ deps.dev and OSV. Every answer carries a `dataAsOf` timestamp.
31
55
 
32
- > **Scope:** the JavaScript/TypeScript web stack (npm) only.
56
+ > **Scope:** the JavaScript/TypeScript ecosystem (npm).
33
57
 
34
58
  ---
35
59
 
36
- ## Quick start
60
+ ## Install
37
61
 
38
- lurq is a **hosted service** — you don't run a database or a sync. One command,
39
- with nothing installed first:
62
+ One command, once per machine. Nothing to install first:
40
63
 
41
64
  ```bash
42
65
  npx lurqrun
43
66
  ```
44
67
 
45
- This command runs the guided setup, allowing you to sign in and validate your system with an API key. lurq automatically
46
- detects your installed assistants and writes a remote MCP entry.
68
+ The setup wizard:
47
69
 
48
- ```json
49
- {
50
- "type": "http",
51
- "url": "https://api.lurq.run/mcp",
52
- "headers": { "Authorization": "Bearer ..." }
53
- }
54
- ```
70
+ 1. Opens lurq in your browser. Sign in and the key comes back to the terminal by itself.
71
+ 2. Detects every coding agent on the machine.
72
+ 3. Writes a keyed remote MCP entry for each, in the shape that agent expects.
73
+ 4. Installs standing instructions where the agent supports them, so it reaches for lurq instead of
74
+ answering from memory.
75
+
76
+ Restart your agent afterward. **The free plan includes 1,000 hosted calls a month and never asks
77
+ for a card.**
78
+
79
+ **Works with:** Claude Code · Cursor · Windsurf · VS Code / GitHub Copilot · OpenAI Codex CLI ·
80
+ Gemini CLI · Google Antigravity · Kiro
81
+
82
+ **Check it worked:** ask your agent to _"add zod to this project"_. It should call lurq's `verify`
83
+ before installing anything.
84
+
85
+ **Claude Code plugin**, no terminal needed:
55
86
 
56
- **No database credentials ever touch your machine.** Restart your agent afterward.
87
+ ```text
88
+ /plugin marketplace add jadenryu/lurq
89
+ /plugin install lurq@lurq
90
+ ```
57
91
 
58
- ### The `lurq` command
92
+ One-click links for Cursor and VS Code are in the
93
+ [quickstart](https://www.lurq.run/docs/quickstart#one-click-install).
59
94
 
60
- The package is published as **`lurqrun`**. The command you type is `lurq`, and it exists only once the package is
61
- installed.
95
+ The package is published as **`lurqrun`** (the bare name was taken). The command is `lurq`:
62
96
 
63
97
  ```bash
64
- npm install -g lurqrun # then `lurq` works in any terminal
98
+ npm install -g lurqrun
65
99
  lurq --version
66
100
  ```
67
101
 
68
- <details>
69
- <summary><b>Supported assistants</b></summary>
102
+ ---
70
103
 
71
- Claude Code · Cursor · Windsurf · VS Code / Copilot · Codex · Gemini CLI ·
72
- Antigravity · Kiro
104
+ ## For AI agents
73
105
 
74
- Target one explicitly with `npx lurqrun install-skill --agent <name>`, or
75
- self-host against your own database with `--local`.
106
+ If you are an AI coding agent and your user asked you to set up lurq, follow these steps.
76
107
 
77
- </details>
108
+ **1. Run setup.**
78
109
 
79
- <details>
80
- <summary><b>Uninstall, or start over</b></summary>
110
+ ```bash
111
+ npx lurqrun setup
112
+ ```
113
+
114
+ In your shell it does not prompt: it prints a one-time sign-in link and exits right away. Give the
115
+ user that link. When they sign in on this computer, lurq stores a key and connects every detected
116
+ coding agent by itself. Never invent a key.
81
117
 
82
- **Reinstall** is just setup again. It is safe to re-run and overwrites previous runs.
118
+ **2. Or configure non-interactively** when the user already has a key from
119
+ [lurq.run/dashboard/keys](https://www.lurq.run/dashboard/keys), or on a cloud, SSH or CI machine, where
120
+ a sign-in link on this computer can't work:
83
121
 
84
122
  ```bash
85
- npx lurqrun
123
+ npx lurqrun setup --yes --no-open --api-key <key> --agent <id>
86
124
  ```
87
125
 
88
- **Uninstall** is three separate things, because setup writes to three places:
126
+ | Agent | `--agent` |
127
+ | ------------------------ | ------------- |
128
+ | Claude Code | `claude-code` |
129
+ | Cursor | `cursor` |
130
+ | Windsurf | `windsurf` |
131
+ | VS Code / GitHub Copilot | `copilot` |
132
+ | OpenAI Codex CLI | `codex` |
133
+ | Gemini CLI | `gemini-cli` |
134
+ | Google Antigravity | `antigravity` |
135
+ | Kiro | `kiro` |
89
136
 
90
- ```bash
91
- lurq logout # forget the API key (~/.lurq/config.json)
92
- npm uninstall -g lurqrun # remove the `lurq` command
137
+ `--agent all` configures every detected agent. With `--yes`, the key can also come from `LURQ_API_KEY`.
138
+
139
+ Some checks need no key at all. `npx lurqrun check-upgrade --upgrade <package>@<from>..<to>` compares an
140
+ upgrade against the names your code actually imports, locally.
141
+
142
+ **3. Tell the user to restart the agent**, then confirm `lurq` appears in its MCP tool list.
143
+
144
+ <details>
145
+ <summary><b>Writing the MCP config by hand</b></summary>
146
+
147
+ Endpoint: `https://api.lurq.run/mcp` (streamable HTTP), header `Authorization: Bearer <key>`. The
148
+ field names differ by client:
149
+
150
+ **Claude Code** (`~/.claude.json`, under `mcpServers`) and **VS Code** (`mcp.json`, under `servers`):
151
+
152
+ ```json
153
+ "lurq": { "type": "http", "url": "https://api.lurq.run/mcp", "headers": { "Authorization": "Bearer <key>" } }
93
154
  ```
94
155
 
95
- The third is the MCP entries in your agents' config files. Delete the `lurq` entry from whichever of these you
96
- use:
156
+ **Cursor** (`~/.cursor/mcp.json`) and **Kiro** (`~/.kiro/settings/mcp.json`), under `mcpServers`:
97
157
 
98
- | Assistant | MCP config | Instructions file |
99
- |---|---|---|
100
- | Claude Code | `~/.claude.json` | `~/.claude/skills/lurq/SKILL.md` |
101
- | Cursor | `~/.cursor/mcp.json` | |
102
- | Windsurf | `~/.codeium/windsurf/mcp_config.json` | `~/.codeium/windsurf/memories/global_rules.md` |
103
- | VS Code / Copilot | `<VS Code user dir>/mcp.json` | |
104
- | Codex | `~/.codex/config.toml` | `~/.codex/AGENTS.md` |
105
- | Gemini CLI | `~/.gemini/settings.json` | `~/.gemini/GEMINI.md` |
106
- | Antigravity | `~/.gemini/config/mcp_config.json` | `~/.gemini/GEMINI.md` |
107
- | Kiro | `~/.kiro/settings/mcp.json` | `~/.kiro/steering/lurq.md` |
158
+ ```json
159
+ "lurq": { "url": "https://api.lurq.run/mcp", "headers": { "Authorization": "Bearer <key>" } }
160
+ ```
108
161
 
109
- `lurq logout` **only** clears the key stored for the CLI. A copy of it
110
- lives in each MCP entry above, so revoke the key from
111
- [the dashboard](https://lurq.run/dashboard/keys).
162
+ **Windsurf** (`~/.codeium/windsurf/mcp_config.json`) and **Antigravity** (`~/.gemini/config/mcp_config.json`), under `mcpServers`:
163
+
164
+ ```json
165
+ "lurq": { "serverUrl": "https://api.lurq.run/mcp", "headers": { "Authorization": "Bearer <key>" } }
166
+ ```
167
+
168
+ **Gemini CLI** (`~/.gemini/settings.json`, under `mcpServers`). It must be `httpUrl`, because a
169
+ plain `url` is read as SSE:
170
+
171
+ ```json
172
+ "lurq": { "httpUrl": "https://api.lurq.run/mcp", "headers": { "Authorization": "Bearer <key>" } }
173
+ ```
174
+
175
+ **Codex** (`~/.codex/config.toml`). Headers go in an inline table:
176
+
177
+ ```toml
178
+ [mcp_servers.lurq]
179
+ url = "https://api.lurq.run/mcp"
180
+ http_headers = { Authorization = "Bearer <key>" }
181
+ ```
112
182
 
113
183
  </details>
114
184
 
185
+ ### When to call lurq
186
+
187
+ | You are about to… | Call |
188
+ | ----------------------------------------------------- | -------------------------------------------------------------------- |
189
+ | Install or import a package | `verify` with the exact name, first |
190
+ | Choose between libraries | `compare` your candidates, then `verify` the pick |
191
+ | Commit to a set of packages | `compat` with the whole set in one call |
192
+ | Write code against a package whose API may have moved | `usage`, with the version you remember as `knownVersion` |
193
+ | Upgrade, or explain a break | `diff_surface` between the two versions |
194
+ | Add dependencies in a team codebase | `policy`, before choosing |
195
+ | Review a whole project | `audit` with names and versions from `package.json` and the lockfile |
196
+ | Wire an MCP server into an agent | `mcp_surface`, or `mcp_stack` for several |
197
+ | Not sure which tool fits | `capabilities` |
198
+
199
+ When lurq flags something, tell the user what it found and that it came from lurq. An `unknown` or
200
+ `UNVERIFIABLE` result means lurq could not check. It never means the package is clean.
201
+
202
+ Machine-readable docs: [lurq.run/llms.txt](https://www.lurq.run/llms.txt) ·
203
+ [lurq.run/docs/llms-full.txt](https://www.lurq.run/docs/llms-full.txt)
204
+
115
205
  ---
116
206
 
117
207
  ## MCP tools
118
208
 
119
- lurq can call these tools over MCP. Every response
120
- carries a `dataAsOf` timestamp so your agents know how fresh the information is.
209
+ Fifteen tools. Responses are compact to save tokens, and package answers carry `dataAsOf`.
210
+
211
+ **Before installing**
212
+
213
+ | Tool | What it answers |
214
+ | ---------- | -------------------------------------------------------------------------------------- |
215
+ | `verify` | Is this package real, healthy and safe? Catches hallucinated and typosquatted names |
216
+ | `evaluate` | The full evidence for one package: scores, advisories, usage guide, sandbox verdict |
217
+ | `compare` | 2–5 packages ranked head-to-head |
218
+ | `policy` | What your team's selection policy refuses, so the agent picks an allowed package first |
219
+
220
+ **Across a stack**
221
+
222
+ | Tool | What it answers |
223
+ | --------- | ------------------------------------------------------------------------------------------------------- |
224
+ | `compat` | Will these packages install together? Returns the exact clashing peer or engine range |
225
+ | `audit` | A whole project's outdated, deprecated and vulnerable dependencies and drifted MCP servers, in one call |
226
+ | `diagram` | A reference-architecture Mermaid diagram for a stack |
227
+
228
+ **Writing code**
229
+
230
+ | Tool | What it answers |
231
+ | ----------------- | ------------------------------------------------------------------------------------------------- |
232
+ | `usage` | A version's real public API from its shipped `.d.ts`, and what changed since the version you know |
233
+ | `resolve_surface` | What a version actually exports at runtime |
234
+ | `diff_surface` | What a version bump adds, removes, renames or changes arity on |
235
+
236
+ **MCP servers**
237
+
238
+ | Tool | What it answers |
239
+ | ------------- | -------------------------------------------------------------------------------------------------------------- |
240
+ | `mcp_surface` | A server's real tool contract, from a live `tools/list` handshake, including what each tool can write or reach |
241
+ | `mcp_drift` | What a server changed between two versions |
242
+ | `mcp_stack` | Do these servers collide in one agent's tool namespace? |
243
+
244
+ **About lurq**
121
245
 
122
- | Tool | What it answers |
123
- |---|---|
124
- | `evaluate` | Full evidence read for one package — scores, advisories, usage guide |
125
- | `compare` | 2–5 packages ranked head-to-head |
126
- | `verify` | Is this package real, healthy, and not risky? *(anti-hallucination guard)* |
127
- | `compat` | Will these packages actually install together? (peer/engine constraints) |
128
- | `diagram` | A reference-architecture Mermaid diagram for a stack |
129
- | `usage` | A version's *real* public API — symbols and signatures from its shipped `.d.ts` |
130
- | `resolve_surface` | The exact export surface of one package version |
131
- | `diff_surface` | What a version bump adds, removes, renames, or changes arity on |
132
- | `report_outcome` | What happened after a pick shipped — installed clean, broke the build, resolved the task |
246
+ | Tool | What it answers |
247
+ | ---------------- | --------------------------------------------------------------- |
248
+ | `capabilities` | Which lurq tool answers this situation |
249
+ | `report_outcome` | What happened after a pick shipped, which feeds future rankings |
133
250
 
134
- `usage` outputs the delta between your agent's analysis of a package versus lurq's ground truth. That fact
135
- exists in no changelog and no model's training data.
251
+ Inputs, outputs and verdict definitions for each: [MCP tools reference](https://www.lurq.run/docs/mcp-tools).
136
252
 
137
253
  ---
138
254
 
139
255
  ## CLI
140
256
 
141
- The same index, scriptable. Every capability is a subcommand.
257
+ The same index, scriptable. Every read command takes `--json`.
142
258
 
143
259
  ```bash
144
- # Evidence
260
+ # Before installing
261
+ lurq verify jsonwebtoken
145
262
  lurq evaluate zod
146
263
  lurq compare date-fns dayjs moment
147
- lurq verify jsonwebtoken
148
264
 
149
- # API surfaces
150
- lurq usage zod --known 3.22.4 # what changed since the version you know
151
- lurq versions react # stored version timeline
265
+ # Stacks and projects
266
+ lurq compat next react react-dom
267
+ lurq audit . # every dependency and MCP server in the project
152
268
 
153
- # Stacks
154
- lurq compat next react react-dom # do these install together?
155
-
156
- # Upgrades
269
+ # APIs and upgrades
270
+ lurq usage zod --known 3.22.4 # what changed since the version you know
157
271
  lurq upgrade-plan . # what's behind, and what each upgrade removes
158
272
  lurq check-upgrade . --plan lurq-plan.json --exit-code
159
273
 
160
- # Shipping your own (the same diff, pointed the other way)
274
+ # Publishing your own package
161
275
  lurq check-release # is the version you're about to publish honest?
162
- lurq check-api --against origin/main # does this break the callers of your API?
276
+ lurq check-api --against origin/main # does this break your API's callers?
163
277
 
164
- # Finding your way around
165
- lurq can "will this upgrade break my code" # which lurq capability answers this?
278
+ # MCP servers
279
+ lurq mcp-scan # read the servers you have configured, record what changed
166
280
 
167
- # Configuration & serving
168
- lurq weights # the exact ranking weights, printed
169
- lurq edit-weights --set composite.lambda=0.5
170
- lurq serve-http # run it as a rate-limited service of your own
281
+ # Team policy
282
+ lurq policy pull policy.json # keep the selection policy in a reviewed file
283
+ lurq policy push policy.json # and apply it from CI (needs a policy:write key)
284
+
285
+ # Finding your way
286
+ lurq can "will this upgrade break my code" # which capability answers this?
171
287
  ```
172
288
 
173
- Use the '-- json ' flag for every read command.
289
+ Full reference: [CLI docs](https://www.lurq.run/docs/cli).
174
290
 
175
291
  ---
176
292
 
177
293
  ## Autopilot
178
294
 
179
- lurq also keeps a repository's dependencies current **and rewrites the code an
180
- upgrade breaks.**
181
-
182
- lurq can open PRs addressing the symbol-level API surface diff
183
- and resolve with what calls your code references.
295
+ lurq keeps a repository's dependencies current, and names the code an upgrade breaks before it merges.
184
296
 
185
- **The gate needs no tests at all.**
297
+ The check reads the symbol-level API diff between versions and matches it against what your code
298
+ actually references. **It needs no tests.**
186
299
 
187
300
  ```
188
301
  blocking a referenced symbol or deep import disappears,
@@ -193,70 +306,129 @@ ok nothing referenced is affected
193
306
  unverified could not be established → never counted as safe
194
307
  ```
195
308
 
196
- ### The loop
197
-
198
- | Step | Runs on | Needs |
199
- |---|---|---|
200
- | 1. `lurq upgrade-plan` — drift + what each upgrade removes | your runner | lurq key |
201
- | 2. `lurq check-upgrade` — intersect with your source, `file:line` | your runner | nothing |
202
- | 3. `claude-code-action` — rewrite the named call sites, run your tests | your runner | Anthropic credential |
203
- | 4. `create-pull-request` — one branch, one PR | your runner | `GITHUB_TOKEN` |
204
- | 5. Outcomes post back — names and counts, never source | lurq | — |
309
+ | Step | Runs on | Needs |
310
+ | ----------------------------------------------------------------------------------------------------- | ----------- | -------------------- |
311
+ | 1. `lurq upgrade-plan`: drift, plus what each upgrade removes | your runner | lurq key |
312
+ | 2. `lurq check-upgrade`: matched against your source, with `file:line` | your runner | nothing |
313
+ | 3. `lurq fix`: applies what the package itself proves — renames, and the range bump in every manifest | your runner | nothing |
314
+ | 4. `claude-code-action`: migrates what a rule cannot, and runs your tests | your runner | Anthropic credential |
315
+ | 5. `create-pull-request`: one branch, one PR | your runner | `GITHUB_TOKEN` |
316
+ | 6. Outcomes post back: names and counts, never source | lurq | nothing |
317
+
318
+ **Three modes, and editing is opt-in.** The workflow starts in `comment`: it plans, checks, writes the
319
+ brief to the run summary, and changes nothing. `fix` opens a pull request containing only what the
320
+ package itself proves — renamed call sites, and the range bump in every manifest — so it needs **no
321
+ Anthropic credential**, and it is what a newly armed repo gets. `pr` is `fix` plus the agent, for the
322
+ changes a rule cannot make. Step 4 above is the only one that needs a model, so only `pr` does.
323
+
324
+ The dashboard setting governs repos that already installed the workflow: each run reads the mode from
325
+ the plan response rather than from the committed file.
326
+
327
+ Cadence follows scope — weekly for the scopes that track breakage, since majors arrive slowly enough
328
+ that a daily run mostly reports nothing new; daily for a repo set to advisories-only, because weekly
329
+ can mean seven days sitting on a known CVE.
330
+
331
+ **Trust model.** lurq's GitHub App holds `Contents: read-only` and `Actions: write`. It can read your
332
+ manifests and _start_ the workflow you committed — it cannot write a byte to your repository, change
333
+ this file, or set a repository variable. Every write is made by the workflow itself using your own
334
+ ephemeral `GITHUB_TOKEN`, bounded by the `permissions:` block in the file you control. The agent's allowlist is
335
+ `Read,Edit,Write,Bash(<pkg-manager>:*)`, so it edits files but never touches version control.
336
+ Removing it is `git rm .github/workflows/lurq-upgrade.yml`.
205
337
 
206
- Steps 1–2 are the default and are also available on the web app through project autopilot. The generated workflow starts in `comment` mode: it
207
- plans, checks, and writes the brief to the run summary. Editing
208
- is opt-in per repository. Click the policy tab to set global security parameters.
338
+ ---
209
339
 
210
- ### Trust model
340
+ ## What leaves your machine
211
341
 
212
- - **lurq's GitHub App is `Contents: read-only` and stays that way.** It cannot
213
- write to any repository, ever.
214
- - **Every write uses your own `GITHUB_TOKEN`** — ephemeral, scoped to one repo,
215
- limited to the `permissions:` block in your committed file.
216
- - **The agent cannot touch version control.** Its allowlist is
217
- `Read,Edit,Write,Bash(<pkg-manager>:*)`. Your agent can only edit
218
- files.
219
- - **Revoking it is `git rm .github/workflows/lurq-upgrade.yml`.**
342
+ Package names and versions, never your source code. `audit` receives the inventory your agent reads
343
+ locally, `check-upgrade` matches symbols against your code on your own runner, and outcomes report
344
+ names and counts only.
220
345
 
221
- Architecture and limits: [`docs/lurq-autopilot.md`](docs/lurq-autopilot.md).
346
+ `lurq mcp-scan` is the one exception worth knowing: by default it records what your MCP servers
347
+ expose (tool names, descriptions and parameters, with secrets redacted) to your account, so it can
348
+ tell you what changed. `--no-upload` keeps the scan on your machine.
222
349
 
223
350
  ---
224
351
 
225
352
  ## Where the evidence comes from
226
353
 
227
- **Readable** — npm, GitHub, deps.dev, and OSV, re-synced daily. Downloads, release
228
- cadence, maintenance, advisories, deprecations, license, bundle cost.
354
+ **Readable:** npm, GitHub, deps.dev and OSV, re-synced daily. Downloads, release cadence,
355
+ maintenance, advisories, deprecations, license and bundle cost.
356
+
357
+ **Executed:** an isolated sandbox installs and imports package versions and records the results in a
358
+ compatibility matrix. `compat` reads those edges alongside declared peer and engine ranges, which is
359
+ why lurq can say whether a whole stack holds together.
229
360
 
230
- **Executed** — an isolated sandbox (E2B, with a local driver for trusted work) that
231
- installs and imports a package version. Results are recorded in the compatibility matrix.
232
- Compatibility is established through co-installation. `compat` reads those edges, which is why lurq can tell you
233
- that an entire stack holds together.
361
+ **Ranking is deterministic and public.** No model sits in the scoring path:
234
362
 
235
- Executable proof allows lurq to look beyond changelogs and training data.
363
+ ```
364
+ health = maintenance 0.35 · adoption 0.30 · reliability 0.25 · efficiency 0.10
365
+ quality = types · tests · docs · changelog · dep count · license · provenance
366
+ composite = blend at a single tunable λ (default 0.35)
367
+ ```
368
+
369
+ Every weight lives in [`src/scoring/weights.ts`](src/scoring/weights.ts) and prints with `lurq weights`.
236
370
 
237
371
  ---
238
372
 
239
- ## How ranking works
373
+ ## Plans
240
374
 
241
- Deterministic, and public. **No model sits in the scoring path** — health and quality
242
- are computed from recorded signals, which is why lurq is fast, cheap, and reproducible.
375
+ | Plan | Price | Hosted calls |
376
+ | -------- | --------------------------- | ----------------------------------- |
377
+ | Free | $0 | 1,000 a month |
378
+ | Pro | $15/mo | 10,000 a month |
379
+ | Team | $25/seat/mo, 3-seat minimum | 15,000 per seat, pooled |
380
+ | Business | from $1,000/mo | Uncapped, with SSO and audit export |
243
381
 
382
+ Past the limit, calls slow to 20 a day rather than stopping. The CLI run against your own database
383
+ is never metered. Details: [pricing](https://www.lurq.run/#pricing).
384
+
385
+ ---
386
+
387
+ <details>
388
+ <summary><b>Uninstall, reinstall, and where setup writes</b></summary>
389
+
390
+ Setup is safe to re-run: `npx lurqrun` again overwrites the previous entries.
391
+
392
+ ```bash
393
+ lurq uninstall # MCP entries, agent instructions, the stored key
394
+ lurq uninstall --agent cursor # just one agent
395
+ npm uninstall -g lurqrun # then remove the `lurq` command
244
396
  ```
245
- health = maintenance 0.35 · adoption 0.30 · reliability 0.25 · efficiency 0.10
246
- quality = types · tests · docs · changelog · dep count · license · provenance
247
- composite = blend at a single tunable λ (default 0.35)
248
- ```
249
397
 
250
- `quality` is a separate, **adoption-independent** axis.
398
+ It lists what it will remove and asks first (`--yes` skips the question).
399
+
400
+ | Agent | MCP config | Instructions |
401
+ | ----------------- | ------------------------------------- | ---------------------------------------------- |
402
+ | Claude Code | `~/.claude.json` | `~/.claude/skills/lurq/SKILL.md` |
403
+ | Cursor | `~/.cursor/mcp.json` | none (tool descriptions carry the guidance) |
404
+ | Windsurf | `~/.codeium/windsurf/mcp_config.json` | `~/.codeium/windsurf/memories/global_rules.md` |
405
+ | VS Code / Copilot | `<VS Code user dir>/mcp.json` | none |
406
+ | Codex | `~/.codex/config.toml` | `~/.codex/AGENTS.md` |
407
+ | Gemini CLI | `~/.gemini/settings.json` | `~/.gemini/GEMINI.md` |
408
+ | Antigravity | `~/.gemini/config/mcp_config.json` | `~/.gemini/GEMINI.md` |
409
+ | Kiro | `~/.kiro/settings/mcp.json` | `~/.kiro/steering/lurq.md` |
410
+
411
+ `lurq logout` only clears the CLI's stored key. A copy stays in each MCP entry until `lurq uninstall`
412
+ removes it, and the key keeps working until you revoke it in
413
+ [the dashboard](https://www.lurq.run/dashboard/keys).
414
+
415
+ </details>
416
+
417
+ <details>
418
+ <summary><b>Self-hosting</b></summary>
251
419
 
252
- Every weight lives in [`src/scoring/weights.ts`](src/scoring/weights.ts) and is
253
- printable with `lurq weights`.
420
+ lurq runs against your own Postgres too: `lurq serve` (stdio MCP) or `lurq serve-http` (a
421
+ rate-limited HTTP service), with `DATABASE_URL` set. The published CLI installs only what hosted use
422
+ needs; the first self-hosting command prints the exact `npm install` line for the server packages.
423
+ Guide: [self-hosting](https://www.lurq.run/docs/self-hosting).
424
+
425
+ </details>
254
426
 
255
427
  ---
256
428
 
257
429
  ## Contact
258
430
 
259
- Inquiries, partnerships, or proposals: **jadenryu@lurq.run**
431
+ Inquiries, partnerships or proposals: **jadenryu@lurq.run**
260
432
 
261
433
  ## License
262
434
 
@@ -0,0 +1,24 @@
1
+ import { createRequire as __lurqCreateRequire } from 'node:module'; const require = __lurqCreateRequire(import.meta.url);
2
+ import {
3
+ handleAudit
4
+ } from "./chunk-B2UUYRBX.js";
5
+ import "./chunk-FDFPMBCA.js";
6
+ import "./chunk-BJT2LHAR.js";
7
+ import "./chunk-P6MIKSPY.js";
8
+ import "./chunk-6EQ3ARXA.js";
9
+ import "./chunk-SHCEBP3J.js";
10
+ import "./chunk-LEGPB7DO.js";
11
+ import "./chunk-Q5VPF4WI.js";
12
+ import "./chunk-QSL6QN5X.js";
13
+ import "./chunk-QUIMQ7YL.js";
14
+ import "./chunk-ONDVTXUO.js";
15
+ import "./chunk-4JHDSVIN.js";
16
+ import "./chunk-KYKSZ3XZ.js";
17
+ import "./chunk-6L67QMCP.js";
18
+ import "./chunk-3GHJR7XR.js";
19
+ import "./chunk-MYGSLK44.js";
20
+ import "./chunk-72Y2FDVS.js";
21
+ import "./chunk-I3M2KJXB.js";
22
+ export {
23
+ handleAudit
24
+ };