noah-cursor 1.0.0 → 1.1.0

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 (71) hide show
  1. package/README.md +34 -9
  2. package/dist/commands/browse.d.ts +3 -0
  3. package/dist/commands/browse.d.ts.map +1 -0
  4. package/dist/commands/browse.js +125 -0
  5. package/dist/commands/browse.js.map +1 -0
  6. package/dist/constants/index.d.ts +1 -1
  7. package/dist/constants/index.d.ts.map +1 -1
  8. package/dist/constants/index.js +4 -1
  9. package/dist/constants/index.js.map +1 -1
  10. package/dist/core/program.d.ts.map +1 -1
  11. package/dist/core/program.js +24 -0
  12. package/dist/core/program.js.map +1 -1
  13. package/dist/index.js +8 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/services/install-service.d.ts +15 -1
  16. package/dist/services/install-service.d.ts.map +1 -1
  17. package/dist/services/install-service.js +96 -89
  18. package/dist/services/install-service.js.map +1 -1
  19. package/dist/services/registry-loader.d.ts +9 -0
  20. package/dist/services/registry-loader.d.ts.map +1 -0
  21. package/dist/services/registry-loader.js +20 -0
  22. package/dist/services/registry-loader.js.map +1 -0
  23. package/dist/ui/assetMenu.d.ts +8 -0
  24. package/dist/ui/assetMenu.d.ts.map +1 -0
  25. package/dist/ui/assetMenu.js +60 -0
  26. package/dist/ui/assetMenu.js.map +1 -0
  27. package/dist/ui/banner.d.ts +7 -0
  28. package/dist/ui/banner.d.ts.map +1 -0
  29. package/dist/ui/banner.js +57 -0
  30. package/dist/ui/banner.js.map +1 -0
  31. package/dist/ui/categoryMenu.d.ts +9 -0
  32. package/dist/ui/categoryMenu.d.ts.map +1 -0
  33. package/dist/ui/categoryMenu.js +44 -0
  34. package/dist/ui/categoryMenu.js.map +1 -0
  35. package/dist/ui/format.d.ts +5 -0
  36. package/dist/ui/format.d.ts.map +1 -0
  37. package/dist/ui/format.js +26 -0
  38. package/dist/ui/format.js.map +1 -0
  39. package/dist/ui/mcpMenu.d.ts +2 -0
  40. package/dist/ui/mcpMenu.d.ts.map +1 -0
  41. package/dist/ui/mcpMenu.js +2 -0
  42. package/dist/ui/mcpMenu.js.map +1 -0
  43. package/dist/ui/presetsMenu.d.ts +2 -0
  44. package/dist/ui/presetsMenu.d.ts.map +1 -0
  45. package/dist/ui/presetsMenu.js +2 -0
  46. package/dist/ui/presetsMenu.js.map +1 -0
  47. package/dist/ui/progress.d.ts +8 -0
  48. package/dist/ui/progress.d.ts.map +1 -0
  49. package/dist/ui/progress.js +34 -0
  50. package/dist/ui/progress.js.map +1 -0
  51. package/dist/ui/prompt-errors.d.ts +2 -0
  52. package/dist/ui/prompt-errors.d.ts.map +1 -0
  53. package/dist/ui/prompt-errors.js +5 -0
  54. package/dist/ui/prompt-errors.js.map +1 -0
  55. package/dist/ui/promptsMenu.d.ts +2 -0
  56. package/dist/ui/promptsMenu.d.ts.map +1 -0
  57. package/dist/ui/promptsMenu.js +2 -0
  58. package/dist/ui/promptsMenu.js.map +1 -0
  59. package/dist/ui/rulesMenu.d.ts +2 -0
  60. package/dist/ui/rulesMenu.d.ts.map +1 -0
  61. package/dist/ui/rulesMenu.js +2 -0
  62. package/dist/ui/rulesMenu.js.map +1 -0
  63. package/dist/ui/skillsMenu.d.ts +2 -0
  64. package/dist/ui/skillsMenu.d.ts.map +1 -0
  65. package/dist/ui/skillsMenu.js +2 -0
  66. package/dist/ui/skillsMenu.js.map +1 -0
  67. package/dist/ui/summary.d.ts +4 -0
  68. package/dist/ui/summary.d.ts.map +1 -0
  69. package/dist/ui/summary.js +68 -0
  70. package/dist/ui/summary.js.map +1 -0
  71. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-loader.d.ts","sourceRoot":"","sources":["../../src/services/registry-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE9F;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,cAAc,CAAC,CAiBzB;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import fs from "fs-extra";
