noah-cursor 1.2.0 → 1.4.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 CHANGED
@@ -45,11 +45,9 @@ noah-cursor browse --browse-mcp
45
45
  noah-cursor browse --browse-presets
46
46
  ```
47
47
 
48
- Examples:
49
-
50
48
  ```bash
51
49
  npx noah-cursor browse
52
- npx noah-cursor browse . --browse-skills
50
+ npx noah-cursor browse --browse-skills
53
51
  ```
54
52
 
55
53
  Controls: ↑↓ navigate · Space select · A toggle all · I invert · Enter confirm · Esc cancel
@@ -57,7 +55,7 @@ Controls: ↑↓ navigate · Space select · A toggle all · I invert · Enter c
57
55
  ### add
58
56
 
59
57
  ```bash
60
- noah-cursor add [repository]
58
+ noah-cursor add
61
59
 
62
60
  --skill <name>
63
61
  --rule <name>
@@ -71,20 +69,15 @@ noah-cursor add [repository]
71
69
  --verbose
72
70
  ```
73
71
 
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.
72
+ Always installs from **Noah's bundled registry** (no other registries).
75
73
 
76
74
  Examples:
77
75
 
78
76
  ```bash
79
- # Install from Noah's official registry
80
77
  npx noah-cursor add --skill test
81
78
  npx noah-cursor add --rule test
82
- npx noah-cursor add --preset test
83
79
  npx noah-cursor add --all
84
- npx noah-cursor add itsmenoahpoli/noah-cursor --skill commit-push
85
-
86
- # Local path while developing this registry
87
- noah-cursor add . --skill test --dry-run
80
+ npx noah-cursor add --skill commit-push
88
81
  ```
89
82
 
90
83
  ### search / list / remove / update / doctor
@@ -114,10 +107,14 @@ presets/
114
107
  ### Starter assets
115
108
 
116
109
  - **skill** `test`
110
+ - **skill** `commit-push`
111
+ - **skill** `react-doctor-fix` — run react-doctor, fix findings, verify no regressions
112
+ - **skill** `larastan-fix` — run Larastan on Laravel, fix findings, verify no regressions
113
+ - **skill** `nestjs-knip-fix` — run Knip on NestJS, fix unused code/deps, verify no regressions
114
+ - **skill** `node-doctor-fix` — bundled node-doctor (Knip + package hygiene) for generic Node
117
115
  - **rule** `test`
118
- - **preset** `test` (installs both)
119
116
 
120
- Add curated Noah assets under those folders and register them in `manifest.json`.
117
+ 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.
121
118
 
122
119
  ### manifest.json
123
120
 
@@ -143,16 +140,7 @@ Add curated Noah assets under those folders and register them in `manifest.json`
143
140
  ],
144
141
  "prompts": [],
145
142
  "mcp": [],
146
- "presets": [
147
- {
148
- "id": "test",
149
- "version": "1.0.0",
150
- "includes": {
151
- "skills": ["test"],
152
- "rules": ["test"]
153
- }
154
- }
155
- ]
143
+ "presets": []
156
144
  }
157
145
  ```
158
146
 
@@ -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,CAyDzD"}
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,CAqDzD"}
@@ -4,8 +4,7 @@ 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 Noah's official registry")
8
- .argument("[repository]", "Local path for development (default: bundled Noah registry)")
7
+ .description("Install assets from Noah's registry")
9
8
  .option("--skill <name>", "Install a skill by id")
10
9
  .option("--rule <name>", "Install a rule by id")
11
10
  .option("--prompt <name>", "Install a prompt by id")
