@julianpedro/plugin-dev-ai-hub-common 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/dist/index.cjs.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  var schemas = require('./schemas.cjs.js');
4
4
  var installPaths = require('./installPaths.cjs.js');
5
+ var permissions = require('./permissions.cjs.js');
5
6
 
6
7
 
7
8
 
@@ -11,4 +12,6 @@ exports.AssetTypeEnum = schemas.AssetTypeEnum;
11
12
  exports.McpCatalogFileSchema = schemas.McpCatalogFileSchema;
12
13
  exports.getInstallPath = installPaths.getInstallPath;
13
14
  exports.getInstallPathsForAsset = installPaths.getInstallPathsForAsset;
15
+ exports.devAiHubPermissions = permissions.devAiHubPermissions;
16
+ exports.devAiHubSyncPermission = permissions.devAiHubSyncPermission;
14
17
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
+ import * as _backstage_plugin_permission_common from '@backstage/plugin-permission-common';
2
3
 
3
- type AssetType = 'instruction' | 'agent' | 'skill' | 'workflow' | 'bundle';
4
+ type AssetType = 'instruction' | 'agent' | 'skill' | 'workflow' | 'prompt' | 'bundle';
4
5
  type AiTool = 'all' | 'github-copilot' | 'claude-code' | 'google-gemini' | 'cursor';
5
6
  interface BundleItem {
6
7
  ref: string;
@@ -22,6 +23,14 @@ interface McpCatalogEntry {
22
23
  args?: string[];
23
24
  env?: Record<string, string>;
24
25
  }
26
+ /** A single MCP server requirement declared in the asset envelope. */
27
+ interface McpRequirement {
28
+ id: string;
29
+ /** Display name override — shown when the server is not in the MCP catalog. */
30
+ name?: string;
31
+ /** URL to a PNG icon for this MCP server. */
32
+ icon?: string;
33
+ }
25
34
  /** Lightweight summary returned by list endpoints — no markdown content. */
26
35
  interface AiAssetSummary {
27
36
  id: string;
@@ -36,9 +45,15 @@ interface AiAssetSummary {
36
45
  author: string;
37
46
  icon?: string;
38
47
  version: string;
48
+ /** Model identifier declared in the YAML envelope (e.g. "claude-opus-4-5"). Only set for agents. */
49
+ model?: string;
39
50
  installCount: number;
40
51
  /** Number of items in a bundle (only set for type === 'bundle'). */
41
52
  itemCount?: number;
53
+ /** Markdown usage guide defined in the YAML envelope. Present only when the author provided it. */
54
+ helpText?: string;
55
+ /** MCP servers required by this asset (only set for agent/skill types). */
56
+ mcps?: McpRequirement[];
42
57
  syncedAt: string;
43
58
  createdAt: string;
44
59
  updatedAt: string;
@@ -56,6 +71,8 @@ interface AiAsset {
56
71
  author: string;
57
72
  icon?: string;
58
73
  version: string;
74
+ /** Model identifier declared in the YAML envelope (e.g. "claude-opus-4-5"). Only set for agents. */
75
+ model?: string;
59
76
  /** Override the install path for all tools */
60
77
  installPath?: string;
61
78
  /** Override the install path per tool */
@@ -66,6 +83,10 @@ interface AiAsset {
66
83
  yamlRaw: string;
67
84
  /** Extra metadata stored from the envelope (e.g. resources for skills) */
68
85
  metadata?: Record<string, unknown>;
86
+ /** Markdown usage guide defined in the YAML envelope. Present only when the author provided it. */
87
+ helpText?: string;
88
+ /** MCP servers required by this asset (only set for agent/skill types). */
89
+ mcps?: McpRequirement[];
69
90
  /**
70
91
  * Content of bundled resource files for skills (path → file content).
71
92
  * Only populated for assets of type `skill` that declare `resources` in the envelope.
@@ -120,7 +141,7 @@ interface AssetListFilter {
120
141
  }
121
142
 
122
143
  declare const AiToolEnum: z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>;
123
- declare const AssetTypeEnum: z.ZodEnum<["instruction", "agent", "skill", "workflow", "bundle"]>;
144
+ declare const AssetTypeEnum: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
124
145
  /**
125
146
  * Schema for the YAML metadata file (.yaml) that acts as an envelope.
126
147
  * The actual asset content lives in the referenced .md file.
@@ -133,7 +154,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
133
154
  /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
134
155
  label: z.ZodOptional<z.ZodString>;
135
156
  description: z.ZodString;
136
- type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "bundle"]>;
157
+ type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
137
158
  tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
138
159
  tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
139
160
  author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -150,6 +171,21 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
150
171
  }, {
151
172
  ref: string;
152
173
  }>, "many">>;
174
+ help: z.ZodOptional<z.ZodString>;
175
+ model: z.ZodOptional<z.ZodString>;
176
+ mcps: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
177
+ id: z.ZodString;
178
+ name: z.ZodOptional<z.ZodString>;
179
+ icon: z.ZodOptional<z.ZodString>;
180
+ }, "strip", z.ZodTypeAny, {
181
+ id: string;
182
+ name?: string | undefined;
183
+ icon?: string | undefined;
184
+ }, {
185
+ id: string;
186
+ name?: string | undefined;
187
+ icon?: string | undefined;
188
+ }>]>, "many">>;
153
189
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
154
190
  /** Path to the .md content file, relative to the .yaml file directory.
155
191
  * If omitted, the parser falls back to <same-name>.md by convention. */
@@ -158,7 +194,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
158
194
  /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
159
195
  label: z.ZodOptional<z.ZodString>;
160
196
  description: z.ZodString;
161
- type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "bundle"]>;
197
+ type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
162
198
  tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
163
199
  tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
164
200
  author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -175,6 +211,21 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
175
211
  }, {
176
212
  ref: string;
177
213
  }>, "many">>;
214
+ help: z.ZodOptional<z.ZodString>;
215
+ model: z.ZodOptional<z.ZodString>;
216
+ mcps: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
217
+ id: z.ZodString;
218
+ name: z.ZodOptional<z.ZodString>;
219
+ icon: z.ZodOptional<z.ZodString>;
220
+ }, "strip", z.ZodTypeAny, {
221
+ id: string;
222
+ name?: string | undefined;
223
+ icon?: string | undefined;
224
+ }, {
225
+ id: string;
226
+ name?: string | undefined;
227
+ icon?: string | undefined;
228
+ }>]>, "many">>;
178
229
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
179
230
  /** Path to the .md content file, relative to the .yaml file directory.
180
231
  * If omitted, the parser falls back to <same-name>.md by convention. */
@@ -183,7 +234,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
183
234
  /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
184
235
  label: z.ZodOptional<z.ZodString>;
185
236
  description: z.ZodString;
186
- type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "bundle"]>;
237
+ type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
187
238
  tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
