@moskala/oneagent-templates 0.3.1 → 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 CHANGED
@@ -201,3 +201,54 @@ Follow the team coding standards documented in Notion.
201
201
  ```
202
202
 
203
203
  Skills, plugins, and rules are all optional.
204
+
205
+ ---
206
+
207
+ ## `extends`
208
+
209
+ Templates can inherit from other templates using the `extends` field. The child template only needs to define what it **adds** — skills, plugins, and rules from the parent are merged automatically.
210
+
211
+ ```yaml
212
+ name: my-react-template
213
+ description: Our React starter
214
+ extends: https://github.com/moskalakamil/oneagent-template
215
+
216
+ skills:
217
+ - repo: https://github.com/anthropics/skills
218
+ skill: frontend-design
219
+ plugins:
220
+ - target: claude
221
+ id: frontend-design@claude-plugins-official
222
+ ```
223
+
224
+ ### What `extends` accepts
225
+
226
+ | Value | Example | Description |
227
+ |-------|---------|-------------|
228
+ | Builtin template name | `extends: default` | Inherits from one of the built-in templates (`default`, `react`, `react-native`) |
229
+ | GitHub URL | `extends: https://github.com/org/template` | Inherits from a remote template (supports `/tree/branch/subdir` URLs) |
230
+
231
+ ### Merge behavior
232
+
233
+ | Field | Behavior |
234
+ |-------|----------|
235
+ | `skills` | `[...parent.skills, ...own.skills]` |
236
+ | `plugins` | `[...parent.plugins, ...own.plugins]` |
237
+ | `rules` | `[...parent.rules, ...own.rules]` |
238
+ | `instructions` | **Not inherited** — each template has its own `instructions.md` |
239
+
240
+ ### Chaining
241
+
242
+ Extends is recursive. The built-in templates form a chain:
243
+
244
+ ```
245
+ react-native → react → default
246
+ ```
247
+
248
+ - `default` defines 7 skills and 9 plugins
249
+ - `react` adds 7 skills and 2 plugins (total after merge: 14 skills, 11 plugins)
250
+ - `react-native` adds 5 skills (total after merge: 19 skills, 11 plugins)
251
+
252
+ ### Limitations
253
+
254
+ Remote templates (fetched from GitHub) can only extend other remote templates via URL — not built-in template names.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moskala/oneagent-templates",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "description": "Built-in templates for oneagent",
6
6
  "license": "MIT",
@@ -16,7 +16,7 @@
16
16
  "typecheck": "tsc --noEmit"
17
17
  },
18
18
  "dependencies": {
19
- "@moskala/oneagent-core": "0.2.5"
19
+ "@moskala/oneagent-core": "0.3.1"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@types/bun": "latest",
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import path from "path";
2
2
  import fs from "fs/promises";
3
3
  import { fileURLToPath } from "url";
4
- import { type TemplatePlugin, type TemplateDefinition, parseTemplateYaml } from "@moskala/oneagent-core";
4
+ import { type TemplatePlugin, type TemplateDefinition, parseTemplateYaml, resolveExtends } from "@moskala/oneagent-core";
5
5
 
6
6
  export type { TemplatePlugin, TemplateDefinition };
7
7
 
@@ -19,7 +19,7 @@ async function loadTemplate(name: BuiltinTemplateName): Promise<TemplateDefiniti
19
19
  fs.readFile(path.join(templateDir, "instructions.md"), "utf-8"),
20
20
  ]);
21
21
 
22
- const { description, skills, plugins } = parseTemplateYaml(yamlText, name);
22
+ const parsed = parseTemplateYaml(yamlText, name);
23
23
 
24
24
  const rulesDir = path.join(templateDir, "rules");
25
25
  let rules: Array<{ name: string; content: string }> = [];
@@ -37,7 +37,8 @@ async function loadTemplate(name: BuiltinTemplateName): Promise<TemplateDefiniti
37
37
  // No rules directory — fine
38
38
  }
39
39
 
40
- return { name, description, skills, plugins, instructions, rules };
40
+ const base = { ...parsed, instructions, rules };
41
+ return resolveExtends(base, (n) => resolveBuiltinTemplate(n));
41
42
  }
42
43
 
