noah-cursor 1.1.0 → 1.3.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 +36 -36
- 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.map +1 -1
- package/dist/commands/browse.js +7 -5
- package/dist/commands/browse.js.map +1 -1
- 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 +6 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +6 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/core/program.js +2 -2
- package/dist/core/program.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/.gitkeep +0 -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/larastan-fix/SKILL.md +203 -0
- package/dist/noah-registry/skills/nestjs-knip-fix/SKILL.md +147 -0
- package/dist/noah-registry/skills/nestjs-knip-fix/config/knip.nestjs.json +29 -0
- package/dist/noah-registry/skills/node-doctor-fix/SKILL.md +146 -0
- package/dist/noah-registry/skills/node-doctor-fix/config/node-doctor.knip.json +22 -0
- package/dist/noah-registry/skills/node-doctor-fix/scripts/node-doctor.mjs +393 -0
- package/dist/noah-registry/skills/react-doctor-fix/SKILL.md +185 -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 +9 -1
- package/dist/services/install-service.d.ts.map +1 -1
- package/dist/services/install-service.js +22 -7
- package/dist/services/install-service.js.map +1 -1
- package/dist/services/registry-loader.d.ts +7 -1
- package/dist/services/registry-loader.d.ts.map +1 -1
- package/dist/services/registry-loader.js +30 -11
- package/dist/services/registry-loader.js.map +1 -1
- package/dist/ui/banner.d.ts +1 -1
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +11 -8
- package/dist/ui/banner.js.map +1 -1
- 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 +4 -3
package/README.md
CHANGED
|
@@ -2,32 +2,32 @@
|
|
|
2
2
|
<img src="assets/noah-cursor-banner.png" alt="Noah Cursor" width="100%" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
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.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npx noah-cursor add
|
|
8
|
+
npx noah-cursor add --skill test
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
# One-shot (recommended)
|
|
15
|
-
npx noah-cursor add
|
|
14
|
+
# One-shot (recommended) — uses the registry bundled in the package
|
|
15
|
+
npx noah-cursor add --skill <name>
|
|
16
16
|
|
|
17
17
|
# Or install globally
|
|
18
18
|
npm install -g noah-cursor
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Requires **Node.js 20
|
|
21
|
+
Requires **Node.js 20+**. The registry ships inside the package (no GitHub clone or sign-in).
|
|
22
22
|
|
|
23
23
|
## Commands
|
|
24
24
|
|
|
25
25
|
| Command | Description |
|
|
26
26
|
| -------- | --------------------------------------- |
|
|
27
|
-
| `add` | Install assets from
|
|
27
|
+
| `add` | Install assets from Noah's registry |
|
|
28
28
|
| `browse` | Interactively browse and install assets |
|
|
29
|
-
| `search` | Search assets in
|
|
30
|
-
| `list` | List
|
|
29
|
+
| `search` | Search assets in Noah's registry |
|
|
30
|
+
| `list` | List all assets in Noah's registry |
|
|
31
31
|
| `remove` | Remove an installed asset |
|
|
32
32
|
| `update` | Re-fetch and update installed assets |
|
|
33
33
|
| `doctor` | Diagnose environment health |
|
|
@@ -37,18 +37,18 @@ Requires **Node.js 20+** and **Git**.
|
|
|
37
37
|
Interactive TUI for discovering assets without knowing their ids:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
noah-cursor browse
|
|
41
|
-
noah-cursor browse
|
|
42
|
-
noah-cursor browse
|
|
43
|
-
noah-cursor browse
|
|
44
|
-
noah-cursor browse
|
|
45
|
-
noah-cursor browse
|
|
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
46
|
```
|
|
47
47
|
|
|
48
48
|
Examples:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
|
-
npx noah-cursor browse
|
|
51
|
+
npx noah-cursor browse
|
|
52
52
|
npx noah-cursor browse . --browse-skills
|
|
53
53
|
```
|
|
54
54
|
|
|
@@ -57,7 +57,7 @@ Controls: ↑↓ navigate · Space select · A toggle all · I invert · Enter c
|
|
|
57
57
|
### add
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
noah-cursor add
|
|
60
|
+
noah-cursor add [repository]
|
|
61
61
|
|
|
62
62
|
--skill <name>
|
|
63
63
|
--rule <name>
|
|
@@ -71,24 +71,27 @@ noah-cursor add <repository>
|
|
|
71
71
|
--verbose
|
|
72
72
|
```
|
|
73
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
|
+
|
|
74
76
|
Examples:
|
|
75
77
|
|
|
76
78
|
```bash
|
|
77
|
-
#
|
|
78
|
-
npx noah-cursor add
|
|
79
|
-
npx noah-cursor add
|
|
80
|
-
npx noah-cursor add
|
|
81
|
-
npx noah-cursor add itsmenoahpoli/noah-cursor --
|
|
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 --all
|
|
83
|
+
npx noah-cursor add itsmenoahpoli/noah-cursor --skill commit-push
|
|
82
84
|
|
|
83
|
-
# Local path while developing
|
|
85
|
+
# Local path while developing this registry
|
|
84
86
|
noah-cursor add . --skill test --dry-run
|
|
85
87
|
```
|
|
86
88
|
|
|
87
89
|
### search / list / remove / update / doctor
|
|
88
90
|
|
|
89
91
|
```bash
|
|
90
|
-
noah-cursor search test
|
|
92
|
+
noah-cursor search test
|
|
91
93
|
noah-cursor list
|
|
94
|
+
noah-cursor list --installed
|
|
92
95
|
noah-cursor remove skill test --yes
|
|
93
96
|
noah-cursor update --yes
|
|
94
97
|
noah-cursor doctor
|
|
@@ -110,10 +113,14 @@ presets/
|
|
|
110
113
|
### Starter assets
|
|
111
114
|
|
|
112
115
|
- **skill** `test`
|
|
116
|
+
- **skill** `commit-push`
|
|
117
|
+
- **skill** `react-doctor-fix` — run react-doctor, fix findings, verify no regressions
|
|
118
|
+
- **skill** `larastan-fix` — run Larastan on Laravel, fix findings, verify no regressions
|
|
119
|
+
- **skill** `nestjs-knip-fix` — run Knip on NestJS, fix unused code/deps, verify no regressions
|
|
120
|
+
- **skill** `node-doctor-fix` — bundled node-doctor (Knip + package hygiene) for generic Node
|
|
113
121
|
- **rule** `test`
|
|
114
|
-
- **preset** `test` (installs both)
|
|
115
122
|
|
|
116
|
-
Add
|
|
123
|
+
Add curated Noah assets under those folders and register them in `manifest.json`. Presets are supported by the CLI but none are published in this registry yet.
|
|
117
124
|
|
|
118
125
|
### manifest.json
|
|
119
126
|
|
|
@@ -139,16 +146,7 @@ Add your own assets under those folders and register them in `manifest.json`.
|
|
|
139
146
|
],
|
|
140
147
|
"prompts": [],
|
|
141
148
|
"mcp": [],
|
|
142
|
-
"presets": [
|
|
143
|
-
{
|
|
144
|
-
"id": "test",
|
|
145
|
-
"version": "1.0.0",
|
|
146
|
-
"includes": {
|
|
147
|
-
"skills": ["test"],
|
|
148
|
-
"rules": ["test"]
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
]
|
|
149
|
+
"presets": []
|
|
152
150
|
}
|
|
153
151
|
```
|
|
154
152
|
|
|
@@ -186,11 +184,13 @@ Assets are copied into your project:
|
|
|
186
184
|
|
|
187
185
|
```bash
|
|
188
186
|
npm install
|
|
189
|
-
npm run build
|
|
187
|
+
npm run build # compiles TypeScript and bundles registry → dist/registry
|
|
190
188
|
npm test
|
|
191
189
|
npm run dev -- doctor
|
|
192
190
|
```
|
|
193
191
|
|
|
192
|
+
`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.
|
|
193
|
+
|
|
194
194
|
## License
|
|
195
195
|
|
|
196
196
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browse.d.ts","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
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"}
|
package/dist/commands/browse.js
CHANGED
|
@@ -4,6 +4,7 @@ import { installFromSelections } from "../services/install-service.js";
|
|
|
4
4
|
import { loadRegistry } from "../services/registry-loader.js";
|
|
5
5
|
import { getManifestAssets } from "../utils/assets.js";
|
|
6
6
|
import { displayRegistryUrl } from "../utils/fs.js";
|
|
7
|
+
import { resolveNoahRegistry } from "../utils/registry.js";
|
|
7
8
|
import { selectCategories } from "../ui/categoryMenu.js";
|
|
8
9
|
import { selectAssets } from "../ui/assetMenu.js";
|
|
9
10
|
import { confirmInstallation } from "../ui/summary.js";
|
|
@@ -47,8 +48,8 @@ async function collectSelections(manifest, categories) {
|
|
|
47
48
|
export function registerBrowseCommand(program) {
|
|
48
49
|
program
|
|
49
50
|
.command("browse")
|
|
50
|
-
.description("Interactively browse and install assets from
|
|
51
|
-
.argument("
|
|
51
|
+
.description("Interactively browse and install assets from Noah's official registry")
|
|
52
|
+
.argument("[repository]", "Local path for development (default: bundled Noah registry)")
|
|
52
53
|
.option("--browse-skills", "Browse skills only", false)
|
|
53
54
|
.option("--browse-rules", "Browse rules only", false)
|
|
54
55
|
.option("--browse-prompts", "Browse prompts only", false)
|
|
@@ -61,9 +62,10 @@ export function registerBrowseCommand(program) {
|
|
|
61
62
|
.action(async (repository, opts) => {
|
|
62
63
|
const progress = new ProgressDisplay();
|
|
63
64
|
try {
|
|
64
|
-
progress.start("
|
|
65
|
-
const
|
|
66
|
-
|
|
65
|
+
progress.start("Loading registry…");
|
|
66
|
+
const source = resolveNoahRegistry(repository);
|
|
67
|
+
const registry = await loadRegistry(source, { verbose: opts.verbose });
|
|
68
|
+
progress.succeed("Loading registry");
|
|
67
69
|
progress.start("Reading manifest…");
|
|
68
70
|
const { manifest } = registry;
|
|
69
71
|
progress.succeed(`Reading manifest${manifest.name ? chalk.dim(` (${manifest.name}@${manifest.version})`) : ""}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browse.js","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAc7C,SAAS,mBAAmB,CAAC,IAAmB;IAC9C,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,YAAY;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,WAAW;QAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,aAAa;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,aAAa;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,IAAe;IAC5D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,QAAkB,EAClB,UAA4B;IAE5B,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,
|
|
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"}
|
|
@@ -3,6 +3,12 @@ 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":"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,eAAO,MAAM,WAAW,uDAAwD,CAAC;AAEjF,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC;AAEX,eAAO,MAAM,sBAAsB,2DAA4D,CAAC;AAEhG,eAAO,MAAM,eAAe,iBAAiB,CAAC"}
|
|
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
|
@@ -6,6 +6,12 @@ export const CLI_VERSION = pkg.version;
|
|
|
6
6
|
export const CURSOR_DIR = ".cursor";
|
|
7
7
|
export const METADATA_FILE = "noah.json";
|
|
8
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";
|
|
9
15
|
export const ASSET_TYPES = ["skill", "rule", "prompt", "mcp", "preset"];
|
|
10
16
|
export const ASSET_DIRECTORIES = {
|
|
11
17
|
skill: "skills",
|
|
@@ -1 +1 @@
|
|
|
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,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
|
+
{"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"}
|
package/dist/core/program.js
CHANGED
|
@@ -12,9 +12,9 @@ export function createProgram() {
|
|
|
12
12
|
const program = new Command();
|
|
13
13
|
program
|
|
14
14
|
.name(CLI_NAME)
|
|
15
|
-
.description("Install reusable Cursor assets (Skills, Rules, Prompts, MCP, Presets)
|
|
15
|
+
.description("Install Noah's reusable Cursor assets (Skills, Rules, Prompts, MCP, Presets)")
|
|
16
16
|
.version(CLI_VERSION)
|
|
17
|
-
.option("--no-banner", "Hide the NOAH
|
|
17
|
+
.option("--no-banner", "Hide the NOAH DEV CLI banner")
|
|
18
18
|
.showHelpAfterError()
|
|
19
19
|
.showSuggestionAfterError();
|
|
20
20
|
// Show branding above help (`noah-cursor`, `noah-cursor --help`, `… help`)
|
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,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,
|
|
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/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"}
|
package/dist/metadata/store.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import fs from "fs-extra";
|
|
3
|
-
import { CURSOR_DIR, METADATA_FILE } from "../constants/index.js";
|
|
3
|
+
import { ASSET_DIRECTORIES, CURSOR_DIR, METADATA_FILE, } from "../constants/index.js";
|
|
4
4
|
import { MetadataError } from "../core/errors.js";
|
|
5
5
|
import { NoahMetadataSchema, } from "../types/index.js";
|
|
6
|
-
import { resolveProjectRoot } from "../utils/fs.js";
|
|
6
|
+
import { resolveCursorDir, resolveProjectRoot } from "../utils/fs.js";
|
|
7
|
+
const DISK_ASSET_TYPES = ["skill", "rule", "prompt", "mcp"];
|
|
7
8
|
export function getMetadataPath(cwd = process.cwd()) {
|
|
8
9
|
return path.join(resolveProjectRoot(cwd), CURSOR_DIR, METADATA_FILE);
|
|
9
10
|
}
|
|
@@ -75,4 +76,62 @@ export async function removeInstalledAsset(type, id, cwd = process.cwd()) {
|
|
|
75
76
|
export function findInstalled(metadata, type, id) {
|
|
76
77
|
return metadata.installed.find((asset) => asset.type === type && asset.id === id);
|
|
77
78
|
}
|
|
79
|
+
/** Scan `.cursor/{skills,rules,prompts,mcp}` for asset folders on disk. */
|
|
80
|
+
export async function scanCursorAssets(cwd = process.cwd()) {
|
|
81
|
+
const cursorDir = resolveCursorDir(cwd);
|
|
82
|
+
const results = [];
|
|
83
|
+
for (const type of DISK_ASSET_TYPES) {
|
|
84
|
+
const dirName = ASSET_DIRECTORIES[type];
|
|
85
|
+
const base = path.join(cursorDir, dirName);
|
|
86
|
+
if (!(await fs.pathExists(base))) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const entries = await fs.readdir(base, { withFileTypes: true });
|
|
90
|
+
for (const entry of entries) {
|
|
91
|
+
if (!entry.isDirectory() || entry.name.startsWith(".")) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const assetDir = path.join(base, entry.name);
|
|
95
|
+
const files = await fs.readdir(assetDir);
|
|
96
|
+
if (files.length === 0) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
results.push({
|
|
100
|
+
type,
|
|
101
|
+
id: entry.name,
|
|
102
|
+
version: "local",
|
|
103
|
+
path: path.join(dirName, entry.name),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return results;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* List installed assets by merging `.cursor/noah.json` with folders found on disk.
|
|
111
|
+
* Project skills (e.g. publish-npm) show up even when not recorded in metadata.
|
|
112
|
+
*/
|
|
113
|
+
export async function listInstalledAssets(cwd = process.cwd()) {
|
|
114
|
+
const metadata = await readMetadata(cwd);
|
|
115
|
+
const discovered = await scanCursorAssets(cwd);
|
|
116
|
+
const byKey = new Map();
|
|
117
|
+
for (const asset of discovered) {
|
|
118
|
+
byKey.set(`${asset.type}:${asset.id}`, asset);
|
|
119
|
+
}
|
|
120
|
+
for (const asset of metadata?.installed ?? []) {
|
|
121
|
+
const key = `${asset.type}:${asset.id}`;
|
|
122
|
+
const onDisk = byKey.get(key);
|
|
123
|
+
byKey.set(key, {
|
|
124
|
+
...onDisk,
|
|
125
|
+
...asset,
|
|
126
|
+
path: asset.path ?? onDisk?.path,
|
|
127
|
+
version: asset.version || onDisk?.version || "local",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
const installed = Array.from(byKey.values()).sort((a, b) => `${a.type}:${a.id}`.localeCompare(`${b.type}:${b.id}`));
|
|
131
|
+
return {
|
|
132
|
+
registry: metadata?.registry,
|
|
133
|
+
updatedAt: metadata?.updatedAt,
|
|
134
|
+
installed,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
78
137
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/metadata/store.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/metadata/store.ts"],"names":[],"mappings":"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"}
|