188
239
  tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
189
240
  author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -200,8 +251,85 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
200
251
  }, {
201
252
  ref: string;
202
253
  }>, "many">>;
254
+ help: z.ZodOptional<z.ZodString>;
255
+ model: z.ZodOptional<z.ZodString>;
256
+ mcps: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
257
+ id: z.ZodString;
258
+ name: z.ZodOptional<z.ZodString>;
259
+ icon: z.ZodOptional<z.ZodString>;
260
+ }, "strip", z.ZodTypeAny, {
261
+ id: string;
262
+ name?: string | undefined;
263
+ icon?: string | undefined;
264
+ }, {
265
+ id: string;
266
+ name?: string | undefined;
267
+ icon?: string | undefined;
268
+ }>]>, "many">>;
203
269
  }, z.ZodTypeAny, "passthrough">>;
204
270
  type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;
271
+ /**
272
+ * Schema for the mcp-catalog.yaml file placed at the root of a provider repository.
273
+ * Defines external MCP servers that users can install with one click.
274
+ */
275
+ declare const McpCatalogFileSchema: z.ZodObject<{
276
+ servers: z.ZodArray<z.ZodObject<{
277
+ id: z.ZodString;
278
+ name: z.ZodString;
279
+ description: z.ZodOptional<z.ZodString>;
280
+ icon: z.ZodOptional<z.ZodString>;
281
+ type: z.ZodEnum<["http", "stdio"]>;
282
+ url: z.ZodOptional<z.ZodString>;
283
+ command: z.ZodOptional<z.ZodString>;
284
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
285
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
286
+ }, "strip", z.ZodTypeAny, {
287
+ name: string;
288
+ type: "http" | "stdio";
289
+ id: string;
290
+ description?: string | undefined;
291
+ icon?: string | undefined;
292
+ url?: string | undefined;
293
+ command?: string | undefined;
294
+ args?: string[] | undefined;
295
+ env?: Record<string, string> | undefined;
296
+ }, {
297
+ name: string;
298
+ type: "http" | "stdio";
299
+ id: string;
300
+ description?: string | undefined;
301
+ icon?: string | undefined;
302
+ url?: string | undefined;
303
+ command?: string | undefined;
304
+ args?: string[] | undefined;
305
+ env?: Record<string, string> | undefined;
306
+ }>, "many">;
307
+ }, "strip", z.ZodTypeAny, {
308
+ servers: {
309
+ name: string;
310
+ type: "http" | "stdio";
311
+ id: string;
312
+ description?: string | undefined;
313
+ icon?: string | undefined;
314
+ url?: string | undefined;
315
+ command?: string | undefined;
316
+ args?: string[] | undefined;
317
+ env?: Record<string, string> | undefined;
318
+ }[];
319
+ }, {
320
+ servers: {
321
+ name: string;
322
+ type: "http" | "stdio";
323
+ id: string;
324
+ description?: string | undefined;
325
+ icon?: string | undefined;
326
+ url?: string | undefined;
327
+ command?: string | undefined;
328
+ args?: string[] | undefined;
329
+ env?: Record<string, string> | undefined;
330
+ }[];
331
+ }>;
332
+ type McpCatalogFile = z.infer<typeof McpCatalogFileSchema>;
205
333
 
