lurqrun 0.1.8 → 0.1.9

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 (78) hide show
  1. package/dist/{auditHandler-VWCXSDVO.js → auditHandler-G7PHKMZR.js} +8 -8
  2. package/dist/autopilotInit-JO2SH5K3.js +266 -0
  3. package/dist/bin/lurq.js +45 -42
  4. package/dist/{browserAuth-J7APSD4P.js → browserAuth-PVYODBNR.js} +1 -1
  5. package/dist/{cache-AEAKCV4I.js → cache-ND4VOUVY.js} +2 -2
  6. package/dist/{check-2JTQDQA6.js → check-A3FJE62G.js} +5 -5
  7. package/dist/{checkUpgrade-5YW77OBL.js → checkUpgrade-Q4CV7GXG.js} +1 -1
  8. package/dist/{chunk-XBQA4I36.js → chunk-2LXYRDUN.js} +1 -1
  9. package/dist/{chunk-P6MIKSPY.js → chunk-2XMD4H2I.js} +1 -1
  10. package/dist/{chunk-4JHDSVIN.js → chunk-6353IJJ5.js} +1 -1
  11. package/dist/{chunk-DSROTZ3Z.js → chunk-64DPQSXV.js} +1 -1
  12. package/dist/{chunk-O4KHCV6I.js → chunk-64YOP5BQ.js} +4 -4
  13. package/dist/{chunk-NPVN2THM.js → chunk-75LMEMJ3.js} +1 -1
  14. package/dist/{chunk-TUXQ32WE.js → chunk-ABH4BTK4.js} +8 -7
  15. package/dist/{chunk-ZJMLQ37G.js → chunk-AHRDDKNO.js} +1 -1
  16. package/dist/{chunk-TDTYV6QI.js → chunk-AQ6IVSFB.js} +1 -1
  17. package/dist/{chunk-DM37MTOO.js → chunk-ETY4FSOW.js} +1 -1
  18. package/dist/{chunk-FDFPMBCA.js → chunk-FHRT32JH.js} +2 -2
  19. package/dist/{chunk-NYZU5NCW.js → chunk-GNNGXVCG.js} +1 -1
  20. package/dist/{chunk-QCRBX3LV.js → chunk-ILKYIVYV.js} +2 -2
  21. package/dist/{chunk-6L67QMCP.js → chunk-J3NUERU7.js} +1 -1
  22. package/dist/{chunk-BN3NM47Q.js → chunk-JGIJZJ3X.js} +3 -3
  23. package/dist/{chunk-BJT2LHAR.js → chunk-JJCQVOC6.js} +6 -6
  24. package/dist/{chunk-EYAKM6YN.js → chunk-KT7PWDNV.js} +1 -1
  25. package/dist/{chunk-72Y2FDVS.js → chunk-L3V7AVM6.js} +1 -1
  26. package/dist/{chunk-3676XOBU.js → chunk-M2CYYBAH.js} +12 -12
  27. package/dist/{chunk-B2UUYRBX.js → chunk-N2NYPTRU.js} +6 -6
  28. package/dist/{chunk-IFNONGRQ.js → chunk-N4TJO44E.js} +1 -1
  29. package/dist/{chunk-VGCDRK3S.js → chunk-NGMJQBOV.js} +1 -1
  30. package/dist/{chunk-64ZF7KO4.js → chunk-POHTPT37.js} +10 -10
  31. package/dist/{chunk-2O6Z37IT.js → chunk-PZZU3FQY.js} +6 -6
  32. package/dist/{chunk-EQCXENKZ.js → chunk-Q7CMOU5C.js} +2 -2
  33. package/dist/{chunk-OTJFHESY.js → chunk-SFY5MPJE.js} +1 -1
  34. package/dist/{chunk-A3TYI2TF.js → chunk-SWMWVK2R.js} +1 -1
  35. package/dist/{chunk-2WD4QAH4.js → chunk-TVOCVIM7.js} +1 -1
  36. package/dist/{chunk-FVYFV5HA.js → chunk-XA2SLNBR.js} +1 -1
  37. package/dist/{chunk-D3VTZS7V.js → chunk-XBTYJQEK.js} +1 -1
  38. package/dist/{chunk-ONDVTXUO.js → chunk-ZJ5XHA77.js} +1 -1
  39. package/dist/{client-MU4EUDZV.js → client-SJIWK4CK.js} +3 -3
  40. package/dist/{commands-UOOTMBKA.js → commands-6BBLN5N5.js} +28 -28
  41. package/dist/{compat-Q5DVPITN.js → compat-6B3CRT5F.js} +5 -5
  42. package/dist/{constants-DJFOFZ44.js → constants-HX3RTD6Q.js} +1 -1
  43. package/dist/{domains-VRT4BRVZ.js → domains-RKRPVP5A.js} +1 -1
  44. package/dist/{envCheck-KUPTORFQ.js → envCheck-IL22OTSC.js} +1 -1
  45. package/dist/{fetch-PJ3SC32M.js → fetch-GHIP3VHN.js} +3 -3
  46. package/dist/{firstTouch-COJCMOB3.js → firstTouch-M64T2MWF.js} +1 -1
  47. package/dist/{fix-3EDWNKW3.js → fix-Z7ZY55HB.js} +7 -7
  48. package/dist/{handlers-4Q37WIFT.js → handlers-GOXW2GWZ.js} +13 -13
  49. package/dist/{hook-NA66XJLC.js → hook-TWFLIDK3.js} +3 -3
  50. package/dist/{http-25GJ6SKK.js → http-7VF2RE2D.js} +49 -29
  51. package/dist/{ingestQueue-FSVJC3AA.js → ingestQueue-RSEPMORK.js} +9 -9
  52. package/dist/{install-G2HHXYJ2.js → install-55EPX34C.js} +4 -4
  53. package/dist/{installSkill-5TIMYIJZ.js → installSkill-A7KKPDMS.js} +2 -2
  54. package/dist/{mcp-PENLL2PK.js → mcp-CM6CDLHM.js} +5 -5
  55. package/dist/{mcpConfig-3LYPRY5Q.js → mcpConfig-FENV6NI7.js} +2 -2
  56. package/dist/{mcpHandlers-PO7GENA7.js → mcpHandlers-2UCLKMWN.js} +6 -6
  57. package/dist/{mcpScan-ULP626TQ.js → mcpScan-CKBQNK5H.js} +7 -7
  58. package/dist/{mcpScanWorkflow-27O44FOE.js → mcpScanWorkflow-NFUD3S7U.js} +2 -2
  59. package/dist/{mcpStack-ZNYIFXZ5.js → mcpStack-FLQ6XY2P.js} +1 -1
  60. package/dist/{packages-RWF2LXST.js → packages-2XRHNBJ7.js} +3 -3
  61. package/dist/{plan-SDILIDZT.js → plan-XRZS6C7Z.js} +14 -14
  62. package/dist/{policy-JAGNMQJI.js → policy-EQT43P7S.js} +2 -2
  63. package/dist/{probe-3IK646WN.js → probe-ZEZFNIQZ.js} +1 -1
  64. package/dist/{publicUpgrades-WTBGLDIK.js → publicUpgrades-JZEOV24A.js} +7 -7
  65. package/dist/{release-7IU2R4YG.js → release-EUOM5I3R.js} +3 -3
  66. package/dist/{remote-FN6225AH.js → remote-I5O43WAY.js} +2 -2
  67. package/dist/{sandbox-SAPSRKEI.js → sandbox-46TZNYZT.js} +3 -3
  68. package/dist/{server-OLTY3NYT.js → server-LROMHS62.js} +21 -21
  69. package/dist/{surface-JS2XU3U3.js → surface-CZMHQLV3.js} +3 -3
  70. package/dist/{surface-7MHE3RL7.js → surface-OH4TZR32.js} +7 -7
  71. package/dist/{surfaceHandlers-4B6TMZ34.js → surfaceHandlers-BDYRZMAC.js} +5 -5
  72. package/dist/{uninstall-I2IJP5JZ.js → uninstall-4E5YUDQO.js} +2 -2
  73. package/dist/{upgrade-FS26DJGG.js → upgrade-S72W7JVC.js} +3 -3
  74. package/dist/{upgradePlan-ZS5IOVMZ.js → upgradePlan-F3OUNL3E.js} +4 -4
  75. package/dist/{upkeepHandler-VFGYXJKB.js → upkeepHandler-7Q56A4UA.js} +1 -1
  76. package/dist/{watch-OCNEUXG6.js → watch-LZPOKWCL.js} +10 -10
  77. package/package.json +1 -1
  78. package/dist/autopilotInit-Q62MX5M6.js +0 -178
