@adobe/data-ai 0.9.74 → 0.9.76

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adobe-data-ai",
3
- "version": "0.9.74",
3
+ "version": "0.9.75",
4
4
  "description": "Architecture skills for @adobe/data — data-oriented modelling, archetype iteration, hot-path performance, and related conventions.",
5
5
  "author": {
6
6
  "name": "Adobe"
package/README.md CHANGED
@@ -4,36 +4,32 @@ Cross-agent architecture skills for [`@adobe/data`](https://www.npmjs.com/packag
4
4
 
5
5
  Skills version in lockstep with the library: `@adobe/data-ai@x.y.z` describes `@adobe/data@x.y.z`.
6
6
 
7
- ## Install (any agent)
7
+ There are two distribution paths, one per agent family — they do **not** overlap:
8
8
 
9
- The installer copies the flat skill folders into whichever skill roots your project's agents scan. It is idempotent and version-stamped — commit the result, and re-run to refresh.
9
+ - **Claude Code → marketplace plugin** (see below). The installer never writes into `.claude/skills/`, so it can't collide with your own Claude skills.
10
+ - **Cursor / Codex / other `.agents`-standard agents → `npx … install`** (below).
11
+
12
+ ## Install (Cursor, Codex, `.agents` agents)
13
+
14
+ The installer copies the skill folders into a single namespaced bundle directory that agents which recurse `.agents/skills/` discover:
10
15
 
11
16
  ```sh
12
17
  npx @adobe/data-ai@latest install
13
18
  ```
14
19
 
15
- This writes:
16
-
17
- | Root | Agent | Notes |
18
- | --- | --- | --- |
19
- | `.claude/skills/<name>/` | Claude Code | No recursion — skills must be flat. |
20
- | `.agents/skills/<name>/` | Cursor, Codex | Tool-neutral; other Agent-Skills agents pick these up. |
20
+ This writes `.agents/skills/adobe-data-ai/<name>/SKILL.md` for each skill. The whole `adobe-data-ai/` directory belongs to this package, so a re-run is a clean wipe-and-recopy that never touches skills you authored elsewhere. Commit the result to share it with your team.
21
21
 
22
22
  Options:
23
23
 
24
24
  ```sh
25
- npx @adobe/data-ai@latest install --claude # only .claude/skills
26
- npx @adobe/data-ai@latest install --agents # only .agents/skills (alias: --cursor)
27
- npx @adobe/data-ai@latest install --global # into ~/.claude, ~/.agents
28
- npx @adobe/data-ai@latest install --dir=./sub # into a specific base dir
29
- npx @adobe/data-ai@latest list # show bundled skills
25
+ npx @adobe/data-ai@latest install --global # into ~/.agents/skills/adobe-data-ai/
26
+ npx @adobe/data-ai@latest install --dir=./sub # into a specific base dir
27
+ npx @adobe/data-ai@latest list # show bundled skills
30
28
  ```
31
29
 
32
- Each root gets a `.data-ai.json` manifest recording which skills this package owns, so a re-run prunes skills we no longer ship without touching skills you added yourself.
33
-
34
30
  ## Install (Claude Code plugin)
35
31
 
36
- Claude users can instead consume the skills as a native plugin from the `adobe/data` marketplace — no npm needed.
32
+ Claude Code does not scan `.agents/`; it consumes the skills as a native plugin from the `adobe/data` marketplace — no npm needed.
37
33
 
38
34
  Interactive:
39
35
 
package/bin/cli.mjs CHANGED
@@ -1,16 +1,18 @@
1
1
  #!/usr/bin/env node
2
- // Installer for the @adobe/data-ai skill bundle.
2
+ // Installer for the @adobe/data-ai skill bundle (Cursor / Codex / .agents-standard agents).
3
3
  //
4
- // Copies the flat SKILL.md folders shipped in this package into whichever
5
- // agent-skill roots the consuming project scans, so the same authored-once
6
- // bundle works across Claude Code, Cursor, and Codex:
4
+ // Copies the SKILL.md folders shipped in this package into a single namespaced
5
+ // bundle directory that agents which recurse `.agents/skills/` will discover:
7
6
  //
8
- // .claude/skills/<name>/ Claude Code (no recursion — flat is required)
9
- // .agents/skills/<name>/ Cursor, Codex (tool-neutral, future agents)
7
+ // .agents/skills/adobe-data-ai/<name>/SKILL.md
10
8
  //
11
- // The copy is durable and committable; re-run to refresh to a new version.
12
- // Ownership is tracked per root in a `.data-ai.json` manifest so re-runs
13
- // prune skills this package no longer ships without touching skills you added.
9
+ // We own the `adobe-data-ai/` directory outright, so a refresh is a clean
10
+ // wipe-and-recopy — it never touches skills you authored elsewhere.
11
+ //
12
+ // Claude Code is intentionally NOT a target: it does not scan `.agents/`, and
13
+ // copying into `.claude/skills/` could collide with a user's own skills.
14
+ // Claude consumes these as the `adobe-data-ai` marketplace plugin instead
15
+ // (see README).
14
16
 
15
17
  import {
16
18
  cpSync,
@@ -31,11 +33,8 @@ const skillsSrc = join(pkgRoot, "skills");
31
33
  const pkg = JSON.parse(readFileSync(join(pkgRoot, "package.json"), "utf8"));
32
34
  const { name: PKG_NAME, version: VERSION } = pkg;
33
35
 
34
- // Each target agent's skills root, relative to a base directory.
35
- const ROOTS = {
36
- claude: (base) => join(base, ".claude", "skills"),
37
- agents: (base) => join(base, ".agents", "skills"),
38
- };
36
+ // Namespaced bundle folder — the whole directory belongs to this package.
37
+ const BUNDLE = "adobe-data-ai";
39
38
 
40
39
  function discoverSkills() {
41
40
  if (!existsSync(skillsSrc)) return [];
@@ -45,32 +44,15 @@ function discoverSkills() {
45
44
  .sort();
46
45
  }
47
46
 
48
- function installTo(rootDir, skills) {
49
- mkdirSync(rootDir, { recursive: true });
50
- const manifestPath = join(rootDir, ".data-ai.json");
51
-
52
- // Prune skills we previously owned but no longer ship.
53
- if (existsSync(manifestPath)) {
54
- try {
55
- const prev = JSON.parse(readFileSync(manifestPath, "utf8"));
56
- for (const name of prev.skills ?? []) {
57
- if (!skills.includes(name) && existsSync(join(rootDir, name))) {
58
- rmSync(join(rootDir, name), { recursive: true, force: true });
59
- }
60
- }
61
- } catch {
62
- // Unreadable manifest — ignore and re-stamp below.
63
- }
64
- }
65
-
47
+ function installTo(bundleDir, skills) {
48
+ // We own this directory — wipe and recopy for a clean refresh.
49
+ rmSync(bundleDir, { recursive: true, force: true });
50
+ mkdirSync(bundleDir, { recursive: true });
66
51
  for (const name of skills) {
67
- const dest = join(rootDir, name);
68
- rmSync(dest, { recursive: true, force: true });
69
- cpSync(join(skillsSrc, name), dest, { recursive: true });
52
+ cpSync(join(skillsSrc, name), join(bundleDir, name), { recursive: true });
70
53
  }
71
-
72
54
  writeFileSync(
73
- manifestPath,
55
+ join(bundleDir, ".data-ai.json"),
74
56
  JSON.stringify({ package: PKG_NAME, version: VERSION, skills }, null, 2) + "\n",
75
57
  );
76
58
  }
@@ -81,8 +63,6 @@ function parseArgs(argv) {
81
63
  let dir = null;
82
64
  for (const a of argv) {
83
65
  if (a === "--global" || a === "-g") flags.add("global");
84
- else if (a === "--claude") flags.add("claude");
85
- else if (a === "--agents" || a === "--cursor") flags.add("agents");
86
66
  else if (a === "--help" || a === "-h") flags.add("help");
87
67
  else if (a.startsWith("--dir=")) dir = a.slice("--dir=".length);
88
68
  else if (!a.startsWith("-")) positional.push(a);
@@ -92,26 +72,22 @@ function parseArgs(argv) {
92
72
 
93
73
  const HELP = `${PKG_NAME} v${VERSION}
94
74
 
95
- Install cross-agent architecture skills into the current project.
75
+ Install the architecture-skill bundle for Cursor, Codex, and other agents
76
+ that scan .agents/skills/. (Claude Code uses the marketplace plugin instead.)
96
77
 
97
78
  Usage:
98
79
  npx ${PKG_NAME}@latest install [options]
99
80
  npx ${PKG_NAME}@latest list
100
81
 
101
82
  Commands:
102
- install Copy skills into the project's agent-skill roots (default).
83
+ install Copy skills into .agents/skills/${BUNDLE}/ (default).
103
84
  list Print the skills bundled in this package.
104
85
 
105
86
  Options:
106
- --claude Install only into .claude/skills/
107
- --agents Install only into .agents/skills/ (Cursor, Codex)
108
- --cursor Alias for --agents
109
- --global, -g Install into your home directory (~/.claude, ~/.agents)
87
+ --global, -g Install into your home directory (~/.agents/skills/${BUNDLE}/)
110
88
  instead of the current project.
111
89
  --dir=<path> Base directory to install into (default: cwd).
112
90
  --help, -h Show this help.
113
-
114
- With no target flag, installs into both .claude/skills and .agents/skills.
115
91
  `;
116
92
 
117
93
  function main() {
@@ -143,18 +119,12 @@ function main() {
143
119
  }
144
120
 
145
121
  const base = flags.has("global") ? homedir() : dir ? resolve(dir) : process.cwd();
122
+ const bundleDir = join(base, ".agents", "skills", BUNDLE);
146
123
 
147
- const chosen = [];
148
- if (flags.has("claude")) chosen.push("claude");
149
- if (flags.has("agents")) chosen.push("agents");
150
- if (chosen.length === 0) chosen.push("claude", "agents");
124
+ installTo(bundleDir, skills);
151
125
 
152
- process.stdout.write(`Installing ${skills.length} skill(s) from ${PKG_NAME} v${VERSION}\n`);
153
- for (const key of chosen) {
154
- const rootDir = ROOTS[key](base);
155
- installTo(rootDir, skills);
156
- process.stdout.write(` ${rootDir}\n`);
157
- }
126
+ process.stdout.write(`Installed ${skills.length} skill(s) from ${PKG_NAME} v${VERSION}\n`);
127
+ process.stdout.write(` ${bundleDir}\n`);
158
128
  process.stdout.write(`Skills: ${skills.join(", ")}\n`);
159
129
  }
160
130
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/data-ai",
3
- "version": "0.9.74",
3
+ "version": "0.9.76",
4
4
  "description": "Cross-agent architecture skills for @adobe/data — installable as a Claude Code plugin or copied into any Agent-Skills-compatible agent (Cursor, Codex).",
5
5
  "type": "module",
6
6
  "private": false,