@julianpedro/plugin-dev-ai-hub-common 0.2.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 +4 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +183 -7
- package/dist/index.esm.js +2 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/installPaths.cjs.js +17 -0
- package/dist/installPaths.cjs.js.map +1 -1
- package/dist/installPaths.esm.js +17 -0
- package/dist/installPaths.esm.js.map +1 -1
- package/dist/permissions.cjs.js +13 -0
- package/dist/permissions.cjs.js.map +1 -0
- package/dist/permissions.esm.js +10 -0
- package/dist/permissions.esm.js.map +1 -0
- package/dist/schemas.cjs.js +33 -2
- package/dist/schemas.cjs.js.map +1 -1
- package/dist/schemas.esm.js +33 -3
- package/dist/schemas.esm.js.map +1 -1
- package/package.json +4 -1
package/dist/index.cjs.js
CHANGED
|
@@ -2,12 +2,16 @@
|
|
|
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
|
|
|
8
9
|
exports.AiAssetFrontmatterSchema = schemas.AiAssetFrontmatterSchema;
|
|
9
10
|
exports.AiToolEnum = schemas.AiToolEnum;
|
|
10
11
|
exports.AssetTypeEnum = schemas.AssetTypeEnum;
|
|
12
|
+
exports.McpCatalogFileSchema = schemas.McpCatalogFileSchema;
|
|
11
13
|
exports.getInstallPath = installPaths.getInstallPath;
|
|
12
14
|
exports.getInstallPathsForAsset = installPaths.getInstallPathsForAsset;
|
|
15
|
+
exports.devAiHubPermissions = permissions.devAiHubPermissions;
|
|
16
|
+
exports.devAiHubSyncPermission = permissions.devAiHubSyncPermission;
|
|
13
17
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -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,7 +1,36 @@
|
|
|
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';
|
|
4
|
+
type AssetType = 'instruction' | 'agent' | 'skill' | 'workflow' | 'prompt' | 'bundle';
|
|
4
5
|
type AiTool = 'all' | 'github-copilot' | 'claude-code' | 'google-gemini' | 'cursor';
|
|
6
|
+
interface BundleItem {
|
|
7
|
+
ref: string;
|
|
8
|
+
assetId?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
type?: Exclude<AssetType, 'bundle'>;
|
|
12
|
+
description?: string;
|
|
13
|
+
tools?: AiTool[];
|
|
14
|
+
}
|
|
15
|
+
interface McpCatalogEntry {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
icon?: string;
|
|
20
|
+
type: 'http' | 'stdio';
|
|
21
|
+
url?: string;
|
|
22
|
+
command?: string;
|
|
23
|
+
args?: string[];
|
|
24
|
+
env?: Record<string, string>;
|
|
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
|
+
}
|
|
5
34
|
/** Lightweight summary returned by list endpoints — no markdown content. */
|
|
6
35
|
interface AiAssetSummary {
|
|
7
36
|
id: string;
|
|
@@ -16,7 +45,15 @@ interface AiAssetSummary {
|
|
|
16
45
|
author: string;
|
|
17
46
|
icon?: string;
|
|
18
47
|
version: string;
|
|
48
|
+
/** Model identifier declared in the YAML envelope (e.g. "claude-opus-4-5"). Only set for agents. */
|
|
49
|
+
model?: string;
|
|
19
50
|
installCount: number;
|
|
51
|
+
/** Number of items in a bundle (only set for type === 'bundle'). */
|
|
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[];
|
|
20
57
|
syncedAt: string;
|
|
21
58
|
createdAt: string;
|
|
22
59
|
updatedAt: string;
|
|
@@ -34,6 +71,8 @@ interface AiAsset {
|
|
|
34
71
|
author: string;
|
|
35
72
|
icon?: string;
|
|
36
73
|
version: string;
|
|
74
|
+
/** Model identifier declared in the YAML envelope (e.g. "claude-opus-4-5"). Only set for agents. */
|
|
75
|
+
model?: string;
|
|
37
76
|
/** Override the install path for all tools */
|
|
38
77
|
installPath?: string;
|
|
39
78
|
/** Override the install path per tool */
|
|
@@ -44,11 +83,17 @@ interface AiAsset {
|
|
|
44
83
|
yamlRaw: string;
|
|
45
84
|
/** Extra metadata stored from the envelope (e.g. resources for skills) */
|
|
46
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[];
|
|
47
90
|
/**
|
|
48
91
|
* Content of bundled resource files for skills (path → file content).
|
|
49
92
|
* Only populated for assets of type `skill` that declare `resources` in the envelope.
|
|
50
93
|
*/
|
|
51
94
|
resourcesContent?: Record<string, string>;
|
|
95
|
+
/** Resolved bundle items — only populated for type === 'bundle'. */
|
|
96
|
+
items?: BundleItem[];
|
|
52
97
|
/** Path of the .yaml file in the repository */
|
|
53
98
|
yamlPath: string;
|
|
54
99
|
/** Path of the .md file in the repository */
|
|
@@ -96,7 +141,7 @@ interface AssetListFilter {
|
|
|
96
141
|
}
|
|
97
142
|
|
|
98
143
|
declare const AiToolEnum: z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>;
|
|
99
|
-
declare const AssetTypeEnum: z.ZodEnum<["instruction", "agent", "skill", "workflow"]>;
|
|
144
|
+
declare const AssetTypeEnum: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
|
|
100
145
|
/**
|
|
101
146
|
* Schema for the YAML metadata file (.yaml) that acts as an envelope.
|
|
102
147
|
* The actual asset content lives in the referenced .md file.
|
|
@@ -109,7 +154,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
109
154
|
/** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
|
|
110
155
|
label: z.ZodOptional<z.ZodString>;
|
|
111
156
|
description: z.ZodString;
|
|
112
|
-
type: z.ZodEnum<["instruction", "agent", "skill", "workflow"]>;
|
|
157
|
+
type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
|
|
113
158
|
tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
|
|
114
159
|
tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
115
160
|
author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -119,6 +164,28 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
119
164
|
installPath: z.ZodOptional<z.ZodString>;
|
|
120
165
|
installPaths: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
121
166
|
resources: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
167
|
+
items: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
168
|
+
ref: z.ZodString;
|
|
169
|
+
}, "strip", z.ZodTypeAny, {
|
|
170
|
+
ref: string;
|
|
171
|
+
}, {
|
|
172
|
+
ref: string;
|
|
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">>;
|
|
122
189
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
123
190
|
/** Path to the .md content file, relative to the .yaml file directory.
|
|
124
191
|
* If omitted, the parser falls back to <same-name>.md by convention. */
|
|
@@ -127,7 +194,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
127
194
|
/** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
|
|
128
195
|
label: z.ZodOptional<z.ZodString>;
|
|
129
196
|
description: z.ZodString;
|
|
130
|
-
type: z.ZodEnum<["instruction", "agent", "skill", "workflow"]>;
|
|
197
|
+
type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
|
|
131
198
|
tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
|
|
132
199
|
tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
133
200
|
author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -137,6 +204,28 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
137
204
|
installPath: z.ZodOptional<z.ZodString>;
|
|
138
205
|
installPaths: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
139
206
|
resources: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
207
|
+
items: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
208
|
+
ref: z.ZodString;
|
|
209
|
+
}, "strip", z.ZodTypeAny, {
|
|
210
|
+
ref: string;
|
|
211
|
+
}, {
|
|
212
|
+
ref: string;
|
|
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">>;
|
|
140
229
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
141
230
|
/** Path to the .md content file, relative to the .yaml file directory.
|
|
142
231
|
* If omitted, the parser falls back to <same-name>.md by convention. */
|
|
@@ -145,7 +234,7 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
145
234
|
/** Human-readable display label shown in the UI. Falls back to `name` when omitted. */
|
|
146
235
|
label: z.ZodOptional<z.ZodString>;
|
|
147
236
|
description: z.ZodString;
|
|
148
|
-
type: z.ZodEnum<["instruction", "agent", "skill", "workflow"]>;
|
|
237
|
+
type: z.ZodEnum<["instruction", "agent", "skill", "workflow", "prompt", "bundle"]>;
|
|
149
238
|
tools: z.ZodArray<z.ZodEnum<["all", "github-copilot", "claude-code", "google-gemini", "cursor"]>, "many">;
|
|
150
239
|
tags: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
151
240
|
author: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -155,8 +244,92 @@ declare const AiAssetFrontmatterSchema: z.ZodObject<{
|
|
|
155
244
|
installPath: z.ZodOptional<z.ZodString>;
|
|
156
245
|
installPaths: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
157
246
|
resources: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
247
|
+
items: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
248
|
+
ref: z.ZodString;
|
|
249
|
+
}, "strip", z.ZodTypeAny, {
|
|
250
|
+
ref: string;
|
|
251
|
+
}, {
|
|
252
|
+
ref: string;
|
|
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">>;
|
|
158
269
|
}, z.ZodTypeAny, "passthrough">>;
|
|
159
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>;
|
|
160
333
|
|
|
161
334
|
interface InstallPathOverrides {
|
|
162
335
|
/** Single path override — applies to all tools when installPaths has no entry for the tool */
|
|
@@ -175,5 +348,8 @@ declare function getInstallPath(type: AssetType, tool: AiTool | string, name: st
|
|
|
175
348
|
*/
|
|
176
349
|
declare function getInstallPathsForAsset(type: AssetType, tools: (AiTool | string)[], name: string, overrides?: InstallPathOverrides): Record<string, string>;
|
|
177
350
|
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum } from './schemas.esm.js';
|
|
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
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
package/dist/installPaths.cjs.js
CHANGED
|
@@ -4,6 +4,14 @@ function toSlug(name) {
|
|
|
4
4
|
return name.toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9-_]/g, "");
|
|
5
5
|
}
|
|
6
6
|
const CONVENTIONS = {
|
|
7
|
+
bundle: {
|
|
8
|
+
"claude-code": () => "",
|
|
9
|
+
"github-copilot": () => "",
|
|
10
|
+
"google-gemini": () => "",
|
|
11
|
+
"cursor": () => "",
|
|
12
|
+
"all": () => "",
|
|
13
|
+
"default": () => ""
|
|
14
|
+
},
|
|
7
15
|
instruction: {
|
|
8
16
|
"claude-code": (name) => `.claude/rules/${name}.md`,
|
|
9
17
|
"github-copilot": (name) => `.github/instructions/${name}.instructions.md`,
|
|
@@ -35,6 +43,14 @@ const CONVENTIONS = {
|
|
|
35
43
|
"cursor": (name) => `.cursor/rules/${name}.mdc`,
|
|
36
44
|
"all": (name) => `.ai/workflows/${name}.md`,
|
|
37
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`
|
|
38
54
|
}
|
|
39
55
|
};
|
|
40
56
|
function getInstallPath(type, tool, name, overrides) {
|
|
@@ -46,6 +62,7 @@ function getInstallPath(type, tool, name, overrides) {
|
|
|
46
62
|
return fn(slug);
|
|
47
63
|
}
|
|
48
64
|
function getInstallPathsForAsset(type, tools, name, overrides) {
|
|
65
|
+
if (type === "bundle") return {};
|
|
49
66
|
const ALL_TOOLS = ["claude-code", "github-copilot", "google-gemini", "cursor"];
|
|
50
67
|
const resolvedTools = tools.includes("all") ? ALL_TOOLS : tools;
|
|
51
68
|
return Object.fromEntries(
|
|
@@ -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 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 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}
|
|
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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"}
|
package/dist/installPaths.esm.js
CHANGED
|
@@ -2,6 +2,14 @@ function toSlug(name) {
|
|
|
2
2
|
return name.toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9-_]/g, "");
|
|
3
3
|
}
|
|
4
4
|
const CONVENTIONS = {
|
|
5
|
+
bundle: {
|
|
6
|
+
"claude-code": () => "",
|
|
7
|
+
"github-copilot": () => "",
|
|
8
|
+
"google-gemini": () => "",
|
|
9
|
+
"cursor": () => "",
|
|
10
|
+
"all": () => "",
|
|
11
|
+
"default": () => ""
|
|
12
|
+
},
|
|
5
13
|
instruction: {
|
|
6
14
|
"claude-code": (name) => `.claude/rules/${name}.md`,
|
|
7
15
|
"github-copilot": (name) => `.github/instructions/${name}.instructions.md`,
|
|
@@ -33,6 +41,14 @@ const CONVENTIONS = {
|
|
|
33
41
|
"cursor": (name) => `.cursor/rules/${name}.mdc`,
|
|
34
42
|
"all": (name) => `.ai/workflows/${name}.md`,
|
|
35
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`
|
|
36
52
|
}
|
|
37
53
|
};
|
|
38
54
|
function getInstallPath(type, tool, name, overrides) {
|
|
@@ -44,6 +60,7 @@ function getInstallPath(type, tool, name, overrides) {
|
|
|
44
60
|
return fn(slug);
|
|
45
61
|
}
|
|
46
62
|
function getInstallPathsForAsset(type, tools, name, overrides) {
|
|
63
|
+
if (type === "bundle") return {};
|
|
47
64
|
const ALL_TOOLS = ["claude-code", "github-copilot", "google-gemini", "cursor"];
|
|
48
65
|
const resolvedTools = tools.includes("all") ? ALL_TOOLS : tools;
|
|
49
66
|
return Object.fromEntries(
|
|
@@ -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 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 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}
|
|
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;;;;"}
|
package/dist/schemas.cjs.js
CHANGED
|
@@ -13,7 +13,9 @@ const AssetTypeEnum = zod.z.enum([
|
|
|
13
13
|
"instruction",
|
|
14
14
|
"agent",
|
|
15
15
|
"skill",
|
|
16
|
-
"workflow"
|
|
16
|
+
"workflow",
|
|
17
|
+
"prompt",
|
|
18
|
+
"bundle"
|
|
17
19
|
]);
|
|
18
20
|
const AiAssetFrontmatterSchema = zod.z.object({
|
|
19
21
|
/** Path to the .md content file, relative to the .yaml file directory.
|
|
@@ -34,10 +36,39 @@ const AiAssetFrontmatterSchema = zod.z.object({
|
|
|
34
36
|
installPath: zod.z.string().optional(),
|
|
35
37
|
installPaths: zod.z.record(zod.z.string()).optional(),
|
|
36
38
|
// skill-specific
|
|
37
|
-
resources: zod.z.array(zod.z.string()).optional()
|
|
39
|
+
resources: zod.z.array(zod.z.string()).optional(),
|
|
40
|
+
// bundle-specific
|
|
41
|
+
items: zod.z.array(zod.z.object({ ref: zod.z.string() })).optional(),
|
|
42
|
+
// usage guide — markdown shown when the user clicks the help button
|
|
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(),
|
|
46
|
+
// MCP servers required by this agent/skill
|
|
47
|
+
mcps: zod.z.array(
|
|
48
|
+
zod.z.union([
|
|
49
|
+
zod.z.string(),
|
|
50
|
+
zod.z.object({ id: zod.z.string(), name: zod.z.string().optional(), icon: zod.z.string().optional() })
|
|
51
|
+
])
|
|
52
|
+
).optional()
|
|
38
53
|
}).passthrough();
|
|
54
|
+
const McpCatalogFileSchema = zod.z.object({
|
|
55
|
+
servers: zod.z.array(
|
|
56
|
+
zod.z.object({
|
|
57
|
+
id: zod.z.string().min(1),
|
|
58
|
+
name: zod.z.string().min(1),
|
|
59
|
+
description: zod.z.string().optional(),
|
|
60
|
+
icon: zod.z.string().optional(),
|
|
61
|
+
type: zod.z.enum(["http", "stdio"]),
|
|
62
|
+
url: zod.z.string().optional(),
|
|
63
|
+
command: zod.z.string().optional(),
|
|
64
|
+
args: zod.z.array(zod.z.string()).optional(),
|
|
65
|
+
env: zod.z.record(zod.z.string()).optional()
|
|
66
|
+
})
|
|
67
|
+
)
|
|
68
|
+
});
|
|
39
69
|
|
|
40
70
|
exports.AiAssetFrontmatterSchema = AiAssetFrontmatterSchema;
|
|
41
71
|
exports.AiToolEnum = AiToolEnum;
|
|
42
72
|
exports.AssetTypeEnum = AssetTypeEnum;
|
|
73
|
+
exports.McpCatalogFileSchema = McpCatalogFileSchema;
|
|
43
74
|
//# sourceMappingURL=schemas.cjs.js.map
|
package/dist/schemas.cjs.js.map
CHANGED
|
@@ -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]);\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 })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n"],"names":["z"],"mappings":";;;;AAEO,MAAM,UAAA,GAAaA,MAAE,IAAA,CAAK;AAAA,EAC/B,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,aAAA,GAAgBA,MAAE,IAAA,CAAK;AAAA,EAClC,aAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,wBAAA,GAA2BA,MACrC,MAAA,CAAO;AAAA;AAAA;AAAA,EAGN,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA;AAAA,EAE/B,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3C,WAAA,EAAaA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACtC,IAAA,EAAM,aAAA;AAAA,EACN,OAAOA,KAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChC,IAAA,EAAMA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC/C,QAAQA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,SAAS,CAAA;AAAA,EAC/C,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,SAASA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,OAAO,CAAA;AAAA,EAC9C,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE/B,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAcA,KAAA,CAAE,MAAA,CAAOA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAE5C,WAAWA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;
|
|
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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"}
|
package/dist/schemas.esm.js
CHANGED
|
@@ -11,7 +11,9 @@ const AssetTypeEnum = z.enum([
|
|
|
11
11
|
"instruction",
|
|
12
12
|
"agent",
|
|
13
13
|
"skill",
|
|
14
|
-
"workflow"
|
|
14
|
+
"workflow",
|
|
15
|
+
"prompt",
|
|
16
|
+
"bundle"
|
|
15
17
|
]);
|
|
16
18
|
const AiAssetFrontmatterSchema = z.object({
|
|
17
19
|
/** Path to the .md content file, relative to the .yaml file directory.
|
|
@@ -32,8 +34,36 @@ const AiAssetFrontmatterSchema = z.object({
|
|
|
32
34
|
installPath: z.string().optional(),
|
|
33
35
|
installPaths: z.record(z.string()).optional(),
|
|
34
36
|
// skill-specific
|
|
35
|
-
resources: z.array(z.string()).optional()
|
|
37
|
+
resources: z.array(z.string()).optional(),
|
|
38
|
+
// bundle-specific
|
|
39
|
+
items: z.array(z.object({ ref: z.string() })).optional(),
|
|
40
|
+
// usage guide — markdown shown when the user clicks the help button
|
|
41
|
+
help: z.string().optional(),
|
|
42
|
+
// agent-specific: model identifier (e.g. "claude-opus-4-5", "gpt-4o")
|
|
43
|
+
model: z.string().optional(),
|
|
44
|
+
// MCP servers required by this agent/skill
|
|
45
|
+
mcps: z.array(
|
|
46
|
+
z.union([
|
|
47
|
+
z.string(),
|
|
48
|
+
z.object({ id: z.string(), name: z.string().optional(), icon: z.string().optional() })
|
|
49
|
+
])
|
|
50
|
+
).optional()
|
|
36
51
|
}).passthrough();
|
|
52
|
+
const McpCatalogFileSchema = z.object({
|
|
53
|
+
servers: z.array(
|
|
54
|
+
z.object({
|
|
55
|
+
id: z.string().min(1),
|
|
56
|
+
name: z.string().min(1),
|
|
57
|
+
description: z.string().optional(),
|
|
58
|
+
icon: z.string().optional(),
|
|
59
|
+
type: z.enum(["http", "stdio"]),
|
|
60
|
+
url: z.string().optional(),
|
|
61
|
+
command: z.string().optional(),
|
|
62
|
+
args: z.array(z.string()).optional(),
|
|
63
|
+
env: z.record(z.string()).optional()
|
|
64
|
+
})
|
|
65
|
+
)
|
|
66
|
+
});
|
|
37
67
|
|
|
38
|
-
export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum };
|
|
68
|
+
export { AiAssetFrontmatterSchema, AiToolEnum, AssetTypeEnum, McpCatalogFileSchema };
|
|
39
69
|
//# sourceMappingURL=schemas.esm.js.map
|
package/dist/schemas.esm.js.map
CHANGED
|
@@ -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]);\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 })\n .passthrough();\n\nexport type AiAssetFrontmatter = z.infer<typeof AiAssetFrontmatterSchema>;\n"],"names":[],"mappings":";;AAEO,MAAM,UAAA,GAAa,EAAE,IAAA,CAAK;AAAA,EAC/B,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,aAAA,GAAgB,EAAE,IAAA,CAAK;AAAA,EAClC,aAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,wBAAA,GAA2B,EACrC,MAAA,CAAO;AAAA;AAAA;AAAA,EAGN,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA;AAAA,EAE/B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3C,WAAA,EAAa,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACtC,IAAA,EAAM,aAAA;AAAA,EACN,OAAO,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChC,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC/C,QAAQ,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,SAAS,CAAA;AAAA,EAC/C,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,OAAO,CAAA;AAAA,EAC9C,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE/B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAc,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAE5C,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;
|
|
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":";;AAEO,MAAM,UAAA,GAAa,EAAE,IAAA,CAAK;AAAA,EAC/B,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,aAAA,GAAgB,EAAE,IAAA,CAAK;AAAA,EAClC,aAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC;AAMM,MAAM,wBAAA,GAA2B,EACrC,MAAA,CAAO;AAAA;AAAA;AAAA,EAGN,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,IAAA,EAAM,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA;AAAA,EAE/B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EAC3C,WAAA,EAAa,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACtC,IAAA,EAAM,aAAA;AAAA,EACN,OAAO,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChC,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC/C,QAAQ,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,SAAS,CAAA;AAAA,EAC/C,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,QAAQ,OAAO,CAAA;AAAA,EAC9C,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE/B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAc,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAE5C,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAExC,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,EAAE,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,EAAG,CAAC,EAAE,QAAA,EAAS;AAAA;AAAA,EAEvD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE3B,MAAM,CAAA,CAAE,KAAA;AAAA,IACN,EAAE,KAAA,CAAM;AAAA,MACN,EAAE,MAAA,EAAO;AAAA,MACT,EAAE,MAAA,CAAO,EAAE,IAAI,CAAA,CAAE,MAAA,IAAU,IAAA,EAAM,CAAA,CAAE,QAAO,CAAE,QAAA,IAAY,IAAA,EAAM,CAAA,CAAE,QAAO,CAAE,QAAA,IAAY;AAAA,KACtF;AAAA,IACD,QAAA;AACJ,CAAC,EACA,WAAA;AAQI,MAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,SAAS,CAAA,CAAE,KAAA;AAAA,IACT,EAAE,MAAA,CAAO;AAAA,MACP,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,MACpB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,MACtB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACjC,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC1B,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,MAC9B,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACzB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC7B,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MACnC,KAAK,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,KACpC;AAAA;AAEL,CAAC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@julianpedro/plugin-dev-ai-hub-common",
|
|
3
|
-
"version": "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",
|