@mhmdreza-rafiei/agentry 0.1.0 → 0.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 CHANGED
@@ -1,6 +1,23 @@
1
- # agentry
1
+ <div align="center">
2
2
 
3
- A raw installer for AI/agent tooling. `agentry` fetches **agents, skills, rules, and scripts** from any Git repo (or local path) and installs the ones you pick into your project — or globally — under `.cursor/`. The CLI ships no assets of its own; you point it at a source.
3
+ <img src="docs/agentry-logo.png" alt="agentry" width="800" />
4
+
5
+ **A raw installer for AI agent tooling.**
6
+
7
+ `agentry` fetches **agents, skills, rules, scripts, and profiles** from any Git repo (or local path) and installs the ones you pick into your project — or globally — under each target provider's directory (`.cursor/`, `.claude/skills/`, `.agents/skills/`, …). The CLI ships no assets of its own; you point it at a source.
8
+
9
+ It mirrors the clean Clack-style UX of [`vercel-labs/skills`](https://github.com/vercel-labs/skills) and extends it beyond skills-only. Supports **70+ agent providers**.
10
+
11
+ [![npm version](https://img.shields.io/npm/v/@mhmdreza-rafiei/agentry.svg?style=flat&color=cyan)](https://www.npmjs.com/package/@mhmdreza-rafiei/agentry)
12
+ [![license](https://img.shields.io/badge/license-MIT-cyan.svg?style=flat)](#license)
13
+ [![node](https://img.shields.io/badge/node-%3E%3D22.20-cyan.svg?style=flat)](#development--test)
14
+ [![stars](https://img.shields.io/github/stars/mhmdreza-rafiei/agentry?style=social)](https://github.com/mhmdreza-rafiei/agentry)
15
+
16
+ ⭐ If agentry saves you time, [star the repo](https://github.com/mhmdreza-rafiei/agentry) — it helps others find it.
17
+
18
+ </div>
19
+
20
+ ---
4
21
 
5
22
  ## Install / run
6
23
 
@@ -13,82 +30,229 @@ npm install -g agentry@latest
13
30
 
14
31
  # Update / uninstall the CLI
15
32
  agentry update
16
- agentry --uninstall
33
+ agentry uninstall
17
34
  ```
18
35
 
19
- > Publishing to npm is pending. Until then, run from a clone: `node bin/agentry.js …` or `npx . …`.
36
+ > Publishing to npm is pending. Until then, run from a clone: `node dist/cli.mjs …` (after `npm run build`) or `npm run dev -- …`.
20
37
 
21
38
  ## Usage
22
39
 
23
40
  ```
24
- agentry add <type> <source> [category/name | category] [options]
41
+ agentry add <kind> <source> [category/name | category] [options]
25
42
  agentry add profile <name> [source] [options]
26
- agentry remove <type> [category/name | category] [options]
27
- agentry list <source> [type]
28
- agentry update
43
+ agentry remove <kind> [category/name | category] [options]
44
+ agentry list [source] [kind]
45
+ agentry update [kind] [source] [selector]
46
+ agentry uninstall
29
47
  ```
30
48
 
31
- `<source>` is a GitHub shorthand `author/repo`, a full git URL, or a local path.
49
+ `<kind>` is `skill | rule | agent | profile | script` (singular; plurals like `skills` are accepted and normalized). `<source>` is a GitHub shorthand `author/repo`, a full GitHub URL, a GitHub tree subdir URL, a GitLab URL, any git URL, or a local path.
32
50
 
33
51
  ```bash
34
52
  agentry add skills Prat011/awesome-llm-skills # list all skills and pick
35
- agentry add skills Prat011/awesome-llm-skills video-downloader # one skill (no category)
53
+ agentry add skills Prat011/awesome-llm-skills video-downloader # one skill (no category)
36
54
  agentry add skills Prat011/awesome-llm-skills document-skills/docx # one skill (category/name)
37
- agentry add agents author/repo frontend # a whole category
38
- agentry add profile frontend author/repo # apply profile/frontend.json
39
- agentry remove skills document-skills/docx # remove an installed asset
40
- agentry list Prat011/awesome-llm-skills
55
+ agentry add skills ./my-skills --list # preview only, no install
56
+ agentry add skills ./my-skills prompt/enhance-prompt -a cursor -a claude-code # install to 2 providers
57
+ agentry add agents author/repo frontend-developer # one agent (.mdc file)
58
+ agentry add rules author/repo ask-dont-guess # one rule (.mdc file)
59
+ agentry add scripts author/repo lint # one script (usecase folder)
60
+ agentry add profile frontend author/repo # apply profile/frontend.yaml
61
+ agentry remove skills document-skills/docx # remove an installed artifact
62
+ agentry list author/repo
63
+ agentry update # self-update (checks version first)
64
+ agentry update skills author/repo prompt/enhance-prompt # re-install one artifact from source
65
+ agentry update skills # re-install all skills from lockfile sources
66
+ agentry uninstall # remove the CLI
41
67
  ```
42
68
 
43
- Flags: `-g, --global` (into `~/.cursor`), `--project` (current folder, default), `--dir <path>`, `-y, --yes` (no prompts; install everything matched), `-v, --version`, `-h, --help`, `--uninstall`.
69
+ Flags: `-g, --global` (into `~`), `--project` (current folder, default), `--dir <path>`, `-a, --agent <name>` (repeatable; `*` for all; default: prompt to choose), `-l, --list` (preview, no install), `--copy` (copy files instead of symlinking), `--all` (install everything to all agents, no prompts), `-y, --yes` (no prompts), `-v, --version`, `-h, --help`.
44
70
 
45
- When neither `--global` nor `--project` is given, an interactive terminal asks where to install; non‑interactive runs (agents/CI) default to the current project.
71
+ When you run `agentry add` without `--agent`, it shows a **fetch animation** (parsing source → discovering → found N), lets you **pick artifacts** (with an `All` toggle), then prompts **"Which agents do you want to install to?"** — universal providers (`.agents/skills`) are locked in and others are selectable, defaulting to the providers you already have installed. The interactive UI (animated robot logo, spinners, prompts) is suppressed automatically when running inside an agent or CI; non-interactive runs default to the current project and auto-detected providers.
46
72
 
47
73
  ## How sources are discovered
48
74
 
49
- For each type, `agentry` finds assets in two ways and merges them:
75
+ For each kind, `agentry` finds artifacts in two ways and merges them:
50
76
 
51
- 1. Under an explicit folder — `<type>/<name>/` or `<type>/<category>/<name>/`.
52
- 2. At the repo root by marker file (like `npx skills add`) — a folder with `SKILL.md` is a skill, `AGENT.md` an agent, `RULE.md` a rule. A root folder whose children carry markers becomes a category (e.g. `document-skills/docx`).
77
+ 1. Under an explicit `<kind>s/` folder (see artifact layouts below).
78
+ 2. At the repo root by marker — a folder with `SKILL.md` is a skill; a `.mdc` file at root is an agent or rule. (Scripts and profiles are folder/file kinds found only under their `scripts/` and `profiles/` folders.)
53
79
 
54
- Selectors after the source: `category/name` (one asset), `name` (one asset when uncategorized), `category` (whole category), or omit to list-and-pick.
80
+ Selectors after the source: `category/name` (one artifact), `name` (one artifact when uncategorized), `category` (whole category), or omit to list-and-pick.
55
81
 
56
- Assets install to `<root>/.cursor/<type>/[category/]<name>/` and are tracked in `.cursor/agentry.lock.json` for idempotent installs and clean removal. `remove` works purely on installed files, so it needs no source.
82
+ Artifacts install to the provider's directory and are tracked in `.agentry/lock.json` for idempotent installs and clean removal. `remove` works purely on installed files, so it needs no source.
57
83
 
58
- ## Profiles
84
+ ## Artifact layouts (how to create installable tools)
85
+
86
+ Create artifacts in your repo using these layouts, then `agentry add` from your repo:
59
87
 
60
- A profile is a plain JSON file at `profile/<name>.json` in your project. It lists selectors per type; `agentry add profile <name> <source>` fetches the source once and installs everything the profile lists.
88
+ ### Skills — folder per skill
61
89
 
62
- ```json
63
- {
64
- "repo": "author/repo",
65
- "agents": ["frontend"],
66
- "skills": ["prompt/enhance-prompt"],
67
- "rules": ["workflow/ask-dont-guess"]
68
- }
90
+ ```
91
+ skills/
92
+ enhance-prompt/
93
+ SKILL.md # YAML frontmatter: name, description
94
+ references/
95
+ TEMPLATE.md # optional supporting docs
96
+ ...
69
97
  ```
70
98
 
71
- `repo` is optional — the command-line `<source>` wins when given. See [`profile/frontend.json`](profile/frontend.json) and [`profile/backend.json`](profile/backend.json).
99
+ `SKILL.md` frontmatter:
72
100
 
73
- ## Publish to npm (maintainers)
101
+ ```yaml
102
+ ---
103
+ name: enhance-prompt
104
+ description: Rewrite a user message into a precise, portable agent prompt.
105
+ ---
106
+ # enhance-prompt
107
+ Instructions for the agent...
108
+ ```
109
+
110
+ Categorized skills: `skills/<category>/<name>/SKILL.md`.
111
+
112
+ ### Agents — single `.mdc` file
113
+
114
+ ```
115
+ agents/
116
+ frontend-developer.mdc
117
+ ```
118
+
119
+ `.mdc` frontmatter (same shape as skills):
120
+
121
+ ```yaml
122
+ ---
123
+ name: frontend-developer
124
+ description: Senior frontend engineer agent.
125
+ ---
126
+ # frontend-developer
127
+ Agent instructions...
128
+ ```
129
+
130
+ Categorized agents: `agents/<category>/<name>.mdc`.
131
+
132
+ ### Rules — single `.mdc` file
133
+
134
+ ```
135
+ rules/
136
+ ask-dont-guess.mdc
137
+ ```
138
+
139
+ Same frontmatter and body shape as agents. Categorized rules: `rules/<category>/<name>.mdc`.
140
+
141
+ ### Scripts — folder per use case
142
+
143
+ ```
144
+ scripts/
145
+ lint/
146
+ run.js # entrypoint (any language; a folder with files = one script)
147
+ README.md # optional docs
148
+ format/
149
+ run.js
150
+ ```
151
+
152
+ A script is a **folder** containing its files (entrypoint, helpers, docs). Categorized scripts: `scripts/<category>/<usecase>/`.
153
+
154
+ ### Profiles — single `.yaml` file (in a source repo)
155
+
156
+ ```
157
+ profiles/
158
+ frontend.yaml
159
+ ```
160
+
161
+ A profile bundles artifact selectors + target agents + scope into one config. See the **Profiles** section below for the schema. Categorized profiles: `profiles/<category>/<name>.yaml`.
162
+
163
+ ## How to install tools with agentry
74
164
 
75
165
  ```bash
76
- # ensure package.json "name" is available (or scope it: @you/agentry)
77
- npm login
78
- npm publish --access public
79
- # verify
80
- npx agentry@latest --version
166
+ # From a GitHub repo (author/repo shorthand)
167
+ agentry add skills Prat011/awesome-llm-skills
168
+
169
+ # From a full GitHub URL
170
+ agentry add skills https://github.com/Prat011/awesome-llm-skills
171
+
172
+ # From a subdirectory of a repo (GitHub tree URL)
173
+ agentry add skills https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design
174
+
175
+ # From a GitLab URL
176
+ agentry add skills https://gitlab.com/org/repo
177
+
178
+ # From any git URL
179
+ agentry add skills git@github.com:owner/repo.git
180
+
181
+ # From a local path
182
+ agentry add skills ./my-skills
183
+
184
+ # Install to specific providers
185
+ agentry add skills ./my-skills enhance-prompt --agent cursor --agent claude-code
186
+
187
+ # Install to all providers
188
+ agentry add skills ./my-skills enhance-prompt --agent '*'
189
+
190
+ # Preview without installing
191
+ agentry add skills ./my-skills --list
192
+ ```
193
+
194
+ ## Supported providers
195
+
196
+ `agentry` installs into 70+ agent providers, mirroring vercel-labs/skills. Each provider has a project skills directory and a global one. A few common ones:
197
+
198
+ | Provider | `--agent` | Project path | Global path |
199
+ | -------------- | ---------------- | ------------------- | ----------------------------- |
200
+ | Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
201
+ | Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
202
+ | Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
203
+ | OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
204
+ | Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
205
+ | Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
206
+ | Cline | `cline` | `.agents/skills/` | `~/.agents/skills/` |
207
+ | Amp | `amp` | `.agents/skills/` | `~/.config/agents/skills/` |
208
+ | Goose | `goose` | `.goose/skills/` | `~/.config/goose/skills/` |
209
+ | Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
210
+ | GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
211
+ | Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
212
+ | Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
213
+ | Zed | `zed` | `.agents/skills/` | `~/.agents/skills/` |
214
+ | Warp | `warp` | `.agents/skills/` | `~/.agents/skills/` |
215
+
216
+ ...and 55+ more. The CLI auto-detects installed providers; pass `--agent` to target specific ones or `--agent '*'` for all.
217
+
218
+ ### Universal install (`.agents/skills`)
219
+
220
+ Providers whose skills directory is `.agents/skills/` (Cursor, Codex, OpenCode, Gemini CLI, Cline, Amp, Zed, Warp, GitHub Copilot, …) are **universal**: a skill is installed **once** to `.agents/skills/<id>` and every universal provider reads it from there. Non-universal providers (Claude Code, Windsurf, Goose, Roo, Augment, Continue, …) get a **symlink** from their own skills directory to the canonical `.agents/skills/<id>` copy, so a single install reaches all of them with no duplication. Use `--copy` to make independent copies instead of symlinks.
221
+
222
+ ## Profiles
223
+
224
+ A profile is a YAML file at `profile/<name>.yaml` in your project. It bundles artifact selectors, target agents, and scope; `agentry add profile <name> <source>` fetches the source once and installs everything the profile lists.
225
+
226
+ ```yaml
227
+ name: frontend
228
+ description: Frontend agents, rules, and skills
229
+ scope: project # project | global
230
+ targets:
231
+ agents: [cursor, claude-code] # target providers; '*' = all
232
+ artifacts:
233
+ skills:
234
+ - id: prompt/enhance-prompt
235
+ agents:
236
+ - id: frontend-developer
237
+ rules:
238
+ - id: ask-dont-guess
239
+ scripts:
240
+ - id: lint
81
241
  ```
82
242
 
243
+ Each artifact ref may override the CLI source with its own `source:`. The command-line `<source>` is the default for refs without one.
244
+
83
245
  ## Development / test
84
246
 
85
247
  ```bash
86
- npm test # node --test (discovery, source resolution, install/remove, profiles)
87
- node bin/agentry.js … # run the CLI locally
88
- node bin/agentry.js list ./examples # try it against the bundled sample source
248
+ npm run typecheck # tsc --noEmit
249
+ npm test # vitest (discovery, source parser, agents registry, install/remove, profiles)
250
+ npm run build # obuild -> dist/cli.mjs
251
+ npm run dev -- … # run via tsx (no build needed)
252
+ node dist/cli.mjs … # run the built CLI
89
253
  ```
90
254
 
91
- `examples/` is a sample source repo (skills/agents/rules/scripts) used by the demo — not part of the CLI. `src/` holds the logic: `registry` (discovery), `source` (fetch), `commands` (install/remove), `profile` (config).
255
+ `src/` holds the logic: `cli.ts` (router), `commands.ts` (handlers), `core/` (types, source-parser, git, lock), `registry/agents.ts` (70+ providers), `artifacts/` (discovery, profiles), `ui/` (theme, prompts, detect). Runtime deps are minimal and UI libs are bundled by `obuild`.
92
256
 
93
257
  ## License
94
258
 
@@ -0,0 +1,2 @@
1
+ import { parseSource } from "./source_parser2.mjs";
2
+ export { parseSource };
@@ -0,0 +1,74 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { resolve } from "node:path";
4
+ function isLocalPath(source) {
5
+ if (!source) return false;
6
+ if (source === "." || source === "..") return true;
7
+ if (source.startsWith("./") || source.startsWith("../") || source.startsWith("/") || source.startsWith("~")) return true;
8
+ try {
9
+ return existsSync(source) && statSync(source).isDirectory();
10
+ } catch {
11
+ return false;
12
+ }
13
+ }
14
+ function parseGithubTreeUrl(url) {
15
+ const m = url.match(/^https?:\/\/github\.com\/([\w.-]+\/[\w.-]+?)\/tree\/([^/]+)\/(.+)$/);
16
+ if (!m) return null;
17
+ return {
18
+ ownerRepo: m[1],
19
+ ref: m[2],
20
+ subpath: m[3].replace(/\/+$/, "")
21
+ };
22
+ }
23
+ function parseSource(source) {
24
+ if (!source || typeof source !== "string") throw new Error("Empty source.");
25
+ const raw = source;
26
+ if (isLocalPath(source)) return {
27
+ kind: "local",
28
+ raw,
29
+ url: null,
30
+ subpath: "",
31
+ local: resolve(source.replace(/^~/, homedir()))
32
+ };
33
+ const tree = parseGithubTreeUrl(source);
34
+ if (tree) return {
35
+ kind: "github-url",
36
+ raw,
37
+ url: `https://github.com/${tree.ownerRepo}.git`,
38
+ subpath: tree.subpath,
39
+ ref: tree.ref,
40
+ local: null
41
+ };
42
+ let m = source.match(/^https?:\/\/github\.com\/([\w.-]+\/[\w.-]+?)(?:\.git)?\/?$/);
43
+ if (m) return {
44
+ kind: "github-url",
45
+ raw,
46
+ url: `https://github.com/${m[1]}.git`,
47
+ subpath: "",
48
+ local: null
49
+ };
50
+ m = source.match(/^https?:\/\/gitlab\.com\/([\w./-]+?)(?:\.git)?\/?$/);
51
+ if (m) return {
52
+ kind: "gitlab-url",
53
+ raw,
54
+ url: `https://gitlab.com/${m[1]}.git`,
55
+ subpath: "",
56
+ local: null
57
+ };
58
+ if (source.startsWith("git@") || /^https?:\/\/.*\.git$/.test(source)) return {
59
+ kind: "git-url",
60
+ raw,
61
+ url: source,
62
+ subpath: "",
63
+ local: null
64
+ };
65
+ if (/^[\w.-]+\/[\w.-]+$/.test(source)) return {
66
+ kind: "github-shorthand",
67
+ raw,
68
+ url: `https://github.com/${source}.git`,
69
+ subpath: "",
70
+ local: null
71
+ };
72
+ throw new Error(`Cannot parse source "${source}". Use author/repo, a GitHub/GitLab URL, a git URL, or a local path.`);
73
+ }
74
+ export { isLocalPath, parseSource };
@@ -0,0 +1,2 @@
1
+ import { delay } from "./theme2.mjs";
2
+ export { delay };
@@ -0,0 +1,123 @@
1
+ import c from "picocolors";
2
+ const PALETTE = {
3
+ primary: c.blue,
4
+ success: c.green,
5
+ error: c.red,
6
+ warn: c.yellow,
7
+ info: c.blue,
8
+ dim: c.dim,
9
+ bold: c.bold,
10
+ text: c.white
11
+ };
12
+ const theme = PALETTE;
13
+ c.blue(process.stdout.isTTY ? "✓" : "v"), c.red(process.stdout.isTTY ? "✗" : "x"), c.yellow(process.stdout.isTTY ? "⚠" : "!"), c.blue(process.stdout.isTTY ? "ℹ" : "i"), process.stdout.isTTY, process.stdout.isTTY, process.stdout.isTTY;
14
+ const RESET = "\x1B[0m";
15
+ const GRAYS = [
16
+ "\x1B[38;5;255m",
17
+ "\x1B[38;5;252m",
18
+ "\x1B[38;5;249m",
19
+ "\x1B[38;5;246m",
20
+ "\x1B[38;5;243m",
21
+ "\x1B[38;5;240m"
22
+ ];
23
+ function gradLine(line) {
24
+ const n = line.length || 1;
25
+ let out = "";
26
+ for (let i = 0; i < line.length; i++) {
27
+ const g = GRAYS[Math.min(GRAYS.length - 1, Math.floor(i / n * GRAYS.length))];
28
+ out += `${g}${line[i]}${RESET}`;
29
+ }
30
+ return out;
31
+ }
32
+ const LOGO_LINES = [
33
+ " █████╗ ██████╗ ███████╗███╗ ██╗████████╗██████╗ ██╗ ██╗",
34
+ "██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔══██╗╚██╗ ██╔╝",
35
+ "███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ██████╔╝ ╚████╔╝ ",
36
+ "██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██╔══██╗ ╚██╔╝ ",
37
+ "██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ██║ ██║ ██║ ",
38
+ "╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ "
39
+ ];
40
+ function logo() {
41
+ return LOGO_LINES.map((line) => gradLine(line)).join("\n");
42
+ }
43
+ function tagline() {
44
+ return c.dim(" Install agents, skills, rules & profiles");
45
+ }
46
+ function badge() {
47
+ return c.bgBlue(c.white(c.bold(" Agentry ")));
48
+ }
49
+ function delay(ms) {
50
+ return new Promise((r) => setTimeout(r, ms));
51
+ }
52
+ async function animateLogo() {
53
+ process.stdout.write("\n" + logo() + "\n");
54
+ process.stdout.write(tagline() + "\n\n");
55
+ if (process.stdout.isTTY) await delay(280);
56
+ }
57
+ function h(title) {
58
+ return c.bold(c.blue(title));
59
+ }
60
+ function cmd(s) {
61
+ return c.cyan(s);
62
+ }
63
+ function flag(s) {
64
+ return c.blue(s);
65
+ }
66
+ function dim(s) {
67
+ return c.dim(s);
68
+ }
69
+ function bullet(s) {
70
+ return ` ${c.blue("•")} ${s}`;
71
+ }
72
+ function printHelp() {
73
+ const lines = [
74
+ "",
75
+ `${badge()} ${dim("install agents, skills, rules, scripts & profiles")}`,
76
+ "",
77
+ h("Usage"),
78
+ ` ${cmd("agentry")} ${flag("add")} ${dim("<kind> <source> [selector] [options]")}`,
79
+ ` ${cmd("agentry")} ${flag("add")} ${dim("profile <name> [source] [options]")}`,
80
+ ` ${cmd("agentry")} ${flag("remove")} ${dim("<kind> [selector] [options]")}`,
81
+ ` ${cmd("agentry")} ${flag("list")} ${dim("[source] [kind]")}`,
82
+ ` ${cmd("agentry")} ${flag("update")} ${dim("[kind] [source] [selector]")}`,
83
+ ` ${cmd("agentry")} ${flag("uninstall")}`,
84
+ "",
85
+ h("Kinds"),
86
+ bullet(`${c.bold("skill")} ${c.bold("rule")} ${c.bold("agent")} ${c.bold("profile")} ${c.bold("script")} ${dim("(or all)")}`),
87
+ dim(" Plurals accepted: skills → skill, agents → agent, …"),
88
+ "",
89
+ h("Sources"),
90
+ bullet(`${cmd("author/repo")} ${dim("GitHub shorthand")}`),
91
+ bullet(`${cmd("https://github.com/…")} ${dim("GitHub URL or /tree/<ref>/<dir>")}`),
92
+ bullet(`${cmd("https://gitlab.com/…")} ${dim("GitLab URL")}`),
93
+ bullet(`${cmd("git@host:owner/repo.git")} ${dim("any git URL")}`),
94
+ bullet(`${cmd("./path")} ${dim("|")} ${cmd("/path")} ${dim("|")} ${cmd("~/path")} ${dim("local directory")}`),
95
+ "",
96
+ h("Examples"),
97
+ bullet(`${cmd("agentry add skills")} Prat011/awesome-llm-skills`),
98
+ bullet(`${cmd("agentry add skills")} ./my-skills ${flag("--list")}`),
99
+ bullet(`${cmd("agentry add skills")} ./my-skills enhance-prompt ${flag("-a")} cursor ${flag("-a")} claude-code`),
100
+ bullet(`${cmd("agentry add agents")} author/repo frontend-developer`),
101
+ bullet(`${cmd("agentry add profile")} frontend author/repo`),
102
+ bullet(`${cmd("agentry remove skills")} enhance-prompt`),
103
+ bullet(`${cmd("agentry update")}`),
104
+ bullet(`${cmd("agentry update skills")} author/repo enhance-prompt`),
105
+ "",
106
+ h("Options"),
107
+ ` ${flag("-g, --global")} ${dim("Install into ~ (all projects)")}`,
108
+ ` ${flag("--project")} ${dim("Install into the current folder (default)")}`,
109
+ ` ${flag("--dir")} ${dim("<p>")} ${dim("Install into a specific folder")}`,
110
+ ` ${flag("-a, --agent")} ${dim("<n>")} ${dim("Target provider(s); repeatable; '*' = all")}`,
111
+ ` ${flag("-l, --list")} ${dim("Preview only — write nothing")}`,
112
+ ` ${flag("--copy")} ${dim("Copy files instead of symlinking")}`,
113
+ ` ${flag("--all")} ${dim("Install everything to all agents, no prompts")}`,
114
+ ` ${flag("-y, --yes")} ${dim("Don't prompt")}`,
115
+ ` ${flag("-v, --version")} ${dim("Print version")}`,
116
+ ` ${flag("-h, --help")} ${dim("Show this help")}`,
117
+ "",
118
+ dim("Tip: omit --agent to pick providers interactively (universal locked + searchable list)."),
119
+ ""
120
+ ];
121
+ process.stdout.write(lines.join("\n"));
122
+ }
123
+ export { PALETTE, animateLogo, badge, delay, logo, printHelp, tagline, theme };
package/dist/cli.d.mts ADDED
@@ -0,0 +1 @@
1
+ export {}