@@ -5,50 +5,50 @@ import {
5
5
  exactVersion,
6
6
  npmName,
7
7
  startMcpServer
8
- } from "./chunk-3676XOBU.js";
9
- import "./chunk-B2UUYRBX.js";
8
+ } from "./chunk-M2CYYBAH.js";
9
+ import "./chunk-N2NYPTRU.js";
10
10
  import "./chunk-NEZNAPPN.js";
11
- import "./chunk-FDFPMBCA.js";
11
+ import "./chunk-FHRT32JH.js";
12
12
  import "./chunk-KP5ZDDPE.js";
13
- import "./chunk-BN3NM47Q.js";
14
- import "./chunk-BJT2LHAR.js";
13
+ import "./chunk-JGIJZJ3X.js";
14
+ import "./chunk-JJCQVOC6.js";
15
15
  import "./chunk-XLXPVN3Y.js";
16
- import "./chunk-P6MIKSPY.js";
16
+ import "./chunk-2XMD4H2I.js";
17
17
  import "./chunk-D3K6IZVR.js";
18
18
  import "./chunk-6EQ3ARXA.js";
19
19
  import "./chunk-SHCEBP3J.js";
20
20
  import "./chunk-LEGPB7DO.js";
21
21
  import "./chunk-Q5VPF4WI.js";