43
44
  export async function resolveBuiltinTemplate(name: string): Promise<TemplateDefinition | null> {
@@ -3,8 +3,8 @@ description: General programming starter
3
3
  skills:
4
4
  - repo: https://github.com/vercel-labs/skills
5
5
  skill: find-skills
6
- - repo: https://github.com/anthropics/skills
7
- skill: skill-creator
6
+ - repo: https://github.com/obra/superpowers
7
+ skill: writing-skills
8
8
  - repo: https://github.com/github/awesome-copilot
9
9
  skill: conventional-commit
10
10
  - repo: https://github.com/oldwinter/skills
@@ -1,20 +1,7 @@
1
1
  name: react
2
2
  description: React / Next.js project starter
3
+ extends: default
3
4
  skills:
4
- - repo: https://github.com/vercel-labs/skills
5
- skill: find-skills
6
- - repo: https://github.com/anthropics/skills
7
- skill: skill-creator
8
- - repo: https://github.com/github/awesome-copilot
9
- skill: conventional-commit
10
- - repo: https://github.com/oldwinter/skills
11
- skill: github-cli
12
- - repo: https://github.com/supercent-io/skills-template
13
- skill: code-review
14
- - repo: https://github.com/vercel-labs/agent-skills
15
- skill: web-design-guidelines
16
- - repo: https://github.com/coreyhaines31/marketingskills
17
- skill: copywriting
18
5
  - repo: https://github.com/anthropics/skills
19
6
  skill: frontend-design
20
7
  - repo: https://github.com/vercel-labs/agent-skills
@@ -30,25 +17,7 @@ skills:
30
17
  - repo: https://github.com/wshobson/agents
31
18
  skill: react-state-management
32
19
  plugins:
33
- - target: claude
34
- id: context7@claude-plugins-official
35
- - target: claude
36
- id: superpowers@claude-plugins-official
37
- - target: claude
38
- id: code-simplifier@claude-plugins-official
39
- - target: claude
40
- id: security-guidance@claude-plugins-official
41
- - target: claude
42
- id: claude-md-management@claude-plugins-official
43
20
  - target: claude
44
21
  id: frontend-design@claude-plugins-official
45
22
  - target: claude
46
23
  id: typescript-lsp@claude-plugins-official
47
- - target: opencode
48
- id: oh-my-opencode
49
- - target: opencode
50
- id: "@plannotator/opencode"
51
- - target: opencode
52
- id: "@openspoon/subtask2"
53
- - target: opencode
54
- id: micode
@@ -1,34 +1,7 @@
1
1
  name: react-native
2
2
  description: React Native / Expo project starter
3
+ extends: react
3
4
  skills:
4
- - repo: https://github.com/vercel-labs/skills
5
- skill: find-skills
6
- - repo: https://github.com/anthropics/skills
7
- skill: skill-creator
8
- - repo: https://github.com/github/awesome-copilot
9
- skill: conventional-commit
10
- - repo: https://github.com/oldwinter/skills
11
- skill: github-cli
12
- - repo: https://github.com/supercent-io/skills-template
13
- skill: code-review
14
- - repo: https://github.com/vercel-labs/agent-skills
15
- skill: web-design-guidelines
16
- - repo: https://github.com/coreyhaines31/marketingskills
17
- skill: copywriting
18
- - repo: https://github.com/anthropics/skills
19
- skill: frontend-design
20
- - repo: https://github.com/vercel-labs/agent-skills
21
- skill: vercel-react-best-practices
22
- - repo: https://github.com/vercel-labs/agent-skills
23
- skill: vercel-composition-patterns
24
- - repo: https://github.com/obra/superpowers
25
- skill: brainstorming
26
- - repo: https://github.com/coreyhaines31/marketingskills
27
- skill: seo-audit
28
- - repo: https://github.com/vercel-labs/next-skills
29
- skill: next-best-practices
30
- - repo: https://github.com/wshobson/agents
31
- skill: react-state-management
32
5
  - repo: https://github.com/vercel-labs/agent-skills
33
6
  skill: vercel-react-native-skills
34
7
  - repo: https://github.com/callstackincubator/agent-skills
@@ -39,26 +12,3 @@ skills:
39
12
  skill: upgrading-expo
40
13
  - repo: https://github.com/conorluddy/ios-simulator-skill
41
14
  skill: ios-simulator-skill
42
- plugins:
43
- - target: claude
44
- id: context7@claude-plugins-official
45
- - target: claude
46
- id: superpowers@claude-plugins-official
47
- - target: claude
48
- id: code-simplifier@claude-plugins-official
49
- - target: claude
50
- id: security-guidance@claude-plugins-official
51
- - target: claude
52
- id: claude-md-management@claude-plugins-official
53
- - target: claude
54
- id: frontend-design@claude-plugins-official
55
- - target: claude
56
- id: typescript-lsp@claude-plugins-official
57
- - target: opencode
58
- id: oh-my-opencode
59
- - target: opencode
60
- id: "@plannotator/opencode"
61
- - target: opencode
62
- id: "@openspoon/subtask2"
63
- - target: opencode
64
- id: micode