206
334
  interface InstallPathOverrides {
207
335
  /** Single path override — applies to all tools when installPaths has no entry for the tool */
@@ -220,5 +348,8 @@ declare function getInstallPath(type: AssetType, tool: AiTool | string, name: st
220
348
  */
221
349
  declare function getInstallPathsForAsset(type: AssetType, tools: (AiTool | string)[], name: string, overrides?: InstallPathOverrides): Record<string, string>;
222
350
 
223
- export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum, getInstallPath, getInstallPathsForAsset };
224
- export type { AiAsset, AiAssetFrontmatter, AiAssetListResponse, AiAssetSummary, AiHubProvider, AiHubStats, AiTool, AssetListFilter, AssetType, BundleItem, InstallPathOverrides, McpCatalogEntry };
351
+ declare const devAiHubSyncPermission: _backstage_plugin_permission_common.BasicPermission;
352
+ declare const devAiHubPermissions: _backstage_plugin_permission_common.BasicPermission[];
353
+
354
+ export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum, McpCatalogFileSchema, devAiHubPermissions, devAiHubSyncPermission, getInstallPath, getInstallPathsForAsset };
355
+ export type { AiAsset, AiAssetFrontmatter, AiAssetListResponse, AiAssetSummary, AiHubProvider, AiHubStats, AiTool, AssetListFilter, AssetType, BundleItem, InstallPathOverrides, McpCatalogEntry, McpCatalogFile, McpRequirement };
package/dist/index.esm.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum, McpCatalogFileSchema } from './schemas.esm.js';
2
2
  export { getInstallPath, getInstallPathsForAsset } from './installPaths.esm.js';
3
+ export { devAiHubPermissions, devAiHubSyncPermission } from './permissions.esm.js';
3
4
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -43,6 +43,14 @@ const CONVENTIONS = {
43
43
  "cursor": (name) => `.cursor/rules/${name}.mdc`,
44
44
  "all": (name) => `.ai/workflows/${name}.md`,
45
45
  "default": (name) => `.ai/workflows/${name}.md`
46
+ },
47
+ prompt: {
48
+ "claude-code": (name) => `.claude/prompts/${name}.md`,
49
+ "github-copilot": (name) => `.github/prompts/${name}.md`,
50
+ "google-gemini": (name) => `.gemini/prompts/${name}.md`,
51
+ "cursor": (name) => `.cursor/prompts/${name}.md`,
52
+ "all": (name) => `.ai/prompts/${name}.md`,
53
+ "default": (name) => `.ai/prompts/${name}.md`
46
54
  }
47
55
  };