@@ -16,7 +15,7 @@ export function registerAddCommand(program) {
16
15
  .option("--dry-run", "Show what would be installed without writing files", false)
17
16
  .option("-y, --yes", "Skip confirmation prompts", false)
18
17
  .option("-v, --verbose", "Verbose output", false)
19
- .action(async (repository, opts) => {
18
+ .action(async (opts) => {
20
19
  const spinner = createSpinner("Loading registry…");
21
20
  try {
22
21
  spinner.start();
@@ -33,7 +32,7 @@ export function registerAddCommand(program) {
33
32
  verbose: opts.verbose,
34
33
  };
35
34
  spinner.text = "Validating and installing assets…";
36
- const results = await addFromRegistry(repository, options);
35
+ const results = await addFromRegistry(undefined, options);
37
36
  spinner.stop();
38
37
  if (results.length > 0) {
39
38
  logTitle("Results");
@@ -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,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
+ {"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,qCAAqC,CAAC;SAClD,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,IAAuC,EAAE,EAAE;QACxD,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,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1D,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;AAiEpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG5D"}
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,CAoG5D"}
@@ -48,8 +48,7 @@ async function collectSelections(manifest, categories) {
48
48
  export function registerBrowseCommand(program) {
49
49
  program
50
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)")
51
+ .description("Interactively browse and install assets from Noah's registry")
53
52
  .option("--browse-skills", "Browse skills only", false)
54
53
  .option("--browse-rules", "Browse rules only", false)
55
54
  .option("--browse-prompts", "Browse prompts only", false)
@@ -59,11 +58,11 @@ export function registerBrowseCommand(program) {
59
58
  .option("--dry-run", "Show what would be installed without writing files", false)
60
59
  .option("-y, --yes", "Skip final confirmation", false)
61
60
  .option("-v, --verbose", "Verbose output", false)
62
- .action(async (repository, opts) => {
61
+ .action(async (opts) => {
63
62
  const progress = new ProgressDisplay();
64
63
  try {
65
64
  progress.start("Loading registry…");
66
- const source = resolveNoahRegistry(repository);
65
+ const source = resolveNoahRegistry();
67
66
  const registry = await loadRegistry(source, { verbose: opts.verbose });
68
67
  progress.succeed("Loading registry");
69
68
  progress.start("Reading manifest…");
@@ -1 +1 @@
1
- {"version":3,"file":"browse.js","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"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"}
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;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E1D"}
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,CAwE1D"}
@@ -7,10 +7,9 @@ export function registerListCommand(program) {
7
7
  program
8
8
  .command("list")
9
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
10
  .option("--installed", "List locally installed assets only", false)
12
11
  .option("-v, --verbose", "Verbose output", false)
13
- .action(async (repository, opts) => {
12
+ .action(async (opts) => {
14
13
  if (opts.installed) {
15
14
  try {
16
15
  const listed = await listInstalledAssets();
@@ -39,7 +38,7 @@ export function registerListCommand(program) {
39
38
  const spinner = createSpinner("Loading registry…");
40
39
  try {
41
40
  spinner.start();
42
- const listed = await listRegistryAssets(repository, { verbose: opts.verbose });
41
+ const listed = await listRegistryAssets(undefined, { verbose: opts.verbose });
43
42
  spinner.stop();
44
43
  if (listed.assets.length === 0) {
45
44
  logInfo("No assets found in the registry manifest.");
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
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,CAoC5D"}
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,CAgC5D"}
@@ -4,15 +4,14 @@ 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 Noah's official registry")
7
+ .description("Search assets in Noah's registry")
8
8
  .argument("<query>", "Search query")
9
- .option("-r, --registry <url>", "Official registry URL or local path (defaults to official / last used)")
10
9
  .option("-v, --verbose", "Verbose output", false)
11
10
  .action(async (query, opts) => {
12
11
  const spinner = createSpinner("Searching registry…");
13
12
  try {
14
13
  spinner.start();
15
- const results = await searchRegistry(query, opts.registry, {
14
+ const results = await searchRegistry(query, undefined, {
16
15
  verbose: opts.verbose,
17
16
  });
18
17
  spinner.stop();
@@ -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,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
+ {"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,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAA2B,EAAE,EAAE;QAC3D,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,SAAS,EAAE;gBACrD,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"}
@@ -15,6 +15,30 @@
15
15
  "version": "1.0.0",
16
16
  "description": "Stage all changes, group by category, draft a linepush-style commit, commit, and push",
17
17
  "tags": ["git", "commit", "push", "conventional-commits"]
18
+ },
19
+ {
20
+ "id": "react-doctor-fix",
21
+ "version": "1.0.0",
22
+ "description": "Run react-doctor, fix all findings, and verify features still work",
23
+ "tags": ["react", "react-doctor", "lint", "refactor", "qa"]
24
+ },
25
+ {
26
+ "id": "larastan-fix",
27
+ "version": "1.0.0",
28
+ "description": "Run Larastan on Laravel, fix all findings, and verify features still work",
29
+ "tags": ["laravel", "php", "larastan", "phpstan", "qa"]
30
+ },
31
+ {
32
+ "id": "nestjs-knip-fix",
33
+ "version": "1.0.0",
34
+ "description": "Run Knip on NestJS, fix unused code/deps, and verify features still work",
35
+ "tags": ["nestjs", "knip", "node", "typescript", "qa"]
36
+ },
37
+ {
38
+ "id": "node-doctor-fix",
39
+ "version": "1.0.0",
40
+ "description": "Run bundled node-doctor (Knip + hygiene), fix findings, verify features still work",
41
+ "tags": ["node", "knip", "doctor", "qa", "cli"]
18
42
  }
19
43
  ],
20
44
  "rules": [
@@ -57,29 +81,5 @@
57
81
  ],
58
82
  "prompts": [],
59
83
  "mcp": [],
60
- "presets": [
61
- {
62
- "id": "test",
63
- "version": "1.0.0",
64
- "description": "Installs the sample test skill and rule",
65
- "includes": {
66
- "skills": ["test"],
67
- "rules": ["test"]
68
- }
69
- },
70
- {
71
- "id": "noah-web-stack",
72
- "version": "1.0.0",
73
- "description": "Full Noah web stack rules: architecture, React SPA, Laravel API, Next.js and Nuxt marketing",
74
- "includes": {
75
- "rules": [
76
- "stack-architecture",
77
- "react-spa-dashboard",
78
- "laravel-api",
79
- "nextjs-marketing",
80
- "nuxt-marketing"
81
- ]
82
- }
83
- }
84
- ]
84
+ "presets": []
85
85
  }
File without changes
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: larastan-fix
3
+ description: >-
4
+ Runs Larastan (PHPStan for Laravel), constructs fixes for all findings, and
5
+ verifies that implementations, features, and functionalities are not broken
6
+ after changes. Use when the user runs /larastan-fix, asks to run Larastan,
7
+ PHPStan on a Laravel app, clean up static analysis errors, or fix Larastan
8
+ findings without regressions.
9
+ disable-model-invocation: true
10
+ ---
11
+
12
+ # /larastan-fix
13
+
14
+ Run **Larastan** (PHPStan + Laravel extension), fix **all** findings, and prove behavior still works.
15
+
16
+ Do **not** stop after the first file. Do **not** mass-ignore or regenerate a baseline to “pass.” Prefer root-cause fixes. After every batch of edits, re-verify with project checks so implementations, features, and functionalities are not broken.
17
+
18
+ ## Workflow
19
+
20
+ Copy this checklist and track progress:
21
+
22
+ ```
23
+ Larastan Fix Progress:
24
+ - [ ] 1. Confirm Laravel project + Larastan setup + verification commands
25
+ - [ ] 2. Baseline analyse
26
+ - [ ] 3. Triage findings (priority order)
27
+ - [ ] 4. Fix in batches (explain → edit → verify)
28
+ - [ ] 5. Re-analyse until clean (or document intentional leftovers)
29
+ - [ ] 6. Final verification + report
30
+ ```
31
+
32
+ ### 1. Confirm Laravel project + Larastan setup + verification commands
33
+
34
+ From the project root:
35
+
36
+ 1. Confirm this is a Laravel app (`artisan`, `composer.json` with `laravel/framework`) — abort with a clear message if not.
37
+ 2. Confirm Larastan is available:
38
+
39
+ ```bash
40
+ composer show larastan/larastan 2>/dev/null || composer show nunomaduro/larastan 2>/dev/null
41
+ test -f phpstan.neon -o -f phpstan.neon.dist -o -f phpstan.dist.neon
42
+ test -x vendor/bin/phpstan
43
+ ```
44
+
45
+ If Larastan / PHPStan is missing, install only with user approval:
46
+
47
+ ```bash
48
+ composer require --dev larastan/larastan
49
+ ```
50
+
51
+ Ensure config includes the Larastan extension (create `phpstan.neon` only if none exists and the user wants setup):
52
+
53
+ ```neon
54
+ includes:
55
+ - vendor/larastan/larastan/extension.neon
56
+ - vendor/nesbot/carbon/extension.neon
57
+
58
+ parameters:
59
+ paths:
60
+ - app/
61
+ level: 5
62
+ ```
63
+
64
+ Do **not** raise the configured level unless the user asks. Analyse at the project’s configured level.
65
+
66
+ 3. Detect verification commands. Prefer existing Composer / Artisan scripts:
67
+
68
+ ```bash
69
+ composer test # or phpunit / pest
70
+ php artisan test
71
+ vendor/bin/pest
72
+ vendor/bin/phpunit
73
+ vendor/bin/pint --test # style check only; not a substitute for tests
74
+ php artisan route:list # smoke when helpful
75
+ ```
76
+
77
+ Record the chosen commands before editing. If no tests exist, say so and still use the strongest available checks (at least a second Larastan run + Pint if present).
78
+
79
+ ### 2. Baseline analyse
80
+
81
+ Use the project binary (respects `phpstan.neon*`):
82
+
83
+ ```bash
84
+ ./vendor/bin/phpstan analyse --memory-limit=2G
85
+ ```
86
+
87
+ If Composer defines a script (`composer phpstan` / `composer analyse`), prefer that.
88
+
89
+ For machine-readable output when practical:
90
+
91
+ ```bash
92
+ ./vendor/bin/phpstan analyse --memory-limit=2G --error-format=json > .larastan-baseline.json
93
+ ```
94
+
95
+ Delete or leave untracked any temporary report files before finishing.
96
+
97
+ Path-scoped cleanup only when the user asks:
98
+
99
+ ```bash
100
+ ./vendor/bin/phpstan analyse app/Http/Controllers --memory-limit=2G
101
+ ```
102
+
103
+ Default for this skill is a **full** configured analyse unless the user scopes it.
104
+
105
+ ### 3. Triage findings
106
+
107
+ Work findings in this priority:
108
+
109
+ 1. **Runtime-breaking** — undefined methods/properties, wrong argument counts, impossible types that would crash
110
+ 2. **Null safety** — unsafe property/method access on nullable models, requests, relations
111
+ 3. **Laravel / Eloquent correctness** — wrong relation types, builder misuse, container/`auth`/`request` type gaps Larastan flags
112
+ 4. **PHPDoc / generics** — collection/model generics, `@var` / `@param` / `@return` that hide real bugs
113
+ 5. **Dead code / unreachable** — always-true/false conditions, unused private methods (only remove when safe)
114
+ 6. **Remaining level noise** — stricter level complaints that need small, local typing improvements
115
+
116
+ Group by file or by shared root cause (e.g. one incomplete Form Request type used everywhere).
117
+
118
+ ### 4. Fix in batches (explain → edit → verify)
119
+
120
+ For each batch (prefer one error identifier / one file group):
121
+
122
+ 1. **Explain the fix** briefly: what PHPStan reported, why the change is safe, what runtime behavior must stay the same.
123
+ 2. **Edit** the minimum code needed. Match Laravel project patterns (Form Requests, Actions, Eloquent APIs, API Resources).
124
+ 3. **Verify immediately** with the commands from step 1 (fastest relevant suite after each batch; full suite before the final report).
125
+ 4. If verification fails: **revert or repair** before continuing. Never leave the tree broken to chase a clean Larastan run.
126
+
127
+ #### Fix construction rules
128
+
129
+ - Preserve HTTP contracts: routes, status codes, JSON shapes, validation rules, auth/gates, jobs/events side effects.
130
+ - Prefer real types and narrowing (`=== null` checks, early returns, assert helpers) over silencing.
131
+ - Prefer accurate PHPDoc / generics on Eloquent models and collections when the code is already correct.
132
+ - Do not change business logic to satisfy the analyser when a precise type assertion or request DTO is enough.
133
+ - Do not upgrade Laravel/PHP major versions or rewrite architecture unless the user expands scope.
134
+ - Keep diffs small and reviewable.
135
+
136
+ #### Ignores / baseline (last resort only)
137
+
138
+ Prefer fixing the root cause. Use ignores only when:
139
+
140
+ - the finding is a true false positive for this Laravel version/package, **or**
141
+ - a correct fix would be an out-of-scope rewrite the user did not approve
142
+
143
+ Narrow inline ignore:
144
+
145
+ ```php
146
+ // @phpstan-ignore-next-line
147
+ ```
148
+
149
+ Or identifier-based ignores when the project PHPStan version supports them. Prefer next-line / specific `ignoreErrors` path patterns over global rules.
150
+
151
+ Do **not** run `--generate-baseline` to clear findings unless the user explicitly asks for a baseline workflow.
152
+
153
+ Document every ignore in the final report with file, message/identifier, and reason.
154
+
155
+ ### 5. Re-analyse until clean
156
+
157
+ After fixes:
158
+
159
+ ```bash
160
+ ./vendor/bin/phpstan analyse --memory-limit=2G
161
+ ```
162
+
163
+ Repeat triage → fix → verify until:
164
+
165
+ - analyse exits 0 with no errors, **or**
166
+ - only explicitly approved / documented ignores or deferred items remain
167
+
168
+ Do not claim “all clear” if analyse still fails.
169
+
170
+ ### 6. Final verification + report
171
+
172
+ Run the full verification set from step 1 again.
173
+
174
+ Report in this shape:
175
+
176
+ ```markdown
177
+ ## Larastan fix report
178
+
179
+ ### Analyse
180
+ - Config: <phpstan.neon*|level>
181
+ - Baseline: <N errors>
182
+ - Final: <clean | N remaining>
183
+
184
+ ### Fixed
185
+ - <error summary> — file(s) — one-line fix summary
186
+
187
+ ### Ignores
188
+ - none | file:line — reason
189
+
190
+ ### Verification
191
+ - <command> — pass/fail
192
+ - <command> — pass/fail
193
+
194
+ ### Deferred (needs user decision)
195
+ - <finding> — why not fixed
196
+ ```
197
+
198
+ ## Safety
199
+
200
+ - Do not commit or push unless the user asks.
201
+ - Do not use `--force` git commands.
202
+ - Do not commit secrets (`.env`, credentials).
203
+ - Stop and ask if a “fix” requires deleting substantial features, changing API contracts, or broad behavioral changes.