22
- import "./chunk-EQCXENKZ.js";
23
- import "./chunk-64ZF7KO4.js";
22
+ import "./chunk-Q7CMOU5C.js";
23
+ import "./chunk-POHTPT37.js";
24
24
  import "./chunk-QSL6QN5X.js";
25
- import "./chunk-NYZU5NCW.js";
26
- import "./chunk-2WD4QAH4.js";
27
- import "./chunk-DSROTZ3Z.js";
28
- import "./chunk-TUXQ32WE.js";
25
+ import "./chunk-GNNGXVCG.js";
26
+ import "./chunk-TVOCVIM7.js";
27
+ import "./chunk-64DPQSXV.js";
28
+ import "./chunk-ABH4BTK4.js";
29
29
  import "./chunk-BUALU27S.js";
30
30
  import "./chunk-QUIMQ7YL.js";
31
31
  import "./chunk-6DM6UQFD.js";
32
- import "./chunk-EYAKM6YN.js";
33
- import "./chunk-D3VTZS7V.js";
32
+ import "./chunk-KT7PWDNV.js";
33
+ import "./chunk-XBTYJQEK.js";
34
34
  import "./chunk-4ESO33J6.js";
35
- import "./chunk-NPVN2THM.js";
35
+ import "./chunk-75LMEMJ3.js";
36
36
  import "./chunk-VLRHFMGJ.js";
37
- import "./chunk-VGCDRK3S.js";
38
- import "./chunk-ONDVTXUO.js";
39
- import "./chunk-4JHDSVIN.js";
37
+ import "./chunk-NGMJQBOV.js";
38
+ import "./chunk-ZJ5XHA77.js";
39
+ import "./chunk-6353IJJ5.js";
40
40
  import "./chunk-GM5Y555O.js";
41
41
  import "./chunk-2GAYNIHG.js";
42
42
  import "./chunk-KYKSZ3XZ.js";
43
- import "./chunk-A3TYI2TF.js";
43
+ import "./chunk-SWMWVK2R.js";
44
44
  import "./chunk-HWFX4BC4.js";
45
- import "./chunk-6L67QMCP.js";
45
+ import "./chunk-J3NUERU7.js";
46
46
  import "./chunk-3GHJR7XR.js";
47
47
  import "./chunk-GRJXQBQZ.js";
48
48
  import "./chunk-WHX2ZFCG.js";
49
49
  import "./chunk-LUAKDHLZ.js";
50
50
  import "./chunk-MYGSLK44.js";
51
- import "./chunk-72Y2FDVS.js";
51
+ import "./chunk-L3V7AVM6.js";
52
52
  import "./chunk-I3M2KJXB.js";
