@agents-inc/cli 0.75.1 → 0.76.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 +12 -0
- package/dist/{chunk-SXGBPQY6.js → chunk-2I5SXGXR.js} +2 -2
- package/dist/{chunk-CUCF5LM4.js → chunk-36YW5E7G.js} +5 -5
- package/dist/{chunk-T5DJCIUP.js → chunk-3REKTRAN.js} +2 -2
- package/dist/{chunk-UQKCYLOA.js → chunk-6F3CZLD6.js} +9 -9
- package/dist/chunk-6F3CZLD6.js.map +1 -0
- package/dist/{chunk-JOTAIMTC.js → chunk-7NACNRFG.js} +4 -4
- package/dist/{chunk-SPATQKH6.js → chunk-7PMFIL5L.js} +3 -3
- package/dist/{chunk-GMUOEQOY.js → chunk-7PZFDI46.js} +4 -4
- package/dist/{chunk-PSU42CXK.js → chunk-7XUKTYVD.js} +182 -294
- package/dist/chunk-7XUKTYVD.js.map +1 -0
- package/dist/{chunk-WXC2Y5TF.js → chunk-AE2QHAFO.js} +7 -7
- package/dist/{chunk-ZZJ6H6VB.js → chunk-CBJTSEI2.js} +5 -5
- package/dist/{chunk-AOZBHMYL.js → chunk-CCSU4R65.js} +3 -3
- package/dist/{chunk-XZ57QYVI.js → chunk-CKU7FJNV.js} +4 -4
- package/dist/{chunk-QN3V3ES7.js → chunk-EEZSCHS2.js} +9 -9
- package/dist/{chunk-CBXMOWQY.js → chunk-ERHTXNIF.js} +3 -3
- package/dist/{chunk-GCT7LSYW.js → chunk-EWBNSS5Y.js} +6 -6
- package/dist/{chunk-TQLDQ3XZ.js → chunk-EYFBODHL.js} +2 -2
- package/dist/{chunk-AUNBGZS4.js → chunk-FFMWFEUH.js} +2 -2
- package/dist/{chunk-EGMQ3SXN.js → chunk-FMYAYX6W.js} +1 -1
- package/dist/chunk-FMYAYX6W.js.map +1 -0
- package/dist/{chunk-W22IYRZV.js → chunk-I2SUTL7S.js} +5 -5
- package/dist/{chunk-XHTN56UT.js → chunk-I534EWJQ.js} +3 -3
- package/dist/{chunk-2PZ7LBFT.js → chunk-IDN2OZJY.js} +2 -2
- package/dist/{chunk-HKIQA4F6.js → chunk-JWMYAJHD.js} +637 -2179
- package/dist/chunk-JWMYAJHD.js.map +1 -0
- package/dist/{chunk-MWGDG4QN.js → chunk-K63OEZW7.js} +2 -2
- package/dist/{chunk-Q72ZBA4X.js → chunk-KPRCP3MZ.js} +3 -3
- package/dist/{chunk-FYYIRFYT.js → chunk-LO5QGAP2.js} +5 -5
- package/dist/{chunk-TYM4D3OF.js → chunk-M4ZDKHJV.js} +3 -3
- package/dist/{chunk-TYM4D3OF.js.map → chunk-M4ZDKHJV.js.map} +1 -1
- package/dist/{chunk-CXRVM7BA.js → chunk-M76LNKMY.js} +2 -2
- package/dist/{chunk-WF5PMBIR.js → chunk-MLXAZODL.js} +2 -2
- package/dist/{chunk-UFKDY45I.js → chunk-NWW3OJH5.js} +3 -3
- package/dist/{chunk-U5R4M7MA.js → chunk-O5CPXIC4.js} +5 -5
- package/dist/{chunk-7QAVO7VN.js → chunk-ODVQXXEO.js} +14 -14
- package/dist/{chunk-BVSWWBPE.js → chunk-PRG7PKZM.js} +5 -5
- package/dist/{chunk-SYGXJBG6.js → chunk-Q4PJSAMP.js} +20 -11
- package/dist/chunk-Q4PJSAMP.js.map +1 -0
- package/dist/{chunk-Q3F36QZZ.js → chunk-R7F5YQMI.js} +2 -2
- package/dist/{chunk-FHHTDPMW.js → chunk-S6DKM6MJ.js} +6 -6
- package/dist/{chunk-XMLCXRTS.js → chunk-SQ7WINEU.js} +3 -3
- package/dist/{chunk-U6A4YFOF.js → chunk-UBNHVBSV.js} +4 -4
- package/dist/{chunk-VU4ZCRZS.js → chunk-VQV3DSHD.js} +6 -6
- package/dist/{chunk-JGSPESM3.js → chunk-WMMU5FOO.js} +15 -12
- package/dist/chunk-WMMU5FOO.js.map +1 -0
- package/dist/{chunk-6C66NL4X.js → chunk-WN2TUP4M.js} +4 -4
- package/dist/chunk-WN2TUP4M.js.map +1 -0
- package/dist/{chunk-5BGBH3KD.js → chunk-WS3TL2AO.js} +8 -8
- package/dist/{chunk-DFKNFZI2.js → chunk-WZ5S4LGX.js} +6 -6
- package/dist/{chunk-KDYE3AGL.js → chunk-XYZ7B5BY.js} +2 -2
- package/dist/commands/build/marketplace.js +5 -5
- package/dist/commands/build/plugins.js +9 -9
- package/dist/commands/build/stack.js +9 -9
- package/dist/commands/compile.js +10 -10
- package/dist/commands/config/index.js +9 -9
- package/dist/commands/config/path.js +8 -8
- package/dist/commands/config/show.js +9 -9
- package/dist/commands/diff.js +8 -8
- package/dist/commands/doctor.js +8 -8
- package/dist/commands/edit.js +33 -33
- package/dist/commands/eject.js +8 -8
- package/dist/commands/import/skill.js +9 -9
- package/dist/commands/info.js +9 -9
- package/dist/commands/init.js +33 -33
- package/dist/commands/list.js +8 -8
- package/dist/commands/new/agent.js +9 -9
- package/dist/commands/new/marketplace.js +10 -10
- package/dist/commands/new/skill.js +9 -9
- package/dist/commands/outdated.js +8 -8
- package/dist/commands/search.js +11 -11
- package/dist/commands/uninstall.js +9 -9
- package/dist/commands/update.js +10 -10
- package/dist/commands/validate.js +9 -9
- package/dist/components/common/select-list.js +2 -2
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +4 -4
- package/dist/components/wizard/category-grid.test.js +13 -13
- package/dist/components/wizard/checkbox-grid.js +4 -4
- package/dist/components/wizard/checkbox-grid.test.js +4 -4
- package/dist/components/wizard/domain-selection.js +13 -13
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.js +1 -1
- package/dist/components/wizard/search-modal.js +3 -3
- package/dist/components/wizard/search-modal.test.js +3 -3
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/selection-card.js +2 -2
- package/dist/components/wizard/source-grid.js +6 -6
- package/dist/components/wizard/source-grid.test.js +15 -15
- package/dist/components/wizard/stack-selection.js +11 -11
- package/dist/components/wizard/step-agents.js +12 -12
- package/dist/components/wizard/step-agents.test.js +15 -15
- package/dist/components/wizard/step-build.js +12 -12
- package/dist/components/wizard/step-build.test.js +14 -14
- package/dist/components/wizard/step-confirm.js +5 -5
- package/dist/components/wizard/step-confirm.test.js +11 -11
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +2 -2
- package/dist/components/wizard/step-settings.js +10 -10
- package/dist/components/wizard/step-settings.test.js +13 -13
- package/dist/components/wizard/step-sources.js +14 -14
- package/dist/components/wizard/step-sources.test.js +17 -17
- package/dist/components/wizard/step-stack.js +16 -16
- package/dist/components/wizard/step-stack.test.js +17 -17
- package/dist/components/wizard/wizard-layout.js +11 -11
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +2 -2
- package/dist/components/wizard/wizard.js +30 -30
- package/dist/config-exports.js +1 -1
- package/dist/hooks/init.js +33 -33
- package/dist/{loader-TK7YS2I5.js → loader-7RQ4G4TH.js} +5 -5
- package/dist/{source-loader-UQXJVVSO.js → source-loader-CXCIDGWV.js} +8 -8
- package/dist/source-manager-TPLO2DVS.js +19 -0
- package/dist/src/agents/_templates/agent.liquid +24 -0
- package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
- package/dist/src/agents/_templates/methodologies/context-management.liquid +162 -0
- package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
- package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
- package/dist/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
- package/dist/src/agents/_templates/methodologies/write-verification.liquid +43 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +2 -2
- package/dist/src/agents/meta/skill-summoner/workflow.md +48 -3
- package/dist/stores/wizard-store.js +8 -8
- package/dist/stores/wizard-store.test.js +36 -36
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/_templates/agent.liquid +24 -0
- package/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
- package/src/agents/_templates/methodologies/context-management.liquid +162 -0
- package/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
- package/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
- package/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
- package/src/agents/_templates/methodologies/write-verification.liquid +43 -0
- package/src/agents/meta/agent-summoner/workflow.md +2 -2
- package/src/agents/meta/skill-summoner/workflow.md +48 -3
- package/dist/chunk-6C66NL4X.js.map +0 -1
- package/dist/chunk-EGMQ3SXN.js.map +0 -1
- package/dist/chunk-HKIQA4F6.js.map +0 -1
- package/dist/chunk-JGSPESM3.js.map +0 -1
- package/dist/chunk-PSU42CXK.js.map +0 -1
- package/dist/chunk-SYGXJBG6.js.map +0 -1
- package/dist/chunk-UQKCYLOA.js.map +0 -1
- package/dist/source-manager-HS2ZT4XE.js +0 -19
- /package/dist/{chunk-SXGBPQY6.js.map → chunk-2I5SXGXR.js.map} +0 -0
- /package/dist/{chunk-CUCF5LM4.js.map → chunk-36YW5E7G.js.map} +0 -0
- /package/dist/{chunk-T5DJCIUP.js.map → chunk-3REKTRAN.js.map} +0 -0
- /package/dist/{chunk-JOTAIMTC.js.map → chunk-7NACNRFG.js.map} +0 -0
- /package/dist/{chunk-SPATQKH6.js.map → chunk-7PMFIL5L.js.map} +0 -0
- /package/dist/{chunk-GMUOEQOY.js.map → chunk-7PZFDI46.js.map} +0 -0
- /package/dist/{chunk-WXC2Y5TF.js.map → chunk-AE2QHAFO.js.map} +0 -0
- /package/dist/{chunk-ZZJ6H6VB.js.map → chunk-CBJTSEI2.js.map} +0 -0
- /package/dist/{chunk-AOZBHMYL.js.map → chunk-CCSU4R65.js.map} +0 -0
- /package/dist/{chunk-XZ57QYVI.js.map → chunk-CKU7FJNV.js.map} +0 -0
- /package/dist/{chunk-QN3V3ES7.js.map → chunk-EEZSCHS2.js.map} +0 -0
- /package/dist/{chunk-CBXMOWQY.js.map → chunk-ERHTXNIF.js.map} +0 -0
- /package/dist/{chunk-GCT7LSYW.js.map → chunk-EWBNSS5Y.js.map} +0 -0
- /package/dist/{chunk-TQLDQ3XZ.js.map → chunk-EYFBODHL.js.map} +0 -0
- /package/dist/{chunk-AUNBGZS4.js.map → chunk-FFMWFEUH.js.map} +0 -0
- /package/dist/{chunk-W22IYRZV.js.map → chunk-I2SUTL7S.js.map} +0 -0
- /package/dist/{chunk-XHTN56UT.js.map → chunk-I534EWJQ.js.map} +0 -0
- /package/dist/{chunk-2PZ7LBFT.js.map → chunk-IDN2OZJY.js.map} +0 -0
- /package/dist/{chunk-MWGDG4QN.js.map → chunk-K63OEZW7.js.map} +0 -0
- /package/dist/{chunk-Q72ZBA4X.js.map → chunk-KPRCP3MZ.js.map} +0 -0
- /package/dist/{chunk-FYYIRFYT.js.map → chunk-LO5QGAP2.js.map} +0 -0
- /package/dist/{chunk-CXRVM7BA.js.map → chunk-M76LNKMY.js.map} +0 -0
- /package/dist/{chunk-WF5PMBIR.js.map → chunk-MLXAZODL.js.map} +0 -0
- /package/dist/{chunk-UFKDY45I.js.map → chunk-NWW3OJH5.js.map} +0 -0
- /package/dist/{chunk-U5R4M7MA.js.map → chunk-O5CPXIC4.js.map} +0 -0
- /package/dist/{chunk-7QAVO7VN.js.map → chunk-ODVQXXEO.js.map} +0 -0
- /package/dist/{chunk-BVSWWBPE.js.map → chunk-PRG7PKZM.js.map} +0 -0
- /package/dist/{chunk-Q3F36QZZ.js.map → chunk-R7F5YQMI.js.map} +0 -0
- /package/dist/{chunk-FHHTDPMW.js.map → chunk-S6DKM6MJ.js.map} +0 -0
- /package/dist/{chunk-XMLCXRTS.js.map → chunk-SQ7WINEU.js.map} +0 -0
- /package/dist/{chunk-U6A4YFOF.js.map → chunk-UBNHVBSV.js.map} +0 -0
- /package/dist/{chunk-VU4ZCRZS.js.map → chunk-VQV3DSHD.js.map} +0 -0
- /package/dist/{chunk-5BGBH3KD.js.map → chunk-WS3TL2AO.js.map} +0 -0
- /package/dist/{chunk-DFKNFZI2.js.map → chunk-WZ5S4LGX.js.map} +0 -0
- /package/dist/{chunk-KDYE3AGL.js.map → chunk-XYZ7B5BY.js.map} +0 -0
- /package/dist/{loader-TK7YS2I5.js.map → loader-7RQ4G4TH.js.map} +0 -0
- /package/dist/{source-loader-UQXJVVSO.js.map → source-loader-CXCIDGWV.js.map} +0 -0
- /package/dist/{source-manager-HS2ZT4XE.js.map → source-manager-TPLO2DVS.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
typedEntries
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JWMYAJHD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -106,15 +106,18 @@ function getCanonicalSkillCategories() {
|
|
|
106
106
|
"infra-ci-cd-gitlab-ci": "shared-ci-cd",
|
|
107
107
|
"web-accessibility-a11y": "web-accessibility",
|
|
108
108
|
"web-animation-framer": "web-animation",
|
|
109
|
-
"meta-methodology-investigation": "shared-
|
|
110
|
-
"meta-methodology-success-criteria": "shared-
|
|
111
|
-
"meta-methodology-investigation-requirements": "shared-
|
|
112
|
-
"meta-methodology-anti-over-engineering": "shared-
|
|
113
|
-
"meta-methodology-write-verification": "shared-
|
|
114
|
-
"meta-methodology-improvement-protocol": "shared-
|
|
115
|
-
"meta-methodology-context-management": "shared-
|
|
109
|
+
"meta-methodology-investigation": "shared-meta",
|
|
110
|
+
"meta-methodology-success-criteria": "shared-meta",
|
|
111
|
+
"meta-methodology-investigation-requirements": "shared-meta",
|
|
112
|
+
"meta-methodology-anti-over-engineering": "shared-meta",
|
|
113
|
+
"meta-methodology-write-verification": "shared-meta",
|
|
114
|
+
"meta-methodology-improvement-protocol": "shared-meta",
|
|
115
|
+
"meta-methodology-context-management": "shared-meta",
|
|
116
|
+
"shared-meta-research-methodology": "shared-meta",
|
|
117
|
+
"shared-meta-reviewing": "shared-meta",
|
|
118
|
+
"shared-meta-cli-reviewing": "shared-meta",
|
|
116
119
|
"meta-company-patterns": "local",
|
|
117
|
-
"meta-test-skill": "shared-
|
|
120
|
+
"meta-test-skill": "shared-meta",
|
|
118
121
|
"web-framework-nonexistent": "web-framework",
|
|
119
122
|
"web-framework-react-pro": "web-framework",
|
|
120
123
|
"web-framework-react-strict": "web-framework",
|
|
@@ -316,7 +319,7 @@ var SKILLS = {
|
|
|
316
319
|
hono: createMockSkill("api-framework-hono"),
|
|
317
320
|
drizzle: createMockSkill("api-database-drizzle"),
|
|
318
321
|
// Methodology
|
|
319
|
-
antiOverEng: createMockSkill("meta-
|
|
322
|
+
antiOverEng: createMockSkill("shared-meta-reviewing", {
|
|
320
323
|
description: "Surgical implementation, not architectural innovation"
|
|
321
324
|
})
|
|
322
325
|
};
|
|
@@ -334,7 +337,7 @@ var TEST_CATEGORIES = {
|
|
|
334
337
|
database: createMockCategory("api-database", "Database"),
|
|
335
338
|
observability: createMockCategory("api-observability", "Observability"),
|
|
336
339
|
// Shared domain
|
|
337
|
-
methodology: createMockCategory("shared-
|
|
340
|
+
methodology: createMockCategory("shared-meta", "Meta"),
|
|
338
341
|
tooling: createMockCategory("shared-tooling", "Tooling"),
|
|
339
342
|
security: createMockCategory("shared-security", "Security"),
|
|
340
343
|
// CLI domain
|
|
@@ -359,4 +362,4 @@ export {
|
|
|
359
362
|
createMockCompileConfig,
|
|
360
363
|
testSkillToResolvedSkill
|
|
361
364
|
};
|
|
362
|
-
//# sourceMappingURL=chunk-
|
|
365
|
+
//# sourceMappingURL=chunk-WMMU5FOO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/__tests__/test-fixtures.ts","../src/cli/lib/__tests__/helpers.ts","../src/cli/lib/__tests__/content-generators.ts"],"sourcesContent":["import type { ResolvedSkill } from \"../../types\";\nimport { createMockSkill, createMockCategory } from \"./helpers\";\n\n// ---------------------------------------------------------------------------\n// Canonical SKILLS registry — single source of truth for all test ResolvedSkills.\n// Use SKILLS.react, SKILLS.hono etc. directly in new test code.\n// ---------------------------------------------------------------------------\n\nexport const SKILLS = {\n // Web domain\n react: createMockSkill(\"web-framework-react\"),\n vue: createMockSkill(\"web-framework-vue-composition-api\"),\n zustand: createMockSkill(\"web-state-zustand\", {\n compatibleWith: [\"web-framework-react\"],\n }),\n pinia: createMockSkill(\"web-state-pinia\", {\n compatibleWith: [\"web-framework-vue-composition-api\"],\n }),\n scss: createMockSkill(\"web-styling-scss-modules\"),\n tailwind: createMockSkill(\"web-styling-tailwind\"),\n vitest: createMockSkill(\"web-testing-vitest\"),\n // API domain\n hono: createMockSkill(\"api-framework-hono\"),\n drizzle: createMockSkill(\"api-database-drizzle\"),\n // Methodology\n antiOverEng: createMockSkill(\"shared-meta-reviewing\", {\n description: \"Surgical implementation, not architectural innovation\",\n }),\n} satisfies Record<string, ResolvedSkill>;\n\n// ---------------------------------------------------------------------------\n// Shared base category fixtures — canonical defaults with no overrides.\n// Use spread for per-test customization: `{ ...TEST_CATEGORIES.framework, required: true }`\n// ---------------------------------------------------------------------------\n\nexport const TEST_CATEGORIES = {\n // Web domain\n framework: createMockCategory(\"web-framework\", \"Framework\"),\n clientState: createMockCategory(\"web-client-state\", \"Client State\"),\n styling: createMockCategory(\"web-styling\", \"Styling\"),\n testing: createMockCategory(\"web-testing\", \"Testing\"),\n serverState: createMockCategory(\"web-server-state\", \"Server State\"),\n animation: createMockCategory(\"web-animation\", \"Animation\"),\n accessibility: createMockCategory(\"web-accessibility\", \"Accessibility\"),\n // API domain\n api: createMockCategory(\"api-api\", \"Backend Framework\"),\n database: createMockCategory(\"api-database\", \"Database\"),\n observability: createMockCategory(\"api-observability\", \"Observability\"),\n // Shared domain\n methodology: createMockCategory(\"shared-meta\", \"Meta\"),\n tooling: createMockCategory(\"shared-tooling\", \"Tooling\"),\n security: createMockCategory(\"shared-security\", \"Security\"),\n // CLI domain\n cliFramework: createMockCategory(\"cli-framework\", \"CLI Framework\"),\n // Mobile domain\n mobileFramework: createMockCategory(\"mobile-framework\", \"Mobile Framework\"),\n};\n","import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { mkdir, writeFile, readFile } from \"fs/promises\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { run, Errors } from \"@oclif/core\";\nimport ansis from \"ansis\";\nimport { createJiti } from \"jiti\";\nimport {\n CLAUDE_DIR,\n CLAUDE_SRC_DIR,\n DEFAULT_PLUGIN_NAME,\n PLUGINS_SUBDIR,\n STANDARD_DIRS,\n STANDARD_FILES,\n} from \"../../consts\";\nimport { matrix } from \"../matrix/matrix-provider\";\nimport { typedEntries } from \"../../utils/typed-object\";\nimport { computeSkillFolderHash } from \"../versioning\";\nimport { renderSkillMd, renderAgentYaml, renderConfigTs } from \"./content-generators\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport const CLI_ROOT = path.resolve(__dirname, \"../../../..\");\n\n/** Resolve @agents-inc/cli/config to the source config-exports.ts so jiti can load it in dev. */\nconst CONFIG_EXPORTS_PATH = path.resolve(__dirname, \"../../config-exports.ts\");\n\n/**\n * Run a CLI command and capture its output.\n *\n * Bun's `console.log` does not go through `process.stdout.write`, so\n * `@oclif/test`'s `runCommand` (which only intercepts `process.stdout.write`)\n * returns empty stdout/stderr in bun. This helper intercepts both layers\n * to work correctly in both Node.js and bun environments.\n */\nexport async function runCliCommand(args: string[]) {\n const origStdoutWrite = process.stdout.write;\n const origStderrWrite = process.stderr.write;\n const origLog = console.log;\n const origWarn = console.warn;\n const origError = console.error;\n\n const stdoutBuf: string[] = [];\n const stderrBuf: string[] = [];\n\n // Intercept process.stdout/stderr.write (Node.js path)\n process.stdout.write = function (str: unknown, encoding?: unknown, cb?: unknown): boolean {\n stdoutBuf.push(String(str));\n if (typeof encoding === \"function\") {\n (encoding as () => void)();\n } else if (typeof cb === \"function\") {\n (cb as () => void)();\n }\n return true;\n } as typeof process.stdout.write;\n\n process.stderr.write = function (str: unknown, encoding?: unknown, cb?: unknown): boolean {\n stderrBuf.push(String(str));\n if (typeof encoding === \"function\") {\n (encoding as () => void)();\n } else if (typeof cb === \"function\") {\n (cb as () => void)();\n }\n return true;\n } as typeof process.stderr.write;\n\n // Intercept console methods (bun path — console.log bypasses process.stdout.write)\n console.log = (...logArgs: unknown[]) => {\n stdoutBuf.push(logArgs.map(String).join(\" \") + \"\\n\");\n };\n console.warn = (...warnArgs: unknown[]) => {\n stderrBuf.push(warnArgs.map(String).join(\" \") + \"\\n\");\n };\n console.error = (...errArgs: unknown[]) => {\n stderrBuf.push(errArgs.map(String).join(\" \") + \"\\n\");\n };\n\n let error: (Error & Partial<Errors.CLIError>) | undefined;\n try {\n await run(args, { root: CLI_ROOT });\n } catch (e) {\n if (e instanceof Error) {\n error = Object.assign(e, { message: ansis.strip(e.message) }) as Error &\n Partial<Errors.CLIError>;\n }\n } finally {\n process.stdout.write = origStdoutWrite;\n process.stderr.write = origStderrWrite;\n console.log = origLog;\n console.warn = origWarn;\n console.error = origError;\n }\n\n return {\n stdout: stdoutBuf.map((s) => ansis.strip(s)).join(\"\"),\n stderr: stderrBuf.map((s) => ansis.strip(s)).join(\"\"),\n error,\n };\n}\nimport type {\n AgentConfig,\n AgentDefinition,\n AgentName,\n AgentScopeConfig,\n CategoryDefinition,\n CategoryPath,\n CompiledAgentData,\n CompileAgentConfig,\n CompileConfig,\n CompileContext,\n Domain,\n DomainSelections,\n ExtractedSkillMetadata,\n Marketplace,\n MarketplacePlugin,\n MergedSkillsMatrix,\n ProjectConfig,\n ResolvedSkill,\n ResolvedStack,\n Skill,\n SkillAssignment,\n SkillConfig,\n SkillDefinition,\n SkillSlug,\n SkillSlugMap,\n SkillId,\n SkillSource,\n SkillSourceType,\n RelationshipDefinitions,\n RawStacksConfig,\n Stack,\n StackAgentConfig,\n Category,\n} from \"../../types\";\nimport type { CompiledStackPlugin } from \"../stacks/stack-plugin-compiler\";\nimport type { WizardResultV2 } from \"../../components/wizard/wizard\";\nimport type { SourceLoadResult } from \"../loading/source-loader\";\nimport type { ResolvedConfig } from \"../configuration/config\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport { resolveAlias, validateSelection } from \"../matrix\";\nimport type { TestProjectConfig, TestSkill } from \"./fixtures/create-test-source\";\nimport { SKILLS, TEST_CATEGORIES } from \"./test-fixtures\";\n\nexport { fileExists, directoryExists } from \"./test-fs-utils\";\n\nexport async function readTestYaml<T>(filePath: string): Promise<T> {\n const content = await readFile(filePath, \"utf-8\");\n // Boundary cast: YAML parse returns `unknown`, caller provides expected type\n return parseYaml(content) as T;\n}\n\n/**\n * Load a config file using jiti. Handles defineConfig(), satisfies, and plain exports.\n */\nexport async function readTestTsConfig<T>(filePath: string): Promise<T> {\n const jiti = createJiti(import.meta.url, {\n moduleCache: false,\n interopDefault: true,\n alias: { \"@agents-inc/cli/config\": CONFIG_EXPORTS_PATH },\n });\n // Boundary cast: jiti returns unknown, caller provides expected type\n const result = await jiti.import(filePath, { default: true });\n return result as T;\n}\n\n/** Writes a config file with the given object into the given subdirectory (defaults to CLAUDE_SRC_DIR) */\nexport async function writeTestTsConfig(\n projectDir: string,\n config: Record<string, unknown>,\n configSubdir: string = CLAUDE_SRC_DIR,\n): Promise<void> {\n const configDir = path.join(projectDir, configSubdir);\n await mkdir(configDir, { recursive: true });\n await writeFile(path.join(configDir, STANDARD_FILES.CONFIG_TS), renderConfigTs(config));\n}\n\nexport function buildSourceConfig(overrides?: Record<string, unknown>): Record<string, unknown> {\n return {\n source: \"github:test-org/skills\",\n ...overrides,\n };\n}\n\nexport function buildProjectConfig(overrides?: Partial<ProjectConfig>): ProjectConfig {\n return {\n name: \"test-project\",\n agents: [{ name: \"web-developer\", scope: \"project\" }],\n skills: buildSkillConfigs([\"web-framework-react\"]),\n ...overrides,\n };\n}\n\nexport function buildWizardResult(\n skills: SkillConfig[],\n overrides?: Partial<WizardResultV2>,\n): WizardResultV2 {\n return {\n skills,\n selectedAgents: [],\n agentConfigs: [],\n selectedStackId: null,\n domainSelections: {} as DomainSelections,\n selectedDomains: [],\n cancelled: false,\n validation: { valid: true, errors: [], warnings: [] },\n ...overrides,\n };\n}\n\n/** Build a SkillConfig array from skill IDs with default scope and source */\nexport function buildSkillConfigs(\n skillIds: SkillId[],\n overrides?: Partial<Omit<SkillConfig, \"id\">>,\n): SkillConfig[] {\n return skillIds.map((id) => ({\n id,\n scope: overrides?.scope ?? \"project\",\n source: overrides?.source ?? \"local\",\n }));\n}\n\nexport function buildAgentConfigs(\n agentNames: string[],\n overrides?: Partial<Omit<AgentScopeConfig, \"name\">>,\n): AgentScopeConfig[] {\n return agentNames.map((name) => ({\n // Boundary cast: test factory accepts arbitrary agent names for test isolation\n name: name as AgentName,\n scope: overrides?.scope ?? \"project\",\n }));\n}\n\nexport function buildSourceResult(\n matrix: MergedSkillsMatrix,\n sourcePath: string,\n overrides?: Partial<SourceLoadResult>,\n): SourceLoadResult {\n const sourceConfig: ResolvedConfig = {\n source: sourcePath,\n sourceOrigin: \"flag\",\n };\n return {\n matrix,\n sourceConfig,\n sourcePath,\n isLocal: true,\n ...overrides,\n };\n}\n\n/**\n * Lightweight frontmatter parser for test assertions.\n * Returns raw key-value pairs (unlike the production parseFrontmatter which\n * returns typed SkillFrontmatter with Zod validation).\n */\nexport function parseTestFrontmatter(content: string): Record<string, unknown> | null {\n if (!content.startsWith(\"---\")) {\n return null;\n }\n\n const endIndex = content.indexOf(\"---\", 3);\n if (endIndex === -1) {\n return null;\n }\n\n const yamlContent = content.slice(3, endIndex).trim();\n try {\n // Boundary cast: YAML parse returns `unknown`\n return parseYaml(yamlContent) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nimport { createTempDir, cleanupTempDir } from \"./test-fs-utils\";\nexport { createTempDir, cleanupTempDir };\n\nexport interface PluginTestDirs {\n tempDir: string;\n projectDir: string;\n pluginDir: string;\n skillsDir: string;\n agentsDir: string;\n}\n\nexport async function createTestDirs(prefix = \"ai-test-\"): Promise<PluginTestDirs> {\n const tempDir = await createTempDir(prefix);\n const projectDir = path.join(tempDir, \"project\");\n const pluginDir = path.join(projectDir, CLAUDE_DIR, PLUGINS_SUBDIR, DEFAULT_PLUGIN_NAME);\n const skillsDir = path.join(pluginDir, STANDARD_DIRS.SKILLS);\n const agentsDir = path.join(pluginDir, \"agents\");\n\n await mkdir(skillsDir, { recursive: true });\n await mkdir(agentsDir, { recursive: true });\n\n return { tempDir, projectDir, pluginDir, skillsDir, agentsDir };\n}\n\nexport async function cleanupTestDirs(dirs: PluginTestDirs): Promise<void> {\n await cleanupTempDir(dirs.tempDir);\n}\n\n/**\n * Canonical category for known test skills.\n * createMockSkill() looks up from here when no category override is provided.\n * Custom/novel skills must pass { category } in overrides.\n *\n * Uses a lazy singleton to avoid circular initialization issues:\n * test-fixtures.ts calls createMockSkill() at module level during import,\n * and ESM hoists all imports before evaluating any `const` declarations.\n */\n// eslint-disable-next-line no-var -- `var` avoids TDZ in circular ESM imports (let/const would throw)\n// Boundary cast: test factory maps arbitrary skill IDs to category strings (not all are valid Category union members)\nvar _canonicalSkillCategories: Record<string, string> | undefined;\nfunction getCanonicalSkillCategories(): Record<string, string> {\n if (!_canonicalSkillCategories) {\n _canonicalSkillCategories = {\n \"web-framework-react\": \"web-framework\",\n \"web-framework-vue-composition-api\": \"web-framework\",\n \"web-framework-original\": \"web-framework\",\n \"web-framework-simple\": \"web-framework\",\n \"web-framework-arbitrary\": \"web-framework\",\n \"web-framework-unknown\": \"web-framework\",\n \"web-styling-tailwind\": \"web-styling\",\n \"web-styling-scss-modules\": \"web-styling\",\n \"web-styling-custom\": \"web-styling\",\n \"web-state-zustand\": \"web-client-state\",\n \"web-state-pinia\": \"web-client-state\",\n \"web-state-mobx\": \"web-client-state\",\n \"web-testing-vitest\": \"web-testing\",\n \"web-testing-copier\": \"web-testing\",\n \"web-testing-metadata\": \"web-testing\",\n \"web-testing-playwright\": \"web-testing\",\n \"web-testing-cypress-e2e\": \"web-testing\",\n \"web-testing-playwright-e2e\": \"web-testing\",\n \"web-server-state-react-query\": \"web-server-state\",\n \"web-data-fetching-react-query\": \"web-server-state\",\n \"web-tooling-vite\": \"shared-tooling\",\n \"web-tooling-acme\": \"web-tooling\",\n \"web-tooling-custom\": \"web-tooling\",\n \"web-tooling-nometadata\": \"web-tooling\",\n \"web-tooling-personal\": \"web-tooling\",\n \"web-tooling-valid\": \"web-tooling\",\n \"web-tooling-incomplete\": \"web-tooling\",\n \"web-tooling-my-skill\": \"web-tooling\",\n \"web-tooling-forked-skill\": \"web-tooling\",\n \"web-tooling-test-minimal\": \"web-tooling\",\n \"web-tooling-local-skill\": \"web-tooling\",\n \"web-skill-a\": \"web-framework\",\n \"web-skill-a-v\": \"web-framework\",\n \"web-skill-b\": \"web-framework\",\n \"web-skill-b-v\": \"web-framework\",\n \"web-skill-c\": \"web-framework\",\n \"web-skill-d\": \"web-framework\",\n \"web-skill-setup\": \"web-framework\",\n \"web-skill-usage\": \"web-framework\",\n \"web-local-skill\": \"local\",\n \"web-custom-skill\": \"web-framework\",\n \"web-missing-skill\": \"web-framework\",\n \"web-unknown-skill\": \"web-framework\",\n \"web-nonexistent-skill\": \"web-framework\",\n \"api-framework-hono\": \"api-api\",\n \"api-framework-express\": \"api-api\",\n \"api-database-drizzle\": \"api-database\",\n \"api-security-auth-patterns\": \"api-security\",\n \"api-observability-datadog\": \"api-observability\",\n \"cli-framework-commander\": \"cli-framework\",\n \"infra-setup-env\": \"shared-tooling\",\n \"infra-tooling-linter\": \"unmapped-category\",\n \"infra-tooling-docker\": \"shared-tooling\",\n \"infra-ci-cd-github-actions\": \"shared-ci-cd\",\n \"infra-ci-cd-gitlab-ci\": \"shared-ci-cd\",\n \"web-accessibility-a11y\": \"web-accessibility\",\n \"web-animation-framer\": \"web-animation\",\n \"meta-methodology-investigation\": \"shared-meta\",\n \"meta-methodology-success-criteria\": \"shared-meta\",\n \"meta-methodology-investigation-requirements\": \"shared-meta\",\n \"meta-methodology-anti-over-engineering\": \"shared-meta\",\n \"meta-methodology-write-verification\": \"shared-meta\",\n \"meta-methodology-improvement-protocol\": \"shared-meta\",\n \"meta-methodology-context-management\": \"shared-meta\",\n \"shared-meta-research-methodology\": \"shared-meta\",\n \"shared-meta-reviewing\": \"shared-meta\",\n \"shared-meta-cli-reviewing\": \"shared-meta\",\n \"meta-company-patterns\": \"local\",\n \"meta-test-skill\": \"shared-meta\",\n \"web-framework-nonexistent\": \"web-framework\",\n \"web-framework-react-pro\": \"web-framework\",\n \"web-framework-react-strict\": \"web-framework\",\n \"web-framework-react-minimal\": \"web-framework\",\n };\n }\n return _canonicalSkillCategories;\n}\n\n/** Maps non-domain SkillIdPrefix values to their corresponding Domain */\nconst DOMAIN_PREFIX_MAP: Record<string, Domain> = {\n meta: \"shared\",\n infra: \"shared\",\n security: \"shared\",\n};\n\n/**\n * Creates a TestSkill for disk-based integration tests (createTestSource).\n * Derives slug, displayName, domain, and category from the skill ID,\n * using the canonical category registry for correct category mapping.\n */\nexport function createTestSkill(\n id: SkillId,\n description: string,\n overrides?: Partial<TestSkill>,\n): TestSkill {\n const segments = id.split(\"-\");\n const rawPrefix = segments[0] ?? \"web\";\n const domain = (DOMAIN_PREFIX_MAP[rawPrefix] ?? rawPrefix) as Domain;\n const canonicalCategories = getCanonicalSkillCategories();\n // Boundary cast: category registry returns arbitrary strings for non-canonical IDs\n const category = (canonicalCategories[id] ?? `${segments[0]}-${segments[1]}`) as CategoryPath;\n const slug = (segments.length >= 3 ? segments.slice(2).join(\"-\") : id) as SkillSlug;\n const displayName = slug\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n return {\n id,\n slug,\n displayName,\n description,\n category,\n author: \"@test\",\n domain,\n ...overrides,\n };\n}\n\nexport function createMockSkill(id: SkillId, overrides?: Partial<ResolvedSkill>): ResolvedSkill {\n // Boundary cast: category registry returns arbitrary strings for non-canonical IDs\n const category = (overrides?.category ?? getCanonicalSkillCategories()[id]) as\n | CategoryPath\n | undefined;\n\n if (!category) {\n throw new Error(\n `createMockSkill: \"${id}\" not in canonical registry — provide { category } in overrides`,\n );\n }\n\n // Derive slug from skill ID: strip domain-category prefix to get the last segment(s)\n // e.g., \"web-framework-react\" -> \"react\", \"shared-meta-reviewing\" -> \"reviewing\"\n const segments = id.split(\"-\");\n const defaultSlug = (segments.length >= 3 ? segments.slice(2).join(\"-\") : id) as SkillSlug;\n\n // Derive display name from slug: title-case each segment\n const defaultDisplayName = defaultSlug\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n return {\n id,\n slug: defaultSlug,\n displayName: defaultDisplayName,\n description: `${id} skill`,\n category,\n author: \"@test\",\n conflictsWith: [],\n isRecommended: false,\n requires: [],\n alternatives: [],\n discourages: [],\n compatibleWith: [],\n path: `skills/${category}/${id}/`,\n ...overrides,\n };\n}\n\nexport function createMockSkillSource(\n type: SkillSourceType,\n overrides?: Partial<SkillSource>,\n): SkillSource {\n const defaults: Record<SkillSourceType, SkillSource> = {\n public: { name: \"public\", type: \"public\", installed: false },\n private: {\n name: \"private-source\",\n type: \"private\",\n url: \"github:org/skills\",\n installed: false,\n },\n local: { name: \"local\", type: \"local\", installed: true, installMode: \"local\" },\n };\n return { ...defaults[type], ...overrides };\n}\n\n/**\n * Creates a mock ExtractedSkillMetadata for testing.\n * Used when mocking extractAllSkills() return values.\n */\nexport function createMockExtractedSkill(\n id: SkillId,\n overrides?: Partial<ExtractedSkillMetadata>,\n): ExtractedSkillMetadata {\n // Derive directory path and category from the skill ID convention: \"domain-category-name\"\n const segments = id.split(\"-\");\n const domain = segments[0] ?? \"web\";\n const category = segments[1] ?? \"framework\";\n const name = segments.slice(2).join(\"-\") || \"skill\";\n const directoryPath = `${domain}/${category}/${name}`;\n\n return {\n id,\n directoryPath,\n description: `${id} skill`,\n category: `${domain}-${category}` as CategoryPath,\n author: \"@test\",\n path: `skills/${directoryPath}/`,\n domain: domain as Domain,\n displayName: name,\n slug: name as SkillSlug,\n ...overrides,\n };\n}\n\nexport function createMockMatrix(\n skillsOrFirstSkill?: Record<string, ResolvedSkill> | ResolvedSkill,\n ...rest: (ResolvedSkill | Partial<MergedSkillsMatrix>)[]\n): MergedSkillsMatrix {\n let skillsRecord: Record<string, ResolvedSkill>;\n let overrides: Partial<MergedSkillsMatrix> | undefined;\n\n if (skillsOrFirstSkill === undefined) {\n // Empty call: createMockMatrix()\n skillsRecord = {};\n } else if (\n \"id\" in skillsOrFirstSkill &&\n typeof (skillsOrFirstSkill as ResolvedSkill).id === \"string\" &&\n \"slug\" in skillsOrFirstSkill\n ) {\n // New spread syntax: createMockMatrix(skill1, skill2, ..., optionalOverrides?)\n const allArgs = [skillsOrFirstSkill, ...rest];\n const lastArg = allArgs[allArgs.length - 1];\n\n // Detect if last arg is overrides (has no 'id' + 'slug' properties)\n if (lastArg && !(\"id\" in lastArg && \"slug\" in lastArg)) {\n overrides = lastArg as Partial<MergedSkillsMatrix>;\n const skills = allArgs.slice(0, -1) as ResolvedSkill[];\n skillsRecord = {};\n for (const skill of skills) {\n skillsRecord[skill.id] = skill;\n }\n } else {\n const skills = allArgs as ResolvedSkill[];\n skillsRecord = {};\n for (const skill of skills) {\n skillsRecord[skill.id] = skill;\n }\n }\n } else {\n // Old record syntax: createMockMatrix({ \"id\": skill }, overrides?)\n skillsRecord = skillsOrFirstSkill as Record<string, ResolvedSkill>;\n overrides = rest[0] as Partial<MergedSkillsMatrix> | undefined;\n }\n\n // Boundary cast: empty objects are populated in the loop below\n const autoSlugToId = {} as Record<SkillSlug, SkillId>;\n const autoIdToSlug = {} as Record<SkillId, SkillSlug>;\n for (const [, skill] of typedEntries(skillsRecord)) {\n if (skill.slug) {\n autoSlugToId[skill.slug] = skill.id;\n autoIdToSlug[skill.id] = skill.slug;\n }\n }\n\n return {\n version: \"1.0.0\",\n categories: {} as Record<Category, import(\"../../types\").CategoryDefinition>,\n skills: skillsRecord,\n suggestedStacks: [],\n slugMap: { slugToId: autoSlugToId, idToSlug: autoIdToSlug },\n generatedAt: new Date().toISOString(),\n ...overrides,\n };\n}\n\nexport function createMockAgent(\n name: string,\n overrides?: Partial<AgentDefinition>,\n): AgentDefinition {\n return {\n title: name,\n description: `${name} agent`,\n tools: [\"Read\", \"Write\", \"Edit\", \"Grep\", \"Glob\", \"Bash\"],\n model: \"opus\",\n permissionMode: \"default\",\n ...overrides,\n };\n}\n\nexport function createMockAgentConfig(\n name: string,\n skills: Skill[] = [],\n overrides?: Partial<AgentConfig>,\n): AgentConfig {\n return {\n name,\n title: `${name} agent`,\n description: `Test ${name}`,\n tools: [\"Read\", \"Write\"],\n skills,\n path: name,\n ...overrides,\n };\n}\n\nexport function createMockSkillEntry(\n id: SkillId,\n preloaded = false,\n overrides?: Partial<Skill>,\n): Skill {\n return {\n id,\n path: `skills/${id}/`,\n description: `${id} skill`,\n usage: `when working with ${id}`,\n preloaded,\n ...overrides,\n };\n}\n\nexport function createCompileContext(overrides?: Partial<CompileContext>): CompileContext {\n return {\n stackId: \"test-stack\",\n verbose: false,\n projectRoot: \"/project\",\n outputDir: `/project/${CLAUDE_DIR}/${PLUGINS_SUBDIR}/${DEFAULT_PLUGIN_NAME}`,\n ...overrides,\n };\n}\n\nexport async function writeTestSkill(\n skillsDir: string,\n skillId: SkillId,\n options?: {\n /** Extra fields to merge into metadata.yaml (e.g., forkedFrom, displayName) */\n extraMetadata?: Record<string, unknown>;\n /** Skip metadata.yaml creation entirely */\n skipMetadata?: boolean;\n /** Custom SKILL.md content (overrides default generated content) */\n skillContent?: string;\n },\n): Promise<string> {\n const skill = matrix.skills[skillId];\n\n if (!options?.skipMetadata && !skill) {\n throw new Error(\n `writeTestSkill: \"${skillId}\" not found in matrix store — populate the store in beforeEach`,\n );\n }\n\n const skillDir = path.join(skillsDir, skillId);\n await mkdir(skillDir, { recursive: true });\n\n await writeFile(\n path.join(skillDir, STANDARD_FILES.SKILL_MD),\n options?.skillContent ?? renderSkillMd(skillId, skill?.description),\n );\n\n if (!options?.skipMetadata && skill) {\n const { slug, category, author } = skill;\n const domain = category.split(\"-\")[0];\n\n const contentHash = await computeSkillFolderHash(skillDir);\n const baseMetadata = {\n author,\n category,\n domain,\n slug,\n contentHash,\n };\n await writeFile(\n path.join(skillDir, STANDARD_FILES.METADATA_YAML),\n stringifyYaml({ ...baseMetadata, ...options?.extraMetadata }),\n );\n }\n\n return skillDir;\n}\n\n/**\n * Creates a source-level skill directory with SKILL.md and rich metadata.yaml.\n * Use this when testing `extractAllSkills()` and `mergeMatrixWithSkills()`.\n *\n * Unlike `writeTestSkill()` which creates installed skills, this writes skills\n * in the source directory layout (under `src/skills/<domain>/<category>/<name>/`).\n */\nexport async function writeSourceSkill(\n skillsDir: string,\n directoryPath: string,\n config: TestSkill,\n): Promise<string> {\n const skillDir = path.join(skillsDir, directoryPath);\n await mkdir(skillDir, { recursive: true });\n\n await writeFile(\n path.join(skillDir, STANDARD_FILES.SKILL_MD),\n renderSkillMd(config.id, config.description),\n );\n\n const domain = config.domain;\n const slug = config.slug;\n const metadata: Record<string, unknown> = {\n displayName: config.id,\n slug,\n category: config.category,\n domain,\n author: config.author ?? \"@test\",\n };\n\n await writeFile(path.join(skillDir, STANDARD_FILES.METADATA_YAML), stringifyYaml(metadata));\n\n return skillDir;\n}\n\nexport async function writeTestAgent(\n agentsDir: string,\n agentName: string,\n options?: { description?: string },\n): Promise<string> {\n const agentDir = path.join(agentsDir, agentName);\n await mkdir(agentDir, { recursive: true });\n\n await writeFile(\n path.join(agentDir, STANDARD_FILES.AGENT_METADATA_YAML),\n renderAgentYaml(agentName, options?.description),\n );\n\n return agentDir;\n}\n\nexport function createMockCategory(\n id: string,\n displayName: string,\n overrides?: Partial<CategoryDefinition>,\n): CategoryDefinition {\n // Boundary cast: test factory accepts arbitrary category IDs for test isolation\n return {\n id: id as Category,\n displayName,\n description: `${displayName} category`,\n domain: \"web\",\n exclusive: true,\n required: false,\n order: 0,\n ...overrides,\n };\n}\n\nexport function createMockResolvedStack(\n id: string,\n name: string,\n overrides?: Partial<ResolvedStack>,\n): ResolvedStack {\n return {\n id,\n name,\n description: `${name} stack`,\n skills: {},\n allSkillIds: [],\n philosophy: \"\",\n ...overrides,\n };\n}\n\n/**\n * Builds a comprehensive test matrix with 8 skills across 7 categories,\n * 2 suggested stacks, display name mappings, and relationship data\n * (conflicts, recommends). Includes anti-over-engineering methodology skill.\n * @returns A fully populated MergedSkillsMatrix with realistic test data\n */\nexport function createComprehensiveMatrix(\n overrides?: Partial<MergedSkillsMatrix>,\n): MergedSkillsMatrix {\n // Skill categories use domain-prefixed Category IDs (matching production\n // metadata.yaml and the categories map keys, e.g., \"web-framework\", \"api-api\").\n const skills = {\n \"web-framework-react\": SKILLS.react,\n \"web-framework-vue-composition-api\": {\n ...SKILLS.vue,\n conflictsWith: [{ skillId: \"web-framework-react\", reason: \"Choose one framework\" }],\n } satisfies ResolvedSkill,\n \"web-state-zustand\": SKILLS.zustand,\n \"web-styling-scss-modules\": SKILLS.scss,\n \"api-framework-hono\": SKILLS.hono,\n \"api-database-drizzle\": SKILLS.drizzle,\n \"web-testing-vitest\": SKILLS.vitest,\n // Methodology skill\n \"shared-meta-reviewing\": SKILLS.antiOverEng,\n };\n\n const categories = {\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n domain: \"web\",\n exclusive: true,\n required: true,\n },\n \"web-client-state\": { ...TEST_CATEGORIES.clientState, domain: \"web\", order: 1 },\n \"web-styling\": { ...TEST_CATEGORIES.styling, domain: \"web\", order: 2 },\n \"api-api\": { ...TEST_CATEGORIES.api, domain: \"api\", exclusive: true, required: true },\n \"api-database\": { ...TEST_CATEGORIES.database, domain: \"api\", order: 1 },\n \"web-testing\": {\n ...TEST_CATEGORIES.testing,\n domain: \"shared\",\n exclusive: false,\n order: 10,\n },\n \"shared-meta\": {\n ...TEST_CATEGORIES.methodology,\n domain: \"shared\",\n exclusive: false,\n required: false,\n order: 11,\n },\n } as Record<Category, CategoryDefinition>;\n\n const suggestedStacks: ResolvedStack[] = [\n createMockResolvedStack(\"nextjs-fullstack\", \"Next.js Fullstack\", {\n description: \"Complete Next.js stack with React and Hono\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-zustand\"],\n \"web-styling\": [\"web-styling-scss-modules\"],\n },\n \"api-developer\": {\n \"api-api\": [\"api-framework-hono\"],\n \"api-database\": [\"api-database-drizzle\"],\n },\n } as ResolvedStack[\"skills\"],\n allSkillIds: [\n \"web-framework-react\",\n \"web-state-zustand\",\n \"web-styling-scss-modules\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n ],\n philosophy: \"Modern, type-safe fullstack development\",\n }),\n createMockResolvedStack(\"vue-stack\", \"Vue Stack\", {\n description: \"Vue.js frontend stack\",\n skills: {\n \"web-developer\": {\n \"web-framework\": [\"web-framework-vue-composition-api\"],\n },\n } as ResolvedStack[\"skills\"],\n allSkillIds: [\"web-framework-vue-composition-api\"],\n philosophy: \"Progressive framework approach\",\n }),\n ];\n\n // Boundary cast: test matrix only contains a subset of all possible slugs\n const slugToId = {\n react: \"web-framework-react\",\n \"vue-composition-api\": \"web-framework-vue-composition-api\",\n zustand: \"web-state-zustand\",\n \"scss-modules\": \"web-styling-scss-modules\",\n hono: \"api-framework-hono\",\n drizzle: \"api-database-drizzle\",\n vitest: \"web-testing-vitest\",\n reviewing: \"shared-meta-reviewing\",\n } as unknown as Record<SkillSlug, SkillId>;\n\n // Boundary cast: Object.fromEntries returns { [k: string]: string }\n const idToSlug = Object.fromEntries(\n typedEntries(slugToId).map(([slug, fullId]) => [fullId, slug]),\n ) as SkillSlugMap[\"idToSlug\"];\n\n return createMockMatrix(skills, {\n categories,\n suggestedStacks,\n slugMap: { slugToId, idToSlug },\n ...overrides,\n });\n}\n\n/**\n * Builds a lightweight test matrix with 5 skills, 5 categories, and 2 stacks.\n * Use instead of createComprehensiveMatrix when relationship data is not needed.\n * @returns A minimal MergedSkillsMatrix for basic integration tests\n */\nexport function createBasicMatrix(overrides?: Partial<MergedSkillsMatrix>): MergedSkillsMatrix {\n // Domain-prefixed Category IDs — see createComprehensiveMatrix comment\n const skills = {\n \"web-framework-react\": SKILLS.react,\n \"web-state-zustand\": SKILLS.zustand,\n \"api-framework-hono\": SKILLS.hono,\n \"web-testing-vitest\": SKILLS.vitest,\n // Methodology skill\n \"shared-meta-reviewing\": SKILLS.antiOverEng,\n };\n\n const suggestedStacks: ResolvedStack[] = [\n createMockResolvedStack(\"react-fullstack\", \"React Fullstack\", {\n allSkillIds: [\"web-framework-react\", \"web-state-zustand\", \"api-framework-hono\"],\n }),\n createMockResolvedStack(\"testing-stack\", \"Testing Stack\", {\n allSkillIds: [\"web-testing-vitest\"],\n }),\n ];\n\n return createMockMatrix(skills, {\n suggestedStacks,\n categories: {\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n domain: \"web\",\n exclusive: true,\n required: true,\n },\n \"web-client-state\": { ...TEST_CATEGORIES.clientState, domain: \"web\", order: 1 },\n \"api-api\": {\n ...TEST_CATEGORIES.api,\n domain: \"api\",\n exclusive: true,\n required: true,\n },\n \"web-testing\": {\n ...TEST_CATEGORIES.testing,\n displayName: \"Testing Framework\",\n domain: \"shared\",\n exclusive: false,\n },\n \"shared-meta\": {\n ...TEST_CATEGORIES.methodology,\n domain: \"shared\",\n exclusive: false,\n required: false,\n },\n } as Record<Category, CategoryDefinition>,\n ...overrides,\n });\n}\n\n/**\n * Replicates `handleComplete` from wizard.tsx for the \"customize\" path.\n *\n * Given the wizard store state (after simulated user selections), this\n * builds the same WizardResultV2 that the real wizard produces:\n * 1. Collects all selected technologies from domainSelections\n * 2. Resolves aliases to canonical skill IDs\n * 3. Runs validation\n */\nexport function buildWizardResultFromStore(\n matrix: MergedSkillsMatrix,\n overrides?: Partial<WizardResultV2>,\n): WizardResultV2 {\n const store = useWizardStore.getState();\n\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => resolveAlias(tech));\n }\n\n const validation = validateSelection(allSkills);\n\n return {\n skills: store.skillConfigs.length > 0 ? store.skillConfigs : buildSkillConfigs(allSkills),\n selectedAgents: store.selectedAgents,\n agentConfigs: store.agentConfigs,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n selectedDomains: store.selectedDomains,\n cancelled: false,\n validation,\n ...overrides,\n };\n}\n\n/**\n * Simulates a user selecting specific skills via the wizard store.\n *\n * Sets up domainSelections as if the user toggled each skill in the build step,\n * using the matrix to look up the correct domain and category per skill.\n */\nexport function simulateSkillSelections(\n skillIds: SkillId[],\n matrix: MergedSkillsMatrix,\n selectedDomains: string[],\n): void {\n const domainSelections = skillIds.reduce<DomainSelections>((acc, skillId) => {\n const skill = matrix.skills[skillId];\n if (!skill) return acc;\n // Boundary cast: skill.category is a Category at runtime\n const category = skill.category as Category;\n const domain = matrix.categories[category]?.domain;\n if (!domain) return acc;\n const domainObj = acc[domain] ?? {};\n const subcatList = domainObj[category] ?? [];\n if (subcatList.includes(skillId)) return acc;\n return {\n ...acc,\n [domain]: { ...domainObj, [category]: [...subcatList, skillId] },\n };\n }, {});\n\n useWizardStore.setState({\n domainSelections,\n selectedDomains: selectedDomains as Domain[],\n approach: \"scratch\",\n step: \"confirm\",\n });\n}\n\n/**\n * Extracts skill IDs from a stack assignment value, which may be:\n * - A bare string (e.g., \"web-framework-react\")\n * - An object with .id (e.g., { id: \"web-framework-react\", preloaded: true })\n * - An array of strings or objects\n */\nexport function extractSkillIdsFromAssignment(assignment: unknown): string[] {\n if (typeof assignment === \"string\") {\n return [assignment];\n }\n if (Array.isArray(assignment)) {\n return assignment.flatMap((item) => extractSkillIdsFromAssignment(item));\n }\n if (typeof assignment === \"object\" && assignment !== null && \"id\" in assignment) {\n return [String((assignment as { id: string }).id)];\n }\n return [];\n}\n\nexport function buildTestProjectConfig(\n agents: string[],\n skills: Array<string | { id: string }>,\n overrides?: Partial<TestProjectConfig>,\n): TestProjectConfig {\n return {\n name: \"test-project\",\n description: \"Test project\",\n agents,\n skills,\n ...overrides,\n };\n}\n\nexport function createMockSkillDefinition(\n id: SkillId,\n overrides?: Partial<SkillDefinition>,\n): SkillDefinition {\n return {\n id,\n path: `skills/${id}/`,\n description: `${id} skill`,\n ...overrides,\n };\n}\n\n/** Decomposed matrix config returned by createMockMatrixConfig (replaces SkillsMatrixConfig) */\nexport type MockMatrixConfig = {\n categories: Record<string, CategoryDefinition>;\n relationships: RelationshipDefinitions;\n};\n\nexport function createMockMatrixConfig(\n categories: Record<string, CategoryDefinition>,\n overrides?: {\n relationships?: Partial<RelationshipDefinitions>;\n },\n): MockMatrixConfig {\n const defaultRelationships: RelationshipDefinitions = {\n conflicts: [],\n discourages: [],\n recommends: [],\n requires: [],\n alternatives: [],\n };\n return {\n categories,\n relationships: overrides?.relationships\n ? { ...defaultRelationships, ...overrides.relationships }\n : defaultRelationships,\n };\n}\n\nexport function createMockStack(\n id: string,\n config: {\n name: string;\n description?: string;\n agents: Record<string, StackAgentConfig>;\n philosophy?: string;\n },\n): Stack {\n return {\n id,\n name: config.name,\n description: config.description ?? \"\",\n // Boundary cast: test callers may pass arbitrary agent names (e.g., \"nonexistent-agent\")\n agents: config.agents as Stack[\"agents\"],\n philosophy: config.philosophy,\n };\n}\n\nexport function createMockCompileConfig(\n agents: Record<string, CompileAgentConfig>,\n overrides?: Partial<CompileConfig>,\n): CompileConfig {\n return {\n name: \"Test Plugin\",\n description: \"Test description\",\n agents,\n ...overrides,\n };\n}\n\nexport function createMockCompiledStackPlugin(\n overrides?: Partial<CompiledStackPlugin>,\n): CompiledStackPlugin {\n return {\n pluginPath: \"/tmp/cc-stack-123456/test-stack\",\n manifest: { name: \"test-stack\", version: \"1.0.0\" },\n stackName: \"Test Stack\",\n agents: [\"web-developer\"],\n skillPlugins: [\"web-framework-react\"],\n hasHooks: false,\n ...overrides,\n };\n}\n\nexport function createMockSkillAssignment(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\nexport function createMockRawStacksConfig(): RawStacksConfig {\n return {\n stacks: [\n {\n id: \"nextjs-fullstack\",\n name: \"Next.js Fullstack\",\n description: \"Full-stack Next.js with Hono API\",\n agents: {\n \"web-developer\": {\n \"web-framework\": \"web-framework-react\",\n \"web-styling\": \"web-styling-scss-modules\",\n },\n \"api-developer\": {\n \"api-api\": \"api-framework-hono\",\n \"api-database\": \"api-database-drizzle\",\n },\n },\n },\n {\n id: \"vue-spa\",\n name: \"Vue SPA\",\n description: \"Vue single-page application\",\n agents: {\n \"web-developer\": {\n \"web-framework\": \"web-framework-vue-composition-api\",\n \"web-styling\": \"web-styling-tailwind\",\n },\n },\n },\n ],\n };\n}\n\nexport function createMockRawStacksConfigWithArrays(): RawStacksConfig {\n return {\n stacks: [\n {\n id: \"multi-select-stack\",\n name: \"Multi-Select Stack\",\n description: \"Stack with array-valued categories\",\n agents: {\n \"web-developer\": {\n \"web-framework\": \"web-framework-react\",\n \"shared-meta\": [\n \"shared-meta-research-methodology\",\n \"shared-meta-reviewing\",\n \"shared-meta-cli-reviewing\",\n ],\n },\n \"pattern-scout\": {\n \"shared-meta\": [\"shared-meta-research-methodology\"],\n },\n },\n },\n ],\n };\n}\n\nexport function createMockRawStacksConfigWithObjects(): RawStacksConfig {\n return {\n stacks: [\n {\n id: \"object-stack\",\n name: \"Object Stack\",\n description: \"Stack with object-form skill assignments\",\n agents: {\n \"web-developer\": {\n \"web-framework\": [{ id: \"web-framework-react\", preloaded: true }],\n \"web-styling\": \"web-styling-scss-modules\",\n \"shared-meta\": [\n { id: \"shared-meta-research-methodology\", preloaded: true },\n \"shared-meta-reviewing\",\n ],\n },\n },\n },\n ],\n };\n}\n\nexport function createMockMarketplace(plugins: MarketplacePlugin[] = []): Marketplace {\n return {\n name: \"test-marketplace\",\n version: \"1.0.0\",\n owner: { name: \"Test Owner\" },\n plugins,\n };\n}\n\nexport function createMockMarketplacePlugin(\n name: string,\n source: MarketplacePlugin[\"source\"] = \"local\",\n): MarketplacePlugin {\n return {\n name,\n source,\n };\n}\n\n/** Convert a TestSkill (disk-based) to a ResolvedSkill (in-memory) for matrix creation. */\nexport function testSkillToResolvedSkill(\n skill: TestSkill,\n overrides?: Partial<ResolvedSkill>,\n): ResolvedSkill {\n // Boundary cast: TestSkill.id is string, but in practice always a valid SkillId\n return createMockSkill(skill.id as SkillId, {\n description: skill.description,\n ...overrides,\n });\n}\n\n/**\n * Creates a ResolvedSkill with availableSources annotation for multi-source testing.\n * Simulates what multi-source-loader.ts does after tagging.\n */\nexport function createMockMultiSourceSkill(\n id: SkillId,\n sources: SkillSource[],\n overrides?: Partial<ResolvedSkill>,\n): ResolvedSkill {\n const activeSource = sources.find((s) => s.installed) ?? sources[0];\n return createMockSkill(id, {\n availableSources: sources,\n activeSource,\n ...overrides,\n });\n}\n\nexport function createMockCompiledAgentData(overrides?: Partial<AgentConfig>): CompiledAgentData {\n const agent = createMockAgentConfig(\"test-agent\", [], {\n title: \"Test Agent\",\n description: \"A test agent\",\n ...overrides,\n });\n\n return {\n agent,\n intro: \"Test intro\",\n workflow: \"Test workflow\",\n examples: \"Test examples\",\n criticalRequirementsTop: \"\",\n criticalReminders: \"\",\n outputFormat: \"\",\n skills: agent.skills,\n preloadedSkills: [],\n dynamicSkills: [],\n preloadedSkillIds: [],\n };\n}\n\nexport { SKILLS, TEST_CATEGORIES } from \"./test-fixtures\";\n","/**\n * Pure content renderers for test file generation.\n * Single source of truth for all test content templates.\n */\n\nexport function renderSkillMd(id: string, description?: string, body?: string): string {\n const desc = description ?? `${id} skill`;\n const content = body ?? `# ${id}\\n\\n${desc}`;\n return `---\nname: ${id}\ndescription: ${desc}\n---\n\n${content}\n`;\n}\n\nexport function renderConfigTs(config: Record<string, unknown>): string {\n return `export default ${JSON.stringify(config, null, 2)};\\n`;\n}\n\nexport function renderAgentYaml(\n name: string,\n description?: string,\n options?: { title?: string; tools?: string[] },\n): string {\n const desc = description ?? `Test ${name} agent`;\n const title = options?.title ?? `${name} Agent`;\n const tools = options?.tools ?? [\"Read\", \"Write\"];\n return `id: ${name}\ntitle: ${title}\ndescription: ${desc}\ntools:\n${tools.map((t) => ` - ${t}`).join(\"\\n\")}`;\n}\n\nexport function renderCategoriesTs(categories: Record<string, unknown>): string {\n return renderConfigTs(categories);\n}\n\nexport function renderRulesTs(rules: Record<string, unknown>): string {\n return renderConfigTs(rules);\n}\n"],"mappings":"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","names":["__filename","__dirname"]}
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
CATEGORIES,
|
|
5
5
|
DOMAINS,
|
|
6
6
|
SKILL_SLUGS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-Q4PJSAMP.js";
|
|
8
8
|
import {
|
|
9
9
|
KEBAB_CASE_PATTERN
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FMYAYX6W.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -151,7 +151,7 @@ var permissionModeSchema = z.enum([
|
|
|
151
151
|
"delegate"
|
|
152
152
|
]);
|
|
153
153
|
var skillSlugSchema = z.enum(SKILL_SLUGS);
|
|
154
|
-
var SKILL_ID_PATTERN = /^(web|api|cli|mobile|infra|meta|security)-.+-.+$/;
|
|
154
|
+
var SKILL_ID_PATTERN = /^(web|api|cli|mobile|infra|meta|security|shared)-.+-.+$/;
|
|
155
155
|
var skillIdSchema = z.string().regex(
|
|
156
156
|
SKILL_ID_PATTERN,
|
|
157
157
|
"Must be a valid skill ID (e.g., 'web-framework-react')"
|
|
@@ -739,4 +739,4 @@ export {
|
|
|
739
739
|
validateNestingDepth,
|
|
740
740
|
warnUnknownFields
|
|
741
741
|
};
|
|
742
|
-
//# sourceMappingURL=chunk-
|
|
742
|
+
//# sourceMappingURL=chunk-WN2TUP4M.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|shared)-.+-.+$/;\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 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\nconst 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\nconst conflictRuleSchema: z.ZodType<ConflictRule> = z.object({\n skills: z.array(skillRefInRules).min(2),\n reason: z.string(),\n});\n\nconst discourageRuleSchema: z.ZodType<DiscourageRule> = z.object({\n skills: z.array(skillRefInRules).min(2),\n reason: z.string(),\n});\n\nconst 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\nconst 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\nconst alternativeGroupSchema: z.ZodType<AlternativeGroup> = z.object({\n purpose: z.string(),\n skills: z.array(skillRefInRules).min(1),\n});\n\nconst 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 /** 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\nconst 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\nconst 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\nconst 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\nconst marketplaceOwnerSchema: z.ZodType<MarketplaceOwner> = z.object({\n name: z.string().min(1),\n email: z.string().optional(),\n});\n\nconst 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) */\nconst 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 */\nconst 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// 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 /** 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 /** 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":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
loadPluginSkills,
|
|
5
5
|
loadSkillsByIds,
|
|
6
6
|
parseFrontmatter
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-I534EWJQ.js";
|
|
8
8
|
import {
|
|
9
9
|
BUILT_IN_MATRIX,
|
|
10
10
|
getCategoryDomain,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
matrix,
|
|
15
15
|
typedEntries,
|
|
16
16
|
typedKeys
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JWMYAJHD.js";
|
|
18
18
|
import {
|
|
19
19
|
SKILL_ID_PATTERN,
|
|
20
20
|
agentFrontmatterValidationSchema,
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
warn,
|
|
54
54
|
warnUnknownFields,
|
|
55
55
|
writeFile
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-WN2TUP4M.js";
|
|
57
57
|
import {
|
|
58
58
|
CACHE_DIR,
|
|
59
59
|
CACHE_HASH_LENGTH,
|
|
@@ -89,12 +89,12 @@ import {
|
|
|
89
89
|
STANDARD_FILES,
|
|
90
90
|
YAML_FORMATTING,
|
|
91
91
|
yamlSchemaComment
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-FMYAYX6W.js";
|
|
93
93
|
import {
|
|
94
94
|
defaultCategories,
|
|
95
95
|
defaultRules,
|
|
96
96
|
defaultStacks
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-7XUKTYVD.js";
|
|
98
98
|
import {
|
|
99
99
|
init_esm_shims
|
|
100
100
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -984,8 +984,8 @@ function loadConfigTypesDataInBackground(sourceFlag, projectDir) {
|
|
|
984
984
|
if (!await directoryExists(claudeSrcDir)) {
|
|
985
985
|
throw new Error(`${CLAUDE_SRC_DIR}/ not found \u2014 run '${CLI_BIN_NAME} init' first`);
|
|
986
986
|
}
|
|
987
|
-
const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-
|
|
988
|
-
const { loadAllAgents: loadAllAgents2 } = await import("./loader-
|
|
987
|
+
const { loadSkillsMatrixFromSource: loadSkillsMatrixFromSource2 } = await import("./source-loader-CXCIDGWV.js");
|
|
988
|
+
const { loadAllAgents: loadAllAgents2 } = await import("./loader-7RQ4G4TH.js");
|
|
989
989
|
const sourceResult = await loadSkillsMatrixFromSource2({
|
|
990
990
|
sourceFlag,
|
|
991
991
|
projectDir,
|
|
@@ -5541,4 +5541,4 @@ export {
|
|
|
5541
5541
|
validateAllPlugins,
|
|
5542
5542
|
printPluginValidationResult
|
|
5543
5543
|
};
|
|
5544
|
-
//# sourceMappingURL=chunk-
|
|
5544
|
+
//# sourceMappingURL=chunk-WS3TL2AO.js.map
|
|
@@ -7,16 +7,16 @@ import {
|
|
|
7
7
|
} from "./chunk-K77I4XGL.js";
|
|
8
8
|
import {
|
|
9
9
|
SelectionCard
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-K63OEZW7.js";
|
|
11
11
|
import {
|
|
12
12
|
SourceGrid
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-I2SUTL7S.js";
|
|
14
14
|
import {
|
|
15
15
|
ViewTitle
|
|
16
16
|
} from "./chunk-JNQKCZA3.js";
|
|
17
17
|
import {
|
|
18
18
|
useWizardStore
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-PRG7PKZM.js";
|
|
20
20
|
import {
|
|
21
21
|
HOTKEY_SET_ALL_LOCAL,
|
|
22
22
|
HOTKEY_SET_ALL_PLUGIN,
|
|
@@ -25,11 +25,11 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
resolveAllSources,
|
|
27
27
|
searchExtraSources
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-WS3TL2AO.js";
|
|
29
29
|
import {
|
|
30
30
|
CLI_COLORS,
|
|
31
31
|
DEFAULT_BRANDING
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-FMYAYX6W.js";
|
|
33
33
|
import {
|
|
34
34
|
init_esm_shims
|
|
35
35
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -174,4 +174,4 @@ var StepSources = ({ projectDir, onContinue, onBack }) => {
|
|
|
174
174
|
export {
|
|
175
175
|
StepSources
|
|
176
176
|
};
|
|
177
|
-
//# sourceMappingURL=chunk-
|
|
177
|
+
//# sourceMappingURL=chunk-WZ5S4LGX.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getErrorMessage
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WN2TUP4M.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
EXIT_CODES,
|
|
50
50
|
BaseCommand
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-XYZ7B5BY.js.map
|
|
@@ -3,20 +3,20 @@ import {
|
|
|
3
3
|
generateMarketplace,
|
|
4
4
|
getMarketplaceStats,
|
|
5
5
|
writeMarketplace
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-KPRCP3MZ.js";
|
|
7
7
|
import {
|
|
8
8
|
BaseCommand
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-XYZ7B5BY.js";
|
|
10
10
|
import {
|
|
11
11
|
setVerbose
|
|
12
|
-
} from "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
} from "../../chunk-WN2TUP4M.js";
|
|
13
|
+
import "../../chunk-Q4PJSAMP.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_BRANDING,
|
|
16
16
|
DEFAULT_PLUGIN_NAME,
|
|
17
17
|
DEFAULT_VERSION,
|
|
18
18
|
PLUGIN_MANIFEST_DIR
|
|
19
|
-
} from "../../chunk-
|
|
19
|
+
} from "../../chunk-FMYAYX6W.js";
|
|
20
20
|
import {
|
|
21
21
|
init_esm_shims
|
|
22
22
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -2,25 +2,25 @@
|
|
|
2
2
|
import {
|
|
3
3
|
compileAllAgentPlugins,
|
|
4
4
|
printAgentCompilationSummary
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-VQV3DSHD.js";
|
|
6
6
|
import {
|
|
7
7
|
compileAllSkillPlugins,
|
|
8
8
|
compileSkillPlugin,
|
|
9
9
|
printCompilationSummary
|
|
10
|
-
} from "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
10
|
+
} from "../../chunk-WS3TL2AO.js";
|
|
11
|
+
import "../../chunk-I534EWJQ.js";
|
|
12
|
+
import "../../chunk-JWMYAJHD.js";
|
|
13
13
|
import {
|
|
14
14
|
BaseCommand
|
|
15
|
-
} from "../../chunk-
|
|
15
|
+
} from "../../chunk-XYZ7B5BY.js";
|
|
16
16
|
import {
|
|
17
17
|
setVerbose
|
|
18
|
-
} from "../../chunk-
|
|
19
|
-
import "../../chunk-
|
|
18
|
+
} from "../../chunk-WN2TUP4M.js";
|
|
19
|
+
import "../../chunk-Q4PJSAMP.js";
|
|
20
20
|
import {
|
|
21
21
|
DIRS
|
|
22
|
-
} from "../../chunk-
|
|
23
|
-
import "../../chunk-
|
|
22
|
+
} from "../../chunk-FMYAYX6W.js";
|
|
23
|
+
import "../../chunk-7XUKTYVD.js";
|
|
24
24
|
import {
|
|
25
25
|
init_esm_shims
|
|
26
26
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getAgentDefinitions
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-VQV3DSHD.js";
|
|
5
5
|
import {
|
|
6
6
|
compileStackPlugin,
|
|
7
7
|
loadStacks,
|
|
8
8
|
printStackCompilationSummary
|
|
9
|
-
} from "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
9
|
+
} from "../../chunk-WS3TL2AO.js";
|
|
10
|
+
import "../../chunk-I534EWJQ.js";
|
|
11
|
+
import "../../chunk-JWMYAJHD.js";
|
|
12
12
|
import {
|
|
13
13
|
BaseCommand,
|
|
14
14
|
EXIT_CODES
|
|
15
|
-
} from "../../chunk-
|
|
15
|
+
} from "../../chunk-XYZ7B5BY.js";
|
|
16
16
|
import {
|
|
17
17
|
setVerbose
|
|
18
|
-
} from "../../chunk-
|
|
19
|
-
import "../../chunk-
|
|
18
|
+
} from "../../chunk-WN2TUP4M.js";
|
|
19
|
+
import "../../chunk-Q4PJSAMP.js";
|
|
20
20
|
import {
|
|
21
21
|
PROJECT_ROOT,
|
|
22
22
|
STACKS_FILE_PATH
|
|
23
|
-
} from "../../chunk-
|
|
24
|
-
import "../../chunk-
|
|
23
|
+
} from "../../chunk-FMYAYX6W.js";
|
|
24
|
+
import "../../chunk-7XUKTYVD.js";
|
|
25
25
|
import {
|
|
26
26
|
init_esm_shims
|
|
27
27
|
} from "../../chunk-DHET7RCE.js";
|
package/dist/commands/compile.js
CHANGED
|
@@ -2,29 +2,29 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getAgentDefinitions,
|
|
4
4
|
recompileAgents
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-VQV3DSHD.js";
|
|
6
6
|
import {
|
|
7
7
|
ERROR_MESSAGES,
|
|
8
8
|
INFO_MESSAGES,
|
|
9
9
|
STATUS_MESSAGES
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-M76LNKMY.js";
|
|
11
11
|
import {
|
|
12
12
|
detectGlobalInstallation,
|
|
13
13
|
detectProjectInstallation,
|
|
14
14
|
discoverAllPluginSkills,
|
|
15
15
|
resolveSource
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-WS3TL2AO.js";
|
|
17
17
|
import {
|
|
18
18
|
parseFrontmatter
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-I534EWJQ.js";
|
|
20
20
|
import {
|
|
21
21
|
typedEntries,
|
|
22
22
|
typedKeys
|
|
23
|
-
} from "../chunk-
|
|
23
|
+
} from "../chunk-JWMYAJHD.js";
|
|
24
24
|
import {
|
|
25
25
|
BaseCommand,
|
|
26
26
|
EXIT_CODES
|
|
27
|
-
} from "../chunk-
|
|
27
|
+
} from "../chunk-XYZ7B5BY.js";
|
|
28
28
|
import {
|
|
29
29
|
directoryExists,
|
|
30
30
|
fileExists,
|
|
@@ -33,15 +33,15 @@ import {
|
|
|
33
33
|
setVerbose,
|
|
34
34
|
verbose,
|
|
35
35
|
warn
|
|
36
|
-
} from "../chunk-
|
|
37
|
-
import "../chunk-
|
|
36
|
+
} from "../chunk-WN2TUP4M.js";
|
|
37
|
+
import "../chunk-Q4PJSAMP.js";
|
|
38
38
|
import {
|
|
39
39
|
CLI_BIN_NAME,
|
|
40
40
|
GLOBAL_INSTALL_ROOT,
|
|
41
41
|
LOCAL_SKILLS_PATH,
|
|
42
42
|
STANDARD_FILES
|
|
43
|
-
} from "../chunk-
|
|
44
|
-
import "../chunk-
|
|
43
|
+
} from "../chunk-FMYAYX6W.js";
|
|
44
|
+
import "../chunk-7XUKTYVD.js";
|
|
45
45
|
import {
|
|
46
46
|
init_esm_shims
|
|
47
47
|
} from "../chunk-DHET7RCE.js";
|