noah-cursor 1.0.0 → 1.2.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.
- package/README.md +56 -25
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/browse.d.ts +3 -0
- package/dist/commands/browse.d.ts.map +1 -0
- package/dist/commands/browse.js +127 -0
- package/dist/commands/browse.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +54 -15
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/constants/index.d.ts +7 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +10 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/core/program.d.ts.map +1 -1
- package/dist/core/program.js +25 -1
- package/dist/core/program.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/metadata/store.d.ts +12 -0
- package/dist/metadata/store.d.ts.map +1 -1
- package/dist/metadata/store.js +61 -2
- package/dist/metadata/store.js.map +1 -1
- package/dist/noah-registry/manifest.json +85 -0
- package/dist/noah-registry/mcp/.gitkeep +0 -0
- package/dist/noah-registry/presets/noah-web-stack/preset.json +3 -0
- package/dist/noah-registry/presets/test/preset.json +3 -0
- package/dist/noah-registry/prompts/.gitkeep +0 -0
- package/dist/noah-registry/rules/laravel-api/RULE.md +62 -0
- package/dist/noah-registry/rules/nextjs-marketing/RULE.md +52 -0
- package/dist/noah-registry/rules/nuxt-marketing/RULE.md +50 -0
- package/dist/noah-registry/rules/react-spa-dashboard/RULE.md +75 -0
- package/dist/noah-registry/rules/stack-architecture/RULE.md +28 -0
- package/dist/noah-registry/rules/test/RULE.md +16 -0
- package/dist/noah-registry/skills/commit-push/SKILL.md +193 -0
- package/dist/noah-registry/skills/test/SKILL.md +14 -0
- package/dist/services/doctor-service.js +3 -3
- package/dist/services/doctor-service.js.map +1 -1
- package/dist/services/install-service.d.ts +24 -2
- package/dist/services/install-service.d.ts.map +1 -1
- package/dist/services/install-service.js +115 -93
- package/dist/services/install-service.js.map +1 -1
- package/dist/services/registry-loader.d.ts +15 -0
- package/dist/services/registry-loader.d.ts.map +1 -0
- package/dist/services/registry-loader.js +39 -0
- package/dist/services/registry-loader.js.map +1 -0
- package/dist/ui/assetMenu.d.ts +8 -0
- package/dist/ui/assetMenu.d.ts.map +1 -0
- package/dist/ui/assetMenu.js +60 -0
- package/dist/ui/assetMenu.js.map +1 -0
- package/dist/ui/banner.d.ts +7 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +60 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/categoryMenu.d.ts +9 -0
- package/dist/ui/categoryMenu.d.ts.map +1 -0
- package/dist/ui/categoryMenu.js +44 -0
- package/dist/ui/categoryMenu.js.map +1 -0
- package/dist/ui/format.d.ts +5 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +26 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/mcpMenu.d.ts +2 -0
- package/dist/ui/mcpMenu.d.ts.map +1 -0
- package/dist/ui/mcpMenu.js +2 -0
- package/dist/ui/mcpMenu.js.map +1 -0
- package/dist/ui/presetsMenu.d.ts +2 -0
- package/dist/ui/presetsMenu.d.ts.map +1 -0
- package/dist/ui/presetsMenu.js +2 -0
- package/dist/ui/presetsMenu.js.map +1 -0
- package/dist/ui/progress.d.ts +8 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +34 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompt-errors.d.ts +2 -0
- package/dist/ui/prompt-errors.d.ts.map +1 -0
- package/dist/ui/prompt-errors.js +5 -0
- package/dist/ui/prompt-errors.js.map +1 -0
- package/dist/ui/promptsMenu.d.ts +2 -0
- package/dist/ui/promptsMenu.d.ts.map +1 -0
- package/dist/ui/promptsMenu.js +2 -0
- package/dist/ui/promptsMenu.js.map +1 -0
- package/dist/ui/rulesMenu.d.ts +2 -0
- package/dist/ui/rulesMenu.d.ts.map +1 -0
- package/dist/ui/rulesMenu.js +2 -0
- package/dist/ui/rulesMenu.js.map +1 -0
- package/dist/ui/skillsMenu.d.ts +2 -0
- package/dist/ui/skillsMenu.d.ts.map +1 -0
- package/dist/ui/skillsMenu.js +2 -0
- package/dist/ui/skillsMenu.js.map +1 -0
- package/dist/ui/summary.d.ts +4 -0
- package/dist/ui/summary.d.ts.map +1 -0
- package/dist/ui/summary.js +68 -0
- package/dist/ui/summary.js.map +1 -0
- package/dist/utils/registry.d.ts +22 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +95 -0
- package/dist/utils/registry.js.map +1 -0
- package/package.json +9 -3
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function isOfficialRegistryUrl(url: string): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Path to the registry shipped with this package (`dist/registry`),
|
|
4
|
+
* or the repo root when running from source / before bundle.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getBundledRegistryPath(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the registry source for this CLI.
|
|
9
|
+
*
|
|
10
|
+
* Defaults to the build-time bundled registry (no GitHub clone).
|
|
11
|
+
* Local paths (`.`, `./…`, absolute, `file://`) remain allowed for development.
|
|
12
|
+
* Official remote aliases also map to the bundled registry.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveNoahRegistry(input?: string): string;
|
|
15
|
+
/** True when cwd looks like the Noah registry checkout (manifest + asset dirs). */
|
|
16
|
+
export declare function isLocalNoahRegistry(cwd?: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Prefer the local checkout when running inside this registry project;
|
|
19
|
+
* otherwise leave unset so callers default to the bundled registry.
|
|
20
|
+
*/
|
|
21
|
+
export declare function preferLocalRegistry(cwd?: string): Promise<string | undefined>;
|
|
22
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAwBA,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAY1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAiB/C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAwB1D;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB/E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK1F"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
import { BUNDLED_REGISTRY, MANIFEST_FILE, OFFICIAL_REGISTRY, OFFICIAL_REGISTRY_OWNER, OFFICIAL_REGISTRY_REPO, REGISTRY_REQUIRED_DIRS, } from "../constants/index.js";
|
|
5
|
+
import { RegistryError, ValidationError } from "../core/errors.js";
|
|
6
|
+
import { displayRegistryUrl, normalizeGitHubUrl } from "./fs.js";
|
|
7
|
+
function looksLikeGitHubRemote(input) {
|
|
8
|
+
return (input.includes("github.com") ||
|
|
9
|
+
input.startsWith("git@") ||
|
|
10
|
+
input.startsWith("http://") ||
|
|
11
|
+
input.startsWith("https://") ||
|
|
12
|
+
/^[\w.-]+\/[\w.-]+$/.test(input));
|
|
13
|
+
}
|
|
14
|
+
export function isOfficialRegistryUrl(url) {
|
|
15
|
+
const normalized = displayRegistryUrl(url).toLowerCase();
|
|
16
|
+
const expected = OFFICIAL_REGISTRY.toLowerCase();
|
|
17
|
+
const shorthand = `${OFFICIAL_REGISTRY_OWNER}/${OFFICIAL_REGISTRY_REPO}`.toLowerCase();
|
|
18
|
+
return (normalized === expected ||
|
|
19
|
+
normalized === `${expected}.git` ||
|
|
20
|
+
normalized.endsWith(`github.com/${shorthand}`) ||
|
|
21
|
+
normalized === `git@github.com:${shorthand}` ||
|
|
22
|
+
normalized === `git@github.com:${shorthand}.git`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Path to the registry shipped with this package (`dist/registry`),
|
|
26
|
+
* or the repo root when running from source / before bundle.
|
|
27
|
+
*/
|
|
28
|
+
export function getBundledRegistryPath() {
|
|
29
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
const candidates = [
|
|
31
|
+
path.resolve(here, "../noah-registry"), // dist/utils → dist/noah-registry
|
|
32
|
+
path.resolve(here, "../.."), // src/utils → package root (tsx / tests)
|
|
33
|
+
];
|
|
34
|
+
for (const candidate of candidates) {
|
|
35
|
+
if (fs.existsSync(path.join(candidate, MANIFEST_FILE))) {
|
|
36
|
+
return candidate;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
throw new RegistryError("Bundled Noah registry not found. Run `npm run build` to generate dist/noah-registry.");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the registry source for this CLI.
|
|
43
|
+
*
|
|
44
|
+
* Defaults to the build-time bundled registry (no GitHub clone).
|
|
45
|
+
* Local paths (`.`, `./…`, absolute, `file://`) remain allowed for development.
|
|
46
|
+
* Official remote aliases also map to the bundled registry.
|
|
47
|
+
*/
|
|
48
|
+
export function resolveNoahRegistry(input) {
|
|
49
|
+
if (!input || input.trim() === "") {
|
|
50
|
+
return BUNDLED_REGISTRY;
|
|
51
|
+
}
|
|
52
|
+
const trimmed = input.trim();
|
|
53
|
+
if (trimmed === BUNDLED_REGISTRY) {
|
|
54
|
+
return BUNDLED_REGISTRY;
|
|
55
|
+
}
|
|
56
|
+
if (!looksLikeGitHubRemote(trimmed)) {
|
|
57
|
+
return trimmed;
|
|
58
|
+
}
|
|
59
|
+
const normalized = displayRegistryUrl(normalizeGitHubUrl(trimmed));
|
|
60
|
+
if (!isOfficialRegistryUrl(normalized)) {
|
|
61
|
+
throw new ValidationError(`noah-cursor only installs Noah's official registry assets (${OFFICIAL_REGISTRY}). ` +
|
|
62
|
+
"Third-party registries are not supported.");
|
|
63
|
+
}
|
|
64
|
+
return BUNDLED_REGISTRY;
|
|
65
|
+
}
|
|
66
|
+
/** True when cwd looks like the Noah registry checkout (manifest + asset dirs). */
|
|
67
|
+
export async function isLocalNoahRegistry(cwd = process.cwd()) {
|
|
68
|
+
const manifestPath = path.join(cwd, MANIFEST_FILE);
|
|
69
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
for (const dir of REGISTRY_REQUIRED_DIRS) {
|
|
73
|
+
if (!(await fs.pathExists(path.join(cwd, dir)))) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const manifest = (await fs.readJson(manifestPath));
|
|
79
|
+
return typeof manifest.name === "string" && manifest.name.length > 0;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Prefer the local checkout when running inside this registry project;
|
|
87
|
+
* otherwise leave unset so callers default to the bundled registry.
|
|
88
|
+
*/
|
|
89
|
+
export async function preferLocalRegistry(cwd = process.cwd()) {
|
|
90
|
+
if (await isLocalNoahRegistry(cwd)) {
|
|
91
|
+
return cwd;
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "noah-cursor",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Install reusable Cursor assets (Skills, Rules, Prompts, MCP configs, Presets)
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Install Noah's reusable Cursor assets (Skills, Rules, Prompts, MCP configs, Presets)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"noah-cursor": "./dist/index.js"
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"LICENSE"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"build": "tsc",
|
|
15
|
+
"build": "tsc && node scripts/bundle-registry.mjs",
|
|
16
|
+
"bundle:registry": "node scripts/bundle-registry.mjs",
|
|
16
17
|
"dev": "tsx src/index.ts",
|
|
17
18
|
"start": "node dist/index.js",
|
|
18
19
|
"test": "vitest run",
|
|
@@ -47,16 +48,21 @@
|
|
|
47
48
|
},
|
|
48
49
|
"homepage": "https://github.com/itsmenoahpoli/noah-cursor#readme",
|
|
49
50
|
"dependencies": {
|
|
51
|
+
"@inquirer/core": "11.2.1",
|
|
50
52
|
"@inquirer/prompts": "^7.5.0",
|
|
53
|
+
"boxen": "^8.0.1",
|
|
51
54
|
"chalk": "^5.4.1",
|
|
52
55
|
"commander": "^13.1.0",
|
|
53
56
|
"execa": "^9.5.2",
|
|
57
|
+
"figlet": "^1.11.3",
|
|
54
58
|
"fs-extra": "^11.3.0",
|
|
59
|
+
"gradient-string": "^3.0.0",
|
|
55
60
|
"ora": "^8.2.0",
|
|
56
61
|
"simple-git": "^3.27.0",
|
|
57
62
|
"zod": "^3.24.2"
|
|
58
63
|
},
|
|
59
64
|
"devDependencies": {
|
|
65
|
+
"@types/figlet": "^1.7.0",
|
|
60
66
|
"@types/fs-extra": "^11.0.4",
|
|
61
67
|
"@types/node": "^22.13.10",
|
|
62
68
|
"@typescript-eslint/eslint-plugin": "^8.26.1",
|