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
package/README.md
CHANGED
|
@@ -1,38 +1,63 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/noah-cursor-banner.png" alt="Noah Cursor" width="100%" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
Install reusable Cursor assets — Skills, Rules, Prompts, MCP configs, and Presets —
|
|
5
|
+
Install Noah's reusable Cursor assets — Skills, Rules, Prompts, MCP configs, and Presets — into your project.
|
|
4
6
|
|
|
5
7
|
```bash
|
|
6
|
-
npx noah-cursor add
|
|
8
|
+
npx noah-cursor add --skill test
|
|
7
9
|
```
|
|
8
10
|
|
|
9
11
|
## Install
|
|
10
12
|
|
|
11
13
|
```bash
|
|
12
|
-
# One-shot (recommended)
|
|
13
|
-
npx noah-cursor add
|
|
14
|
+
# One-shot (recommended) — uses the registry bundled in the package
|
|
15
|
+
npx noah-cursor add --skill <name>
|
|
14
16
|
|
|
15
17
|
# Or install globally
|
|
16
18
|
npm install -g noah-cursor
|
|
17
19
|
```
|
|
18
20
|
|
|
19
|
-
Requires **Node.js 20
|
|
21
|
+
Requires **Node.js 20+**. The registry ships inside the package (no GitHub clone or sign-in).
|
|
20
22
|
|
|
21
23
|
## Commands
|
|
22
24
|
|
|
23
|
-
| Command
|
|
24
|
-
|
|
25
|
-
| `add`
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
25
|
+
| Command | Description |
|
|
26
|
+
| -------- | --------------------------------------- |
|
|
27
|
+
| `add` | Install assets from Noah's registry |
|
|
28
|
+
| `browse` | Interactively browse and install assets |
|
|
29
|
+
| `search` | Search assets in Noah's registry |
|
|
30
|
+
| `list` | List all assets in Noah's registry |
|
|
31
|
+
| `remove` | Remove an installed asset |
|
|
32
|
+
| `update` | Re-fetch and update installed assets |
|
|
33
|
+
| `doctor` | Diagnose environment health |
|
|
34
|
+
|
|
35
|
+
### browse
|
|
36
|
+
|
|
37
|
+
Interactive TUI for discovering assets without knowing their ids:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
noah-cursor browse
|
|
41
|
+
noah-cursor browse --browse-skills
|
|
42
|
+
noah-cursor browse --browse-rules
|
|
43
|
+
noah-cursor browse --browse-prompts
|
|
44
|
+
noah-cursor browse --browse-mcp
|
|
45
|
+
noah-cursor browse --browse-presets
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx noah-cursor browse
|
|
52
|
+
npx noah-cursor browse . --browse-skills
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Controls: ↑↓ navigate · Space select · A toggle all · I invert · Enter confirm · Esc cancel
|
|
31
56
|
|
|
32
57
|
### add
|
|
33
58
|
|
|
34
59
|
```bash
|
|
35
|
-
noah-cursor add
|
|
60
|
+
noah-cursor add [repository]
|
|
36
61
|
|
|
37
62
|
--skill <name>
|
|
38
63
|
--rule <name>
|
|
@@ -46,24 +71,28 @@ noah-cursor add <repository>
|
|
|
46
71
|
--verbose
|
|
47
72
|
```
|
|
48
73
|
|
|
74
|
+
`[repository]` is optional. By default the CLI uses the **bundled** Noah registry (copied into the package at build time). Third-party GitHub registries are not supported. Use a local path (e.g. `.`) only while developing this repo.
|
|
75
|
+
|
|
49
76
|
Examples:
|
|
50
77
|
|
|
51
78
|
```bash
|
|
52
|
-
#
|
|
53
|
-
npx noah-cursor add
|
|
54
|
-
npx noah-cursor add
|
|
55
|
-
npx noah-cursor add
|
|
56
|
-
npx noah-cursor add
|
|
57
|
-
|
|
58
|
-
|
|
79
|
+
# Install from Noah's official registry
|
|
80
|
+
npx noah-cursor add --skill test
|
|
81
|
+
npx noah-cursor add --rule test
|
|
82
|
+
npx noah-cursor add --preset test
|
|
83
|
+
npx noah-cursor add --all
|
|
84
|
+
npx noah-cursor add itsmenoahpoli/noah-cursor --skill commit-push
|
|
85
|
+
|
|
86
|
+
# Local path while developing this registry
|
|
59
87
|
noah-cursor add . --skill test --dry-run
|
|
60
88
|
```
|
|
61
89
|
|
|
62
90
|
### search / list / remove / update / doctor
|
|
63
91
|
|
|
64
92
|
```bash
|
|
65
|
-
noah-cursor search test
|
|
93
|
+
noah-cursor search test
|
|
66
94
|
noah-cursor list
|
|
95
|
+
noah-cursor list --installed
|
|
67
96
|
noah-cursor remove skill test --yes
|
|
68
97
|
noah-cursor update --yes
|
|
69
98
|
noah-cursor doctor
|
|
@@ -88,7 +117,7 @@ presets/
|
|
|
88
117
|
- **rule** `test`
|
|
89
118
|
- **preset** `test` (installs both)
|
|
90
119
|
|
|
91
|
-
Add
|
|
120
|
+
Add curated Noah assets under those folders and register them in `manifest.json`.
|
|
92
121
|
|
|
93
122
|
### manifest.json
|
|
94
123
|
|
|
@@ -161,11 +190,13 @@ Assets are copied into your project:
|
|
|
161
190
|
|
|
162
191
|
```bash
|
|
163
192
|
npm install
|
|
164
|
-
npm run build
|
|
193
|
+
npm run build # compiles TypeScript and bundles registry → dist/registry
|
|
165
194
|
npm test
|
|
166
195
|
npm run dev -- doctor
|
|
167
196
|
```
|
|
168
197
|
|
|
198
|
+
`npm run build` copies `manifest.json` plus `skills/`, `rules/`, `prompts/`, `mcp/`, and `presets/` into `dist/noah-registry/` so published installs never need to clone GitHub.
|
|
199
|
+
|
|
169
200
|
## License
|
|
170
201
|
|
|
171
202
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDzD"}
|
package/dist/commands/add.js
CHANGED
|
@@ -4,8 +4,8 @@ import { addFromRegistry } from "../services/install-service.js";
|
|
|
4
4
|
export function registerAddCommand(program) {
|
|
5
5
|
program
|
|
6
6
|
.command("add")
|
|
7
|
-
.description("Install assets from
|
|
8
|
-
.argument("
|
|
7
|
+
.description("Install assets from Noah's official registry")
|
|
8
|
+
.argument("[repository]", "Local path for development (default: bundled Noah registry)")
|
|
9
9
|
.option("--skill <name>", "Install a skill by id")
|
|
10
10
|
.option("--rule <name>", "Install a rule by id")
|
|
11
11
|
.option("--prompt <name>", "Install a prompt by id")
|
|
@@ -17,7 +17,7 @@ export function registerAddCommand(program) {
|
|
|
17
17
|
.option("-y, --yes", "Skip confirmation prompts", false)
|
|
18
18
|
.option("-v, --verbose", "Verbose output", false)
|
|
19
19
|
.action(async (repository, opts) => {
|
|
20
|
-
const spinner = createSpinner("
|
|
20
|
+
const spinner = createSpinner("Loading registry…");
|
|
21
21
|
try {
|
|
22
22
|
spinner.start();
|
|
23
23
|
const options = {
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,8CAA8C,CAAC;SAC3D,QAAQ,CACP,cAAc,EACd,6DAA6D,CAC9D;SACA,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;SAC/C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,cAAc,EAAE,6BAA6B,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,+CAA+C,CAAC;SAC1E,MAAM,CAAC,OAAO,EAAE,sCAAsC,EAAE,KAAK,CAAC;SAC9D,MAAM,CAAC,SAAS,EAAE,2BAA2B,EAAE,KAAK,CAAC;SACrD,MAAM,CAAC,WAAW,EAAE,oDAAoD,EAAE,KAAK,CAAC;SAChF,MAAM,CAAC,WAAW,EAAE,2BAA2B,EAAE,KAAK,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,IAAuC,EAAE,EAAE;QACxF,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAe;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;YAEF,OAAO,CAAC,IAAI,GAAG,mCAAmC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO;wBAC3B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;wBACzB,CAAC,CAAC,OAAO,CAAC,MAAM;4BACd,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;4BACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC/B,OAAO,CAAC,GAAG,CACT,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CACzE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse.d.ts","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG5D"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { handleCommandError, logWarn } from "../core/logger.js";
|
|
3
|
+
import { installFromSelections } from "../services/install-service.js";
|
|
4
|
+
import { loadRegistry } from "../services/registry-loader.js";
|
|
5
|
+
import { getManifestAssets } from "../utils/assets.js";
|
|
6
|
+
import { displayRegistryUrl } from "../utils/fs.js";
|
|
7
|
+
import { resolveNoahRegistry } from "../utils/registry.js";
|
|
8
|
+
import { selectCategories } from "../ui/categoryMenu.js";
|
|
9
|
+
import { selectAssets } from "../ui/assetMenu.js";
|
|
10
|
+
import { confirmInstallation } from "../ui/summary.js";
|
|
11
|
+
import { ProgressDisplay } from "../ui/progress.js";
|
|
12
|
+
import { humanizeId } from "../ui/format.js";
|
|
13
|
+
function categoriesFromFlags(opts) {
|
|
14
|
+
const selected = [];
|
|
15
|
+
if (opts.browseSkills)
|
|
16
|
+
selected.push("skill");
|
|
17
|
+
if (opts.browseRules)
|
|
18
|
+
selected.push("rule");
|
|
19
|
+
if (opts.browsePrompts)
|
|
20
|
+
selected.push("prompt");
|
|
21
|
+
if (opts.browseMcp)
|
|
22
|
+
selected.push("mcp");
|
|
23
|
+
if (opts.browsePresets)
|
|
24
|
+
selected.push("preset");
|
|
25
|
+
return selected;
|
|
26
|
+
}
|
|
27
|
+
function assetsForCategory(manifest, type) {
|
|
28
|
+
if (type === "preset") {
|
|
29
|
+
return manifest.presets;
|
|
30
|
+
}
|
|
31
|
+
return getManifestAssets(manifest, type);
|
|
32
|
+
}
|
|
33
|
+
async function collectSelections(manifest, categories) {
|
|
34
|
+
const selections = [];
|
|
35
|
+
for (const category of categories) {
|
|
36
|
+
const assets = assetsForCategory(manifest, category);
|
|
37
|
+
const chosen = await selectAssets(category, assets);
|
|
38
|
+
if (chosen === null) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
for (const id of chosen) {
|
|
42
|
+
selections.push({ type: category, id });
|
|
43
|
+
}
|
|
44
|
+
console.log();
|
|
45
|
+
}
|
|
46
|
+
return selections;
|
|
47
|
+
}
|
|
48
|
+
export function registerBrowseCommand(program) {
|
|
49
|
+
program
|
|
50
|
+
.command("browse")
|
|
51
|
+
.description("Interactively browse and install assets from Noah's official registry")
|
|
52
|
+
.argument("[repository]", "Local path for development (default: bundled Noah registry)")
|
|
53
|
+
.option("--browse-skills", "Browse skills only", false)
|
|
54
|
+
.option("--browse-rules", "Browse rules only", false)
|
|
55
|
+
.option("--browse-prompts", "Browse prompts only", false)
|
|
56
|
+
.option("--browse-mcp", "Browse MCP configs only", false)
|
|
57
|
+
.option("--browse-presets", "Browse presets only", false)
|
|
58
|
+
.option("--force", "Overwrite existing assets", false)
|
|
59
|
+
.option("--dry-run", "Show what would be installed without writing files", false)
|
|
60
|
+
.option("-y, --yes", "Skip final confirmation", false)
|
|
61
|
+
.option("-v, --verbose", "Verbose output", false)
|
|
62
|
+
.action(async (repository, opts) => {
|
|
63
|
+
const progress = new ProgressDisplay();
|
|
64
|
+
try {
|
|
65
|
+
progress.start("Loading registry…");
|
|
66
|
+
const source = resolveNoahRegistry(repository);
|
|
67
|
+
const registry = await loadRegistry(source, { verbose: opts.verbose });
|
|
68
|
+
progress.succeed("Loading registry");
|
|
69
|
+
progress.start("Reading manifest…");
|
|
70
|
+
const { manifest } = registry;
|
|
71
|
+
progress.succeed(`Reading manifest${manifest.name ? chalk.dim(` (${manifest.name}@${manifest.version})`) : ""}`);
|
|
72
|
+
console.log();
|
|
73
|
+
try {
|
|
74
|
+
const flagged = categoriesFromFlags(opts);
|
|
75
|
+
const categories = await selectCategories(flagged.length > 0 ? flagged : undefined);
|
|
76
|
+
if (!categories || categories.length === 0) {
|
|
77
|
+
logWarn("No categories selected. Exiting.");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log();
|
|
81
|
+
const selections = await collectSelections(manifest, categories);
|
|
82
|
+
if (selections === null) {
|
|
83
|
+
logWarn("Browse cancelled.");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (selections.length === 0) {
|
|
87
|
+
logWarn("No assets selected. Nothing to install.");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const shouldInstall = opts.yes ||
|
|
91
|
+
opts.dryRun ||
|
|
92
|
+
(await confirmInstallation(registry.url, selections));
|
|
93
|
+
if (!shouldInstall) {
|
|
94
|
+
logWarn("Installation cancelled.");
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
console.log();
|
|
98
|
+
const formatStep = (message) => message.startsWith("Installing ")
|
|
99
|
+
? message.replace(/^Installing ([^/]+)\/(.+)$/, (_full, type, id) => `Installing ${humanizeId(id)} ${chalk.dim(`(${type})`)}`)
|
|
100
|
+
: message;
|
|
101
|
+
const results = await installFromSelections(registry, selections, {
|
|
102
|
+
force: opts.force,
|
|
103
|
+
dryRun: opts.dryRun,
|
|
104
|
+
verbose: opts.verbose,
|
|
105
|
+
onStepStart: async (message) => {
|
|
106
|
+
progress.start(formatStep(message));
|
|
107
|
+
},
|
|
108
|
+
onStepDone: async (message) => {
|
|
109
|
+
progress.succeed(formatStep(message));
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
progress.succeed(opts.dryRun ? "Dry run complete" : "Installation complete");
|
|
113
|
+
const installed = results.filter((r) => !r.skipped);
|
|
114
|
+
console.log();
|
|
115
|
+
console.log(chalk.green(`${opts.dryRun ? "Planned" : "Installed"} ${installed.length} asset(s) from ${displayRegistryUrl(registry.url)}`));
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
await registry.cleanup();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
progress.fail("Browse failed");
|
|
123
|
+
handleCommandError(error, opts.verbose);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=browse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse.js","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E1D"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,30 +1,69 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { handleCommandError, logInfo, logTitle } from "../core/logger.js";
|
|
3
|
-
import {
|
|
2
|
+
import { createSpinner, handleCommandError, logInfo, logTitle } from "../core/logger.js";
|
|
3
|
+
import { listInstalledAssets } from "../metadata/store.js";
|
|
4
|
+
import { listRegistryAssets } from "../services/install-service.js";
|
|
5
|
+
const TYPE_ORDER = ["skill", "rule", "prompt", "mcp", "preset"];
|
|
4
6
|
export function registerListCommand(program) {
|
|
5
7
|
program
|
|
6
8
|
.command("list")
|
|
7
|
-
.description("List
|
|
9
|
+
.description("List all Skills, Rules, Prompts, MCP configs, and Presets in Noah's registry")
|
|
10
|
+
.argument("[repository]", "Local path for development (default: local checkout or bundled registry)")
|
|
11
|
+
.option("--installed", "List locally installed assets only", false)
|
|
8
12
|
.option("-v, --verbose", "Verbose output", false)
|
|
9
|
-
.action(async (opts) => {
|
|
13
|
+
.action(async (repository, opts) => {
|
|
14
|
+
if (opts.installed) {
|
|
15
|
+
try {
|
|
16
|
+
const listed = await listInstalledAssets();
|
|
17
|
+
if (listed.installed.length === 0) {
|
|
18
|
+
logInfo("No assets installed. Use `noah-cursor add` to install some.");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
logTitle(`Installed assets (${listed.installed.length})`);
|
|
22
|
+
if (listed.registry) {
|
|
23
|
+
console.log(chalk.dim(` Registry: ${listed.registry}`));
|
|
24
|
+
}
|
|
25
|
+
if (listed.updatedAt) {
|
|
26
|
+
console.log(chalk.dim(` Updated: ${listed.updatedAt}`));
|
|
27
|
+
}
|
|
28
|
+
console.log();
|
|
29
|
+
for (const asset of listed.installed) {
|
|
30
|
+
const pathInfo = asset.path ? chalk.dim(` → ${asset.path}`) : "";
|
|
31
|
+
console.log(` ${chalk.cyan(asset.type.padEnd(7))} ${chalk.bold(asset.id)}@${asset.version}${pathInfo}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
handleCommandError(error, opts.verbose);
|
|
36
|
+
}
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const spinner = createSpinner("Loading registry…");
|
|
10
40
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
41
|
+
spinner.start();
|
|
42
|
+
const listed = await listRegistryAssets(repository, { verbose: opts.verbose });
|
|
43
|
+
spinner.stop();
|
|
44
|
+
if (listed.assets.length === 0) {
|
|
45
|
+
logInfo("No assets found in the registry manifest.");
|
|
14
46
|
return;
|
|
15
47
|
}
|
|
16
|
-
logTitle(`
|
|
17
|
-
console.log(chalk.dim(`
|
|
18
|
-
|
|
19
|
-
console.log(chalk.dim(` Updated: ${metadata.updatedAt}`));
|
|
20
|
-
}
|
|
48
|
+
logTitle(`Registry assets (${listed.assets.length})`);
|
|
49
|
+
console.log(chalk.dim(` ${listed.name}@${listed.version}`));
|
|
50
|
+
console.log(chalk.dim(` ${listed.registry}`));
|
|
21
51
|
console.log();
|
|
22
|
-
for (const
|
|
23
|
-
const
|
|
24
|
-
|
|
52
|
+
for (const type of TYPE_ORDER) {
|
|
53
|
+
const group = listed.assets.filter((asset) => asset.type === type);
|
|
54
|
+
if (group.length === 0) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.bold(type === "mcp" ? "MCP" : `${type[0].toUpperCase()}${type.slice(1)}s`));
|
|
58
|
+
for (const asset of group) {
|
|
59
|
+
const desc = asset.description ? chalk.dim(` — ${asset.description}`) : "";
|
|
60
|
+
console.log(` ${chalk.cyan(asset.type.padEnd(7))} ${chalk.bold(asset.id)}@${asset.version}${desc}`);
|
|
61
|
+
}
|
|
62
|
+
console.log();
|
|
25
63
|
}
|
|
26
64
|
}
|
|
27
65
|
catch (error) {
|
|
66
|
+
spinner.stop();
|
|
28
67
|
handleCommandError(error, opts.verbose);
|
|
29
68
|
}
|
|
30
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC5D"}
|
package/dist/commands/search.js
CHANGED
|
@@ -4,9 +4,9 @@ import { searchRegistry } from "../services/install-service.js";
|
|
|
4
4
|
export function registerSearchCommand(program) {
|
|
5
5
|
program
|
|
6
6
|
.command("search")
|
|
7
|
-
.description("Search assets in
|
|
7
|
+
.description("Search assets in Noah's official registry")
|
|
8
8
|
.argument("<query>", "Search query")
|
|
9
|
-
.option("-r, --registry <url>", "
|
|
9
|
+
.option("-r, --registry <url>", "Official registry URL or local path (defaults to official / last used)")
|
|
10
10
|
.option("-v, --verbose", "Verbose output", false)
|
|
11
11
|
.action(async (query, opts) => {
|
|
12
12
|
const spinner = createSpinner("Searching registry…");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CACL,sBAAsB,EACtB,wEAAwE,CACzE;SACA,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAA8C,EAAE,EAAE;QAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACzD,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,sBAAsB,KAAK,GAAG,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,uBAAuB,KAAK,MAAM,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAC3F,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
export declare const CLI_NAME = "noah-cursor";
|
|
2
|
-
export declare const CLI_VERSION
|
|
2
|
+
export declare const CLI_VERSION: string;
|
|
3
3
|
export declare const CURSOR_DIR = ".cursor";
|
|
4
4
|
export declare const METADATA_FILE = "noah.json";
|
|
5
5
|
export declare const MANIFEST_FILE = "manifest.json";
|
|
6
|
+
/** Official Noah asset registry (Skills, Rules, Prompts, MCP, Presets). */
|
|
7
|
+
export declare const OFFICIAL_REGISTRY_OWNER = "itsmenoahpoli";
|
|
8
|
+
export declare const OFFICIAL_REGISTRY_REPO = "noah-cursor";
|
|
9
|
+
export declare const OFFICIAL_REGISTRY = "https://github.com/itsmenoahpoli/noah-cursor";
|
|
10
|
+
/** Sentinel source: load the registry bundled into this package at build time. */
|
|
11
|
+
export declare const BUNDLED_REGISTRY = "bundled:noah-cursor";
|
|
6
12
|
export declare const ASSET_TYPES: readonly ["skill", "rule", "prompt", "mcp", "preset"];
|
|
7
13
|
export declare const ASSET_DIRECTORIES: {
|
|
8
14
|
readonly skill: "skills";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,gBAAgB,CAAC;AACtC,eAAO,MAAM,WAAW,QAAc,CAAC;AACvC,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,aAAa,cAAc,CAAC;AACzC,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,iBAAiB,iDAA4E,CAAC;AAE3G,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,eAAO,MAAM,WAAW,uDAAwD,CAAC;AAEjF,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC;AAEX,eAAO,MAAM,sBAAsB,2DAA4D,CAAC;AAEhG,eAAO,MAAM,eAAe,iBAAiB,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const pkg = require("../../package.json");
|
|
1
4
|
export const CLI_NAME = "noah-cursor";
|
|
2
|
-
export const CLI_VERSION =
|
|
5
|
+
export const CLI_VERSION = pkg.version;
|
|
3
6
|
export const CURSOR_DIR = ".cursor";
|
|
4
7
|
export const METADATA_FILE = "noah.json";
|
|
5
8
|
export const MANIFEST_FILE = "manifest.json";
|
|
9
|
+
/** Official Noah asset registry (Skills, Rules, Prompts, MCP, Presets). */
|
|
10
|
+
export const OFFICIAL_REGISTRY_OWNER = "itsmenoahpoli";
|
|
11
|
+
export const OFFICIAL_REGISTRY_REPO = "noah-cursor";
|
|
12
|
+
export const OFFICIAL_REGISTRY = `https://github.com/${OFFICIAL_REGISTRY_OWNER}/${OFFICIAL_REGISTRY_REPO}`;
|
|
13
|
+
/** Sentinel source: load the registry bundled into this package at build time. */
|
|
14
|
+
export const BUNDLED_REGISTRY = "bundled:noah-cursor";
|
|
6
15
|
export const ASSET_TYPES = ["skill", "rule", "prompt", "mcp", "preset"];
|
|
7
16
|
export const ASSET_DIRECTORIES = {
|
|
8
17
|
skill: "skills",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAE7C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,uBAAuB,IAAI,sBAAsB,EAAE,CAAC;AAE3G,kFAAkF;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU,CAAC;AAEjF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,SAAS;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;AAEhG,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/core/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/core/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,aAAa,IAAI,OAAO,CA8CvC"}
|
package/dist/core/program.js
CHANGED
|
@@ -1,20 +1,44 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { CLI_NAME, CLI_VERSION } from "../constants/index.js";
|
|
3
3
|
import { registerAddCommand } from "../commands/add.js";
|
|
4
|
+
import { registerBrowseCommand } from "../commands/browse.js";
|
|
4
5
|
import { registerSearchCommand } from "../commands/search.js";
|
|
5
6
|
import { registerListCommand } from "../commands/list.js";
|
|
6
7
|
import { registerRemoveCommand } from "../commands/remove.js";
|
|
7
8
|
import { registerUpdateCommand } from "../commands/update.js";
|
|
8
9
|
import { registerDoctorCommand } from "../commands/doctor.js";
|
|
10
|
+
import { renderBanner, shouldShowBanner } from "../ui/banner.js";
|
|
9
11
|
export function createProgram() {
|
|
10
12
|
const program = new Command();
|
|
11
13
|
program
|
|
12
14
|
.name(CLI_NAME)
|
|
13
|
-
.description("Install reusable Cursor assets (Skills, Rules, Prompts, MCP, Presets)
|
|
15
|
+
.description("Install Noah's reusable Cursor assets (Skills, Rules, Prompts, MCP, Presets)")
|
|
14
16
|
.version(CLI_VERSION)
|
|
17
|
+
.option("--no-banner", "Hide the NOAH DEV CLI banner")
|
|
15
18
|
.showHelpAfterError()
|
|
16
19
|
.showSuggestionAfterError();
|
|
20
|
+
// Show branding above help (`noah-cursor`, `noah-cursor --help`, `… help`)
|
|
21
|
+
program.configureHelp({
|
|
22
|
+
helpWidth: process.stdout.columns || 80,
|
|
23
|
+
});
|
|
24
|
+
program.addHelpText("beforeAll", () => {
|
|
25
|
+
// Banner for explicit --help / help command (empty argv is handled in index.ts)
|
|
26
|
+
if (shouldShowBanner()) {
|
|
27
|
+
renderBanner();
|
|
28
|
+
}
|
|
29
|
+
return "";
|
|
30
|
+
});
|
|
31
|
+
// Show branding before every subcommand action
|
|
32
|
+
program.hook("preAction", () => {
|
|
33
|
+
renderBanner();
|
|
34
|
+
});
|
|
35
|
+
// If Commander still routes to the root with no subcommand, show help (exit 0)
|
|
36
|
+
program.action(() => {
|
|
37
|
+
renderBanner();
|
|
38
|
+
program.outputHelp();
|
|
39
|
+
});
|
|
17
40
|
registerAddCommand(program);
|
|
41
|
+
registerBrowseCommand(program);
|
|
18
42
|
registerSearchCommand(program);
|
|
19
43
|
registerListCommand(program);
|
|
20
44
|
registerRemoveCommand(program);
|
package/dist/core/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/core/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/core/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CACV,8EAA8E,CAC/E;SACA,OAAO,CAAC,WAAW,CAAC;SACpB,MAAM,CAAC,aAAa,EAAE,8BAA8B,CAAC;SACrD,kBAAkB,EAAE;SACpB,wBAAwB,EAAE,CAAC;IAE9B,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;KACxC,CAAC,CAAC;IAEH,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE;QACpC,gFAAgF;QAChF,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACvB,YAAY,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QAC7B,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;QAClB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,UAAU,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createProgram } from "./core/program.js";
|
|
3
|
+
import { renderBanner } from "./ui/banner.js";
|
|
3
4
|
async function main() {
|
|
4
5
|
const program = createProgram();
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
// No arguments: show branding + help, exit successfully (not an error)
|
|
8
|
+
if (args.length === 0) {
|
|
9
|
+
renderBanner(true);
|
|
10
|
+
program.outputHelp();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
5
13
|
await program.parseAsync(process.argv);
|
|
6
14
|
}
|
|
7
15
|
main().catch((error) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,uEAAuE;IACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/metadata/store.d.ts
CHANGED
|
@@ -5,4 +5,16 @@ export declare function writeMetadata(metadata: NoahMetadata, cwd?: string): Pro
|
|
|
5
5
|
export declare function upsertInstalledAssets(registry: string, assets: InstalledAsset[], cwd?: string): Promise<NoahMetadata>;
|
|
6
6
|
export declare function removeInstalledAsset(type: string, id: string, cwd?: string): Promise<NoahMetadata | null>;
|
|
7
7
|
export declare function findInstalled(metadata: NoahMetadata, type: string, id: string): InstalledAsset | undefined;
|
|
8
|
+
/** Scan `.cursor/{skills,rules,prompts,mcp}` for asset folders on disk. */
|
|
9
|
+
export declare function scanCursorAssets(cwd?: string): Promise<InstalledAsset[]>;
|
|
10
|
+
export interface ListedAssets {
|
|
11
|
+
registry?: string;
|
|
12
|
+
updatedAt?: string;
|
|
13
|
+
installed: InstalledAsset[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* List installed assets by merging `.cursor/noah.json` with folders found on disk.
|
|
17
|
+
* Project skills (e.g. publish-npm) show up even when not recorded in metadata.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listInstalledAssets(cwd?: string): Promise<ListedAssets>;
|
|
8
20
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/metadata/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/metadata/store.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,eAAe,CAAC,GAAG,SAAgB,GAAG,MAAM,CAE3D;AAED,wBAAsB,YAAY,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmBpF;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,YAAY,EACtB,GAAG,SAAgB,GAClB,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EAAE,EACxB,GAAG,SAAgB,GAClB,OAAO,CAAC,YAAY,CAAC,CA0BvB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,GAAG,SAAgB,GAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAiB9B;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,cAAc,GAAG,SAAS,CAE5B;AAED,2EAA2E;AAC3E,wBAAsB,gBAAgB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAiCrF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BpF"}
|