53
53
  export {
54
54
  SERVE_NEEDS_DATABASE,
@@ -15,9 +15,9 @@ import {
15
15
  storeSurface,
16
16
  surfaceQueueDepth,
17
17
  surfaceRef
18
- } from "./chunk-ONDVTXUO.js";
19
- import "./chunk-4JHDSVIN.js";
20
- import "./chunk-72Y2FDVS.js";
18
+ } from "./chunk-ZJ5XHA77.js";
19
+ import "./chunk-6353IJJ5.js";
20
+ import "./chunk-L3V7AVM6.js";
21
21
  import "./chunk-I3M2KJXB.js";
22
22
  export {
23
23
  bumpSurfaceAttempt,
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-MHUEVBVO.js";
5
5
  import {
6
6
  fetchAndExtract
7
- } from "./chunk-FVYFV5HA.js";
7
+ } from "./chunk-XA2SLNBR.js";
8
8
  import {
9
9
  getPackagesWithSurface
10
- } from "./chunk-DSROTZ3Z.js";
11
- import "./chunk-D3VTZS7V.js";
10
+ } from "./chunk-64DPQSXV.js";
11
+ import "./chunk-XBTYJQEK.js";
12
12
  import {
13
13
  getPackageVersions
14
- } from "./chunk-NPVN2THM.js";
14
+ } from "./chunk-75LMEMJ3.js";
15
15
  import "./chunk-VLRHFMGJ.js";
16
16
  import {
17
17
  bumpSurfaceAttempt,
@@ -23,13 +23,13 @@ import {
23
23
  isExtractionCached,
24
24
  storeSurface,
25
25
  surfaceRef
26
- } from "./chunk-ONDVTXUO.js";
27
- import "./chunk-4JHDSVIN.js";
26
+ } from "./chunk-ZJ5XHA77.js";
27
+ import "./chunk-6353IJJ5.js";
28
28
  import "./chunk-KYKSZ3XZ.js";
29
29
  import {
30
30
  logger
31
31
  } from "./chunk-MYGSLK44.js";
32
- import "./chunk-72Y2FDVS.js";
32
+ import "./chunk-L3V7AVM6.js";
33
33
  import {
34
34
  init_esm_shims
35
35
  } from "./chunk-I3M2KJXB.js";
@@ -4,13 +4,13 @@ import {
4
4
  handleResolveSurface,
5
5
  loadStored,
6
6
  rowsToSurface
7
- } from "./chunk-BJT2LHAR.js";
7
+ } from "./chunk-JJCQVOC6.js";
8
8
  import "./chunk-SHCEBP3J.js";
9
- import "./chunk-ONDVTXUO.js";
10
- import "./chunk-4JHDSVIN.js";
11
- import "./chunk-6L67QMCP.js";
9
+ import "./chunk-ZJ5XHA77.js";
10
+ import "./chunk-6353IJJ5.js";
11
+ import "./chunk-J3NUERU7.js";
12
12
  import "./chunk-MYGSLK44.js";
13
- import "./chunk-72Y2FDVS.js";
13
+ import "./chunk-L3V7AVM6.js";
14
14
  import "./chunk-I3M2KJXB.js";
15
15
  export {
16
16
  handleDiffSurface,
@@ -19,7 +19,7 @@ import {
19
19
  withoutLurqHooks,
20
20
  writeFileAtomic,
21
21
  writeJson
22
- } from "./chunk-DM37MTOO.js";
22
+ } from "./chunk-ETY4FSOW.js";
23
23
  import "./chunk-LUAKDHLZ.js";
24
24
  import "./chunk-MYGSLK44.js";
25
25
  import {
@@ -30,7 +30,7 @@ import {
30
30
  import {
31
31
  KEYS_URL,
32
32
  PACKAGE_NAME
33
- } from "./chunk-72Y2FDVS.js";
33
+ } from "./chunk-L3V7AVM6.js";
34
34
  import {
35
35
  init_esm_shims
36
36
  } from "./chunk-I3M2KJXB.js";
@@ -14,17 +14,17 @@ import {
14
14
  extractUnpacked,
15
15
  fetchManifest,
16
16
  unpackPackage
17
- } from "./chunk-FVYFV5HA.js";
17
+ } from "./chunk-XA2SLNBR.js";
18
18
  import {
19
19
  resolveRuntimeEngineConflicts
20
20
  } from "./chunk-BUALU27S.js";