48
56
  function getInstallPath(type, tool, name, overrides) {
@@ -1 +1 @@
1
- {"version":3,"file":"installPaths.cjs.js","sources":["../src/installPaths.ts"],"sourcesContent":["import type { AssetType, AiTool } from './types';\n\n/** Sanitize asset name for use in file paths */\nfunction toSlug(name: string): string {\n return name.toLowerCase().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n}\n\n/**\n * Convention table: (type, tool) → install path template.\n * Returns the recommended filesystem path for an asset given the target tool.\n *\n * Priority: installPaths[tool] > installPath > convention below.\n */\nconst CONVENTIONS: Record<AssetType, Record<AiTool | 'default', (name: string) => string>> = {\n bundle: {\n 'claude-code': () => '',\n 'github-copilot': () => '',\n 'google-gemini': () => '',\n 'cursor': () => '',\n 'all': () => '', 'default': () => '',\n },\n instruction: {\n 'claude-code': name => `.claude/rules/${name}.md`,\n 'github-copilot': name => `.github/instructions/${name}.instructions.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/instructions/${name}.md`,\n 'default': name => `.ai/instructions/${name}.md`,\n },\n agent: {\n 'claude-code': name => `.claude/agents/${name}.md`,\n 'github-copilot': name => `.github/agents/${name}.agent.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/agents/${name}.md`,\n 'default': name => `.ai/agents/${name}.md`,\n },\n skill: {\n 'claude-code': name => `.claude/skills/${name}/SKILL.md`,\n 'github-copilot': name => `.claude/skills/${name}/SKILL.md`,\n 'google-gemini': name => `.claude/skills/${name}/SKILL.md`,\n 'cursor': name => `.cursor/skills/${name}/SKILL.md`,\n 'all': name => `.claude/skills/${name}/SKILL.md`,\n 'default': name => `.claude/skills/${name}/SKILL.md`,\n },\n workflow: {\n 'claude-code': name => `.claude/workflows/${name}.md`,\n 'github-copilot': name => `.github/workflows/${name}.workflow.md`,\n 'google-gemini': name => `.gemini/workflows/${name}.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/workflows/${name}.md`,\n 'default': name => `.ai/workflows/${name}.md`,\n },\n};\n\nexport interface InstallPathOverrides {\n /** Single path override — applies to all tools when installPaths has no entry for the tool */\n installPath?: string;\n /** Per-tool path overrides — highest priority */\n installPaths?: Record<string, string>;\n}\n\n/**\n * Returns the recommended install path for an asset in a given tool's workspace.\n * Resolution order: installPaths[tool] > installPath > built-in convention.\n */\nexport function getInstallPath(\n type: AssetType,\n tool: AiTool | string,\n name: string,\n overrides?: InstallPathOverrides,\n): string {\n if (overrides?.installPaths?.[tool]) return overrides.installPaths[tool];\n if (overrides?.installPath) return overrides.installPath;\n\n const slug = toSlug(name);\n const toolConventions = CONVENTIONS[type];\n const fn = toolConventions[tool as AiTool] ?? toolConventions.default;\n return fn(slug);\n}\n\n/**\n * Returns install paths for all tools in the asset's tools list.\n * If tools contains 'all', returns paths for every known tool.\n */\nexport function getInstallPathsForAsset(\n type: AssetType,\n tools: (AiTool | string)[],\n name: string,\n overrides?: InstallPathOverrides,\n): Record<string, string> {\n // Bundles have no single install path — they're composed of individual items\n if (type === 'bundle') return {};\n\n const ALL_TOOLS: AiTool[] = ['claude-code', 'github-copilot', 'google-gemini', 'cursor'];\n const resolvedTools = tools.includes('all') ? ALL_TOOLS : tools;\n\n return Object.fromEntries(\n resolvedTools.map(tool => [tool, getInstallPath(type, tool, name, overrides)]),\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installPaths.cjs.js","sources":["../src/installPaths.ts"],"sourcesContent":["import type { AssetType, AiTool } from './types';\n\n/** Sanitize asset name for use in file paths */\nfunction toSlug(name: string): string {\n return name.toLowerCase().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n}\n\n/**\n * Convention table: (type, tool) → install path template.\n * Returns the recommended filesystem path for an asset given the target tool.\n *\n * Priority: installPaths[tool] > installPath > convention below.\n */\nconst CONVENTIONS: Record<AssetType, Record<AiTool | 'default', (name: string) => string>> = {\n bundle: {\n 'claude-code': () => '',\n 'github-copilot': () => '',\n 'google-gemini': () => '',\n 'cursor': () => '',\n 'all': () => '',\n 'default': () => '',\n },\n instruction: {\n 'claude-code': name => `.claude/rules/${name}.md`,\n 'github-copilot': name => `.github/instructions/${name}.instructions.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/instructions/${name}.md`,\n 'default': name => `.ai/instructions/${name}.md`,\n },\n agent: {\n 'claude-code': name => `.claude/agents/${name}.md`,\n 'github-copilot': name => `.github/agents/${name}.agent.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/agents/${name}.md`,\n 'default': name => `.ai/agents/${name}.md`,\n },\n skill: {\n 'claude-code': name => `.claude/skills/${name}/SKILL.md`,\n 'github-copilot': name => `.claude/skills/${name}/SKILL.md`,\n 'google-gemini': name => `.claude/skills/${name}/SKILL.md`,\n 'cursor': name => `.cursor/skills/${name}/SKILL.md`,\n 'all': name => `.claude/skills/${name}/SKILL.md`,\n 'default': name => `.claude/skills/${name}/SKILL.md`,\n },\n workflow: {\n 'claude-code': name => `.claude/workflows/${name}.md`,\n 'github-copilot': name => `.github/workflows/${name}.workflow.md`,\n 'google-gemini': name => `.gemini/workflows/${name}.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/workflows/${name}.md`,\n 'default': name => `.ai/workflows/${name}.md`,\n },\n prompt: {\n 'claude-code': name => `.claude/prompts/${name}.md`,\n 'github-copilot': name => `.github/prompts/${name}.md`,\n 'google-gemini': name => `.gemini/prompts/${name}.md`,\n 'cursor': name => `.cursor/prompts/${name}.md`,\n 'all': name => `.ai/prompts/${name}.md`,\n 'default': name => `.ai/prompts/${name}.md`,\n },\n};\n\nexport interface InstallPathOverrides {\n /** Single path override — applies to all tools when installPaths has no entry for the tool */\n installPath?: string;\n /** Per-tool path overrides — highest priority */\n installPaths?: Record<string, string>;\n}\n\n/**\n * Returns the recommended install path for an asset in a given tool's workspace.\n * Resolution order: installPaths[tool] > installPath > built-in convention.\n */\nexport function getInstallPath(\n type: AssetType,\n tool: AiTool | string,\n name: string,\n overrides?: InstallPathOverrides,\n): string {\n if (overrides?.installPaths?.[tool]) return overrides.installPaths[tool];\n if (overrides?.installPath) return overrides.installPath;\n\n const slug = toSlug(name);\n const toolConventions = CONVENTIONS[type];\n const fn = toolConventions[tool as AiTool] ?? toolConventions.default;\n return fn(slug);\n}\n\n/**\n * Returns install paths for all tools in the asset's tools list.\n * If tools contains 'all', returns paths for every known tool.\n */\nexport function getInstallPathsForAsset(\n type: AssetType,\n tools: (AiTool | string)[],\n name: string,\n overrides?: InstallPathOverrides,\n): Record<string, string> {\n // Bundles have no single install path — they're composed of individual items\n if (type === 'bundle') return {};\n\n const ALL_TOOLS: AiTool[] = ['claude-code', 'github-copilot', 'google-gemini', 'cursor'];\n const resolvedTools = tools.includes('all') ? ALL_TOOLS : tools;\n\n return Object.fromEntries(\n resolvedTools.map(tool => [tool, getInstallPath(type, tool, name, overrides)]),\n );\n}"],"names":[],"mappings":"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"}
@@ -41,6 +41,14 @@ const CONVENTIONS = {
41
41
  "cursor": (name) => `.cursor/rules/${name}.mdc`,
42
42
  "all": (name) => `.ai/workflows/${name}.md`,
43
43
  "default": (name) => `.ai/workflows/${name}.md`
44
+ },
45
+ prompt: {
46
+ "claude-code": (name) => `.claude/prompts/${name}.md`,
47
+ "github-copilot": (name) => `.github/prompts/${name}.md`,
48
+ "google-gemini": (name) => `.gemini/prompts/${name}.md`,
49
+ "cursor": (name) => `.cursor/prompts/${name}.md`,
50
+ "all": (name) => `.ai/prompts/${name}.md`,
51
+ "default": (name) => `.ai/prompts/${name}.md`
44
52
  }
45
53
  };
46
54
  function getInstallPath(type, tool, name, overrides) {
@@ -1 +1 @@
1
- {"version":3,"file":"installPaths.esm.js","sources":["../src/installPaths.ts"],"sourcesContent":["import type { AssetType, AiTool } from './types';\n\n/** Sanitize asset name for use in file paths */\nfunction toSlug(name: string): string {\n return name.toLowerCase().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n}\n\n/**\n * Convention table: (type, tool) → install path template.\n * Returns the recommended filesystem path for an asset given the target tool.\n *\n * Priority: installPaths[tool] > installPath > convention below.\n */\nconst CONVENTIONS: Record<AssetType, Record<AiTool | 'default', (name: string) => string>> = {\n bundle: {\n 'claude-code': () => '',\n 'github-copilot': () => '',\n 'google-gemini': () => '',\n 'cursor': () => '',\n 'all': () => '', 'default': () => '',\n },\n instruction: {\n 'claude-code': name => `.claude/rules/${name}.md`,\n 'github-copilot': name => `.github/instructions/${name}.instructions.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/instructions/${name}.md`,\n 'default': name => `.ai/instructions/${name}.md`,\n },\n agent: {\n 'claude-code': name => `.claude/agents/${name}.md`,\n 'github-copilot': name => `.github/agents/${name}.agent.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/agents/${name}.md`,\n 'default': name => `.ai/agents/${name}.md`,\n },\n skill: {\n 'claude-code': name => `.claude/skills/${name}/SKILL.md`,\n 'github-copilot': name => `.claude/skills/${name}/SKILL.md`,\n 'google-gemini': name => `.claude/skills/${name}/SKILL.md`,\n 'cursor': name => `.cursor/skills/${name}/SKILL.md`,\n 'all': name => `.claude/skills/${name}/SKILL.md`,\n 'default': name => `.claude/skills/${name}/SKILL.md`,\n },\n workflow: {\n 'claude-code': name => `.claude/workflows/${name}.md`,\n 'github-copilot': name => `.github/workflows/${name}.workflow.md`,\n 'google-gemini': name => `.gemini/workflows/${name}.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/workflows/${name}.md`,\n 'default': name => `.ai/workflows/${name}.md`,\n },\n};\n\nexport interface InstallPathOverrides {\n /** Single path override — applies to all tools when installPaths has no entry for the tool */\n installPath?: string;\n /** Per-tool path overrides — highest priority */\n installPaths?: Record<string, string>;\n}\n\n/**\n * Returns the recommended install path for an asset in a given tool's workspace.\n * Resolution order: installPaths[tool] > installPath > built-in convention.\n */\nexport function getInstallPath(\n type: AssetType,\n tool: AiTool | string,\n name: string,\n overrides?: InstallPathOverrides,\n): string {\n if (overrides?.installPaths?.[tool]) return overrides.installPaths[tool];\n if (overrides?.installPath) return overrides.installPath;\n\n const slug = toSlug(name);\n const toolConventions = CONVENTIONS[type];\n const fn = toolConventions[tool as AiTool] ?? toolConventions.default;\n return fn(slug);\n}\n\n/**\n * Returns install paths for all tools in the asset's tools list.\n * If tools contains 'all', returns paths for every known tool.\n */\nexport function getInstallPathsForAsset(\n type: AssetType,\n tools: (AiTool | string)[],\n name: string,\n overrides?: InstallPathOverrides,\n): Record<string, string> {\n // Bundles have no single install path — they're composed of individual items\n if (type === 'bundle') return {};\n\n const ALL_TOOLS: AiTool[] = ['claude-code', 'github-copilot', 'google-gemini', 'cursor'];\n const resolvedTools = tools.includes('all') ? ALL_TOOLS : tools;\n\n return Object.fromEntries(\n resolvedTools.map(tool => [tool, getInstallPath(type, tool, name, overrides)]),\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installPaths.esm.js","sources":["../src/installPaths.ts"],"sourcesContent":["import type { AssetType, AiTool } from './types';\n\n/** Sanitize asset name for use in file paths */\nfunction toSlug(name: string): string {\n return name.toLowerCase().replace(/\\s+/g, '-').replace(/[^a-z0-9-_]/g, '');\n}\n\n/**\n * Convention table: (type, tool) → install path template.\n * Returns the recommended filesystem path for an asset given the target tool.\n *\n * Priority: installPaths[tool] > installPath > convention below.\n */\nconst CONVENTIONS: Record<AssetType, Record<AiTool | 'default', (name: string) => string>> = {\n bundle: {\n 'claude-code': () => '',\n 'github-copilot': () => '',\n 'google-gemini': () => '',\n 'cursor': () => '',\n 'all': () => '',\n 'default': () => '',\n },\n instruction: {\n 'claude-code': name => `.claude/rules/${name}.md`,\n 'github-copilot': name => `.github/instructions/${name}.instructions.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/instructions/${name}.md`,\n 'default': name => `.ai/instructions/${name}.md`,\n },\n agent: {\n 'claude-code': name => `.claude/agents/${name}.md`,\n 'github-copilot': name => `.github/agents/${name}.agent.md`,\n 'google-gemini': _ => `GEMINI.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/agents/${name}.md`,\n 'default': name => `.ai/agents/${name}.md`,\n },\n skill: {\n 'claude-code': name => `.claude/skills/${name}/SKILL.md`,\n 'github-copilot': name => `.claude/skills/${name}/SKILL.md`,\n 'google-gemini': name => `.claude/skills/${name}/SKILL.md`,\n 'cursor': name => `.cursor/skills/${name}/SKILL.md`,\n 'all': name => `.claude/skills/${name}/SKILL.md`,\n 'default': name => `.claude/skills/${name}/SKILL.md`,\n },\n workflow: {\n 'claude-code': name => `.claude/workflows/${name}.md`,\n 'github-copilot': name => `.github/workflows/${name}.workflow.md`,\n 'google-gemini': name => `.gemini/workflows/${name}.md`,\n 'cursor': name => `.cursor/rules/${name}.mdc`,\n 'all': name => `.ai/workflows/${name}.md`,\n 'default': name => `.ai/workflows/${name}.md`,\n },\n prompt: {\n 'claude-code': name => `.claude/prompts/${name}.md`,\n 'github-copilot': name => `.github/prompts/${name}.md`,\n 'google-gemini': name => `.gemini/prompts/${name}.md`,\n 'cursor': name => `.cursor/prompts/${name}.md`,\n 'all': name => `.ai/prompts/${name}.md`,\n 'default': name => `.ai/prompts/${name}.md`,\n },\n};\n\nexport interface InstallPathOverrides {\n /** Single path override — applies to all tools when installPaths has no entry for the tool */\n installPath?: string;\n /** Per-tool path overrides — highest priority */\n installPaths?: Record<string, string>;\n}\n\n/**\n * Returns the recommended install path for an asset in a given tool's workspace.\n * Resolution order: installPaths[tool] > installPath > built-in convention.\n */\nexport function getInstallPath(\n type: AssetType,\n tool: AiTool | string,\n name: string,\n overrides?: InstallPathOverrides,\n): string {\n if (overrides?.installPaths?.[tool]) return overrides.installPaths[tool];\n if (overrides?.installPath) return overrides.installPath;\n\n const slug = toSlug(name);\n const toolConventions = CONVENTIONS[type];\n const fn = toolConventions[tool as AiTool] ?? toolConventions.default;\n return fn(slug);\n}\n\n/**\n * Returns install paths for all tools in the asset's tools list.\n * If tools contains 'all', returns paths for every known tool.\n */\nexport function getInstallPathsForAsset(\n type: AssetType,\n tools: (AiTool | string)[],\n name: string,\n overrides?: InstallPathOverrides,\n): Record<string, string> {\n // Bundles have no single install path — they're composed of individual items\n if (type === 'bundle') return {};\n\n const ALL_TOOLS: AiTool[] = ['claude-code', 'github-copilot', 'google-gemini', 'cursor'];\n const resolvedTools = tools.includes('all') ? ALL_TOOLS : tools;\n\n return Object.fromEntries(\n resolvedTools.map(tool => [tool, getInstallPath(type, tool, name, overrides)]),\n );\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var pluginPermissionCommon = require('@backstage/plugin-permission-common');
4
+
5
+ const devAiHubSyncPermission = pluginPermissionCommon.createPermission({
6
+ name: "dev-ai-hub.sync.trigger",
7
+ attributes: { action: "create" }
8
+ });
9
+ const devAiHubPermissions = [devAiHubSyncPermission];
10
+
11
+ exports.devAiHubPermissions = devAiHubPermissions;
12
+ exports.devAiHubSyncPermission = devAiHubSyncPermission;
13
+ //# sourceMappingURL=permissions.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\nexport const devAiHubSyncPermission = createPermission({\n name: 'dev-ai-hub.sync.trigger',\n attributes: { action: 'create' },\n});\n\nexport const devAiHubPermissions = [devAiHubSyncPermission];"],"names":["createPermission"],"mappings":";;;;AAEO,MAAM,yBAAyBA,uCAAA,CAAiB;AAAA,EACrD,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAEM,MAAM,mBAAA,GAAsB,CAAC,sBAAsB;;;;;"}
@@ -0,0 +1,10 @@
1
+ import { createPermission } from '@backstage/plugin-permission-common';
2
+
3
+ const devAiHubSyncPermission = createPermission({
4
+ name: "dev-ai-hub.sync.trigger",
5
+ attributes: { action: "create" }
6
+ });
7
+ const devAiHubPermissions = [devAiHubSyncPermission];
8
+
9
+ export { devAiHubPermissions, devAiHubSyncPermission };
10
+ //# sourceMappingURL=permissions.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\nexport const devAiHubSyncPermission = createPermission({\n name: 'dev-ai-hub.sync.trigger',\n attributes: { action: 'create' },\n});\n\nexport const devAiHubPermissions = [devAiHubSyncPermission];"],"names":[],"mappings":";;AAEO,MAAM,yBAAyB,gBAAA,CAAiB;AAAA,EACrD,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAEM,MAAM,mBAAA,GAAsB,CAAC,sBAAsB;;;;"}
@@ -14,6 +14,7 @@ const AssetTypeEnum = zod.z.enum([
14
14
  "agent",
15
15
  "skill",
16
16
  "workflow",
17
+ "prompt",
17
18
  "bundle"
18
19
  ]);
19
20
  const AiAssetFrontmatterSchema = zod.z.object({
@@ -40,6 +41,8 @@ const AiAssetFrontmatterSchema = zod.z.object({
40
41
  items: zod.z.array(zod.z.object({ ref: zod.z.string() })).optional(),
41
42
  // usage guide — markdown shown when the user clicks the help button
42
43
  help: zod.z.string().optional(),
44
+ // agent-specific: model identifier (e.g. "claude-opus-4-5", "gpt-4o")
45
+ model: zod.z.string().optional(),
43
46
  // MCP servers required by this agent/skill
44
47
  mcps: zod.z.array(
45
48
  zod.z.union([
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.cjs.js","sources":["../src/schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AiToolEnum = z.enum([\n 'all',\n 'github-copilot',\n 'claude-code',\n 'google-gemini',\n 'cursor',\n]);\n\nexport const AssetTypeEnum = z.enum([\n 'instruction',\n 'agent',\n 'skill',\n 'workflow',\n 'bundle',\n]);\n\n/**\n * Schema for the YAML metadata file (.yaml) that acts as an envelope.\n * The actual asset content lives in the referenced .md file.\n */\nexport const AiAssetFrontmatterSchema = z\n .object({\n /** Path to the .md content file, relative to the .yaml file directory.\n * If omitted, the parser falls back to <same-name>.md by convention. */\n content: z.string().optional(),\n name: z.string().min(1).max(200),\n /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */\n label: z.string().min(1).max(200).optional(),\n description: z.string().min(1).max(500),\n type: AssetTypeEnum,\n tools: z.array(AiToolEnum).min(1),\n tags: z.array(z.string()).optional().default([]),\n author: z.string().optional().default('Unknown'),\n icon: z.string().optional(),\n version: z.string().optional().default('1.0.0'),\n updatedAt: z.string().optional(),\n // install path overrides\n installPath: z.string().optional(),\n installPaths: z.record(z.string()).optional(),\n // skill-specific\n resources: z.array(z.string()).optional(),\n // bundle-specific\n items: z.array(z.object({ ref: z.string() })).optional(),\n // usage guide — markdown shown when the user clicks the help button\n help: z.string().optional(),\n // MCP servers required by this agent/skill\n mcps: z.array(\n z.union([\n z.string(),\n z.object({ id: z.string(), name: z.string().optional(), icon: z.string().optional() }),\n ]),\n ).optional(),\n })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n\n/**\n * Schema for the mcp-catalog.yaml file placed at the root of a provider repository.\n * Defines external MCP servers that users can install with one click.\n */\nexport const McpCatalogFileSchema = z.object({\n servers: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n icon: z.string().optional(),\n type: z.enum(['http', 'stdio']),\n url: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n }),\n ),\n});\n\nexport type McpCatalogFile = z.infer<typeof McpCatalogFileSchema>;\n"],"names":["z"],"mappings":"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"}
1
+ {"version":3,"file":"schemas.cjs.js","sources":["../src/schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AiToolEnum = z.enum([\n 'all',\n 'github-copilot',\n 'claude-code',\n 'google-gemini',\n 'cursor',\n]);\n\nexport const AssetTypeEnum = z.enum([\n 'instruction',\n 'agent',\n 'skill',\n 'workflow',\n 'prompt',\n 'bundle',\n]);\n\n/**\n * Schema for the YAML metadata file (.yaml) that acts as an envelope.\n * The actual asset content lives in the referenced .md file.\n */\nexport const AiAssetFrontmatterSchema = z\n .object({\n /** Path to the .md content file, relative to the .yaml file directory.\n * If omitted, the parser falls back to <same-name>.md by convention. */\n content: z.string().optional(),\n name: z.string().min(1).max(200),\n /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */\n label: z.string().min(1).max(200).optional(),\n description: z.string().min(1).max(500),\n type: AssetTypeEnum,\n tools: z.array(AiToolEnum).min(1),\n tags: z.array(z.string()).optional().default([]),\n author: z.string().optional().default('Unknown'),\n icon: z.string().optional(),\n version: z.string().optional().default('1.0.0'),\n updatedAt: z.string().optional(),\n // install path overrides\n installPath: z.string().optional(),\n installPaths: z.record(z.string()).optional(),\n // skill-specific\n resources: z.array(z.string()).optional(),\n // bundle-specific\n items: z.array(z.object({ ref: z.string() })).optional(),\n // usage guide — markdown shown when the user clicks the help button\n help: z.string().optional(),\n // agent-specific: model identifier (e.g. \"claude-opus-4-5\", \"gpt-4o\")\n model: z.string().optional(),\n // MCP servers required by this agent/skill\n mcps: z.array(\n z.union([\n z.string(),\n z.object({ id: z.string(), name: z.string().optional(), icon: z.string().optional() }),\n ]),\n ).optional(),\n })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n\n/**\n * Schema for the mcp-catalog.yaml file placed at the root of a provider repository.\n * Defines external MCP servers that users can install with one click.\n */\nexport const McpCatalogFileSchema = z.object({\n servers: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n icon: z.string().optional(),\n type: z.enum(['http', 'stdio']),\n url: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n }),\n ),\n});\n\nexport type McpCatalogFile = z.infer<typeof McpCatalogFileSchema>;"],"names":["z"],"mappings":"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"}
@@ -12,6 +12,7 @@ const AssetTypeEnum = z.enum([
12
12
  "agent",
13
13
  "skill",
14
14
  "workflow",
15
+ "prompt",
15
16
  "bundle"
16
17
  ]);
17
18
  const AiAssetFrontmatterSchema = z.object({
@@ -38,6 +39,8 @@ const AiAssetFrontmatterSchema = z.object({
38
39
  items: z.array(z.object({ ref: z.string() })).optional(),
39
40
  // usage guide — markdown shown when the user clicks the help button
40
41
  help: z.string().optional(),
42
+ // agent-specific: model identifier (e.g. "claude-opus-4-5", "gpt-4o")
43
+ model: z.string().optional(),
41
44
  // MCP servers required by this agent/skill
42
45
  mcps: z.array(
43
46
  z.union([
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.esm.js","sources":["../src/schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AiToolEnum = z.enum([\n 'all',\n 'github-copilot',\n 'claude-code',\n 'google-gemini',\n 'cursor',\n]);\n\nexport const AssetTypeEnum = z.enum([\n 'instruction',\n 'agent',\n 'skill',\n 'workflow',\n 'bundle',\n]);\n\n/**\n * Schema for the YAML metadata file (.yaml) that acts as an envelope.\n * The actual asset content lives in the referenced .md file.\n */\nexport const AiAssetFrontmatterSchema = z\n .object({\n /** Path to the .md content file, relative to the .yaml file directory.\n * If omitted, the parser falls back to <same-name>.md by convention. */\n content: z.string().optional(),\n name: z.string().min(1).max(200),\n /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */\n label: z.string().min(1).max(200).optional(),\n description: z.string().min(1).max(500),\n type: AssetTypeEnum,\n tools: z.array(AiToolEnum).min(1),\n tags: z.array(z.string()).optional().default([]),\n author: z.string().optional().default('Unknown'),\n icon: z.string().optional(),\n version: z.string().optional().default('1.0.0'),\n updatedAt: z.string().optional(),\n // install path overrides\n installPath: z.string().optional(),\n installPaths: z.record(z.string()).optional(),\n // skill-specific\n resources: z.array(z.string()).optional(),\n // bundle-specific\n items: z.array(z.object({ ref: z.string() })).optional(),\n // usage guide — markdown shown when the user clicks the help button\n help: z.string().optional(),\n // MCP servers required by this agent/skill\n mcps: z.array(\n z.union([\n z.string(),\n z.object({ id: z.string(), name: z.string().optional(), icon: z.string().optional() }),\n ]),\n ).optional(),\n })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n\n/**\n * Schema for the mcp-catalog.yaml file placed at the root of a provider repository.\n * Defines external MCP servers that users can install with one click.\n */\nexport const McpCatalogFileSchema = z.object({\n servers: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n icon: z.string().optional(),\n type: z.enum(['http', 'stdio']),\n url: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n }),\n ),\n});\n\nexport type McpCatalogFile = z.infer<typeof McpCatalogFileSchema>;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.esm.js","sources":["../src/schemas.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AiToolEnum = z.enum([\n 'all',\n 'github-copilot',\n 'claude-code',\n 'google-gemini',\n 'cursor',\n]);\n\nexport const AssetTypeEnum = z.enum([\n 'instruction',\n 'agent',\n 'skill',\n 'workflow',\n 'prompt',\n 'bundle',\n]);\n\n/**\n * Schema for the YAML metadata file (.yaml) that acts as an envelope.\n * The actual asset content lives in the referenced .md file.\n */\nexport const AiAssetFrontmatterSchema = z\n .object({\n /** Path to the .md content file, relative to the .yaml file directory.\n * If omitted, the parser falls back to <same-name>.md by convention. */\n content: z.string().optional(),\n name: z.string().min(1).max(200),\n /** Human-readable display label shown in the UI. Falls back to `name` when omitted. */\n label: z.string().min(1).max(200).optional(),\n description: z.string().min(1).max(500),\n type: AssetTypeEnum,\n tools: z.array(AiToolEnum).min(1),\n tags: z.array(z.string()).optional().default([]),\n author: z.string().optional().default('Unknown'),\n icon: z.string().optional(),\n version: z.string().optional().default('1.0.0'),\n updatedAt: z.string().optional(),\n // install path overrides\n installPath: z.string().optional(),\n installPaths: z.record(z.string()).optional(),\n // skill-specific\n resources: z.array(z.string()).optional(),\n // bundle-specific\n items: z.array(z.object({ ref: z.string() })).optional(),\n // usage guide — markdown shown when the user clicks the help button\n help: z.string().optional(),\n // agent-specific: model identifier (e.g. \"claude-opus-4-5\", \"gpt-4o\")\n model: z.string().optional(),\n // MCP servers required by this agent/skill\n mcps: z.array(\n z.union([\n z.string(),\n z.object({ id: z.string(), name: z.string().optional(), icon: z.string().optional() }),\n ]),\n ).optional(),\n })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n\n/**\n * Schema for the mcp-catalog.yaml file placed at the root of a provider repository.\n * Defines external MCP servers that users can install with one click.\n */\nexport const McpCatalogFileSchema = z.object({\n servers: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n icon: z.string().optional(),\n type: z.enum(['http', 'stdio']),\n url: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string()).optional(),\n }),\n ),\n});\n\nexport type McpCatalogFile = z.infer<typeof McpCatalogFileSchema>;"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@julianpedro/plugin-dev-ai-hub-common",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Common types and schemas for Dev AI Hub",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -49,6 +49,9 @@
49
49
  "dependencies": {
50
50
  "zod": "^3.22.0"
51
51
  },
52
+ "peerDependencies": {
53
+ "@backstage/plugin-permission-common": ">=0.9.0"
54
+ },
52
55
  "devDependencies": {
53
56
  "@backstage/cli": "*",
54
57
  "@types/jest": "^29.0.0",