@ccpluginizer/ccpluginizer 0.3.0 → 0.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 +9 -12
- package/dist/index.js +1 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
> CLI for pluginizing non-plugin Claude Code repos.
|
|
4
4
|
|
|
5
|
-
Generate
|
|
5
|
+
Generate and validate [ccpluginizer marketplace](https://github.com/lifebugz/ccpluginizer) entries from any GitHub repo with Claude Code-compatible content (skills, agents, commands, hooks, MCP servers).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
|
-
Works with either runtime
|
|
9
|
+
Works with either runtime. Pick whichever you have.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
With Bun:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
bun add -g @ccpluginizer/ccpluginizer
|
|
@@ -16,7 +16,7 @@ bun add -g @ccpluginizer/ccpluginizer
|
|
|
16
16
|
bunx @ccpluginizer/ccpluginizer scan <owner/repo>
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
With npm or Node:
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
npm install -g @ccpluginizer/ccpluginizer
|
|
@@ -24,27 +24,24 @@ npm install -g @ccpluginizer/ccpluginizer
|
|
|
24
24
|
npx @ccpluginizer/ccpluginizer scan <owner/repo>
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
At runtime the CLI prefers Bun when it's around (it starts faster), and falls back to Node otherwise. You don't need to configure anything.
|
|
28
28
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
ccpluginizer scan <owner/repo> # Generate a marketplace entry
|
|
33
|
-
ccpluginizer submit <owner/repo> # Open a PR to add the repo to the catalog
|
|
34
33
|
ccpluginizer validate <entry.json> # Validate an entry against the schema
|
|
35
34
|
```
|
|
36
35
|
|
|
36
|
+
To add a repo to the catalog, run `scan`, commit the JSON to `entries/<name>.json` in the catalog repo, and open a PR. See the catalog's [CONTRIBUTING.md](https://github.com/lifebugz/ccpluginizer/blob/main/CONTRIBUTING.md).
|
|
37
|
+
|
|
37
38
|
`<owner/repo>` accepts either GitHub shorthand (`elysiajs/skills`) or a full URL (`https://github.com/elysiajs/skills`).
|
|
38
39
|
|
|
39
40
|
## How it works
|
|
40
41
|
|
|
41
|
-
ccpluginizer detects skills, agents, commands, hooks, and MCP servers in the source repo, then synthesizes a marketplace entry that uses Claude Code's `strict: false` mode to point at the source.
|
|
42
|
-
|
|
43
|
-
Three detection layers:
|
|
42
|
+
ccpluginizer detects skills, agents, commands, hooks, and MCP servers in the source repo, then synthesizes a marketplace entry that uses Claude Code's `strict: false` mode to point at the source. The catalog never holds a copy of the source itself.
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
2. **Manifest metadata** — `.claude-plugin/manifest.json` or `.ccpluginizer.json` marker file.
|
|
47
|
-
3. **Heuristic fallback** — looks for `SKILL.md` files with YAML frontmatter, `commands/*.md`, etc.
|
|
44
|
+
Detection runs in three passes. The first looks at convention paths like `.claude/skills/`, `.claude/agents/`, and `.claude/commands/`. The second reads `.claude-plugin/manifest.json` or a `.ccpluginizer.json` marker file if the repo has one. The third is a heuristic fallback for repos that follow neither convention. It scans for `SKILL.md` files with YAML frontmatter, `commands/*.md`, and similar patterns.
|
|
48
45
|
|
|
49
46
|
## Repository
|
|
50
47
|
|
package/dist/index.js
CHANGED
|
@@ -2205,30 +2205,6 @@ var validateCommand = new R2("validate").meta({ description: "Validate a marketp
|
|
|
2205
2205
|
console.log("OK");
|
|
2206
2206
|
});
|
|
2207
2207
|
|
|
2208
|
-
// src/commands/submit.ts
|
|
2209
|
-
import { writeFileSync as writeFileSync2, mkdtempSync as mkdtempSync2 } from "node:fs";
|
|
2210
|
-
import { tmpdir as tmpdir2 } from "node:os";
|
|
2211
|
-
import { join as join8 } from "node:path";
|
|
2212
|
-
var submitCommand = new R2("submit").meta({ description: "Generate an entry and open a PR against ccpluginizer/marketplace" }).args([{ name: "repo", type: "string", required: true, description: "owner/repo to pluginize" }]).flags({
|
|
2213
|
-
dryRun: { type: "boolean", short: "n", description: "Print the PR plan without opening it" }
|
|
2214
|
-
}).run(async ({ args, flags }) => {
|
|
2215
|
-
const repoPath = await resolveSource(args.repo);
|
|
2216
|
-
const sourceRepo = inferSourceRepo(args.repo);
|
|
2217
|
-
const entry = synthesizeEntry({ repoRoot: repoPath, sourceRepo });
|
|
2218
|
-
const tmpFile = join8(mkdtempSync2(join8(tmpdir2(), "ccp-submit-")), `${entry.name}.json`);
|
|
2219
|
-
writeFileSync2(tmpFile, JSON.stringify(entry, null, 2) + `
|
|
2220
|
-
`, "utf8");
|
|
2221
|
-
if (flags.dryRun === true) {
|
|
2222
|
-
console.log(`Would submit:
|
|
2223
|
-
entry: ${tmpFile}
|
|
2224
|
-
to: ccpluginizer/marketplace`);
|
|
2225
|
-
console.log(JSON.stringify(entry, null, 2));
|
|
2226
|
-
return;
|
|
2227
|
-
}
|
|
2228
|
-
console.log(`Generated entry at ${tmpFile}`);
|
|
2229
|
-
console.log("Run with --dryRun to preview, or follow the manual PR workflow in CONTRIBUTING.md.");
|
|
2230
|
-
});
|
|
2231
|
-
|
|
2232
2208
|
// src/index.ts
|
|
2233
|
-
var app = new R("ccpluginizer").meta({ description: "Pluginize non-plugin Claude Code repos" }).command(scanCommand).command(validateCommand)
|
|
2209
|
+
var app = new R("ccpluginizer").meta({ description: "Pluginize non-plugin Claude Code repos" }).command(scanCommand).command(validateCommand);
|
|
2234
2210
|
await app.execute();
|