21
- import "./chunk-D3VTZS7V.js";
21
+ import "./chunk-XBTYJQEK.js";
22
22
  import "./chunk-KYKSZ3XZ.js";
23
23
  import {
24
24
  require_semver
25
25
  } from "./chunk-3GHJR7XR.js";
26
26
  import "./chunk-MYGSLK44.js";
27
- import "./chunk-72Y2FDVS.js";
27
+ import "./chunk-L3V7AVM6.js";
28
28
  import {
29
29
  SURFACE_CLAIM_KINDS
30
30
  } from "./chunk-SHZFOSXC.js";
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __lurqCreateRequire } from 'node:module'; const require = __lurqCreateRequire(import.meta.url);
2
2
  import {
3
3
  parseManifest
4
- } from "./chunk-TDTYV6QI.js";
4
+ } from "./chunk-AQ6IVSFB.js";
5
5
  import "./chunk-GM5Y555O.js";
6
6
  import "./chunk-2GAYNIHG.js";
7
7
  import "./chunk-KYKSZ3XZ.js";
8
- import "./chunk-A3TYI2TF.js";
8
+ import "./chunk-SWMWVK2R.js";
9
9
  import "./chunk-GRJXQBQZ.js";
10
10
  import "./chunk-WHX2ZFCG.js";
11
11
  import "./chunk-MYGSLK44.js";
12
12
  import {
13
13
  fetchUpgradePlan
14
- } from "./chunk-OTJFHESY.js";
14
+ } from "./chunk-SFY5MPJE.js";
15
15
  import "./chunk-J6XQ7OPZ.js";
16
- import "./chunk-72Y2FDVS.js";
16
+ import "./chunk-L3V7AVM6.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "./chunk-I3M2KJXB.js";
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __lurqCreateRequire } from 'node:module'; const require = __lurqCreateRequire(import.meta.url);
2
2
  import {
3
3
  runDomains
4
- } from "./chunk-XBQA4I36.js";
4
+ } from "./chunk-2LXYRDUN.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-I3M2KJXB.js";
@@ -3,30 +3,30 @@ import {
3
3
  enqueueCandidates,
4
4
  getQueuedNames,
5
5
  syncOnePackage
6
- } from "./chunk-TUXQ32WE.js";
6
+ } from "./chunk-ABH4BTK4.js";
7
7
  import "./chunk-BUALU27S.js";
8
8
  import "./chunk-QUIMQ7YL.js";
9
9
  import "./chunk-6DM6UQFD.js";
10
- import "./chunk-EYAKM6YN.js";
11
- import "./chunk-D3VTZS7V.js";
10
+ import "./chunk-KT7PWDNV.js";
11
+ import "./chunk-XBTYJQEK.js";
12
12
  import "./chunk-4ESO33J6.js";
13
13
  import {
14
14
  getAllPackageNames
15
- } from "./chunk-NPVN2THM.js";
15
+ } from "./chunk-75LMEMJ3.js";
16
16
  import "./chunk-VLRHFMGJ.js";
17
- import "./chunk-VGCDRK3S.js";
17
+ import "./chunk-NGMJQBOV.js";
18
18
  import {
19
19
  enqueueSurface,
20
20
  getMcpServerNames
21
- } from "./chunk-ONDVTXUO.js";
21
+ } from "./chunk-ZJ5XHA77.js";
22
22
  import {
23
23
  watchState
24
- } from "./chunk-4JHDSVIN.js";
24
+ } from "./chunk-6353IJJ5.js";
25
25
  import "./chunk-GM5Y555O.js";
26
26
  import "./chunk-2GAYNIHG.js";
27
27
  import "./chunk-KYKSZ3XZ.js";
28
- import "./chunk-A3TYI2TF.js";
29
- import "./chunk-6L67QMCP.js";
28
+ import "./chunk-SWMWVK2R.js";
29
+ import "./chunk-J3NUERU7.js";
30
30
  import "./chunk-3GHJR7XR.js";
31
31
  import "./chunk-GRJXQBQZ.js";
32
32
  import "./chunk-WHX2ZFCG.js";
