agents-pkg 0.3.0 → 0.3.2
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 +6 -6
- package/dist/add-plugin.d.ts.map +1 -1
- package/dist/add-plugin.js +8 -12
- package/dist/add-plugin.js.map +1 -1
- package/dist/del-marketplace.d.ts.map +1 -1
- package/dist/del-marketplace.js +9 -4
- package/dist/del-marketplace.js.map +1 -1
- package/dist/del-plugin.d.ts.map +1 -1
- package/dist/del-plugin.js +5 -3
- package/dist/del-plugin.js.map +1 -1
- package/dist/lib/agents-copy.d.ts +15 -0
- package/dist/lib/agents-copy.d.ts.map +1 -0
- package/dist/lib/agents-copy.js +51 -0
- package/dist/lib/agents-copy.js.map +1 -0
- package/dist/lib/paths.d.ts +2 -3
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +2 -6
- package/dist/lib/paths.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +9 -4
- package/dist/update.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# agents-pkg
|
|
2
2
|
|
|
3
|
-
**Cursor-only** marketplace installer. Install plugins from a source (repo URL or local path) that contains `.cursor-plugin/marketplace.json`. Plugin content is copied to a store and **symlinked** into Cursor’s config dirs (
|
|
3
|
+
**Cursor-only** marketplace installer. Install plugins from a source (repo URL or local path) that contains `.cursor-plugin/marketplace.json`. Plugin content is copied to a store and **symlinked** into Cursor’s config dirs (agents, commands, skills, rules); hooks are merged into `.cursor/hooks.json`.
|
|
4
4
|
|
|
5
|
-
- **
|
|
5
|
+
- **Agents** — Agent `.md` files in `.cursor/agents` (global or project).
|
|
6
6
|
- **Commands** — Slash commands in `.cursor/commands`.
|
|
7
7
|
- **Skills** — Skill dirs (each with `SKILL.md`) in `.cursor/skills`.
|
|
8
8
|
- **Rules** — Rule `.md`/`.mdc` files in `.cursor/rules`.
|
|
@@ -47,7 +47,7 @@ agents-pkg add-plugin <source> [plugin-name] [--global | --project]
|
|
|
47
47
|
|
|
48
48
|
- **source** — Repo URL (GitHub `owner/repo`, GitLab, or full URL) or local path.
|
|
49
49
|
- **plugin-name** — Optional. Install only this plugin from the marketplace; otherwise all plugins are installed.
|
|
50
|
-
- **--global** (default) — Symlink into `~/.cursor/
|
|
50
|
+
- **--global** (default) — Symlink into `~/.cursor/agents`, `~/.cursor/commands`, `~/.cursor/skills`, `~/.cursor/rules`. Available in all projects.
|
|
51
51
|
- **--project** — Symlink into the current project’s `.cursor/` so only this project sees the plugin.
|
|
52
52
|
|
|
53
53
|
Examples:
|
|
@@ -119,7 +119,7 @@ Inside each plugin directory (e.g. `./global`), use this layout:
|
|
|
119
119
|
|
|
120
120
|
| Category | Dir / file | Contents |
|
|
121
121
|
|----------|------------|----------|
|
|
122
|
-
|
|
|
122
|
+
| Agents | `agents/` | One `.md` file per agent; filename (without `.md`) is the name. |
|
|
123
123
|
| Commands | `commands/` | One `.md` file per command. |
|
|
124
124
|
| Skills | `skills/` | One subdir per skill; each must contain `SKILL.md`. |
|
|
125
125
|
| Rules | `rules/` | Top-level `.md` or `.mdc` rule files. |
|
|
@@ -135,7 +135,7 @@ With **--global** (default):
|
|
|
135
135
|
|
|
136
136
|
| Kind | Location |
|
|
137
137
|
|------|----------|
|
|
138
|
-
|
|
|
138
|
+
| Agents | `~/.cursor/agents/` |
|
|
139
139
|
| Commands | `~/.cursor/commands/` |
|
|
140
140
|
| Skills | `~/.cursor/skills/` |
|
|
141
141
|
| Rules | `~/.cursor/rules/` |
|
|
@@ -145,7 +145,7 @@ With **--project**:
|
|
|
145
145
|
|
|
146
146
|
| Kind | Location |
|
|
147
147
|
|------|----------|
|
|
148
|
-
|
|
|
148
|
+
| Agents | `<project>/.cursor/agents/` |
|
|
149
149
|
| Commands | `<project>/.cursor/commands/` |
|
|
150
150
|
| Skills | `<project>/.cursor/skills/` |
|
|
151
151
|
| Rules | `<project>/.cursor/rules/` |
|
package/dist/add-plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-plugin.d.ts","sourceRoot":"","sources":["../src/add-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"add-plugin.d.ts","sourceRoot":"","sources":["../src/add-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AA8H9B;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCnB;AAqBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChE"}
|
package/dist/add-plugin.js
CHANGED
|
@@ -6,9 +6,10 @@ import { join, resolve, sep } from 'path';
|
|
|
6
6
|
import { readdir, readFile, stat, cp } from 'fs/promises';
|
|
7
7
|
import { resolveSourceToDir } from './lib/source-dir.js';
|
|
8
8
|
import { readMarketplaceManifest, getPluginStorePath, } from './lib/marketplace.js';
|
|
9
|
-
import { REPO_SKILLS_DIR,
|
|
10
|
-
import {
|
|
9
|
+
import { REPO_SKILLS_DIR, REPO_COMMANDS_DIR, REPO_HOOKS_FILE, REPO_RULES_DIR, } from './lib/constants.js';
|
|
10
|
+
import { getCursorAgentsDir, getCursorCommandsDir, getCursorSkillsDir, getCursorRulesDir } from './lib/paths.js';
|
|
11
11
|
import { createSymlink } from './lib/symlink.js';
|
|
12
|
+
import { copyAgentsFromPluginStore } from './lib/agents-copy.js';
|
|
12
13
|
import { mergeHooksIntoProject } from './lib/hooks.js';
|
|
13
14
|
import { readLock, writeLock } from './lib/lock.js';
|
|
14
15
|
import { fatal } from './lib/errors.js';
|
|
@@ -71,15 +72,10 @@ async function listRuleFiles(rulesDir) {
|
|
|
71
72
|
/**
|
|
72
73
|
* Copy plugin dir to store, then create symlinks for agents, commands, skills, rules; merge hooks.
|
|
73
74
|
*/
|
|
74
|
-
async function installPlugin(pluginStorePath,
|
|
75
|
+
async function installPlugin(pluginStorePath, cursorAgentsDir, cursorCommandsDir, cursorSkillsDir, cursorRulesDir, cwd) {
|
|
75
76
|
const done = [];
|
|
76
|
-
|
|
77
|
-
const agentNames = await
|
|
78
|
-
for (const name of agentNames) {
|
|
79
|
-
const target = join(agentsDir, name + '.md');
|
|
80
|
-
const linkPath = join(cursorSubagentsDir, name + '.md');
|
|
81
|
-
await createSymlink(target, linkPath);
|
|
82
|
-
}
|
|
77
|
+
// Agents are copied (not symlinked) so Cursor recognizes subagents
|
|
78
|
+
const agentNames = await copyAgentsFromPluginStore(pluginStorePath, cursorAgentsDir);
|
|
83
79
|
if (agentNames.length > 0)
|
|
84
80
|
done.push('agents');
|
|
85
81
|
const commandsDir = join(pluginStorePath, REPO_COMMANDS_DIR);
|
|
@@ -138,7 +134,7 @@ export async function installMarketplaceFromDir(manifest, sourceDir, options = {
|
|
|
138
134
|
const global = options.global !== false;
|
|
139
135
|
const absSourceDir = resolve(sourceDir);
|
|
140
136
|
const cwd = process.cwd();
|
|
141
|
-
const
|
|
137
|
+
const cursorAgentsDir = getCursorAgentsDir(global, cwd);
|
|
142
138
|
const cursorCommandsDir = getCursorCommandsDir(global, cwd);
|
|
143
139
|
const cursorSkillsDir = getCursorSkillsDir(global, cwd);
|
|
144
140
|
const cursorRulesDir = getCursorRulesDir(global, cwd);
|
|
@@ -153,7 +149,7 @@ export async function installMarketplaceFromDir(manifest, sourceDir, options = {
|
|
|
153
149
|
const { mkdir } = await import('fs/promises');
|
|
154
150
|
await mkdir(storePath, { recursive: true });
|
|
155
151
|
await cp(pluginDir, storePath, { recursive: true });
|
|
156
|
-
const done = await installPlugin(storePath,
|
|
152
|
+
const done = await installPlugin(storePath, cursorAgentsDir, cursorCommandsDir, cursorSkillsDir, cursorRulesDir, cwd);
|
|
157
153
|
if (done.length > 0)
|
|
158
154
|
installed.push(plugin.name);
|
|
159
155
|
}
|
package/dist/add-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-plugin.js","sourceRoot":"","sources":["../src/add-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"add-plugin.js","sourceRoot":"","sources":["../src/add-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"del-marketplace.d.ts","sourceRoot":"","sources":["../src/del-marketplace.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"del-marketplace.d.ts","sourceRoot":"","sources":["../src/del-marketplace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCrE"}
|
package/dist/del-marketplace.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* del-marketplace — Uninstall a marketplace by name (remove symlinks, delete store, update lock).
|
|
3
3
|
*/
|
|
4
4
|
import { rm } from 'fs/promises';
|
|
5
|
-
import {
|
|
6
|
-
import { getMarketplaceStorePath } from './lib/marketplace.js';
|
|
5
|
+
import { getCursorAgentsDir, getCursorCommandsDir, getCursorSkillsDir, getCursorRulesDir } from './lib/paths.js';
|
|
6
|
+
import { getMarketplaceStorePath, getPluginStorePath } from './lib/marketplace.js';
|
|
7
7
|
import { removeSymlinksInDirPointingUnder } from './lib/symlink.js';
|
|
8
|
+
import { removeCopiedAgentsForPlugin } from './lib/agents-copy.js';
|
|
8
9
|
import { readLock, writeLock } from './lib/lock.js';
|
|
9
10
|
import { fatal } from './lib/errors.js';
|
|
10
11
|
export async function runDelMarketplace(args) {
|
|
@@ -20,11 +21,15 @@ export async function runDelMarketplace(args) {
|
|
|
20
21
|
const storeRoot = getMarketplaceStorePath(name);
|
|
21
22
|
const cwd = process.cwd();
|
|
22
23
|
const global = entry.global !== false;
|
|
23
|
-
const
|
|
24
|
+
const cursorAgentsDir = getCursorAgentsDir(global, cwd);
|
|
24
25
|
const cursorCommandsDir = getCursorCommandsDir(global, cwd);
|
|
25
26
|
const cursorSkillsDir = getCursorSkillsDir(global, cwd);
|
|
26
27
|
const cursorRulesDir = getCursorRulesDir(global, cwd);
|
|
27
|
-
|
|
28
|
+
for (const pluginName of entry.pluginNames ?? []) {
|
|
29
|
+
const pluginStorePath = getPluginStorePath(name, pluginName);
|
|
30
|
+
await removeCopiedAgentsForPlugin(pluginStorePath, cursorAgentsDir);
|
|
31
|
+
}
|
|
32
|
+
await removeSymlinksInDirPointingUnder(cursorAgentsDir, storeRoot);
|
|
28
33
|
await removeSymlinksInDirPointingUnder(cursorCommandsDir, storeRoot);
|
|
29
34
|
await removeSymlinksInDirPointingUnder(cursorSkillsDir, storeRoot);
|
|
30
35
|
await removeSymlinksInDirPointingUnder(cursorRulesDir, storeRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"del-marketplace.js","sourceRoot":"","sources":["../src/del-marketplace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"del-marketplace.js","sourceRoot":"","sources":["../src/del-marketplace.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,CAAC,gGAAgG,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;IACtC,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtD,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,2BAA2B,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,gCAAgC,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,gCAAgC,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,gCAAgC,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,gCAAgC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,6BAA6B,SAAS,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/del-plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"del-plugin.d.ts","sourceRoot":"","sources":["../src/del-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"del-plugin.d.ts","sourceRoot":"","sources":["../src/del-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChE"}
|
package/dist/del-plugin.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* Removes that plugin's symlinks and store dir; updates lock. If the last plugin is removed, the marketplace entry is removed.
|
|
4
4
|
*/
|
|
5
5
|
import { rm } from 'fs/promises';
|
|
6
|
-
import {
|
|
6
|
+
import { getCursorAgentsDir, getCursorCommandsDir, getCursorSkillsDir, getCursorRulesDir } from './lib/paths.js';
|
|
7
7
|
import { getPluginStorePath } from './lib/marketplace.js';
|
|
8
8
|
import { removeSymlinksInDirPointingUnder } from './lib/symlink.js';
|
|
9
|
+
import { removeCopiedAgentsForPlugin } from './lib/agents-copy.js';
|
|
9
10
|
import { readLock, writeLock } from './lib/lock.js';
|
|
10
11
|
import { fatal } from './lib/errors.js';
|
|
11
12
|
export async function runDelPlugin(args) {
|
|
@@ -25,11 +26,12 @@ export async function runDelPlugin(args) {
|
|
|
25
26
|
const pluginStorePath = getPluginStorePath(marketplaceName, pluginName);
|
|
26
27
|
const cwd = process.cwd();
|
|
27
28
|
const global = entry.global !== false;
|
|
28
|
-
const
|
|
29
|
+
const cursorAgentsDir = getCursorAgentsDir(global, cwd);
|
|
29
30
|
const cursorCommandsDir = getCursorCommandsDir(global, cwd);
|
|
30
31
|
const cursorSkillsDir = getCursorSkillsDir(global, cwd);
|
|
31
32
|
const cursorRulesDir = getCursorRulesDir(global, cwd);
|
|
32
|
-
await
|
|
33
|
+
await removeCopiedAgentsForPlugin(pluginStorePath, cursorAgentsDir);
|
|
34
|
+
await removeSymlinksInDirPointingUnder(cursorAgentsDir, pluginStorePath);
|
|
33
35
|
await removeSymlinksInDirPointingUnder(cursorCommandsDir, pluginStorePath);
|
|
34
36
|
await removeSymlinksInDirPointingUnder(cursorSkillsDir, pluginStorePath);
|
|
35
37
|
await removeSymlinksInDirPointingUnder(cursorRulesDir, pluginStorePath);
|
package/dist/del-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"del-plugin.js","sourceRoot":"","sources":["../src/del-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"del-plugin.js","sourceRoot":"","sources":["../src/del-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent files are copied (not symlinked) into .cursor/agents so Cursor recognizes subagents.
|
|
3
|
+
* This module handles copy on install and removal of those files on uninstall.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Copy agent .md files from plugin store to .cursor/agents (overwrites existing).
|
|
7
|
+
* Ensures cursorAgentsDir exists.
|
|
8
|
+
*/
|
|
9
|
+
export declare function copyAgentsFromPluginStore(pluginStorePath: string, cursorAgentsDir: string): Promise<string[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Remove from cursorAgentsDir the agent files that belong to this plugin
|
|
12
|
+
* (determined by listing the plugin store's agents dir). Call before deleting the store.
|
|
13
|
+
*/
|
|
14
|
+
export declare function removeCopiedAgentsForPlugin(pluginStorePath: string, cursorAgentsDir: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=agents-copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-copy.d.ts","sourceRoot":"","sources":["../../src/lib/agents-copy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent files are copied (not symlinked) into .cursor/agents so Cursor recognizes subagents.
|
|
3
|
+
* This module handles copy on install and removal of those files on uninstall.
|
|
4
|
+
*/
|
|
5
|
+
import { readdir, copyFile, rm, mkdir } from 'fs/promises';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { REPO_AGENTS_DIR } from './constants.js';
|
|
8
|
+
async function listAgentMdFiles(agentsDir) {
|
|
9
|
+
try {
|
|
10
|
+
const entries = await readdir(agentsDir, { withFileTypes: true });
|
|
11
|
+
return entries
|
|
12
|
+
.filter((e) => e.isFile() && e.name.endsWith('.md'))
|
|
13
|
+
.map((e) => e.name.replace(/\.md$/, ''));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Copy agent .md files from plugin store to .cursor/agents (overwrites existing).
|
|
21
|
+
* Ensures cursorAgentsDir exists.
|
|
22
|
+
*/
|
|
23
|
+
export async function copyAgentsFromPluginStore(pluginStorePath, cursorAgentsDir) {
|
|
24
|
+
const agentsDir = join(pluginStorePath, REPO_AGENTS_DIR);
|
|
25
|
+
const names = await listAgentMdFiles(agentsDir);
|
|
26
|
+
await mkdir(cursorAgentsDir, { recursive: true });
|
|
27
|
+
for (const name of names) {
|
|
28
|
+
const src = join(agentsDir, name + '.md');
|
|
29
|
+
const dest = join(cursorAgentsDir, name + '.md');
|
|
30
|
+
await copyFile(src, dest);
|
|
31
|
+
}
|
|
32
|
+
return names;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Remove from cursorAgentsDir the agent files that belong to this plugin
|
|
36
|
+
* (determined by listing the plugin store's agents dir). Call before deleting the store.
|
|
37
|
+
*/
|
|
38
|
+
export async function removeCopiedAgentsForPlugin(pluginStorePath, cursorAgentsDir) {
|
|
39
|
+
const agentsDir = join(pluginStorePath, REPO_AGENTS_DIR);
|
|
40
|
+
const names = await listAgentMdFiles(agentsDir);
|
|
41
|
+
for (const name of names) {
|
|
42
|
+
const filePath = join(cursorAgentsDir, name + '.md');
|
|
43
|
+
try {
|
|
44
|
+
await rm(filePath, { force: true });
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// ignore missing or permission errors
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=agents-copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-copy.js","sourceRoot":"","sources":["../../src/lib/agents-copy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,eAAuB,EACvB,eAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QACjD,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,eAAuB,EACvB,eAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/lib/paths.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Paths for Cursor and Claude (project and global).
|
|
3
|
-
*
|
|
3
|
+
* Agents (subagents) = .cursor/agents (global; marketplace plugins install here).
|
|
4
4
|
* Commands = .cursor/commands, .claude/commands.
|
|
5
5
|
*/
|
|
6
|
+
/** Cursor only: path to .cursor/agents (global = ~/.cursor/agents) */
|
|
6
7
|
export declare function getCursorAgentsDir(global: boolean, cwd?: string): string;
|
|
7
|
-
/** Cursor only: path to .cursor/subagents (global = ~/.cursor/subagents) */
|
|
8
|
-
export declare function getCursorSubagentsDir(global: boolean, cwd?: string): string;
|
|
9
8
|
export declare function getClaudeAgentsDir(global: boolean, cwd?: string): string;
|
|
10
9
|
export declare function getCursorCommandsDir(global: boolean, cwd?: string): string;
|
|
11
10
|
export declare function getClaudeCommandsDir(global: boolean, cwd?: string): string;
|
package/dist/lib/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvE"}
|
package/dist/lib/paths.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Paths for Cursor and Claude (project and global).
|
|
3
|
-
*
|
|
3
|
+
* Agents (subagents) = .cursor/agents (global; marketplace plugins install here).
|
|
4
4
|
* Commands = .cursor/commands, .claude/commands.
|
|
5
5
|
*/
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { homedir } from 'os';
|
|
8
|
+
/** Cursor only: path to .cursor/agents (global = ~/.cursor/agents) */
|
|
8
9
|
export function getCursorAgentsDir(global, cwd) {
|
|
9
10
|
const base = global ? homedir() : (cwd || process.cwd());
|
|
10
11
|
return join(base, '.cursor', 'agents');
|
|
11
12
|
}
|
|
12
|
-
/** Cursor only: path to .cursor/subagents (global = ~/.cursor/subagents) */
|
|
13
|
-
export function getCursorSubagentsDir(global, cwd) {
|
|
14
|
-
const base = global ? homedir() : (cwd || process.cwd());
|
|
15
|
-
return join(base, '.cursor', 'subagents');
|
|
16
|
-
}
|
|
17
13
|
export function getClaudeAgentsDir(global, cwd) {
|
|
18
14
|
const home = homedir();
|
|
19
15
|
const claudeHome = process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, '.claude');
|
package/dist/lib/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,GAAY;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,GAAY;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,GAAY;IAC9D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe,EAAE,GAAY;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe,EAAE,GAAY;IAChE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,GAAY;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,GAAY;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,MAAe,EAAE,GAAY;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAwD/C"}
|
package/dist/update.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { rm } from 'fs/promises';
|
|
5
5
|
import { resolveSourceToDir } from './lib/source-dir.js';
|
|
6
|
-
import { readMarketplaceManifest, getMarketplaceStorePath } from './lib/marketplace.js';
|
|
6
|
+
import { readMarketplaceManifest, getMarketplaceStorePath, getPluginStorePath } from './lib/marketplace.js';
|
|
7
7
|
import { removeSymlinksInDirPointingUnder } from './lib/symlink.js';
|
|
8
|
-
import {
|
|
8
|
+
import { removeCopiedAgentsForPlugin } from './lib/agents-copy.js';
|
|
9
|
+
import { getCursorAgentsDir, getCursorCommandsDir, getCursorSkillsDir, getCursorRulesDir } from './lib/paths.js';
|
|
9
10
|
import { installMarketplaceFromDir } from './add-plugin.js';
|
|
10
11
|
import { readLock, writeLock } from './lib/lock.js';
|
|
11
12
|
export async function runUpdate() {
|
|
@@ -19,7 +20,7 @@ export async function runUpdate() {
|
|
|
19
20
|
if (!entry || typeof entry.source !== 'string')
|
|
20
21
|
continue;
|
|
21
22
|
const global = entry.global !== false;
|
|
22
|
-
const
|
|
23
|
+
const cursorAgentsDir = getCursorAgentsDir(global, cwd);
|
|
23
24
|
const cursorCommandsDir = getCursorCommandsDir(global, cwd);
|
|
24
25
|
const cursorSkillsDir = getCursorSkillsDir(global, cwd);
|
|
25
26
|
const cursorRulesDir = getCursorRulesDir(global, cwd);
|
|
@@ -36,7 +37,11 @@ export async function runUpdate() {
|
|
|
36
37
|
continue;
|
|
37
38
|
console.log(`Updating marketplace ${name} (${entry.version} -> ${newVersion})...`);
|
|
38
39
|
const storeRoot = getMarketplaceStorePath(name);
|
|
39
|
-
|
|
40
|
+
for (const pluginName of entry.pluginNames ?? []) {
|
|
41
|
+
const pluginStorePath = getPluginStorePath(name, pluginName);
|
|
42
|
+
await removeCopiedAgentsForPlugin(pluginStorePath, cursorAgentsDir);
|
|
43
|
+
}
|
|
44
|
+
await removeSymlinksInDirPointingUnder(cursorAgentsDir, storeRoot);
|
|
40
45
|
await removeSymlinksInDirPointingUnder(cursorCommandsDir, storeRoot);
|
|
41
46
|
await removeSymlinksInDirPointingUnder(cursorSkillsDir, storeRoot);
|
|
42
47
|
await removeSymlinksInDirPointingUnder(cursorRulesDir, storeRoot);
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|