2
+ import { cloneRegistry, loadLocalRegistry } from "../registry/cloner.js";
3
+ /**
4
+ * Open a remote or local registry without installing anything.
5
+ */
6
+ export async function loadRegistry(repository, options = {}) {
7
+ if (repository.startsWith("file://")) {
8
+ return loadLocalRegistry(repository.replace(/^file:\/\//, ""));
9
+ }
10
+ const looksRemote = repository.includes("github.com") ||
11
+ repository.startsWith("git@") ||
12
+ repository.startsWith("http://") ||
13
+ repository.startsWith("https://") ||
14
+ /^[\w.-]+\/[\w.-]+$/.test(repository);
15
+ if (!looksRemote && (await fs.pathExists(repository))) {
16
+ return loadLocalRegistry(repository);
17
+ }
18
+ return cloneRegistry(repository, options);
19
+ }
20
+ //# sourceMappingURL=registry-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-loader.js","sourceRoot":"","sources":["../../src/services/registry-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAuB,MAAM,uBAAuB,CAAC;AAE9F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,UAAiC,EAAE;IAEnC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,WAAW,GACf,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAC7B,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AssetEntry, AssetType, PresetEntry } from "../types/index.js";
2
+ export declare function selectAssets(type: AssetType, assets: Array<AssetEntry | PresetEntry>): Promise<string[] | null>;
3
+ export declare function selectSkills(assets: AssetEntry[]): Promise<string[] | null>;
4
+ export declare function selectRules(assets: AssetEntry[]): Promise<string[] | null>;
5
+ export declare function selectPrompts(assets: AssetEntry[]): Promise<string[] | null>;
6
+ export declare function selectMcp(assets: AssetEntry[]): Promise<string[] | null>;
7
+ export declare function selectPresets(assets: PresetEntry[]): Promise<string[] | null>;
8
+ //# sourceMappingURL=assetMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetMenu.d.ts","sourceRoot":"","sources":["../../src/ui/assetMenu.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAY5E,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,GACtC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAiC1B;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAEjF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAEhF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAElF;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAE9E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAEnF"}
@@ -0,0 +1,60 @@
1
+ import { checkbox } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import { formatAssetLabel, printHint } from "./format.js";
4
+ import { isPromptExit } from "./prompt-errors.js";
5
+ const TITLES = {
6
+ skill: "Available Skills",
7
+ rule: "Available Rules",
8
+ prompt: "Available Prompts",
9
+ mcp: "Available MCP Configurations",
10
+ preset: "Available Presets",
11
+ };
12
+ export async function selectAssets(type, assets) {
13
+ if (assets.length === 0) {
14
+ console.log(chalk.yellow(`No ${type}s found in this registry.`));
15
+ console.log();
16
+ return [];
17
+ }
18
+ console.log(chalk.bold(TITLES[type]));
19
+ console.log();
20
+ printHint([
21
+ "↑ ↓ Navigate",
22
+ "Space Select",
23
+ "A Toggle all · I Invert",
24
+ "Enter Confirm · Esc Skip",
25
+ ]);
26
+ console.log();
27
+ try {
28
+ return await checkbox({
29
+ message: TITLES[type],
30
+ pageSize: Math.min(12, Math.max(assets.length, 5)),
31
+ choices: assets.map((asset) => ({
32
+ name: formatAssetLabel(asset.id, asset.description),
33
+ value: asset.id,
34
+ short: asset.id,
35
+ })),
36
+ });
37
+ }
38
+ catch (error) {
39
+ if (isPromptExit(error)) {
40
+ return null;
41
+ }
42
+ throw error;
43
+ }
44
+ }
45
+ export async function selectSkills(assets) {
46
+ return selectAssets("skill", assets);
47
+ }
48
+ export async function selectRules(assets) {
49
+ return selectAssets("rule", assets);
50
+ }
51
+ export async function selectPrompts(assets) {
52
+ return selectAssets("prompt", assets);
53
+ }
54
+ export async function selectMcp(assets) {
55
+ return selectAssets("mcp", assets);
56
+ }
57
+ export async function selectPresets(assets) {
58
+ return selectAssets("preset", assets);
59
+ }
60
+ //# sourceMappingURL=assetMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetMenu.js","sourceRoot":"","sources":["../../src/ui/assetMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAA8B;IACxC,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,mBAAmB;IAC3B,GAAG,EAAE,8BAA8B;IACnC,MAAM,EAAE,mBAAmB;CAC5B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAe,EACf,MAAuC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,2BAA2B,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,SAAS,CAAC;QACR,cAAc;QACd,cAAc;QACd,yBAAyB;QACzB,0BAA0B;KAC3B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC9B,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC;gBACnD,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,KAAK,EAAE,KAAK,CAAC,EAAE;aAChB,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB;IACrD,OAAO,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAoB;IACpD,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAoB;IACtD,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAqB;IACvD,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function shouldShowBanner(argv?: string[]): boolean;
2
+ /**
3
+ * Renders the NOAH CURSOR CLI banner once per process.
4
+ */
5
+ export declare function renderBanner(force?: boolean): void;
6
+ export declare function resetBannerForTests(): void;
7
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAeA,wBAAgB,gBAAgB,CAAC,IAAI,WAAe,GAAG,OAAO,CAgB7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,UAAQ,GAAG,IAAI,CA2BhD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,57 @@
1
+ import chalk from "chalk";
2
+ import figlet from "figlet";
3
+ import gradient from "gradient-string";
4
+ /** Light purple (top) → sky blue → deep blue (bottom) */
5
+ const brandGradient = gradient([
6
+ "#e9d5ff", // light purple
7
+ "#c4b5fd", // soft violet
8
+ "#7dd3fc", // light sky blue
9
+ "#38bdf8", // blue
10
+ "#1d4ed8", // deep blue (bottom)
11
+ ]);
12
+ let shown = false;
13
+ export function shouldShowBanner(argv = process.argv) {
14
+ if (process.env.NOAH_CURSOR_NO_BANNER === "1") {
15
+ return false;
16
+ }
17
+ if (argv.includes("--no-banner")) {
18
+ return false;
19
+ }
20
+ // Quiet for machine-readable / piped usage
21
+ if (!process.stdout.isTTY) {
22
+ return false;
23
+ }
24
+ // Keep -V/--version clean
25
+ if (argv.includes("-V") || argv.includes("--version")) {
26
+ return false;
27
+ }
28
+ return true;
29
+ }
30
+ /**
31
+ * Renders the NOAH CURSOR CLI banner once per process.
32
+ */
33
+ export function renderBanner(force = false) {
34
+ if (!force && shown) {
35
+ return;
36
+ }
37
+ if (!force && !shouldShowBanner()) {
38
+ return;
39
+ }
40
+ shown = true;
41
+ const ascii = figlet.textSync("NOAH", {
42
+ font: "ANSI Shadow",
43
+ horizontalLayout: "default",
44
+ verticalLayout: "default",
45
+ });
46
+ console.log();
47
+ console.log(brandGradient.multiline(ascii));
48
+ console.log(chalk.bold(brandGradient(" NOAH CURSOR CLI")));
49
+ console.log(chalk.dim(" Disclaimer: Not limited to Cursor — works with any IDE that supports"));
50
+ console.log(chalk.dim(" skills, rules, prompts, MCP configs, and similar assets."));
51
+ console.log(chalk.dim(" Package Manager for Cursor Assets"));
52
+ console.log();
53
+ }
54
+ export function resetBannerForTests() {
55
+ shown = false;
56
+ }
57
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,yDAAyD;AACzD,MAAM,aAAa,GAAG,QAAQ,CAAC;IAC7B,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC;AAEH,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,MAAM,UAAU,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2CAA2C;IAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,0BAA0B;IAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAK,GAAG,KAAK;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,KAAK,GAAG,IAAI,CAAC;IAEb,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QACpC,IAAI,EAAE,aAAa;QACnB,gBAAgB,EAAE,SAAS;QAC3B,cAAc,EAAE,SAAS;KAC1B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,wEAAwE,CACzE,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,KAAK,GAAG,KAAK,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AssetType } from "../types/index.js";
2
+ export type BrowseCategory = AssetType;
3
+ export declare const CATEGORY_OPTIONS: Array<{
4
+ value: BrowseCategory;
5
+ name: string;
6
+ hint: string;
7
+ }>;
8
+ export declare function selectCategories(preselected?: BrowseCategory[]): Promise<BrowseCategory[] | null>;
9
+ //# sourceMappingURL=categoryMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categoryMenu.d.ts","sourceRoot":"","sources":["../../src/ui/categoryMenu.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC;AAEvC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAMA,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,WAAW,CAAC,EAAE,cAAc,EAAE,GAC7B,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAgClC"}
@@ -0,0 +1,44 @@
1
+ import { checkbox } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import { printHint } from "./format.js";
4
+ import { isPromptExit } from "./prompt-errors.js";
5
+ export const CATEGORY_OPTIONS = [
6
+ { value: "skill", name: "Skills", hint: "Reusable agent skills" },
7
+ { value: "rule", name: "Rules", hint: "Project coding rules" },
8
+ { value: "prompt", name: "Prompts", hint: "Prompt templates" },
9
+ { value: "mcp", name: "MCP", hint: "MCP server configs" },
10
+ { value: "preset", name: "Presets", hint: "Bundled asset packs" },
11
+ ];
12
+ export async function selectCategories(preselected) {
13
+ if (preselected && preselected.length > 0) {
14
+ return preselected;
15
+ }
16
+ console.log(chalk.bold("Select categories to browse"));
17
+ console.log();
18
+ printHint([
19
+ "↑ ↓ Navigate",
20
+ "Space Select",
21
+ "A Toggle all · I Invert",
22
+ "Enter Continue · Esc Cancel",
23
+ ]);
24
+ console.log();
25
+ try {
26
+ return await checkbox({
27
+ message: "Categories",
28
+ pageSize: 10,
29
+ required: true,
30
+ choices: CATEGORY_OPTIONS.map((option) => ({
31
+ name: `${option.name}${chalk.dim(` — ${option.hint}`)}`,
32
+ value: option.value,
33
+ short: option.name,
34
+ })),
35
+ });
36
+ }
37
+ catch (error) {
38
+ if (isPromptExit(error)) {
39
+ return null;
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ //# sourceMappingURL=categoryMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categoryMenu.js","sourceRoot":"","sources":["../../src/ui/categoryMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,MAAM,CAAC,MAAM,gBAAgB,GAIxB;IACH,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE;IACjE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAC9D,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE;IAC9D,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACzD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE;CAClE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAA8B;IAE9B,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,SAAS,CAAC;QACR,cAAc;QACd,cAAc;QACd,yBAAyB;QACzB,6BAA6B;KAC9B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC;YACpB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;gBACvD,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,IAAI;aACnB,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function humanizeId(id: string): string;
2
+ export declare function formatAssetLabel(id: string, description?: string): string;
3
+ export declare function printDivider(): void;
4
+ export declare function printHint(lines: string[]): void;
5
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQzE;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAK/C"}
@@ -0,0 +1,26 @@
1
+ import chalk from "chalk";
2
+ export function humanizeId(id) {
3
+ return id
4
+ .split(/[-_]/g)
5
+ .filter(Boolean)
6
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
7
+ .join(" ");
8
+ }
9
+ export function formatAssetLabel(id, description) {
10
+ const title = humanizeId(id);
11
+ if (!description) {
12
+ return title;
13
+ }
14
+ const truncated = description.length > 60 ? `${description.slice(0, 57)}…` : description;
15
+ return `${title}${chalk.dim(` — ${truncated}`)}`;
16
+ }
17
+ export function printDivider() {
18
+ console.log(chalk.dim("────────────────────────────"));
19
+ }
20
+ export function printHint(lines) {
21
+ printDivider();
22
+ for (const line of lines) {
23
+ console.log(chalk.dim(line));
24
+ }
25
+ }
26
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,EAAE;SACN,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,WAAoB;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GACb,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;IACzE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAe;IACvC,YAAY,EAAE,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectMcp } from "./assetMenu.js";
2
+ //# sourceMappingURL=mcpMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpMenu.d.ts","sourceRoot":"","sources":["../../src/ui/mcpMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectMcp } from "./assetMenu.js";
2
+ //# sourceMappingURL=mcpMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpMenu.js","sourceRoot":"","sources":["../../src/ui/mcpMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectPresets } from "./assetMenu.js";
2
+ //# sourceMappingURL=presetsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presetsMenu.d.ts","sourceRoot":"","sources":["../../src/ui/presetsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectPresets } from "./assetMenu.js";
2
+ //# sourceMappingURL=presetsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presetsMenu.js","sourceRoot":"","sources":["../../src/ui/presetsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare class ProgressDisplay {
2
+ private spinner;
3
+ start(text: string): void;
4
+ succeed(text: string): void;
5
+ fail(text: string): void;
6
+ stop(): void;
7
+ }
8
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAoB;IAEnC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASxB,IAAI,IAAI,IAAI;CAMb"}
@@ -0,0 +1,34 @@
1
+ import ora from "ora";
2
+ import chalk from "chalk";
3
+ export class ProgressDisplay {
4
+ spinner = null;
5
+ start(text) {
6
+ this.stop();
7
+ this.spinner = ora({ text, spinner: "dots" }).start();
8
+ }
9
+ succeed(text) {
10
+ if (this.spinner) {
11
+ this.spinner.succeed(text);
12
+ this.spinner = null;
13
+ }
14
+ else {
15
+ console.log(`${chalk.green("✔")} ${text}`);
16
+ }
17
+ }
18
+ fail(text) {
19
+ if (this.spinner) {
20
+ this.spinner.fail(text);
21
+ this.spinner = null;
22
+ }
23
+ else {
24
+ console.log(`${chalk.red("✖")} ${text}`);
25
+ }
26
+ }
27
+ stop() {
28
+ if (this.spinner) {
29
+ this.spinner.stop();
30
+ this.spinner = null;
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,eAAe;IAClB,OAAO,GAAe,IAAI,CAAC;IAEnC,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function isPromptExit(error: unknown): boolean;
2
+ //# sourceMappingURL=prompt-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-errors.d.ts","sourceRoot":"","sources":["../../src/ui/prompt-errors.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,5 @@
1
+ import { ExitPromptError } from "@inquirer/core";
2
+ export function isPromptExit(error) {
3
+ return error instanceof ExitPromptError || (error instanceof Error && error.name === "ExitPromptError");
4
+ }
5
+ //# sourceMappingURL=prompt-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-errors.js","sourceRoot":"","sources":["../../src/ui/prompt-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,eAAe,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectPrompts } from "./assetMenu.js";
2
+ //# sourceMappingURL=promptsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptsMenu.d.ts","sourceRoot":"","sources":["../../src/ui/promptsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectPrompts } from "./assetMenu.js";
2
+ //# sourceMappingURL=promptsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptsMenu.js","sourceRoot":"","sources":["../../src/ui/promptsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectRules } from "./assetMenu.js";
2
+ //# sourceMappingURL=rulesMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesMenu.d.ts","sourceRoot":"","sources":["../../src/ui/rulesMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectRules } from "./assetMenu.js";
2
+ //# sourceMappingURL=rulesMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rulesMenu.js","sourceRoot":"","sources":["../../src/ui/rulesMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectSkills } from "./assetMenu.js";
2
+ //# sourceMappingURL=skillsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsMenu.d.ts","sourceRoot":"","sources":["../../src/ui/skillsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { selectSkills } from "./assetMenu.js";
2
+ //# sourceMappingURL=skillsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsMenu.js","sourceRoot":"","sources":["../../src/ui/skillsMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AssetRequest } from "../types/index.js";
2
+ export declare function renderSummary(registryUrl: string, selections: AssetRequest[]): void;
3
+ export declare function confirmInstallation(registryUrl: string, selections: AssetRequest[]): Promise<boolean>;
4
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/ui/summary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAC;AAuBjE,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CA+BnF;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,YAAY,EAAE,GACzB,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
@@ -0,0 +1,68 @@
1
+ import boxen from "boxen";
2
+ import chalk from "chalk";
3
+ import { confirm } from "@inquirer/prompts";
4
+ import { humanizeId } from "./format.js";
5
+ import { displayRegistryUrl } from "../utils/fs.js";
6
+ import { isPromptExit } from "./prompt-errors.js";
7
+ const SECTION_LABELS = {
8
+ skill: "Skills",
9
+ rule: "Rules",
10
+ prompt: "Prompts",
11
+ mcp: "MCP",
12
+ preset: "Presets",
13
+ };
14
+ function groupSelections(selections) {
15
+ const groups = {};
16
+ for (const item of selections) {
17
+ const list = groups[item.type] ?? [];
18
+ list.push(item.id);
19
+ groups[item.type] = list;
20
+ }
21
+ return groups;
22
+ }
23
+ export function renderSummary(registryUrl, selections) {
24
+ const groups = groupSelections(selections);
25
+ const lines = [];
26
+ lines.push(chalk.bold("Installation Summary"));
27
+ lines.push("");
28
+ lines.push(chalk.dim("Registry"));
29
+ lines.push(` ${displayRegistryUrl(registryUrl)}`);
30
+ lines.push("");
31
+ for (const type of ["skill", "rule", "prompt", "mcp", "preset"]) {
32
+ const ids = groups[type];
33
+ if (!ids || ids.length === 0)
34
+ continue;
35
+ lines.push(chalk.dim(SECTION_LABELS[type]));
36
+ for (const id of ids) {
37
+ lines.push(` ${chalk.green("✓")} ${humanizeId(id)}`);
38
+ }
39
+ lines.push("");
40
+ }
41
+ lines.push(chalk.dim("Destination"));
42
+ lines.push(` ${chalk.cyan("./.cursor")}`);
43
+ console.log(boxen(lines.join("\n"), {
44
+ padding: 1,
45
+ margin: { top: 1, bottom: 1, left: 0, right: 0 },
46
+ borderStyle: "round",
47
+ borderColor: "cyan",
48
+ }));
49
+ }
50
+ export async function confirmInstallation(registryUrl, selections) {
51
+ if (selections.length === 0) {
52
+ return false;
53
+ }
54
+ renderSummary(registryUrl, selections);
55
+ try {
56
+ return await confirm({
57
+ message: "Continue?",
58
+ default: true,
59
+ });
60
+ }
61
+ catch (error) {
62
+ if (isPromptExit(error)) {
63
+ return false;
64
+ }
65
+ throw error;
66
+ }
67
+ }
68
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/ui/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,cAAc,GAA8B;IAChD,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,eAAe,CAAC,UAA0B;IACjD,MAAM,MAAM,GAAyC,EAAE,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,UAA0B;IAC3E,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,MAAM;KACpB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,UAA0B;IAE1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;YACnB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "noah-cursor",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Install reusable Cursor assets (Skills, Rules, Prompts, MCP configs, Presets) from GitHub registries",
5
5
  "type": "module",
6
6
  "bin": {
@@ -47,16 +47,21 @@
47
47
  },
48
48
  "homepage": "https://github.com/itsmenoahpoli/noah-cursor#readme",
49
49
  "dependencies": {
50
+ "@inquirer/core": "11.2.1",
50
51
  "@inquirer/prompts": "^7.5.0",
52
+ "boxen": "^8.0.1",
51
53
  "chalk": "^5.4.1",
52
54
  "commander": "^13.1.0",
53
55
  "execa": "^9.5.2",
56
+ "figlet": "^1.11.3",
54
57
  "fs-extra": "^11.3.0",
58
+ "gradient-string": "^3.0.0",
55
59
  "ora": "^8.2.0",
56
60
  "simple-git": "^3.27.0",
57
61
  "zod": "^3.24.2"
58
62
  },
59
63
  "devDependencies": {
64
+ "@types/figlet": "^1.7.0",
60
65
  "@types/fs-extra": "^11.0.4",
61
66
  "@types/node": "^22.13.10",
62
67
  "@typescript-eslint/eslint-plugin": "^8.26.1",