@@ -34,7 +34,7 @@ import "./chunk-LUAKDHLZ.js";
34
34
  import {
35
35
  logger
36
36
  } from "./chunk-MYGSLK44.js";
37
- import "./chunk-72Y2FDVS.js";
37
+ import "./chunk-L3V7AVM6.js";
38
38
  import {
39
39
  init_esm_shims
40
40
  } from "./chunk-I3M2KJXB.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lurqrun",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Verify npm packages before your AI coding agent installs them: hallucinated and typosquatted names, advisories, API drift and version conflicts. MCP server, CLI and agent skill for Claude Code, Cursor and VS Code.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,178 +0,0 @@
1
- import { createRequire as __lurqCreateRequire } from 'node:module'; const require = __lurqCreateRequire(import.meta.url);
2
- import {
3
- WORKFLOW_PATH,
4
- detectInstallCommand,
5
- renderWorkflow
6
- } from "./chunk-A3TYI2TF.js";
7
- import {
8
- bold,
9
- dim,
10
- green,
11
- yellow
12
- } from "./chunk-4KCPOMG6.js";
13
- import {
14
- logger
15
- } from "./chunk-MYGSLK44.js";
16
- import {
17
- resolveApiKey
18
- } from "./chunk-J6XQ7OPZ.js";
19
- import "./chunk-72Y2FDVS.js";
20
- import {
21
- init_esm_shims
22
- } from "./chunk-I3M2KJXB.js";
23
-
24
- // src/cli/autopilotInit.ts
25
- init_esm_shims();
26
- import { spawnSync } from "child_process";
27
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
28
- import { dirname, join } from "path";
29
- var LOCKFILES = ["package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lockb", "bun.lock"];
30
- function parseRepoFromRemote(url) {
31
- const trimmed = url.trim().replace(/\.git$/, "");
32
- if (!trimmed) return null;
33
- const match = (
34
- // git@github.com:owner/name | ssh://git@github.com/owner/name
35
- trimmed.match(/^(?:ssh:\/\/)?git@[^:/]+[:/]([^/]+)\/([^/]+)$/) ?? // https://github.com/owner/name
36
- trimmed.match(/^https?:\/\/[^/]+\/([^/]+)\/([^/]+)$/)
37
- );
38
- if (!match) return null;
39
- const [, owner, name] = match;
40
- return owner && name ? `${owner}/${name}` : null;
41
- }
42
- function needsAgentCredential(mode) {
43
- return mode === "pr";
44
- }
45
- function parseMode(raw) {
46
- if (!raw) return "fix";
47
- if (raw === "comment" || raw === "fix" || raw === "pr") return raw;
48
- throw new Error(`Unknown mode "${raw}". Use comment, fix, or pr.`);
49
- }
50
- function run(cmd, args, cwd) {
51
- return spawnSync(cmd, args, { cwd, encoding: "utf8" });
52
- }
53
- function have(cmd) {
54
- const res = run(cmd, ["--version"]);
55
- return res.status === 0;
56
- }
57
- function setSecret(repo, name, value) {
58
- const res = spawnSync("gh", ["secret", "set", name, "--repo", repo], {
59
- input: value,
60
- encoding: "utf8"
61
- });
62
- if (res.status !== 0) {
63
- logger.error(` could not set ${name}: ${(res.stderr || res.stdout || "").trim()}`);
64
- return false;
65
- }
66
- return true;
67
- }
68
- function mintClaudeToken() {
69
- const res = spawnSync("claude", ["setup-token"], {
70
- stdio: ["inherit", "pipe", "inherit"],
71
- encoding: "utf8"
72
- });
73
- if (res.status !== 0) return null;
74
- const lines = (res.stdout ?? "").split("\n").map((l) => l.trim()).filter(Boolean);
75
- const token = lines[lines.length - 1];
76
- if (!token || token.includes(" ") || token.length < 20) return null;
77
- return token;
78
- }
79
- async function runAutopilotInit(opts) {
80
- const cwd = opts.cwd ?? process.cwd();
81
- const mode = parseMode(opts.mode);
82
- const done = [];
83
- const todo = [];
84
- let repo = opts.repo?.trim();
85
- if (!repo) {
86
- const remote = run("git", ["remote", "get-url", "origin"], cwd);
87
- repo = remote.status === 0 && parseRepoFromRemote(remote.stdout) || void 0;
88
- }
89
- if (!repo) {
90
- logger.error("Could not work out which repository this is.");
91
- logger.error("Pass it: lurq autopilot init --repo owner/name");
92
- process.exitCode = 1;
93
- return;
94
- }
95
- const apiKey = resolveApiKey(opts.apiKey);
96
- if (!apiKey) {
97
- logger.error("No lurq API key on this machine. Run `lurq setup` first, then this again.");
98
- process.exitCode = 1;
99
- return;
100
- }
101
- if (!have("gh")) {
102
- logger.error("The GitHub CLI (`gh`) is not installed. https://cli.github.com");
103
- process.exitCode = 1;
104
- return;
105
- }
106
- if (run("gh", ["auth", "status"]).status !== 0) {
107
- logger.error("`gh` is not signed in. Run `gh auth login`, then this again.");
108
- process.exitCode = 1;
109
- return;
110
- }
111
- logger.info(`${bold("repository")} ${repo}`);
112
- logger.info(`${bold("mode")} ${mode}
113
- `);
114
- if (setSecret(repo, "LURQ_API_KEY", apiKey)) done.push("LURQ_API_KEY set as a repository secret");
115
- else {
116
- process.exitCode = 1;
117
- return;
118
- }
119
- const path = join(cwd, WORKFLOW_PATH);
120
- if (existsSync(path) && !opts.force) {
121
- done.push(`${WORKFLOW_PATH} already exists (left alone; --force overwrites)`);
122
- } else {
123
- const lockfiles = LOCKFILES.filter((f) => existsSync(join(cwd, f)));
124
- mkdirSync(dirname(path), { recursive: true });
125
- writeFileSync(path, renderWorkflow({ mode, installCommand: detectInstallCommand(lockfiles) }));
126
- done.push(`${WORKFLOW_PATH} written`);
127
- }
128
- if (needsAgentCredential(mode) && opts.credential !== false) {
129
- if (!have("claude")) {
130
- todo.push(
131
- `Set ANTHROPIC_API_KEY (from the Anthropic console) as a repository secret \u2014 pr mode fails without a credential:
132
- gh secret set ANTHROPIC_API_KEY --repo ${repo}`
133
- );
134
- } else {
135
- logger.info(dim("Minting a Claude token \u2014 sign in when prompted."));
136
- const token = mintClaudeToken();
137
- if (token && setSecret(repo, "CLAUDE_CODE_OAUTH_TOKEN", token)) {
138
- done.push("CLAUDE_CODE_OAUTH_TOKEN set as a repository secret");
139
- todo.push(
140
- yellow("That token expires one year from today, with no warning.") + " This is a scheduled job, so it will work for a year and then stop.\n An ANTHROPIC_API_KEY from the console does not expire, and is the right one if anyone else maintains this repo."
141
- );
142
- } else {
143
- todo.push(
144
- `Could not read a token back from \`claude setup-token\`. Set one by hand:
145
- claude setup-token
146
- gh secret set CLAUDE_CODE_OAUTH_TOKEN --repo ${repo}`
147
- );
148
- }
149
- }
150
- }
151
- todo.push(
152
- `Read the workflow, then commit it \u2014 that commit is what grants write access:
153
- git add ${WORKFLOW_PATH} && git commit -m "ci: lurq upgrade autopilot" && git push`
154
- );
155
- if (opts.json) {
156
- logger.info(JSON.stringify({ repo, mode, done, todo: todo.length }, null, 2));
157
- return;
158
- }
159
- logger.info("");
160
- for (const line of done) logger.info(`${green("\u2713")} ${line}`);
161
- logger.info(`
162
- ${bold("Next")}`);
163
- for (const line of todo) logger.info(` \xB7 ${line}`);
164
- }
165
- function workflowExists(cwd) {
166
- return existsSync(join(cwd, WORKFLOW_PATH));
167
- }
168
- function readWorkflow(cwd) {
169
- const path = join(cwd, WORKFLOW_PATH);
170
- return existsSync(path) ? readFileSync(path, "utf8") : null;
171
- }
172
- export {
173
- needsAgentCredential,
174
- parseRepoFromRemote,
175
- readWorkflow,
176
- runAutopilotInit,
177
- workflowExists
178
- };