@agents-inc/cli 0.71.0 → 0.73.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/CHANGELOG.md +25 -0
- package/README.md +172 -23
- package/dist/{chunk-V5L532ZH.js → chunk-3K6FSET7.js} +6 -6
- package/dist/{chunk-HWVRHPXR.js → chunk-3REVX6S5.js} +11 -11
- package/dist/chunk-3REVX6S5.js.map +1 -0
- package/dist/{chunk-CADG5WWP.js → chunk-3VNQPCOE.js} +2511 -2688
- package/dist/chunk-3VNQPCOE.js.map +1 -0
- package/dist/{chunk-KANNRFY7.js → chunk-4KLUOFP6.js} +6 -7
- package/dist/chunk-4KLUOFP6.js.map +1 -0
- package/dist/{chunk-FCF4WQEI.js → chunk-6JRQPSKV.js} +2 -2
- package/dist/chunk-6JRQPSKV.js.map +1 -0
- package/dist/{chunk-ZYUASJUN.js → chunk-BH4LN7XV.js} +8 -6
- package/dist/chunk-BH4LN7XV.js.map +1 -0
- package/dist/{chunk-6YMW4HMX.js → chunk-DNPJ5GUK.js} +6 -6
- package/dist/chunk-DNPJ5GUK.js.map +1 -0
- package/dist/chunk-E74Q7GUE.js +5132 -0
- package/dist/chunk-E74Q7GUE.js.map +1 -0
- package/dist/{chunk-XYRVAEI6.js → chunk-EMWP363L.js} +8 -10
- package/dist/chunk-EMWP363L.js.map +1 -0
- package/dist/chunk-EMX7PA2I.js +39 -0
- package/dist/chunk-EMX7PA2I.js.map +1 -0
- package/dist/{chunk-KSAGOKWT.js → chunk-G23HPF6K.js} +3 -3
- package/dist/chunk-GDUOOT3J.js +689 -0
- package/dist/chunk-GDUOOT3J.js.map +1 -0
- package/dist/{chunk-X4RIMJNY.js → chunk-GSFZDUV2.js} +4 -4
- package/dist/chunk-GSFZDUV2.js.map +1 -0
- package/dist/{chunk-XB3TYSPL.js → chunk-H4ETXZVL.js} +6 -6
- package/dist/{chunk-XMZNHLV3.js → chunk-JHMECCBN.js} +4 -5
- package/dist/chunk-JHMECCBN.js.map +1 -0
- package/dist/{chunk-UDAHHJIM.js → chunk-K7WYMQQB.js} +18 -20
- package/dist/chunk-K7WYMQQB.js.map +1 -0
- package/dist/{chunk-AX6MMYAZ.js → chunk-KE2EAVFQ.js} +4 -4
- package/dist/{chunk-CKPJTMNC.js → chunk-KSMT5FVM.js} +4 -4
- package/dist/chunk-KSMT5FVM.js.map +1 -0
- package/dist/{chunk-KWB3B2HS.js → chunk-NKKYTCBH.js} +109 -86
- package/dist/chunk-NKKYTCBH.js.map +1 -0
- package/dist/{chunk-52THXN5G.js → chunk-NUJHWYCR.js} +2 -2
- package/dist/{chunk-QOJAZI72.js → chunk-OLWGGD4G.js} +20 -15
- package/dist/chunk-OLWGGD4G.js.map +1 -0
- package/dist/{chunk-UQM5YPPJ.js → chunk-PNZCVOCE.js} +5 -5
- package/dist/chunk-PNZCVOCE.js.map +1 -0
- package/dist/chunk-SRIH4U5Y.js +159 -0
- package/dist/chunk-SRIH4U5Y.js.map +1 -0
- package/dist/{chunk-6BXKF5GP.js → chunk-T7QY777F.js} +2 -2
- package/dist/{chunk-DHBRWGRZ.js → chunk-TNSVPZHP.js} +20 -2
- package/dist/chunk-TNSVPZHP.js.map +1 -0
- package/dist/{chunk-J2D6OBIX.js → chunk-V5HR77EY.js} +117 -13
- package/dist/chunk-V5HR77EY.js.map +1 -0
- package/dist/{chunk-R3AR4VLZ.js → chunk-WJL4KU5V.js} +70 -240
- package/dist/chunk-WJL4KU5V.js.map +1 -0
- package/dist/{chunk-VUUGWE6G.js → chunk-Y47CLMWE.js} +2 -2
- package/dist/{chunk-2VT2DMD7.js → chunk-Y4VUU5BT.js} +12 -14
- package/dist/chunk-Y4VUU5BT.js.map +1 -0
- package/dist/{chunk-L6MTIQ2U.js → chunk-ZBLSWJFM.js} +2 -2
- package/dist/chunk-ZBLSWJFM.js.map +1 -0
- package/dist/commands/build/marketplace.js +4 -3
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +9 -8
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +9 -8
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +14 -10
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/index.js +9 -8
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +8 -7
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/show.js +9 -8
- package/dist/commands/diff.js +8 -7
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +13 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +33 -35
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +15 -13
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +8 -7
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +12 -11
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +28 -27
- package/dist/commands/list.js +8 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +9 -8
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +12 -15
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +9 -8
- package/dist/commands/outdated.js +8 -7
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +9 -10
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +8 -7
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +10 -10
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +16 -18
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +17 -66
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +10 -9
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +4 -4
- package/dist/components/wizard/source-grid.test.js +22 -20
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +9 -8
- package/dist/components/wizard/step-agents.js +10 -9
- package/dist/components/wizard/step-agents.test.js +15 -14
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +11 -10
- package/dist/components/wizard/step-build.test.js +17 -16
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +5 -4
- package/dist/components/wizard/step-confirm.test.js +11 -10
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +9 -8
- package/dist/components/wizard/step-settings.test.js +12 -11
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +14 -13
- package/dist/components/wizard/step-sources.test.js +19 -18
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +12 -11
- package/dist/components/wizard/step-stack.test.js +16 -15
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/wizard-layout.js +9 -8
- package/dist/components/wizard/wizard.js +26 -25
- package/dist/config-exports.js +1 -1
- package/dist/hooks/init.js +28 -27
- package/dist/hooks/init.js.map +1 -1
- package/dist/{loader-CMSC3RAO.js → loader-XQ3WBTVP.js} +4 -3
- package/dist/source-loader-F4PGP6LH.js +18 -0
- package/dist/source-manager-QCIO4XZK.js +20 -0
- package/dist/stores/wizard-store.js +8 -7
- package/dist/stores/wizard-store.test.js +34 -33
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +2 -1
- package/src/schemas/custom-metadata.schema.json +81 -0
- package/src/schemas/metadata.schema.json +127 -41
- package/src/schemas/stacks.schema.json +3 -45
- package/dist/chunk-2VT2DMD7.js.map +0 -1
- package/dist/chunk-6YMW4HMX.js.map +0 -1
- package/dist/chunk-BKL3DF2Q.js +0 -45
- package/dist/chunk-BKL3DF2Q.js.map +0 -1
- package/dist/chunk-CADG5WWP.js.map +0 -1
- package/dist/chunk-CKPJTMNC.js.map +0 -1
- package/dist/chunk-DA3WIZ4C.js +0 -253
- package/dist/chunk-DA3WIZ4C.js.map +0 -1
- package/dist/chunk-DHBRWGRZ.js.map +0 -1
- package/dist/chunk-FCF4WQEI.js.map +0 -1
- package/dist/chunk-HWVRHPXR.js.map +0 -1
- package/dist/chunk-J2D6OBIX.js.map +0 -1
- package/dist/chunk-KANNRFY7.js.map +0 -1
- package/dist/chunk-KWB3B2HS.js.map +0 -1
- package/dist/chunk-L6MTIQ2U.js.map +0 -1
- package/dist/chunk-QOJAZI72.js.map +0 -1
- package/dist/chunk-R3AR4VLZ.js.map +0 -1
- package/dist/chunk-T4EXUIBY.js +0 -19
- package/dist/chunk-T4EXUIBY.js.map +0 -1
- package/dist/chunk-UDAHHJIM.js.map +0 -1
- package/dist/chunk-UQM5YPPJ.js.map +0 -1
- package/dist/chunk-X4RIMJNY.js.map +0 -1
- package/dist/chunk-XMZNHLV3.js.map +0 -1
- package/dist/chunk-XYRVAEI6.js.map +0 -1
- package/dist/chunk-ZYUASJUN.js.map +0 -1
- package/dist/source-loader-3MZ2MBOF.js +0 -17
- package/dist/source-manager-NEH6QXE5.js +0 -19
- package/dist/stores/matrix-store.js +0 -15
- package/dist/stores/matrix-store.js.map +0 -1
- package/dist/stores/matrix-store.test.js +0 -127
- package/dist/stores/matrix-store.test.js.map +0 -1
- /package/dist/{chunk-V5L532ZH.js.map → chunk-3K6FSET7.js.map} +0 -0
- /package/dist/{chunk-KSAGOKWT.js.map → chunk-G23HPF6K.js.map} +0 -0
- /package/dist/{chunk-XB3TYSPL.js.map → chunk-H4ETXZVL.js.map} +0 -0
- /package/dist/{chunk-AX6MMYAZ.js.map → chunk-KE2EAVFQ.js.map} +0 -0
- /package/dist/{chunk-52THXN5G.js.map → chunk-NUJHWYCR.js.map} +0 -0
- /package/dist/{chunk-6BXKF5GP.js.map → chunk-T7QY777F.js.map} +0 -0
- /package/dist/{chunk-VUUGWE6G.js.map → chunk-Y47CLMWE.js.map} +0 -0
- /package/dist/{loader-CMSC3RAO.js.map → loader-XQ3WBTVP.js.map} +0 -0
- /package/dist/{source-loader-3MZ2MBOF.js.map → source-loader-F4PGP6LH.js.map} +0 -0
- /package/dist/{source-manager-NEH6QXE5.js.map → source-manager-QCIO4XZK.js.map} +0 -0
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
AGENT_NAMES,
|
|
4
|
+
CATEGORIES,
|
|
5
|
+
DOMAINS,
|
|
6
|
+
SKILL_SLUGS
|
|
7
|
+
} from "./chunk-SRIH4U5Y.js";
|
|
2
8
|
import {
|
|
3
9
|
KEBAB_CASE_PATTERN
|
|
4
10
|
} from "./chunk-EGMQ3SXN.js";
|
|
@@ -115,14 +121,7 @@ async function copy(src, dest) {
|
|
|
115
121
|
// src/cli/lib/schemas.ts
|
|
116
122
|
init_esm_shims();
|
|
117
123
|
import { z } from "zod";
|
|
118
|
-
var
|
|
119
|
-
categories: /* @__PURE__ */ new Set(),
|
|
120
|
-
domains: /* @__PURE__ */ new Set(),
|
|
121
|
-
agentNames: /* @__PURE__ */ new Set(),
|
|
122
|
-
skillIds: /* @__PURE__ */ new Set()
|
|
123
|
-
};
|
|
124
|
-
var DOMAIN_VALUES = ["web", "api", "cli", "mobile", "shared"];
|
|
125
|
-
var domainSchema = z.enum(DOMAIN_VALUES);
|
|
124
|
+
var domainSchema = z.enum(DOMAINS);
|
|
126
125
|
var skillSourceTypeSchema = z.enum([
|
|
127
126
|
"public",
|
|
128
127
|
"private",
|
|
@@ -135,67 +134,8 @@ var boundSkillSchema = z.object({
|
|
|
135
134
|
boundTo: z.string(),
|
|
136
135
|
description: z.string().optional()
|
|
137
136
|
});
|
|
138
|
-
var
|
|
139
|
-
|
|
140
|
-
"web-styling",
|
|
141
|
-
"web-client-state",
|
|
142
|
-
"web-server-state",
|
|
143
|
-
"web-forms",
|
|
144
|
-
"web-testing",
|
|
145
|
-
"web-ui-components",
|
|
146
|
-
"web-mocking",
|
|
147
|
-
"web-error-handling",
|
|
148
|
-
"web-i18n",
|
|
149
|
-
"web-file-upload",
|
|
150
|
-
"web-files",
|
|
151
|
-
"web-utilities",
|
|
152
|
-
"web-realtime",
|
|
153
|
-
"web-animation",
|
|
154
|
-
"web-pwa",
|
|
155
|
-
"web-accessibility",
|
|
156
|
-
"web-performance",
|
|
157
|
-
"web-base-framework",
|
|
158
|
-
"api-api",
|
|
159
|
-
"api-database",
|
|
160
|
-
"api-auth",
|
|
161
|
-
"api-observability",
|
|
162
|
-
"api-analytics",
|
|
163
|
-
"api-email",
|
|
164
|
-
"api-performance",
|
|
165
|
-
"mobile-framework",
|
|
166
|
-
"mobile-platform",
|
|
167
|
-
"shared-monorepo",
|
|
168
|
-
"shared-tooling",
|
|
169
|
-
"shared-security",
|
|
170
|
-
"shared-methodology",
|
|
171
|
-
"shared-research",
|
|
172
|
-
"shared-reviewing",
|
|
173
|
-
"shared-ci-cd",
|
|
174
|
-
"cli-framework",
|
|
175
|
-
"cli-prompts",
|
|
176
|
-
"cli-testing"
|
|
177
|
-
];
|
|
178
|
-
var categorySchema = z.enum(CATEGORY_VALUES);
|
|
179
|
-
var CATEGORY_VALUES_SET = new Set(CATEGORY_VALUES);
|
|
180
|
-
var agentNameSchema = z.enum([
|
|
181
|
-
"web-developer",
|
|
182
|
-
"api-developer",
|
|
183
|
-
"cli-developer",
|
|
184
|
-
"web-architecture",
|
|
185
|
-
"agent-summoner",
|
|
186
|
-
"documentor",
|
|
187
|
-
"skill-summoner",
|
|
188
|
-
"pattern-scout",
|
|
189
|
-
"web-pattern-critique",
|
|
190
|
-
"web-pm",
|
|
191
|
-
"api-researcher",
|
|
192
|
-
"web-researcher",
|
|
193
|
-
"api-reviewer",
|
|
194
|
-
"cli-reviewer",
|
|
195
|
-
"web-reviewer",
|
|
196
|
-
"cli-tester",
|
|
197
|
-
"web-tester"
|
|
198
|
-
]);
|
|
137
|
+
var categorySchema = z.enum(CATEGORIES);
|
|
138
|
+
var agentNameSchema = z.enum(AGENT_NAMES);
|
|
199
139
|
var modelNameSchema = z.enum([
|
|
200
140
|
"sonnet",
|
|
201
141
|
"opus",
|
|
@@ -210,115 +150,12 @@ var permissionModeSchema = z.enum([
|
|
|
210
150
|
"plan",
|
|
211
151
|
"delegate"
|
|
212
152
|
]);
|
|
213
|
-
var skillSlugSchema = z.enum(
|
|
214
|
-
"react",
|
|
215
|
-
"vue",
|
|
216
|
-
"angular",
|
|
217
|
-
"solidjs",
|
|
218
|
-
"nextjs-app-router",
|
|
219
|
-
"nextjs-server-actions",
|
|
220
|
-
"remix",
|
|
221
|
-
"nuxt",
|
|
222
|
-
"scss-modules",
|
|
223
|
-
"cva",
|
|
224
|
-
"tailwind",
|
|
225
|
-
"zustand",
|
|
226
|
-
"redux-toolkit",
|
|
227
|
-
"pinia",
|
|
228
|
-
"ngrx-signalstore",
|
|
229
|
-
"jotai",
|
|
230
|
-
"mobx",
|
|
231
|
-
"react-query",
|
|
232
|
-
"swr",
|
|
233
|
-
"graphql-apollo",
|
|
234
|
-
"graphql-urql",
|
|
235
|
-
"trpc",
|
|
236
|
-
"react-hook-form",
|
|
237
|
-
"vee-validate",
|
|
238
|
-
"zod-validation",
|
|
239
|
-
"vitest",
|
|
240
|
-
"playwright-e2e",
|
|
241
|
-
"cypress-e2e",
|
|
242
|
-
"react-testing-library",
|
|
243
|
-
"vue-test-utils",
|
|
244
|
-
"msw",
|
|
245
|
-
"shadcn-ui",
|
|
246
|
-
"tanstack-table",
|
|
247
|
-
"radix-ui",
|
|
248
|
-
"hono",
|
|
249
|
-
"express",
|
|
250
|
-
"fastify",
|
|
251
|
-
"drizzle",
|
|
252
|
-
"prisma",
|
|
253
|
-
"better-auth",
|
|
254
|
-
"axiom-pino-sentry",
|
|
255
|
-
"posthog",
|
|
256
|
-
"posthog-flags",
|
|
257
|
-
"resend",
|
|
258
|
-
"github-actions",
|
|
259
|
-
"react-native",
|
|
260
|
-
"expo",
|
|
261
|
-
"turborepo",
|
|
262
|
-
"tooling",
|
|
263
|
-
"posthog-setup",
|
|
264
|
-
"env",
|
|
265
|
-
"observability-setup",
|
|
266
|
-
"email-setup",
|
|
267
|
-
"framer-motion",
|
|
268
|
-
"css-animations",
|
|
269
|
-
"view-transitions",
|
|
270
|
-
"storybook",
|
|
271
|
-
"error-boundaries",
|
|
272
|
-
"result-types",
|
|
273
|
-
"accessibility",
|
|
274
|
-
"websockets",
|
|
275
|
-
"sse",
|
|
276
|
-
"socket-io",
|
|
277
|
-
"service-workers",
|
|
278
|
-
"offline-first",
|
|
279
|
-
"file-upload",
|
|
280
|
-
"image-handling",
|
|
281
|
-
"date-fns",
|
|
282
|
-
"api-performance",
|
|
283
|
-
"web-performance",
|
|
284
|
-
"security",
|
|
285
|
-
"commander",
|
|
286
|
-
"cli-commander",
|
|
287
|
-
"oclif",
|
|
288
|
-
"reviewing",
|
|
289
|
-
"cli-reviewing",
|
|
290
|
-
"research-methodology",
|
|
291
|
-
"investigation-requirements",
|
|
292
|
-
"anti-over-engineering",
|
|
293
|
-
"success-criteria",
|
|
294
|
-
"write-verification",
|
|
295
|
-
"improvement-protocol",
|
|
296
|
-
"context-management"
|
|
297
|
-
]);
|
|
153
|
+
var skillSlugSchema = z.enum(SKILL_SLUGS);
|
|
298
154
|
var SKILL_ID_PATTERN = /^(web|api|cli|mobile|infra|meta|security)-.+-.+$/;
|
|
299
|
-
function isValidSkillId(id) {
|
|
300
|
-
return SKILL_ID_PATTERN.test(id) || customExtensions.skillIds.has(id);
|
|
301
|
-
}
|
|
302
155
|
var skillIdSchema = z.string().regex(
|
|
303
156
|
SKILL_ID_PATTERN,
|
|
304
157
|
"Must be a valid skill ID (e.g., 'web-framework-react')"
|
|
305
158
|
);
|
|
306
|
-
var extensibleDomainSchema = z.string().refine(
|
|
307
|
-
(val) => domainSchema.safeParse(val).success || customExtensions.domains.has(val),
|
|
308
|
-
{ message: "Must be a valid domain" }
|
|
309
|
-
);
|
|
310
|
-
var extensibleSkillIdSchema = z.string().refine(
|
|
311
|
-
(val) => skillIdSchema.safeParse(val).success || customExtensions.skillIds.has(val),
|
|
312
|
-
{ message: "Must be a valid skill ID" }
|
|
313
|
-
);
|
|
314
|
-
var extensibleCategorySchema = z.string().refine(
|
|
315
|
-
(val) => categorySchema.safeParse(val).success || customExtensions.categories.has(val),
|
|
316
|
-
{ message: "Must be a valid category" }
|
|
317
|
-
);
|
|
318
|
-
var extensibleAgentNameSchema = z.string().refine(
|
|
319
|
-
(val) => agentNameSchema.safeParse(val).success || customExtensions.agentNames.has(val),
|
|
320
|
-
{ message: "Must be a valid agent name" }
|
|
321
|
-
);
|
|
322
159
|
function validateCategoryField(val, ctx) {
|
|
323
160
|
if (!val.category) return;
|
|
324
161
|
if (val.custom) {
|
|
@@ -338,25 +175,12 @@ function validateCategoryField(val, ctx) {
|
|
|
338
175
|
}
|
|
339
176
|
}
|
|
340
177
|
}
|
|
341
|
-
function validateExtensibleRecordKeys(builtinSet, extensionSet, label) {
|
|
342
|
-
return (val, ctx) => {
|
|
343
|
-
for (const key of Object.keys(val)) {
|
|
344
|
-
if (!builtinSet.has(key) && !extensionSet.has(key)) {
|
|
345
|
-
ctx.addIssue({
|
|
346
|
-
code: "custom",
|
|
347
|
-
path: [key],
|
|
348
|
-
message: `Invalid ${label} '${key}'.`
|
|
349
|
-
});
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
178
|
var categoryPathSchema = z.string().refine(
|
|
355
179
|
(val) => {
|
|
356
180
|
if (val === "local") return true;
|
|
357
181
|
if (/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(val)) return true;
|
|
358
182
|
if (categorySchema.safeParse(val).success) return true;
|
|
359
|
-
return
|
|
183
|
+
return KEBAB_CASE_PATTERN.test(val);
|
|
360
184
|
},
|
|
361
185
|
{
|
|
362
186
|
message: "Must be a valid category path (e.g., 'web-framework', 'shared-testing', or 'local')"
|
|
@@ -382,7 +206,7 @@ var strictHooksRecordSchema = z.record(
|
|
|
382
206
|
z.array(strictAgentHookDefinitionSchema)
|
|
383
207
|
);
|
|
384
208
|
var skillAssignmentSchema = z.object({
|
|
385
|
-
id:
|
|
209
|
+
id: z.string(),
|
|
386
210
|
preloaded: z.boolean().optional(),
|
|
387
211
|
local: z.boolean().optional(),
|
|
388
212
|
path: z.string().optional()
|
|
@@ -397,7 +221,7 @@ var skillMetadataLoaderSchema = z.object({
|
|
|
397
221
|
category: z.string().optional(),
|
|
398
222
|
author: z.string().optional(),
|
|
399
223
|
tags: z.array(z.string()).optional(),
|
|
400
|
-
domain:
|
|
224
|
+
domain: z.string(),
|
|
401
225
|
custom: z.boolean().optional()
|
|
402
226
|
}).passthrough().superRefine(validateCategoryField);
|
|
403
227
|
var pluginAuthorSchema = z.object({
|
|
@@ -427,7 +251,7 @@ var pluginManifestValidationSchema = z.object({
|
|
|
427
251
|
hooks: z.union([z.string(), strictHooksRecordSchema]).optional()
|
|
428
252
|
}).strict();
|
|
429
253
|
var agentYamlConfigSchema = z.object({
|
|
430
|
-
id:
|
|
254
|
+
id: z.string(),
|
|
431
255
|
title: z.string(),
|
|
432
256
|
description: z.string(),
|
|
433
257
|
model: modelNameSchema.optional(),
|
|
@@ -436,15 +260,16 @@ var agentYamlConfigSchema = z.object({
|
|
|
436
260
|
permissionMode: permissionModeSchema.optional(),
|
|
437
261
|
hooks: hooksRecordSchema.optional(),
|
|
438
262
|
outputFormat: z.string().optional(),
|
|
439
|
-
domain:
|
|
263
|
+
domain: z.string().optional(),
|
|
440
264
|
custom: z.boolean().optional()
|
|
441
265
|
});
|
|
442
|
-
var skillAssignmentElementSchema = z.union([
|
|
266
|
+
var skillAssignmentElementSchema = z.union([
|
|
267
|
+
z.string(),
|
|
268
|
+
skillAssignmentSchema
|
|
269
|
+
]);
|
|
443
270
|
var stackAgentConfigSchema = z.record(
|
|
444
271
|
z.string(),
|
|
445
272
|
z.union([skillAssignmentElementSchema, z.array(skillAssignmentElementSchema)])
|
|
446
|
-
).superRefine(
|
|
447
|
-
validateExtensibleRecordKeys(CATEGORY_VALUES_SET, customExtensions.categories, "category")
|
|
448
273
|
);
|
|
449
274
|
var projectConfigLoaderSchema = z.object({
|
|
450
275
|
version: z.literal("1").optional(),
|
|
@@ -461,7 +286,7 @@ var projectConfigLoaderSchema = z.object({
|
|
|
461
286
|
/** Per-skill configuration with scope and source */
|
|
462
287
|
skills: z.array(
|
|
463
288
|
z.object({
|
|
464
|
-
id:
|
|
289
|
+
id: z.string(),
|
|
465
290
|
scope: z.enum(["project", "global"]),
|
|
466
291
|
source: z.string()
|
|
467
292
|
})
|
|
@@ -469,7 +294,7 @@ var projectConfigLoaderSchema = z.object({
|
|
|
469
294
|
/** Author handle (e.g., "@vince") */
|
|
470
295
|
author: z.string().optional(),
|
|
471
296
|
/** Selected domains from the wizard (persisted for edit mode restoration) */
|
|
472
|
-
domains: z.array(
|
|
297
|
+
domains: z.array(z.string()).optional(),
|
|
473
298
|
/** Selected agents from the wizard (persisted for edit mode restoration) */
|
|
474
299
|
selectedAgents: z.array(z.string()).optional(),
|
|
475
300
|
/** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */
|
|
@@ -482,10 +307,10 @@ var projectConfigLoaderSchema = z.object({
|
|
|
482
307
|
agentsSource: z.string().optional()
|
|
483
308
|
}).passthrough();
|
|
484
309
|
var categoryDefinitionSchema = z.object({
|
|
485
|
-
id:
|
|
310
|
+
id: z.string(),
|
|
486
311
|
displayName: z.string(),
|
|
487
312
|
description: z.string(),
|
|
488
|
-
domain:
|
|
313
|
+
domain: z.string().optional(),
|
|
489
314
|
exclusive: z.boolean(),
|
|
490
315
|
required: z.boolean(),
|
|
491
316
|
order: z.number(),
|
|
@@ -508,11 +333,6 @@ var compatibilityGroupSchema = z.object({
|
|
|
508
333
|
skills: z.array(skillRefInRules).min(2),
|
|
509
334
|
reason: z.string()
|
|
510
335
|
});
|
|
511
|
-
var setupPairSchema = z.object({
|
|
512
|
-
setup: skillRefInRules,
|
|
513
|
-
configures: z.array(skillRefInRules).min(1),
|
|
514
|
-
reason: z.string()
|
|
515
|
-
});
|
|
516
336
|
var requireRuleSchema = z.object({
|
|
517
337
|
skill: skillRefInRules,
|
|
518
338
|
needs: z.array(skillRefInRules).min(1),
|
|
@@ -529,18 +349,11 @@ var relationshipDefinitionsSchema = z.object({
|
|
|
529
349
|
recommends: z.array(recommendationSchema),
|
|
530
350
|
requires: z.array(requireRuleSchema),
|
|
531
351
|
alternatives: z.array(alternativeGroupSchema),
|
|
532
|
-
compatibleWith: z.array(compatibilityGroupSchema).optional().default([])
|
|
533
|
-
setupPairs: z.array(setupPairSchema).optional().default([])
|
|
352
|
+
compatibleWith: z.array(compatibilityGroupSchema).optional().default([])
|
|
534
353
|
});
|
|
535
354
|
var skillCategoriesFileSchema = z.object({
|
|
536
355
|
version: z.string(),
|
|
537
|
-
categories: z.record(z.string(), categoryDefinitionSchema)
|
|
538
|
-
validateExtensibleRecordKeys(
|
|
539
|
-
CATEGORY_VALUES_SET,
|
|
540
|
-
customExtensions.categories,
|
|
541
|
-
"category key"
|
|
542
|
-
)
|
|
543
|
-
)
|
|
356
|
+
categories: z.record(z.string(), categoryDefinitionSchema)
|
|
544
357
|
});
|
|
545
358
|
var skillRulesFileSchema = z.object({
|
|
546
359
|
version: z.string(),
|
|
@@ -560,7 +373,7 @@ var localRawMetadataSchema = z.object({
|
|
|
560
373
|
usageGuidance: z.string().optional(),
|
|
561
374
|
tags: z.array(z.string()).optional(),
|
|
562
375
|
/** Domain this skill belongs to (e.g., "web", "api", "cli") */
|
|
563
|
-
domain:
|
|
376
|
+
domain: z.string(),
|
|
564
377
|
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
565
378
|
custom: z.boolean().optional()
|
|
566
379
|
}).passthrough().superRefine(validateCategoryField);
|
|
@@ -717,7 +530,7 @@ var agentYamlGenerationSchema = z.object({
|
|
|
717
530
|
permissionMode: permissionModeSchema.optional(),
|
|
718
531
|
hooks: strictHooksRecordSchema.optional(),
|
|
719
532
|
outputFormat: z.string().optional(),
|
|
720
|
-
domain:
|
|
533
|
+
domain: z.string().optional(),
|
|
721
534
|
custom: z.boolean().optional()
|
|
722
535
|
}).strict();
|
|
723
536
|
var agentFrontmatterValidationSchema = z.object({
|
|
@@ -752,8 +565,45 @@ var skillFrontmatterValidationSchema = z.object({
|
|
|
752
565
|
"argument-hint": z.string().optional()
|
|
753
566
|
}).strict();
|
|
754
567
|
var metadataValidationSchema = z.object({
|
|
755
|
-
/** Domain-prefixed category
|
|
756
|
-
category:
|
|
568
|
+
/** Domain-prefixed category — must be a known built-in category */
|
|
569
|
+
category: z.enum(CATEGORIES),
|
|
570
|
+
/** Author handle — must start with @ (e.g., "@vince") */
|
|
571
|
+
author: z.string().regex(/^@[a-z][a-z0-9-]*$/),
|
|
572
|
+
/** Short display name for the wizard grid (max 30 chars) */
|
|
573
|
+
displayName: z.string().min(1).max(30),
|
|
574
|
+
/** One-line description for the wizard (max 60 chars) */
|
|
575
|
+
cliDescription: z.string().min(1).max(60),
|
|
576
|
+
/** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */
|
|
577
|
+
usageGuidance: z.string().min(10),
|
|
578
|
+
/** Kebab-case short key — must be a known built-in slug */
|
|
579
|
+
slug: z.enum(SKILL_SLUGS),
|
|
580
|
+
/** Searchable tags — kebab-case only */
|
|
581
|
+
tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),
|
|
582
|
+
/** 7-char hex SHA of skill content (for change detection) */
|
|
583
|
+
contentHash: z.string().regex(/^[a-f0-9]{7}$/).optional(),
|
|
584
|
+
/** ISO date of last update */
|
|
585
|
+
updated: z.string().optional(),
|
|
586
|
+
/** Provenance tracking when skill was forked from another */
|
|
587
|
+
forkedFrom: z.object({
|
|
588
|
+
/** Original skill ID */
|
|
589
|
+
skillId: z.string(),
|
|
590
|
+
/** Version of the original at fork time */
|
|
591
|
+
version: z.number().int().min(1).optional(),
|
|
592
|
+
/** Content hash of the original at fork time */
|
|
593
|
+
contentHash: z.string(),
|
|
594
|
+
/** Source URL or identifier */
|
|
595
|
+
source: z.string().optional(),
|
|
596
|
+
/** ISO date of the fork */
|
|
597
|
+
date: z.string()
|
|
598
|
+
}).optional(),
|
|
599
|
+
/** Domain assignment from metadata */
|
|
600
|
+
domain: z.string().optional(),
|
|
601
|
+
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
602
|
+
custom: z.boolean().optional()
|
|
603
|
+
}).strict();
|
|
604
|
+
var customMetadataValidationSchema = z.object({
|
|
605
|
+
/** Any string category — custom skills may define their own categories */
|
|
606
|
+
category: z.string(),
|
|
757
607
|
/** Author handle — must start with @ (e.g., "@vince") */
|
|
758
608
|
author: z.string().regex(/^@[a-z][a-z0-9-]*$/),
|
|
759
609
|
/** Short display name for the wizard grid (max 30 chars) */
|
|
@@ -784,10 +634,10 @@ var metadataValidationSchema = z.object({
|
|
|
784
634
|
date: z.string()
|
|
785
635
|
}).optional(),
|
|
786
636
|
/** Domain assignment from metadata */
|
|
787
|
-
domain:
|
|
637
|
+
domain: z.string().optional(),
|
|
788
638
|
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
789
639
|
custom: z.boolean().optional()
|
|
790
|
-
})
|
|
640
|
+
});
|
|
791
641
|
var stackSkillAssignmentSchema = z.object({
|
|
792
642
|
id: z.string().min(1),
|
|
793
643
|
/** If true, skill content is embedded in the compiled agent prompt */
|
|
@@ -867,20 +717,6 @@ function warnUnknownFields(parsed, expectedKeys, context) {
|
|
|
867
717
|
warn(`Unknown fields in ${context}: ${unknownKeys.join(", ")}`);
|
|
868
718
|
}
|
|
869
719
|
}
|
|
870
|
-
function extendSchemasWithCustomValues(options) {
|
|
871
|
-
for (const category of options.categories ?? []) {
|
|
872
|
-
customExtensions.categories.add(category);
|
|
873
|
-
}
|
|
874
|
-
for (const domain of options.domains ?? []) {
|
|
875
|
-
customExtensions.domains.add(domain);
|
|
876
|
-
}
|
|
877
|
-
for (const agentName of options.agentNames ?? []) {
|
|
878
|
-
customExtensions.agentNames.add(agentName);
|
|
879
|
-
}
|
|
880
|
-
for (const skillId of options.skillIds ?? []) {
|
|
881
|
-
customExtensions.skillIds.add(skillId);
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
720
|
|
|
885
721
|
export {
|
|
886
722
|
getErrorMessage,
|
|
@@ -903,12 +739,7 @@ export {
|
|
|
903
739
|
ensureDir,
|
|
904
740
|
remove,
|
|
905
741
|
copy,
|
|
906
|
-
DOMAIN_VALUES,
|
|
907
|
-
CATEGORY_VALUES,
|
|
908
|
-
agentNameSchema,
|
|
909
742
|
SKILL_ID_PATTERN,
|
|
910
|
-
isValidSkillId,
|
|
911
|
-
extensibleDomainSchema,
|
|
912
743
|
categoryPathSchema,
|
|
913
744
|
hooksRecordSchema,
|
|
914
745
|
skillFrontmatterLoaderSchema,
|
|
@@ -933,7 +764,6 @@ export {
|
|
|
933
764
|
stackConfigValidationSchema,
|
|
934
765
|
formatZodErrors,
|
|
935
766
|
validateNestingDepth,
|
|
936
|
-
warnUnknownFields
|
|
937
|
-
extendSchemasWithCustomValues
|
|
767
|
+
warnUnknownFields
|
|
938
768
|
};
|
|
939
|
-
//# sourceMappingURL=chunk-
|
|
769
|
+
//# sourceMappingURL=chunk-WJL4KU5V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/utils/errors.ts","../src/cli/utils/logger.ts","../src/cli/utils/fs.ts","../src/cli/lib/schemas.ts"],"sourcesContent":["/** Extract a human-readable message from an unknown error value. */\nexport function getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","// Logging utility for lib/ modules that don't have access to oclif command context.\n// In oclif commands, prefer using this.log() instead.\n\nlet verboseMode = false;\n\nexport function setVerbose(enabled: boolean): void {\n verboseMode = enabled;\n}\n\nexport function verbose(msg: string): void {\n if (verboseMode) {\n console.log(` ${msg}`);\n }\n}\n\n// Always visible (not gated by verbose mode).\n// Used for user-facing progress output: compilation ticks, summaries, validation results.\nexport function log(msg: string): void {\n console.log(msg);\n}\n\n// --- Startup message buffering ---\n// When buffer mode is enabled (before Ink takes over the terminal), warn() pushes\n// messages into a buffer instead of writing to stderr. The buffer is drained and\n// passed to Ink's <Static> component so messages survive Ink's clearTerminal.\n\nexport type StartupMessage = {\n level: \"info\" | \"warn\" | \"error\";\n text: string;\n};\n\nlet bufferMode = false;\nlet messageBuffer: StartupMessage[] = [];\n\nexport function enableBuffering(): void {\n bufferMode = true;\n messageBuffer = [];\n}\n\nexport function drainBuffer(): StartupMessage[] {\n const messages = [...messageBuffer];\n messageBuffer = [];\n return messages;\n}\n\nexport function disableBuffering(): void {\n bufferMode = false;\n messageBuffer = [];\n}\n\nexport function pushBufferMessage(level: StartupMessage[\"level\"], text: string): void {\n messageBuffer.push({ level, text });\n}\n\n// Always visible (not gated by verbose mode).\n// Used for issues the user should know about, like unresolved references.\n//\n// Error/warning message style guide:\n// - Start with a capital letter (restructure if it would capitalize a function name)\n// - End with a period if it's a complete sentence\n// - End without a period if it's a fragment (e.g., \"Skipping 'foo': missing SKILL.md\")\n// - Wrap dynamic values in single quotes: 'value' (not bare or double-quoted)\n// - Do NOT prefix the message with \"Warning:\" — this function adds it automatically\n// - After a colon, use lowercase (e.g., \"Skipping 'foo': invalid frontmatter\")\n// - Use em dash for supplemental info (e.g., \"Missing category — defaulting to 'local'\")\nexport function warn(msg: string): void {\n if (bufferMode) {\n messageBuffer.push({ level: \"warn\", text: msg });\n return;\n }\n console.warn(` Warning: ${msg}`);\n}\n","import fs from \"fs-extra\";\nimport fg from \"fast-glob\";\nimport path from \"path\";\n\nexport async function readFile(filePath: string): Promise<string> {\n return fs.readFile(filePath, \"utf-8\");\n}\n\n/**\n * Reads a file with a size limit check before reading content.\n * Throws if the file exceeds maxSizeBytes. Prevents DoS from oversized files.\n */\nexport async function readFileSafe(filePath: string, maxSizeBytes: number): Promise<string> {\n const stats = await fs.stat(filePath);\n if (stats.size > maxSizeBytes) {\n throw new Error(\n `File too large: '${filePath}' is ${stats.size} bytes (limit: ${maxSizeBytes} bytes)`,\n );\n }\n return fs.readFile(filePath, \"utf-8\");\n}\n\nexport async function readFileOptional(filePath: string, fallback = \"\"): Promise<string> {\n try {\n return await fs.readFile(filePath, \"utf-8\");\n } catch {\n return fallback;\n }\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n}\n\nexport async function directoryExists(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function listDirectories(dirPath: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory()).map((e) => e.name);\n } catch {\n return [];\n }\n}\n\nexport async function glob(pattern: string, cwd: string): Promise<string[]> {\n return fg(pattern, { cwd, onlyFiles: true });\n}\n\nexport async function writeFile(filePath: string, content: string): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, content, \"utf-8\");\n}\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.ensureDir(dirPath);\n}\n\nexport async function remove(filePath: string): Promise<void> {\n await fs.remove(filePath);\n}\n\nexport async function copy(src: string, dest: string): Promise<void> {\n await fs.copy(src, dest);\n}\n","import { z } from \"zod\";\nimport { KEBAB_CASE_PATTERN } from \"../consts\";\nimport { warn } from \"../utils/logger\";\nimport { SKILL_SLUGS, CATEGORIES, DOMAINS, AGENT_NAMES } from \"../types/generated/source-types\";\nimport type {\n AgentHookAction,\n AgentHookDefinition,\n AgentName,\n AgentYamlConfig,\n AlternativeGroup,\n BoundSkill,\n CategoryDefinition,\n CategoryMap,\n CategoryPath,\n CompatibilityGroup,\n ConflictRule,\n DiscourageRule,\n Domain,\n Marketplace,\n MarketplaceMetadata,\n MarketplaceOwner,\n MarketplacePlugin,\n MarketplaceRemoteSource,\n ModelName,\n PermissionMode,\n PluginAuthor,\n PluginManifest,\n Recommendation,\n RelationshipDefinitions,\n RequireRule,\n SkillAssignment,\n SkillId,\n SkillSlug,\n SkillSourceType,\n Category,\n} from \"../types\";\n\n// Bridge pattern: z.ZodType<ExistingType> ensures Zod output matches our union types\nexport const domainSchema = z.enum(DOMAINS) as z.ZodType<Domain>;\n\nexport const skillSourceTypeSchema = z.enum([\n \"public\",\n \"private\",\n \"local\",\n]) as z.ZodType<SkillSourceType>;\n\nexport const boundSkillSchema: z.ZodType<BoundSkill> = z.object({\n id: z.string() as z.ZodType<SkillId>,\n sourceUrl: z.string(),\n sourceName: z.string(),\n boundTo: z.string(),\n description: z.string().optional(),\n});\n\n// Bridge pattern: z.ZodType<ExistingType> ensures Zod output matches our union types\nexport const categorySchema = z.enum(CATEGORIES) as z.ZodType<Category>;\n\nexport const agentNameSchema = z.enum(AGENT_NAMES) as z.ZodType<AgentName>;\n\nexport const modelNameSchema = z.enum([\n \"sonnet\",\n \"opus\",\n \"haiku\",\n \"inherit\",\n]) as z.ZodType<ModelName>;\n\nexport const permissionModeSchema = z.enum([\n \"default\",\n \"acceptEdits\",\n \"dontAsk\",\n \"bypassPermissions\",\n \"plan\",\n \"delegate\",\n]) as z.ZodType<PermissionMode>;\n\nexport const skillSlugSchema = z.enum(SKILL_SLUGS) as z.ZodType<SkillSlug>;\n\n/** Matches SkillId format: prefix-category-name (at least 3 dash-separated segments) */\nexport const SKILL_ID_PATTERN = /^(web|api|cli|mobile|infra|meta|security)-.+-.+$/;\n\n// Regex-based since Zod cannot express template literal types natively\nexport const skillIdSchema = z\n .string()\n .regex(\n SKILL_ID_PATTERN,\n \"Must be a valid skill ID (e.g., 'web-framework-react')\",\n ) as z.ZodType<SkillId>;\n\n/** Validates category: strict categoryPathSchema by default, any kebab-case string when custom: true */\nfunction validateCategoryField(\n val: { category?: string; custom?: boolean },\n ctx: z.RefinementCtx,\n): void {\n if (!val.category) return;\n\n if (val.custom) {\n if (!KEBAB_CASE_PATTERN.test(val.category)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"category\"],\n message: \"Custom category must be kebab-case\",\n });\n }\n return;\n }\n\n const result = categoryPathSchema.safeParse(val.category);\n if (!result.success) {\n for (const issue of result.error.issues) {\n ctx.addIssue({ ...issue, path: [\"category\"] });\n }\n }\n}\n\n// Accepts: \"prefix-category\", bare category, \"local\", or any kebab-case string\nexport const categoryPathSchema = z.string().refine(\n (val): val is CategoryPath => {\n if (val === \"local\") return true;\n if (/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(val)) return true;\n if (categorySchema.safeParse(val).success) return true;\n // Accept any kebab-case string for custom categories\n return KEBAB_CASE_PATTERN.test(val);\n },\n {\n message: \"Must be a valid category path (e.g., 'web-framework', 'shared-testing', or 'local')\",\n },\n) as z.ZodType<CategoryPath>;\n\nexport const agentHookActionSchema: z.ZodType<AgentHookAction> = z.object({\n type: z.enum([\"command\", \"script\", \"prompt\"]),\n command: z.string().optional(),\n script: z.string().optional(),\n prompt: z.string().optional(),\n});\n\nexport const agentHookDefinitionSchema: z.ZodType<AgentHookDefinition> = z.object({\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).optional(),\n});\n\nexport const hooksRecordSchema = z.record(z.string(), z.array(agentHookDefinitionSchema));\n\n/** Strict hook definition — hooks array is required and must have at least one action */\nconst strictAgentHookDefinitionSchema = z.object({\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).min(1),\n});\n\n/** Strict hooks record for validation schemas (requires at least one hook action per definition) */\nexport const strictHooksRecordSchema = z.record(\n z.string(),\n z.array(strictAgentHookDefinitionSchema),\n);\n\nexport const skillAssignmentSchema: z.ZodType<SkillAssignment> = z.object({\n id: z.string() as z.ZodType<SkillId>,\n preloaded: z.boolean().optional(),\n local: z.boolean().optional(),\n path: z.string().optional(),\n});\n\n// Lenient: accepts any string for `name` since local/custom skills may not follow strict SkillId pattern\nexport const skillFrontmatterLoaderSchema = z.object({\n name: z.string(),\n description: z.string(),\n model: modelNameSchema.optional(),\n});\n\n// Loader schema: category strictness depends on custom field (see validateCategoryField)\nexport const skillMetadataLoaderSchema = z\n .object({\n // Field accepts any string; cross-field validation in superRefine enforces strict/custom rules\n category: (z.string() as z.ZodType<CategoryPath>).optional(),\n author: z.string().optional(),\n tags: z.array(z.string()).optional(),\n domain: z.string() as z.ZodType<Domain>,\n custom: z.boolean().optional(),\n })\n .passthrough()\n .superRefine(validateCategoryField);\n\nexport const pluginAuthorSchema: z.ZodType<PluginAuthor> = z.object({\n name: z.string().min(1),\n email: z.string().optional(),\n});\n\nexport const pluginManifestSchema: z.ZodType<PluginManifest> = z.object({\n name: z.string(),\n version: z.string().optional(),\n description: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), hooksRecordSchema]).optional(),\n});\n\n/** Strict schema for plugin.json validation (IDE, agentsinc validate). Rejects unknown fields. */\nexport const pluginManifestValidationSchema = z\n .object({\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), strictHooksRecordSchema]).optional(),\n })\n .strict();\n\nexport const agentYamlConfigSchema: z.ZodType<AgentYamlConfig> = z.object({\n id: z.string() as z.ZodType<AgentName>,\n title: z.string(),\n description: z.string(),\n model: modelNameSchema.optional(),\n tools: z.array(z.string()),\n disallowedTools: z.array(z.string()).optional(),\n permissionMode: permissionModeSchema.optional(),\n hooks: hooksRecordSchema.optional(),\n outputFormat: z.string().optional(),\n domain: (z.string() as z.ZodType<Domain>).optional(),\n custom: z.boolean().optional(),\n});\n\n// Defined before projectConfigLoaderSchema so it can reference stackAgentConfigSchema\n// Single skill assignment element: either a bare SkillId string or an object { id, preloaded? }\nconst skillAssignmentElementSchema = z.union([\n z.string() as z.ZodType<SkillId>,\n skillAssignmentSchema,\n]);\n\n/**\n * Agent config within a stack: maps category to skill assignment(s).\n * Lenient: accepts bare string, object, or array from YAML.\n * Consumers normalize all values to SkillAssignment[] after parsing.\n */\nexport const stackAgentConfigSchema = z.record(\n z.string(),\n z.union([skillAssignmentElementSchema, z.array(skillAssignmentElementSchema)]),\n);\n\n/**\n * Lenient loader for .claude-src/config.ts (ProjectConfig).\n * name/agents optional since partial configs are valid at load time.\n * Full validation happens in validateProjectConfig().\n */\nexport const projectConfigLoaderSchema = z\n .object({\n version: z.literal(\"1\").optional(),\n /** Project/plugin name in kebab-case */\n name: z.string().optional(),\n description: z.string().optional(),\n /** Per-agent configuration with scope (e.g., [{ name: \"web-developer\", scope: \"project\" }]) */\n agents: z\n .array(\n z.object({\n name: z.string(),\n scope: z.enum([\"project\", \"global\"]),\n }),\n )\n .optional(),\n /** Per-skill configuration with scope and source */\n skills: z\n .array(\n z.object({\n id: z.string() as z.ZodType<SkillId>,\n scope: z.enum([\"project\", \"global\"]),\n source: z.string(),\n }),\n )\n .optional(),\n\n /** Author handle (e.g., \"@vince\") */\n author: z.string().optional(),\n /** Selected domains from the wizard (persisted for edit mode restoration) */\n domains: z.array(z.string() as z.ZodType<Domain>).optional(),\n /** Selected agents from the wizard (persisted for edit mode restoration) */\n selectedAgents: z.array(z.string()).optional(),\n /** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */\n stack: z.record(z.string(), stackAgentConfigSchema).optional(),\n /** Skills source path or URL (e.g., \"github:my-org/skills\") */\n source: z.string().optional(),\n /** Marketplace identifier for plugin installation */\n marketplace: z.string().optional(),\n /** Separate source for agents when different from skills source */\n agentsSource: z.string().optional(),\n })\n .passthrough();\n\nexport const categoryDefinitionSchema: z.ZodType<CategoryDefinition> = z.object({\n id: z.string() as z.ZodType<Category>,\n displayName: z.string(),\n description: z.string(),\n domain: (z.string() as z.ZodType<Domain>).optional() as z.ZodType<Domain | undefined>,\n exclusive: z.boolean(),\n required: z.boolean(),\n order: z.number(),\n icon: z.string().optional(),\n});\n\n// Skill references in relationship rules: slugs resolved to canonical IDs by matrix-loader\nconst skillRefInRules = skillSlugSchema;\n\nexport const conflictRuleSchema: z.ZodType<ConflictRule> = z.object({\n skills: z.array(skillRefInRules).min(2),\n reason: z.string(),\n});\n\nexport const discourageRuleSchema: z.ZodType<DiscourageRule> = z.object({\n skills: z.array(skillRefInRules).min(2),\n reason: z.string(),\n});\n\nexport const recommendationSchema: z.ZodType<Recommendation> = z.object({\n skill: skillRefInRules,\n reason: z.string(),\n});\n\nexport const compatibilityGroupSchema: z.ZodType<CompatibilityGroup> = z.object({\n skills: z.array(skillRefInRules).min(2),\n reason: z.string(),\n});\n\nexport const requireRuleSchema: z.ZodType<RequireRule> = z.object({\n skill: skillRefInRules,\n needs: z.array(skillRefInRules).min(1),\n needsAny: z.boolean().optional(),\n reason: z.string(),\n});\n\nexport const alternativeGroupSchema: z.ZodType<AlternativeGroup> = z.object({\n purpose: z.string(),\n skills: z.array(skillRefInRules).min(1),\n});\n\nexport const relationshipDefinitionsSchema: z.ZodType<RelationshipDefinitions> = z.object({\n conflicts: z.array(conflictRuleSchema),\n discourages: z.array(discourageRuleSchema),\n recommends: z.array(recommendationSchema),\n requires: z.array(requireRuleSchema),\n alternatives: z.array(alternativeGroupSchema),\n compatibleWith: z.array(compatibilityGroupSchema).optional().default([]),\n});\n\n/**\n * Standalone skill-categories.ts file schema.\n * Top-level object with version string and categories map using existing categoryDefinitionSchema.\n */\nexport const skillCategoriesFileSchema = z.object({\n version: z.string(),\n categories: z.record(z.string(), categoryDefinitionSchema) as z.ZodType<CategoryMap>,\n});\n\n/**\n * Standalone skill-rules.ts file schema.\n * Contains version and aggregate relationship rules between skills.\n */\nexport const skillRulesFileSchema = z.object({\n version: z.string(),\n relationships: relationshipDefinitionsSchema.optional(),\n});\n\n/**\n * Raw metadata from a local skill's metadata.yaml.\n * displayName and category are required — the skill must declare both.\n */\nexport const localRawMetadataSchema = z\n .object({\n /** Short name shown in the wizard grid (e.g., \"my-custom-react\") */\n displayName: z.string(),\n /** Kebab-case short key for alias resolution (e.g., \"react\") */\n slug: z.string() as z.ZodType<SkillSlug>,\n /** One-line description for the wizard */\n cliDescription: z.string().optional(),\n /** Category to place this skill in (e.g., \"web-framework\") */\n // Field accepts any string; cross-field validation in superRefine enforces strict/custom rules\n category: z.string() as z.ZodType<CategoryPath>,\n /** When an AI agent should invoke this skill */\n usageGuidance: z.string().optional(),\n tags: z.array(z.string()).optional(),\n /** Domain this skill belongs to (e.g., \"web\", \"api\", \"cli\") */\n domain: z.string() as z.ZodType<Domain>,\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom: z.boolean().optional(),\n })\n .passthrough()\n .superRefine(validateCategoryField);\n\n/** Metadata for local skills that were forked/copied from a marketplace skill */\nexport const localSkillMetadataSchema = z\n .object({\n forkedFrom: z\n .object({\n /** Original skill ID before forking (e.g., \"web-framework-react\") */\n skillId: skillIdSchema,\n /** SHA hash of the original content at fork time (for diff detection) */\n contentHash: z.string(),\n /** ISO date when the fork was created */\n date: z.string(),\n /** Source URL the skill was installed from (e.g., \"github:agents-inc/skills\") */\n source: z.string().optional(),\n })\n .optional(),\n })\n .passthrough();\n\nexport const stackSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string(),\n /** Maps agent IDs to their category-to-skill assignments */\n agents: z.record(z.string(), stackAgentConfigSchema),\n /** High-level philosophy guiding this stack's technology choices */\n philosophy: z.string().optional(),\n});\n\n// Pre-normalization schema: values may be string or string[].\n// loadStacks() normalizes to StacksConfig (all values SkillId[]) after parsing.\nexport const stacksConfigSchema = z.object({\n stacks: z.array(stackSchema).min(1),\n});\n\nexport const marketplaceRemoteSourceSchema: z.ZodType<MarketplaceRemoteSource> = z.object({\n source: z.enum([\"github\", \"url\"]),\n repo: z.string().optional(),\n url: z.string().optional(),\n ref: z.string().optional(),\n});\n\nexport const marketplacePluginSchema: z.ZodType<MarketplacePlugin> = z.object({\n name: z.string().min(1),\n /** Local directory path (relative to pluginRoot) or remote source config */\n source: z.union([z.string(), marketplaceRemoteSourceSchema]),\n description: z.string().optional(),\n version: z.string().optional(),\n author: pluginAuthorSchema.optional(),\n /** Marketplace category for grouping (e.g., \"framework\", \"testing\") */\n category: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n});\n\nexport const marketplaceOwnerSchema: z.ZodType<MarketplaceOwner> = z.object({\n name: z.string().min(1),\n email: z.string().optional(),\n});\n\nexport const marketplaceMetadataSchema: z.ZodType<MarketplaceMetadata> = z.object({\n /** Base directory for resolving plugin source paths (e.g., \"plugins/\") */\n pluginRoot: z.string().optional(),\n});\n\nexport const marketplaceSchema: z.ZodType<Marketplace> = z.object({\n $schema: z.string().optional(),\n name: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n owner: marketplaceOwnerSchema,\n metadata: marketplaceMetadataSchema.optional(),\n plugins: z.array(marketplacePluginSchema).min(1),\n});\n\n/** Tool permission overrides (allow/deny lists for Claude Code tool access) */\nexport const permissionConfigSchema = z.object({\n /** Tool names or patterns to explicitly allow */\n allow: z.array(z.string()).optional(),\n /** Tool names or patterns to explicitly deny */\n deny: z.array(z.string()).optional(),\n});\n\n/** Settings file schema (.claude/settings.yaml) for project-level configuration */\nexport const settingsFileSchema = z\n .object({\n permissions: permissionConfigSchema.optional(),\n })\n .passthrough();\n\n/** Metadata for skills imported via `agentsinc import skill` (tracks original source for updates) */\nexport const importedSkillMetadataSchema = z\n .object({\n forkedFrom: z\n .object({\n /** Source URL or identifier where the skill was imported from */\n source: z.string(),\n /** Original skill name in the source */\n skillName: z.string(),\n /** SHA hash of the original content at import time */\n contentHash: z.string(),\n /** ISO date when the import was performed */\n date: z.string(),\n })\n .optional(),\n })\n .passthrough();\n\n/** Branding overrides for white-labeling the CLI */\nexport const brandingConfigSchema = z.object({\n /** Custom CLI name (e.g., \"Acme Dev Tools\") */\n name: z.string().optional(),\n /** Custom tagline shown in wizard header */\n tagline: z.string().optional(),\n});\n\n/**\n * Project source configuration from .claude-src/config.ts.\n * Stores multi-source settings, custom directory overrides, and bound skills.\n */\nexport const projectSourceConfigSchema = z\n .object({\n /** Primary skills source (path or URL) */\n source: z.string().optional(),\n /** Author handle for this project's config */\n author: z.string().optional(),\n /** Marketplace identifier for plugin installation */\n marketplace: z.string().optional(),\n /** Separate source for agent definitions (when different from skills) */\n agentsSource: z.string().optional(),\n /** Additional skill sources (private marketplaces, custom repos) */\n sources: z\n .array(\n z.object({\n /** Display name for the source (shown in wizard) */\n name: z.string(),\n /** Source URL (e.g., \"github:acme-corp/claude-skills\") */\n url: z.string(),\n description: z.string().optional(),\n /** Git ref (branch/tag/commit) for the source */\n ref: z.string().optional(),\n }),\n )\n .optional(),\n /** Skills explicitly bound to categories via search (from Step Sources) */\n boundSkills: z.array(boundSkillSchema).optional(),\n /** Branding overrides for white-labeling the CLI */\n branding: brandingConfigSchema.optional(),\n /** Custom skills directory override (default: \"src/skills\") */\n skillsDir: z.string().optional(),\n /** Custom agents directory override (default: \"src/agents\") */\n agentsDir: z.string().optional(),\n /** Custom stacks file path override (default: \"config/stacks.ts\") */\n stacksFile: z.string().optional(),\n /** Custom categories file path override (default: \"config/skill-categories.ts\") */\n categoriesFile: z.string().optional(),\n /** Custom rules file path override (default: \"config/skill-rules.ts\") */\n rulesFile: z.string().optional(),\n })\n .passthrough();\n\n/**\n * Strict schema for IDE validation of .claude-src/config.ts (ProjectConfig source fields).\n * Used to generate project-source-config.schema.json for IDE validation.\n * All fields optional (source configs may have any subset) but no unknown properties.\n */\nexport const projectSourceConfigValidationSchema = z.object({\n source: z.string().optional(),\n author: z.string().optional(),\n marketplace: z.string().optional(),\n agentsSource: z.string().optional(),\n sources: z\n .array(\n z.object({\n name: z.string(),\n url: z.string(),\n description: z.string().optional(),\n ref: z.string().optional(),\n }),\n )\n .optional(),\n boundSkills: z.array(boundSkillSchema).optional(),\n branding: brandingConfigSchema.optional(),\n skillsDir: z.string().optional(),\n agentsDir: z.string().optional(),\n stacksFile: z.string().optional(),\n categoriesFile: z.string().optional(),\n rulesFile: z.string().optional(),\n});\n\n// Strict validation schemas enforce all constraints and use .strict() to reject unknown fields,\n// unlike the lenient loader schemas above which use .passthrough() for forward compatibility at parse boundaries\n\n/** Strict schema for compiled agent metadata.yaml output. Lenient id (any string) since marketplace agents may use custom identifiers. */\nexport const agentYamlGenerationSchema = z\n .object({\n $schema: z.string().optional(),\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string().min(1),\n model: modelNameSchema.optional(),\n tools: z.array(z.string()).min(1),\n disallowedTools: z.array(z.string()).optional(),\n permissionMode: permissionModeSchema.optional(),\n hooks: strictHooksRecordSchema.optional(),\n outputFormat: z.string().optional(),\n domain: (z.string() as z.ZodType<Domain>).optional(),\n custom: z.boolean().optional(),\n })\n .strict();\n\n/** Strict validation for agent AGENT.md frontmatter (used by plugin-validator) */\nexport const agentFrontmatterValidationSchema = z\n .object({\n /** Agent name in kebab-case (becomes the Task tool identifier) */\n name: z.string().regex(KEBAB_CASE_PATTERN).min(1),\n description: z.string().min(1),\n /** Comma-separated list of allowed tools */\n tools: z.string().optional(),\n /** Comma-separated list of denied tools */\n disallowedTools: z.string().optional(),\n model: modelNameSchema.optional(),\n permissionMode: permissionModeSchema.optional(),\n /** Skill names to preload (embed in agent prompt) */\n skills: z.array(z.string().min(1)).optional(),\n hooks: strictHooksRecordSchema.optional(),\n })\n .strict();\n\n/** Strict validation for SKILL.md frontmatter (matches Claude Code plugin spec) */\nexport const skillFrontmatterValidationSchema = z\n .object({\n name: z.string().min(1),\n description: z.string().min(1),\n /** If true, Claude cannot invoke this skill on its own */\n \"disable-model-invocation\": z.boolean().optional(),\n /** If true, user can invoke this skill directly */\n \"user-invocable\": z.boolean().optional(),\n /** Comma-separated list of tools this skill can use */\n \"allowed-tools\": z.string().optional(),\n model: modelNameSchema.optional(),\n /** \"fork\" means skill runs in a forked context (separate conversation) */\n context: z.enum([\"fork\"]).optional(),\n /** Agent name this skill is scoped to */\n agent: z.string().optional(),\n /** Hint text shown when user invokes the skill */\n \"argument-hint\": z.string().optional(),\n })\n .strict();\n\n/** Strict validation for metadata.yaml in published skills (enforces author format, enum-validated category/slug) */\nexport const metadataValidationSchema = z\n .object({\n /** Domain-prefixed category — must be a known built-in category */\n category: z.enum(CATEGORIES) as z.ZodType<Category>,\n /** Author handle — must start with @ (e.g., \"@vince\") */\n author: z.string().regex(/^@[a-z][a-z0-9-]*$/),\n /** Short display name for the wizard grid (max 30 chars) */\n displayName: z.string().min(1).max(30),\n /** One-line description for the wizard (max 60 chars) */\n cliDescription: z.string().min(1).max(60),\n /** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */\n usageGuidance: z.string().min(10),\n /** Kebab-case short key — must be a known built-in slug */\n slug: z.enum(SKILL_SLUGS) as z.ZodType<SkillSlug>,\n /** Searchable tags — kebab-case only */\n tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),\n /** 7-char hex SHA of skill content (for change detection) */\n contentHash: z\n .string()\n .regex(/^[a-f0-9]{7}$/)\n .optional(),\n /** ISO date of last update */\n updated: z.string().optional(),\n /** Provenance tracking when skill was forked from another */\n forkedFrom: z\n .object({\n /** Original skill ID */\n skillId: z.string(),\n /** Version of the original at fork time */\n version: z.number().int().min(1).optional(),\n /** Content hash of the original at fork time */\n contentHash: z.string(),\n /** Source URL or identifier */\n source: z.string().optional(),\n /** ISO date of the fork */\n date: z.string(),\n })\n .optional(),\n /** Domain assignment from metadata */\n domain: (z.string() as z.ZodType<Domain>).optional(),\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom: z.boolean().optional(),\n })\n .strict();\n\n/** Relaxed validation for custom skill metadata.yaml (any category string, kebab-case slug, allows extra fields) */\nexport const customMetadataValidationSchema = z.object({\n /** Any string category — custom skills may define their own categories */\n category: z.string(),\n /** Author handle — must start with @ (e.g., \"@vince\") */\n author: z.string().regex(/^@[a-z][a-z0-9-]*$/),\n /** Short display name for the wizard grid (max 30 chars) */\n displayName: z.string().min(1).max(30),\n /** One-line description for the wizard (max 60 chars) */\n cliDescription: z.string().min(1).max(60),\n /** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */\n usageGuidance: z.string().min(10),\n /** Kebab-case short key for alias resolution, search, and relationship rules */\n slug: z\n .string()\n .regex(/^[a-z][a-z0-9-]*$/)\n .min(1)\n .max(50),\n /** Searchable tags — kebab-case only */\n tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),\n /** 7-char hex SHA of skill content (for change detection) */\n contentHash: z\n .string()\n .regex(/^[a-f0-9]{7}$/)\n .optional(),\n /** ISO date of last update */\n updated: z.string().optional(),\n /** Provenance tracking when skill was forked from another */\n forkedFrom: z\n .object({\n /** Original skill ID */\n skillId: z.string(),\n /** Version of the original at fork time */\n version: z.number().int().min(1).optional(),\n /** Content hash of the original at fork time */\n contentHash: z.string(),\n /** Source URL or identifier */\n source: z.string().optional(),\n /** ISO date of the fork */\n date: z.string(),\n })\n .optional(),\n /** Domain assignment from metadata */\n domain: (z.string() as z.ZodType<Domain>).optional(),\n /** True if this skill was created outside the CLI's built-in vocabulary */\n custom: z.boolean().optional(),\n});\n\nconst stackSkillAssignmentSchema = z\n .object({\n id: z.string().min(1),\n /** If true, skill content is embedded in the compiled agent prompt */\n preloaded: z.boolean().optional(),\n })\n .strict();\n\n/** Strict validation for published stack config.yaml (marketplace stacks) */\nexport const stackConfigValidationSchema = z\n .object({\n /** Unique stack identifier in kebab-case */\n id: z.string().regex(KEBAB_CASE_PATTERN).optional(),\n name: z.string().min(1),\n version: z.string(),\n author: z.string().min(1),\n description: z.string().optional(),\n /** ISO date when this stack was first created */\n created: z.string().optional(),\n /** ISO date of last update */\n updated: z.string().optional(),\n /** Primary framework this stack is designed for (e.g., \"nextjs\", \"remix\") */\n framework: z.string().optional(),\n /** All skills used in this stack (flat list, at least one required) */\n skills: z.array(stackSkillAssignmentSchema).min(1),\n /** Agent IDs this stack compiles (at least one required) */\n agents: z.array(z.string().regex(KEBAB_CASE_PATTERN)).min(1),\n /** Per-agent skill assignments: { agentId: { category: [skillAssignment] } } */\n agentSkills: z\n .record(z.string(), z.record(z.string(), z.array(stackSkillAssignmentSchema)))\n .optional(),\n /** High-level philosophy guiding technology choices */\n philosophy: z.string().optional(),\n /** Guiding principles for agents using this stack */\n principles: z.array(z.string().min(1)).optional(),\n tags: z.array(z.string().regex(KEBAB_CASE_PATTERN)).optional(),\n /** Per-skill overrides: alternative suggestions and lock status */\n overrides: z\n .record(\n z.string(),\n z\n .object({\n /** Suggested alternative skill IDs if this one is swapped */\n alternatives: z.array(z.string().min(1)).optional(),\n /** If true, this skill cannot be swapped by the user */\n locked: z.boolean().optional(),\n })\n .strict(),\n )\n .optional(),\n /** Community metrics for sorting/ranking */\n metrics: z\n .object({\n upvotes: z.number().int().min(0).optional(),\n downloads: z.number().int().min(0).optional(),\n })\n .strict()\n .optional(),\n /** Lifecycle hooks triggered by file changes or commands */\n hooks: z\n .record(\n z.string(),\n z.array(\n z.object({\n /** Glob pattern to match file paths (e.g., \"*.tsx\") */\n matcher: z.string().optional(),\n hooks: z.array(agentHookActionSchema).min(1),\n }),\n ),\n )\n .optional(),\n })\n .strict();\n\n/** Format Zod validation issues into a human-readable string (e.g., \"path.to.field: Expected string; other: Required\") */\nexport function formatZodErrors(issues: z.ZodIssue[]): string {\n return issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \");\n}\n\n/**\n * Validates that a parsed JSON/YAML value does not exceed a maximum nesting depth.\n * Returns true if the structure is within limits, false if it exceeds maxDepth.\n */\nexport function validateNestingDepth(value: unknown, maxDepth: number): boolean {\n function check(val: unknown, depth: number): boolean {\n if (depth > maxDepth) return false;\n if (Array.isArray(val)) {\n return val.every((item) => check(item, depth + 1));\n }\n if (val !== null && typeof val === \"object\") {\n return Object.values(val).every((v) => check(v, depth + 1));\n }\n return true;\n }\n return check(value, 0);\n}\n\n/**\n * Logs warnings for unknown fields in a parsed object compared to a list of expected keys.\n * Used at security-critical parsing boundaries (marketplace, settings) where `.passthrough()`\n * is kept for forward compatibility but unexpected fields should be surfaced.\n */\nexport function warnUnknownFields(\n parsed: Record<string, unknown>,\n expectedKeys: readonly string[],\n context: string,\n): void {\n const expectedSet = new Set(expectedKeys);\n const unknownKeys = Object.keys(parsed).filter((k) => !expectedSet.has(k));\n if (unknownKeys.length > 0) {\n warn(`Unknown fields in ${context}: ${unknownKeys.join(\", \")}`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-KYULKBFC.js";
|
|
12
12
|
import {
|
|
13
13
|
useWizardStore
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OLWGGD4G.js";
|
|
15
15
|
import {
|
|
16
16
|
HOTKEY_ACCEPT_DEFAULTS,
|
|
17
17
|
HOTKEY_HELP,
|
|
@@ -203,4 +203,4 @@ var WizardLayout = ({
|
|
|
203
203
|
export {
|
|
204
204
|
WizardLayout
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=chunk-
|
|
206
|
+
//# sourceMappingURL=chunk-Y47CLMWE.js.map
|