@agents-inc/cli 0.46.0 → 0.47.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 +13 -0
- package/dist/{chunk-G2WNOT3R.js → chunk-2RQYJFKA.js} +2 -2
- package/dist/{chunk-CD64ZNYI.js → chunk-3APMMQUA.js} +11 -3
- package/dist/chunk-3APMMQUA.js.map +1 -0
- package/dist/{chunk-DO5OZHSS.js → chunk-B4QYXVPZ.js} +2 -2
- package/dist/{chunk-5QRJUBK7.js → chunk-C4QI54PN.js} +20 -11
- package/dist/chunk-C4QI54PN.js.map +1 -0
- package/dist/{chunk-QBUOZVNZ.js → chunk-CJFWO46A.js} +2 -2
- package/dist/{chunk-VH3PI43B.js → chunk-DC333ZDC.js} +4 -4
- package/dist/{chunk-GVLYNP2I.js → chunk-DVW6ASTO.js} +4 -4
- package/dist/{chunk-NMXNHRAK.js → chunk-EZ46ZTAQ.js} +3 -3
- package/dist/{chunk-FUEZQ2H6.js → chunk-FMQ3A7W4.js} +4 -4
- package/dist/{chunk-74HSA7C4.js → chunk-FTD5Z6QD.js} +3 -1
- package/dist/{chunk-74HSA7C4.js.map → chunk-FTD5Z6QD.js.map} +1 -1
- package/dist/{chunk-KWQ2BQXF.js → chunk-FXQYEXLS.js} +3 -3
- package/dist/{chunk-RT6IBH37.js → chunk-GFDGYQ6M.js} +55 -21
- package/dist/chunk-GFDGYQ6M.js.map +1 -0
- package/dist/{chunk-CDGHSTB6.js → chunk-HLTJK3XB.js} +7 -5
- package/dist/chunk-HLTJK3XB.js.map +1 -0
- package/dist/{chunk-72GS6PIH.js → chunk-HPJP3HFD.js} +7 -7
- package/dist/{chunk-J64CA4V6.js → chunk-INKJBMPJ.js} +2 -2
- package/dist/{chunk-YVMYQSED.js → chunk-IRJADQM7.js} +2 -2
- package/dist/{chunk-PZLUO4OY.js → chunk-JTTTXGHX.js} +4 -4
- package/dist/{chunk-4C7PDDLY.js → chunk-JZHIF3K7.js} +5 -5
- package/dist/{chunk-D7JTL3DJ.js → chunk-KQ27IDYL.js} +2 -2
- package/dist/{chunk-SGXUMZWL.js → chunk-LJ5E4GXC.js} +2 -2
- package/dist/{chunk-LFZXMQOH.js → chunk-LNA6M2IE.js} +2 -2
- package/dist/{chunk-ODQ2BKWU.js → chunk-M4P5YJ45.js} +3 -3
- package/dist/{chunk-TOWP4T5L.js → chunk-MVEYK55V.js} +2 -2
- package/dist/{chunk-5M6JI76P.js → chunk-N5OCAAXY.js} +2 -2
- package/dist/{chunk-RWR56UVK.js → chunk-NRCKIHND.js} +11 -2
- package/dist/chunk-NRCKIHND.js.map +1 -0
- package/dist/{chunk-FKBCYT7B.js → chunk-OEJDFGAF.js} +5 -5
- package/dist/{chunk-I26YP2Q3.js → chunk-QR2TM4OY.js} +5 -5
- package/dist/{chunk-UK3AMBR7.js → chunk-SPSGZWTZ.js} +13 -6
- package/dist/{chunk-UK3AMBR7.js.map → chunk-SPSGZWTZ.js.map} +1 -1
- package/dist/{chunk-XE6RTHUD.js → chunk-TBB3THSL.js} +38 -3
- package/dist/chunk-TBB3THSL.js.map +1 -0
- package/dist/{chunk-7LDSHHKN.js → chunk-TWDVLTU6.js} +3 -3
- package/dist/{chunk-YT7UHV67.js → chunk-VAQJLHUW.js} +11 -9
- package/dist/chunk-VAQJLHUW.js.map +1 -0
- package/dist/{chunk-C7BO2ASM.js → chunk-VSZ5GDET.js} +2 -2
- package/dist/{chunk-CTQHZELA.js → chunk-XTRPYUWK.js} +14 -14
- package/dist/{chunk-HM3DHMW7.js → chunk-YTRFL3MR.js} +8 -8
- package/dist/chunk-YTRFL3MR.js.map +1 -0
- package/dist/{chunk-3WKFSTG6.js → chunk-ZWAL2ZY7.js} +2 -2
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +5 -5
- package/dist/commands/build/stack.js +5 -5
- package/dist/commands/compile.js +6 -6
- package/dist/commands/config/get.js +4 -4
- package/dist/commands/config/index.js +5 -5
- package/dist/commands/config/path.js +4 -4
- package/dist/commands/config/set-project.js +4 -4
- package/dist/commands/config/show.js +5 -5
- package/dist/commands/config/unset-project.js +4 -4
- package/dist/commands/diff.js +4 -4
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/edit.js +29 -29
- package/dist/commands/eject.js +4 -4
- package/dist/commands/import/skill.js +5 -5
- package/dist/commands/info.js +5 -5
- package/dist/commands/init.js +28 -28
- package/dist/commands/list.js +4 -4
- package/dist/commands/new/agent.js +6 -6
- package/dist/commands/new/marketplace.js +5 -5
- package/dist/commands/new/skill.js +9 -6
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +4 -4
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +6 -6
- package/dist/commands/update.js +6 -6
- package/dist/commands/validate.js +229 -19
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +122 -2
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +3 -3
- package/dist/components/wizard/checkbox-grid.test.js +3 -3
- package/dist/components/wizard/domain-selection.js +9 -9
- 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 +2 -2
- package/dist/components/wizard/search-modal.test.js +2 -2
- 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 +3 -3
- package/dist/components/wizard/source-grid.test.js +3 -3
- package/dist/components/wizard/stack-selection.js +8 -8
- package/dist/components/wizard/step-agents.js +8 -8
- package/dist/components/wizard/step-agents.test.js +9 -9
- package/dist/components/wizard/step-build.js +8 -8
- package/dist/components/wizard/step-build.test.js +78 -46
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +4 -4
- package/dist/components/wizard/step-confirm.test.js +8 -8
- 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 +5 -5
- package/dist/components/wizard/step-settings.test.js +8 -8
- package/dist/components/wizard/step-sources.js +10 -10
- package/dist/components/wizard/step-sources.test.js +11 -11
- package/dist/components/wizard/step-stack.js +12 -12
- package/dist/components/wizard/step-stack.test.js +13 -13
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +8 -8
- 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 +25 -25
- package/dist/hooks/init.js +3 -3
- package/dist/{source-manager-6QZ2GDUA.js → source-manager-Q34LTUVM.js} +4 -4
- package/dist/src/agents/meta/documentor/examples.md +35 -36
- package/dist/src/agents/meta/documentor/workflow.md +91 -105
- package/dist/stores/wizard-store.js +5 -5
- package/dist/stores/wizard-store.test.js +48 -6
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/meta/documentor/examples.md +35 -36
- package/src/agents/meta/documentor/workflow.md +91 -105
- package/src/schemas/agent.schema.json +3 -0
- package/src/schemas/metadata.schema.json +3 -0
- package/dist/chunk-5QRJUBK7.js.map +0 -1
- package/dist/chunk-CD64ZNYI.js.map +0 -1
- package/dist/chunk-CDGHSTB6.js.map +0 -1
- package/dist/chunk-HM3DHMW7.js.map +0 -1
- package/dist/chunk-RT6IBH37.js.map +0 -1
- package/dist/chunk-RWR56UVK.js.map +0 -1
- package/dist/chunk-XE6RTHUD.js.map +0 -1
- package/dist/chunk-YT7UHV67.js.map +0 -1
- /package/dist/{chunk-G2WNOT3R.js.map → chunk-2RQYJFKA.js.map} +0 -0
- /package/dist/{chunk-DO5OZHSS.js.map → chunk-B4QYXVPZ.js.map} +0 -0
- /package/dist/{chunk-QBUOZVNZ.js.map → chunk-CJFWO46A.js.map} +0 -0
- /package/dist/{chunk-VH3PI43B.js.map → chunk-DC333ZDC.js.map} +0 -0
- /package/dist/{chunk-GVLYNP2I.js.map → chunk-DVW6ASTO.js.map} +0 -0
- /package/dist/{chunk-NMXNHRAK.js.map → chunk-EZ46ZTAQ.js.map} +0 -0
- /package/dist/{chunk-FUEZQ2H6.js.map → chunk-FMQ3A7W4.js.map} +0 -0
- /package/dist/{chunk-KWQ2BQXF.js.map → chunk-FXQYEXLS.js.map} +0 -0
- /package/dist/{chunk-72GS6PIH.js.map → chunk-HPJP3HFD.js.map} +0 -0
- /package/dist/{chunk-J64CA4V6.js.map → chunk-INKJBMPJ.js.map} +0 -0
- /package/dist/{chunk-YVMYQSED.js.map → chunk-IRJADQM7.js.map} +0 -0
- /package/dist/{chunk-PZLUO4OY.js.map → chunk-JTTTXGHX.js.map} +0 -0
- /package/dist/{chunk-4C7PDDLY.js.map → chunk-JZHIF3K7.js.map} +0 -0
- /package/dist/{chunk-D7JTL3DJ.js.map → chunk-KQ27IDYL.js.map} +0 -0
- /package/dist/{chunk-SGXUMZWL.js.map → chunk-LJ5E4GXC.js.map} +0 -0
- /package/dist/{chunk-LFZXMQOH.js.map → chunk-LNA6M2IE.js.map} +0 -0
- /package/dist/{chunk-ODQ2BKWU.js.map → chunk-M4P5YJ45.js.map} +0 -0
- /package/dist/{chunk-TOWP4T5L.js.map → chunk-MVEYK55V.js.map} +0 -0
- /package/dist/{chunk-5M6JI76P.js.map → chunk-N5OCAAXY.js.map} +0 -0
- /package/dist/{chunk-FKBCYT7B.js.map → chunk-OEJDFGAF.js.map} +0 -0
- /package/dist/{chunk-I26YP2Q3.js.map → chunk-QR2TM4OY.js.map} +0 -0
- /package/dist/{chunk-7LDSHHKN.js.map → chunk-TWDVLTU6.js.map} +0 -0
- /package/dist/{chunk-C7BO2ASM.js.map → chunk-VSZ5GDET.js.map} +0 -0
- /package/dist/{chunk-CTQHZELA.js.map → chunk-XTRPYUWK.js.map} +0 -0
- /package/dist/{chunk-3WKFSTG6.js.map → chunk-ZWAL2ZY7.js.map} +0 -0
- /package/dist/{source-manager-6QZ2GDUA.js.map → source-manager-Q34LTUVM.js.map} +0 -0
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-T4EXUIBY.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_BRANDING
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
8
8
|
import {
|
|
9
9
|
init_esm_shims
|
|
10
10
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -198,12 +198,47 @@ var TEST_SKILLS = {
|
|
|
198
198
|
hono: createMockSkill("api-framework-hono", "api-api"),
|
|
199
199
|
vitest: createMockSkill("web-testing-vitest", "web-testing"),
|
|
200
200
|
scssModules: createMockSkill("web-styling-scss-modules", "web-styling"),
|
|
201
|
-
drizzle: createMockSkill("api-database-drizzle", "api-database")
|
|
201
|
+
drizzle: createMockSkill("api-database-drizzle", "api-database"),
|
|
202
|
+
// Methodology skills (DEFAULT_PRESELECTED_SKILLS) — used by createComprehensiveMatrix
|
|
203
|
+
investigationRequirements: createMockSkill(
|
|
204
|
+
"meta-methodology-investigation-requirements",
|
|
205
|
+
"shared-methodology",
|
|
206
|
+
{ description: "Never speculate - read actual code first", categoryExclusive: false }
|
|
207
|
+
),
|
|
208
|
+
antiOverEngineering: createMockSkill(
|
|
209
|
+
"meta-methodology-anti-over-engineering",
|
|
210
|
+
"shared-methodology",
|
|
211
|
+
{
|
|
212
|
+
description: "Surgical implementation, not architectural innovation",
|
|
213
|
+
categoryExclusive: false
|
|
214
|
+
}
|
|
215
|
+
),
|
|
216
|
+
successCriteria: createMockSkill("meta-methodology-success-criteria", "shared-methodology", {
|
|
217
|
+
description: "Explicit, measurable criteria defining done",
|
|
218
|
+
categoryExclusive: false
|
|
219
|
+
}),
|
|
220
|
+
writeVerification: createMockSkill("meta-methodology-write-verification", "shared-methodology", {
|
|
221
|
+
description: "Verify work was actually saved",
|
|
222
|
+
categoryExclusive: false
|
|
223
|
+
}),
|
|
224
|
+
improvementProtocol: createMockSkill(
|
|
225
|
+
"meta-methodology-improvement-protocol",
|
|
226
|
+
"shared-methodology",
|
|
227
|
+
{ description: "Evidence-based self-improvement", categoryExclusive: false }
|
|
228
|
+
),
|
|
229
|
+
contextManagement: createMockSkill("meta-methodology-context-management", "shared-methodology", {
|
|
230
|
+
description: "Maintain project continuity across sessions",
|
|
231
|
+
categoryExclusive: false
|
|
232
|
+
})
|
|
202
233
|
};
|
|
203
234
|
var TEST_CATEGORIES = {
|
|
204
235
|
framework: createMockCategory("web-framework", "Framework"),
|
|
205
236
|
clientState: createMockCategory("web-client-state", "Client State"),
|
|
237
|
+
styling: createMockCategory("web-styling", "Styling"),
|
|
206
238
|
testing: createMockCategory("web-testing", "Testing"),
|
|
239
|
+
api: createMockCategory("api-api", "Backend Framework"),
|
|
240
|
+
database: createMockCategory("api-database", "Database"),
|
|
241
|
+
methodology: createMockCategory("shared-methodology", "Methodology"),
|
|
207
242
|
tooling: createMockCategory("shared-tooling", "Tooling")
|
|
208
243
|
};
|
|
209
244
|
var TEST_MATRICES = {
|
|
@@ -244,4 +279,4 @@ export {
|
|
|
244
279
|
createMockCategory,
|
|
245
280
|
createMockResolvedStack
|
|
246
281
|
};
|
|
247
|
-
//# sourceMappingURL=chunk-
|
|
282
|
+
//# sourceMappingURL=chunk-TBB3THSL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/__tests__/test-fixtures.ts","../src/cli/lib/__tests__/helpers.ts"],"sourcesContent":["import type {\n CategoryPath,\n MergedSkillsMatrix,\n ResolvedSkill,\n SkillDisplayName,\n SkillId,\n} from \"../../types\";\nimport { createMockSkill, createMockCategory, createMockMatrix } from \"./helpers\";\n\ninterface SkillFixtureConfig {\n id: SkillId;\n category: CategoryPath;\n displayName?: SkillDisplayName;\n description: string;\n tags: string[];\n}\n\nconst SKILL_FIXTURES: Record<string, SkillFixtureConfig> = {\n react: {\n id: \"web-framework-react\",\n category: \"web-framework\",\n displayName: \"react\",\n description: \"React framework for building user interfaces\",\n tags: [\"react\", \"web\", \"ui\", \"component\"],\n },\n zustand: {\n id: \"web-state-zustand\",\n category: \"web-client-state\",\n displayName: \"zustand\",\n description: \"Bear necessities state management\",\n tags: [\"state\", \"react\", \"zustand\"],\n },\n hono: {\n id: \"api-framework-hono\",\n category: \"api-api\",\n displayName: \"hono\",\n description: \"Lightweight web framework for the edge\",\n tags: [\"api\", \"api\", \"edge\", \"serverless\"],\n },\n vitest: {\n id: \"web-testing-vitest\",\n category: \"web-testing\",\n displayName: \"vitest\",\n description: \"Next generation testing framework\",\n tags: [\"testing\", \"vitest\", \"unit\"],\n },\n vue: {\n id: \"web-framework-vue\",\n category: \"web-framework\",\n displayName: \"vue\",\n description: \"Progressive JavaScript framework\",\n tags: [\"vue\", \"web\", \"reactive\"],\n },\n \"auth-patterns\": {\n id: \"api-security-auth-patterns\",\n category: \"api-security\",\n description: \"Authentication and authorization patterns\",\n tags: [\"auth\", \"security\", \"jwt\", \"oauth\"],\n },\n drizzle: {\n id: \"api-database-drizzle\",\n category: \"api-database\",\n displayName: \"drizzle\",\n description: \"TypeScript ORM for SQL databases\",\n tags: [\"database\", \"orm\", \"sql\"],\n },\n methodology: {\n id: \"meta-methodology-anti-over-engineering\",\n category: \"shared-methodology\",\n description: \"Surgical implementation, not architectural innovation\",\n tags: [\"methodology\", \"foundational\"],\n },\n \"scss-modules\": {\n id: \"web-styling-scss-modules\",\n category: \"web-styling\",\n displayName: \"scss-modules\",\n description: \"CSS Modules with SCSS\",\n tags: [\"css\", \"scss\", \"modules\"],\n },\n} as const;\n\nexport type TestSkillName = keyof typeof SKILL_FIXTURES;\n\nexport function getTestSkill(\n name: TestSkillName,\n overrides?: Partial<ResolvedSkill>,\n): ResolvedSkill {\n const config = SKILL_FIXTURES[name];\n const { id, category, ...defaults } = config;\n return createMockSkill(id, category, { ...defaults, ...overrides });\n}\n\n// ---------------------------------------------------------------------------\n// Shared base skill fixtures — canonical defaults with no overrides.\n// Use spread for per-test customization: `{ ...TEST_SKILLS.react, displayName: \"react\" }`\n// ---------------------------------------------------------------------------\n\nexport const TEST_SKILLS = {\n react: createMockSkill(\"web-framework-react\", \"web-framework\"),\n vue: createMockSkill(\"web-framework-vue\", \"web-framework\"),\n zustand: createMockSkill(\"web-state-zustand\", \"web-client-state\", {\n compatibleWith: [\"web-framework-react\"],\n }),\n pinia: createMockSkill(\"web-state-pinia\", \"web-client-state\", {\n compatibleWith: [\"web-framework-vue\"],\n }),\n hono: createMockSkill(\"api-framework-hono\", \"api-api\"),\n vitest: createMockSkill(\"web-testing-vitest\", \"web-testing\"),\n scssModules: createMockSkill(\"web-styling-scss-modules\", \"web-styling\"),\n drizzle: createMockSkill(\"api-database-drizzle\", \"api-database\"),\n // Methodology skills (DEFAULT_PRESELECTED_SKILLS) — used by createComprehensiveMatrix\n investigationRequirements: createMockSkill(\n \"meta-methodology-investigation-requirements\",\n \"shared-methodology\",\n { description: \"Never speculate - read actual code first\", categoryExclusive: false },\n ),\n antiOverEngineering: createMockSkill(\n \"meta-methodology-anti-over-engineering\",\n \"shared-methodology\",\n {\n description: \"Surgical implementation, not architectural innovation\",\n categoryExclusive: false,\n },\n ),\n successCriteria: createMockSkill(\"meta-methodology-success-criteria\", \"shared-methodology\", {\n description: \"Explicit, measurable criteria defining done\",\n categoryExclusive: false,\n }),\n writeVerification: createMockSkill(\"meta-methodology-write-verification\", \"shared-methodology\", {\n description: \"Verify work was actually saved\",\n categoryExclusive: false,\n }),\n improvementProtocol: createMockSkill(\n \"meta-methodology-improvement-protocol\",\n \"shared-methodology\",\n { description: \"Evidence-based self-improvement\", categoryExclusive: false },\n ),\n contextManagement: createMockSkill(\"meta-methodology-context-management\", \"shared-methodology\", {\n description: \"Maintain project continuity across sessions\",\n categoryExclusive: false,\n }),\n};\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 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 api: createMockCategory(\"api-api\", \"Backend Framework\"),\n database: createMockCategory(\"api-database\", \"Database\"),\n methodology: createMockCategory(\"shared-methodology\", \"Methodology\"),\n tooling: createMockCategory(\"shared-tooling\", \"Tooling\"),\n};\n\n// ---------------------------------------------------------------------------\n// Shared matrix fixtures — common skill combinations used across test files.\n// Use createMockMatrix overrides for per-test customization:\n// `createMockMatrix(TEST_MATRICES.react.skills, { suggestedStacks: [...] })`\n// ---------------------------------------------------------------------------\n\nexport const TEST_MATRICES: Record<string, MergedSkillsMatrix> = {\n empty: createMockMatrix({}),\n react: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n }),\n reactAndZustand: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n \"web-state-zustand\": TEST_SKILLS.zustand,\n }),\n reactAndHono: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n \"api-framework-hono\": TEST_SKILLS.hono,\n }),\n reactAndScss: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n \"web-styling-scss-modules\": TEST_SKILLS.scssModules,\n }),\n reactScssAndHono: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n \"web-styling-scss-modules\": TEST_SKILLS.scssModules,\n \"api-framework-hono\": TEST_SKILLS.hono,\n }),\n reactZustandAndHono: createMockMatrix({\n \"web-framework-react\": TEST_SKILLS.react,\n \"web-state-zustand\": TEST_SKILLS.zustand,\n \"api-framework-hono\": TEST_SKILLS.hono,\n }),\n};\n","import path from \"path\";\nimport os from \"os\";\nimport { fileURLToPath } from \"url\";\nimport { mkdtemp, rm, mkdir, writeFile, readFile, stat } from \"fs/promises\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { run, Errors } from \"@oclif/core\";\nimport ansis from \"ansis\";\nimport { DEFAULT_BRANDING, DEFAULT_PLUGIN_NAME, STANDARD_FILES } from \"../../consts\";\nimport { typedEntries } from \"../../utils/typed-object\";\nimport { computeSkillFolderHash } from \"../versioning\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport const CLI_ROOT = path.resolve(__dirname, \"../../../..\");\n\nexport const OUTPUT_STRINGS = {\n CONFIG_HEADER: `${DEFAULT_BRANDING.NAME} Configuration`,\n CONFIG_PATHS_HEADER: \"Configuration File Paths\",\n CONFIG_LAYERS_HEADER: \"Configuration Layers:\",\n CONFIG_PRECEDENCE: \"Precedence: flag > env > project > global > default\",\n SOURCE_LABEL: \"Source:\",\n MARKETPLACE_LABEL: \"Marketplace:\",\n AGENTS_SOURCE_LABEL: \"Agents Source:\",\n GLOBAL_LABEL: \"Global:\",\n PROJECT_LABEL: \"Project:\",\n\n // Setup/Init outputs\n INIT_HEADER: `${DEFAULT_BRANDING.NAME} Setup`,\n INIT_SUCCESS: `${DEFAULT_BRANDING.NAME} initialized successfully!`,\n LOADING_MATRIX: \"Loading skills matrix...\",\n LOADING_SKILLS: \"Loading skills...\",\n LOADING_AGENTS: \"Loading agent partials...\",\n\n // Plugin/installation outputs\n NO_PLUGIN_FOUND: \"No plugin found\",\n NO_INSTALLATION_FOUND: \"No installation found\",\n NO_PLUGIN_INSTALLATION: \"No plugin installation found\",\n NOT_INSTALLED: `${DEFAULT_BRANDING.NAME} is not installed`,\n UNINSTALL_HEADER: `${DEFAULT_BRANDING.NAME} Uninstall`,\n UNINSTALL_COMPLETE: `${DEFAULT_BRANDING.NAME} has been uninstalled`,\n EJECT_HEADER: `${DEFAULT_BRANDING.NAME} Eject`,\n\n // Doctor command outputs\n DOCTOR_HEADER: `${DEFAULT_BRANDING.NAME} Doctor`,\n\n // Error message patterns (lowercase for case-insensitive matching)\n ERROR_MISSING_ARG: \"missing required arg\",\n ERROR_UNEXPECTED_ARG: \"unexpected argument\",\n ERROR_UNKNOWN_FLAG: \"unknown flag\",\n ERROR_PARSE: \"parse\",\n} as const;\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 CategoryDefinition,\n CategoryPath,\n CompileAgentConfig,\n CompileConfig,\n CompileContext,\n Domain,\n DomainSelections,\n ExtractedSkillMetadata,\n MergedSkillsMatrix,\n ResolvedSkill,\n ResolvedStack,\n Skill,\n SkillAssignment,\n SkillDefinition,\n SkillDisplayName,\n SkillId,\n SkillSource,\n SkillSourceType,\n SkillsMatrixConfig,\n Stack,\n StackAgentConfig,\n Subcategory,\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 } from \"./fixtures/create-test-source\";\nimport { getTestSkill, TEST_SKILLS, TEST_CATEGORIES } from \"./test-fixtures\";\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n const s = await stat(filePath);\n return s.isFile();\n } catch {\n return false;\n }\n}\n\nexport async function directoryExists(dirPath: string): Promise<boolean> {\n try {\n const s = await stat(dirPath);\n return s.isDirectory();\n } catch {\n return false;\n }\n}\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\nexport function buildWizardResult(\n selectedSkills: SkillId[],\n overrides?: Partial<WizardResultV2>,\n): WizardResultV2 {\n return {\n selectedSkills,\n selectedAgents: [],\n selectedStackId: null,\n domainSelections: {} as DomainSelections,\n selectedDomains: [],\n sourceSelections: {},\n expertMode: false,\n installMode: \"local\",\n cancelled: false,\n validation: { valid: true, errors: [], warnings: [] },\n ...overrides,\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\nexport async function createTempDir(prefix = \"cc-test-\"): Promise<string> {\n return mkdtemp(path.join(os.tmpdir(), prefix));\n}\n\nconst CLEANUP_MAX_RETRIES = 3;\nconst CLEANUP_RETRY_DELAY_MS = 100;\n\nexport async function cleanupTempDir(dirPath: string): Promise<void> {\n for (let attempt = 0; attempt < CLEANUP_MAX_RETRIES; attempt++) {\n try {\n await rm(dirPath, { recursive: true, force: true });\n return;\n } catch (error: unknown) {\n const isRetryable =\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOTEMPTY\";\n if (!isRetryable || attempt === CLEANUP_MAX_RETRIES - 1) {\n throw error;\n }\n // Transient ENOTEMPTY on macOS: kernel hasn't released directory entries yet\n await new Promise((resolve) => setTimeout(resolve, CLEANUP_RETRY_DELAY_MS));\n }\n }\n}\n\nexport interface TestDirs {\n tempDir: string;\n projectDir: string;\n pluginDir: string;\n skillsDir: string;\n agentsDir: string;\n}\n\nexport async function createTestDirs(prefix = \"cc-test-\"): Promise<TestDirs> {\n const tempDir = await createTempDir(prefix);\n const projectDir = path.join(tempDir, \"project\");\n const pluginDir = path.join(projectDir, \".claude\", \"plugins\", DEFAULT_PLUGIN_NAME);\n const skillsDir = path.join(pluginDir, \"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: TestDirs): Promise<void> {\n await cleanupTempDir(dirs.tempDir);\n}\n\nexport function createMockSkill(\n id: SkillId,\n category: CategoryPath,\n overrides?: Partial<ResolvedSkill>,\n): ResolvedSkill {\n return {\n id,\n description: `${id} skill`,\n category,\n categoryExclusive: false,\n tags: [],\n author: \"@test\",\n conflictsWith: [],\n recommends: [],\n requires: [],\n alternatives: [],\n discourages: [],\n compatibleWith: [],\n requiresSetup: [],\n providesSetupFor: [],\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-subcategory-name\"\n const segments = id.split(\"-\");\n const domain = segments[0] ?? \"web\";\n const subcategory = segments[1] ?? \"framework\";\n const name = segments.slice(2).join(\"-\") || \"skill\";\n const directoryPath = `${domain}/${subcategory}/${name}`;\n\n return {\n id,\n directoryPath,\n description: `${id} skill`,\n category: `${domain}-${subcategory}` as CategoryPath,\n categoryExclusive: true,\n author: \"@test\",\n tags: [],\n compatibleWith: [],\n conflictsWith: [],\n requires: [],\n requiresSetup: [],\n providesSetupFor: [],\n path: `skills/${directoryPath}/`,\n ...overrides,\n };\n}\n\nexport function createMockMatrix(\n skills: Record<string, ResolvedSkill>,\n overrides?: Partial<MergedSkillsMatrix>,\n): MergedSkillsMatrix {\n // Auto-generate displayNames and displayNameToId from skills\n const autoDisplayNames = {} as Record<SkillId, SkillDisplayName>;\n const autoDisplayNameToId = {} as Record<SkillDisplayName, SkillId>;\n for (const [id, skill] of typedEntries(skills)) {\n if (skill.displayName) {\n autoDisplayNames[id as SkillId] = skill.displayName;\n autoDisplayNameToId[skill.displayName] = id as SkillId;\n }\n }\n\n return {\n version: \"1.0.0\",\n categories: {} as Record<Subcategory, import(\"../../types\").CategoryDefinition>,\n skills,\n suggestedStacks: [],\n displayNameToId: autoDisplayNameToId,\n displayNames: autoDisplayNames,\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/plugins/${DEFAULT_PLUGIN_NAME}`,\n ...overrides,\n };\n}\n\nexport function createSkillContent(name: string, description = \"A test skill\"): string {\n return `---\nname: ${name}\ndescription: ${description}\ncategory: test\n---\n\n# ${name}\n\nThis is a test skill.\n`;\n}\n\nfunction createMetadataContent(author = \"@test\"): string {\n return `author: \"${author}\"\n`;\n}\n\nexport function createAgentYamlContent(name: string, description = `Test ${name} agent`): string {\n return `id: ${name}\ntitle: ${name} Agent\ndescription: ${description}\ntools:\n - Read\n - Write`;\n}\n\nexport async function writeTestSkill(\n skillsDir: string,\n skillName: string,\n options?: {\n author?: string;\n description?: string;\n /** Extra fields to merge into metadata.yaml (e.g., forkedFrom, cliName) */\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 skillDir = path.join(skillsDir, skillName);\n await mkdir(skillDir, { recursive: true });\n\n await writeFile(\n path.join(skillDir, STANDARD_FILES.SKILL_MD),\n options?.skillContent ?? createSkillContent(skillName, options?.description),\n );\n\n if (!options?.skipMetadata) {\n const contentHash = await computeSkillFolderHash(skillDir);\n if (options?.extraMetadata) {\n const metadata = {\n author: options?.author ?? \"@test\",\n contentHash,\n ...options?.extraMetadata,\n };\n await writeFile(path.join(skillDir, STANDARD_FILES.METADATA_YAML), stringifyYaml(metadata));\n } else {\n const metadata = {\n author: options?.author ?? \"@test\",\n contentHash,\n };\n await writeFile(path.join(skillDir, STANDARD_FILES.METADATA_YAML), stringifyYaml(metadata));\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>/<subcategory>/<name>/`).\n */\nexport async function writeSourceSkill(\n skillsDir: string,\n directoryPath: string,\n config: {\n id: string;\n description: string;\n category: string;\n author?: string;\n tags?: string[];\n categoryExclusive?: boolean;\n content?: string;\n },\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 createSkillContent(config.id, config.description),\n );\n\n const metadata: Record<string, unknown> = {\n cliName: config.id,\n category: config.category,\n author: config.author ?? \"@test\",\n };\n if (config.tags) {\n metadata.tags = config.tags;\n }\n if (config.categoryExclusive !== undefined) {\n metadata.categoryExclusive = config.categoryExclusive;\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_YAML),\n createAgentYamlContent(agentName, options?.description),\n );\n\n return agentDir;\n}\n\nexport function createMockCategory(\n id: Subcategory,\n displayName: string,\n overrides?: Partial<CategoryDefinition>,\n): CategoryDefinition {\n return {\n id,\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 13 skills across 7 categories,\n * 2 suggested stacks, display name mappings, and relationship data\n * (conflicts, recommends). Includes all 6 DEFAULT_PRESELECTED_SKILLS\n * (methodology) so wizard handleComplete can resolve them.\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 Subcategory IDs (matching production\n // metadata.yaml and the categories map keys, e.g., \"web-framework\", \"api-api\").\n const skills = {\n \"web-framework-react\": getTestSkill(\"react\", { category: \"web-framework\" }),\n \"web-framework-vue\": getTestSkill(\"vue\", {\n category: \"web-framework\",\n conflictsWith: [{ skillId: \"web-framework-react\", reason: \"Choose one framework\" }],\n }),\n \"web-state-zustand\": getTestSkill(\"zustand\", {\n category: \"web-client-state\",\n recommends: [{ skillId: \"web-framework-react\", reason: \"Works great with React\" }],\n }),\n \"web-styling-scss-modules\": getTestSkill(\"scss-modules\", { category: \"web-styling\" }),\n \"api-framework-hono\": getTestSkill(\"hono\", { category: \"api-api\" }),\n \"api-database-drizzle\": getTestSkill(\"drizzle\", { category: \"api-database\" }),\n \"web-testing-vitest\": getTestSkill(\"vitest\", { category: \"web-testing\" }),\n // Methodology skills (DEFAULT_PRESELECTED_SKILLS) — auto-injected by wizard\n \"meta-methodology-investigation-requirements\": TEST_SKILLS.investigationRequirements,\n \"meta-methodology-anti-over-engineering\": TEST_SKILLS.antiOverEngineering,\n \"meta-methodology-success-criteria\": TEST_SKILLS.successCriteria,\n \"meta-methodology-write-verification\": TEST_SKILLS.writeVerification,\n \"meta-methodology-improvement-protocol\": TEST_SKILLS.improvementProtocol,\n \"meta-methodology-context-management\": TEST_SKILLS.contextManagement,\n };\n\n const categories = {\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n domain: \"web\" as Domain,\n exclusive: true,\n required: true,\n },\n \"web-client-state\": { ...TEST_CATEGORIES.clientState, domain: \"web\" as Domain, order: 1 },\n \"web-styling\": { ...TEST_CATEGORIES.styling, domain: \"web\" as Domain, order: 2 },\n \"api-api\": { ...TEST_CATEGORIES.api, domain: \"api\" as Domain, exclusive: true, required: true },\n \"api-database\": { ...TEST_CATEGORIES.database, domain: \"api\" as Domain, order: 1 },\n \"web-testing\": {\n ...TEST_CATEGORIES.testing,\n domain: \"shared\" as Domain,\n exclusive: false,\n order: 10,\n },\n \"shared-methodology\": {\n ...TEST_CATEGORIES.methodology,\n domain: \"shared\" as Domain,\n exclusive: false,\n required: false,\n order: 11,\n },\n } as Record<Subcategory, 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\"],\n },\n } as ResolvedStack[\"skills\"],\n allSkillIds: [\"web-framework-vue\"],\n philosophy: \"Progressive framework approach\",\n }),\n ];\n\n const displayNameToId = {\n react: \"web-framework-react\",\n vue: \"web-framework-vue\",\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 \"investigation-requirements\": \"meta-methodology-investigation-requirements\",\n \"anti-over-engineering\": \"meta-methodology-anti-over-engineering\",\n \"success-criteria\": \"meta-methodology-success-criteria\",\n \"write-verification\": \"meta-methodology-write-verification\",\n \"improvement-protocol\": \"meta-methodology-improvement-protocol\",\n \"context-management\": \"meta-methodology-context-management\",\n // Double cast needed: object literal's string keys are not assignable to branded\n // SkillDisplayName/SkillId types without going through `unknown` first (boundary cast)\n } as unknown as Record<SkillDisplayName, SkillId>;\n\n const displayNames = {} as Record<SkillId, SkillDisplayName>;\n for (const [displayName, fullId] of typedEntries(displayNameToId)) {\n (displayNames as Record<string, string>)[fullId] = displayName;\n }\n\n return createMockMatrix(skills, {\n categories,\n suggestedStacks,\n displayNameToId,\n displayNames,\n ...overrides,\n });\n}\n\n/**\n * Builds a lightweight test matrix with 4 skills, 4 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 Subcategory IDs — see createComprehensiveMatrix comment\n const skills = {\n \"web-framework-react\": getTestSkill(\"react\", { category: \"web-framework\" }),\n \"web-state-zustand\": getTestSkill(\"zustand\", { category: \"web-client-state\" }),\n \"api-framework-hono\": getTestSkill(\"hono\", { category: \"api-api\" }),\n \"web-testing-vitest\": getTestSkill(\"vitest\", { category: \"web-testing\" }),\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\" as Domain,\n exclusive: true,\n required: true,\n },\n \"web-client-state\": { ...TEST_CATEGORIES.clientState, domain: \"web\" as Domain, order: 1 },\n \"api-api\": {\n ...TEST_CATEGORIES.api,\n domain: \"api\" as Domain,\n exclusive: true,\n required: true,\n },\n \"web-testing\": {\n ...TEST_CATEGORIES.testing,\n displayName: \"Testing Framework\",\n domain: \"shared\" as Domain,\n exclusive: false,\n },\n } as Record<Subcategory, 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. Adds methodology skills (DEFAULT_PRESELECTED_SKILLS)\n * 4. 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, matrix));\n }\n\n const methodologySkills = store.getDefaultMethodologySkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n return {\n selectedSkills: allSkills,\n selectedAgents: store.selectedAgents,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n selectedDomains: store.selectedDomains,\n sourceSelections: store.sourceSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\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 subcategory per skill.\n */\nexport function simulateSkillSelections(\n skillIds: SkillId[],\n matrix: MergedSkillsMatrix,\n selectedDomains: string[],\n): void {\n const domainSelections: DomainSelections = {};\n\n for (const skillId of skillIds) {\n const skill = matrix.skills[skillId];\n if (!skill) continue;\n\n // Boundary cast: skill.category is a Subcategory at runtime\n const subcategory = skill.category as Subcategory;\n const categoryDef = matrix.categories[subcategory];\n const domain = categoryDef?.domain;\n if (!domain) continue;\n\n if (!domainSelections[domain]) {\n domainSelections[domain] = {};\n }\n if (!domainSelections[domain][subcategory]) {\n domainSelections[domain][subcategory] = [];\n }\n if (!domainSelections[domain][subcategory].includes(skillId)) {\n domainSelections[domain][subcategory].push(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\nexport function createMockMatrixConfig(\n categories: Record<string, CategoryDefinition>,\n overrides?: Partial<SkillsMatrixConfig>,\n): SkillsMatrixConfig {\n return {\n version: \"1.0.0\",\n // Boundary cast: test callers may pass arbitrary category keys\n categories: categories as SkillsMatrixConfig[\"categories\"],\n relationships: {\n conflicts: [],\n discourages: [],\n recommends: [],\n requires: [],\n alternatives: [],\n },\n skillAliases: {},\n ...overrides,\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\"] as AgentName[],\n skillPlugins: [\"web-framework-react\"] as SkillId[],\n hasHooks: false,\n ...overrides,\n };\n}\n\nexport function createMockSkillAssignment(id: SkillId, preloaded = false): SkillAssignment {\n return { id, preloaded };\n}\n\nexport { getTestSkill, TEST_SKILLS, TEST_CATEGORIES, TEST_MATRICES } from \"./test-fixtures\";\nexport type { TestSkillName } from \"./test-fixtures\";\n"],"mappings":"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","names":[]}
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
verbose,
|
|
9
9
|
warn,
|
|
10
10
|
writeFile
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-C4QI54PN.js";
|
|
12
12
|
import {
|
|
13
13
|
MAX_PLUGIN_FILE_SIZE
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
15
15
|
import {
|
|
16
16
|
init_esm_shims
|
|
17
17
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -129,4 +129,4 @@ export {
|
|
|
129
129
|
writeMarketplace,
|
|
130
130
|
getMarketplaceStats
|
|
131
131
|
};
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
132
|
+
//# sourceMappingURL=chunk-TWDVLTU6.js.map
|
|
@@ -4,20 +4,21 @@ import {
|
|
|
4
4
|
} from "./chunk-K77I4XGL.js";
|
|
5
5
|
import {
|
|
6
6
|
CategoryGrid
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3APMMQUA.js";
|
|
8
8
|
import {
|
|
9
|
-
getDomainDisplayName
|
|
10
|
-
|
|
9
|
+
getDomainDisplayName,
|
|
10
|
+
orderDomains
|
|
11
|
+
} from "./chunk-NRCKIHND.js";
|
|
11
12
|
import {
|
|
12
13
|
ViewTitle
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
14
15
|
import {
|
|
15
16
|
buildCategoriesForDomain,
|
|
16
17
|
validateBuildStep
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-INKJBMPJ.js";
|
|
18
19
|
import {
|
|
19
20
|
CLI_COLORS
|
|
20
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
21
22
|
import {
|
|
22
23
|
init_esm_shims
|
|
23
24
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -25,7 +26,7 @@ import {
|
|
|
25
26
|
// src/cli/components/wizard/step-build.tsx
|
|
26
27
|
init_esm_shims();
|
|
27
28
|
import { Box, Text, useInput } from "ink";
|
|
28
|
-
import { useState } from "react";
|
|
29
|
+
import { useMemo as useMemo2, useState } from "react";
|
|
29
30
|
|
|
30
31
|
// src/cli/lib/wizard/index.ts
|
|
31
32
|
init_esm_shims();
|
|
@@ -78,6 +79,7 @@ var StepBuild = ({
|
|
|
78
79
|
}) => {
|
|
79
80
|
const [validationError, setValidationError] = useState(void 0);
|
|
80
81
|
const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();
|
|
82
|
+
const orderedDomains = useMemo2(() => orderDomains(selectedDomains), [selectedDomains]);
|
|
81
83
|
const categories = useFrameworkFiltering({
|
|
82
84
|
domain: activeDomain,
|
|
83
85
|
allSelections,
|
|
@@ -115,7 +117,7 @@ var StepBuild = ({
|
|
|
115
117
|
borderLeft: false,
|
|
116
118
|
borderColor: CLI_COLORS.NEUTRAL,
|
|
117
119
|
borderStyle: "single",
|
|
118
|
-
children: /* @__PURE__ */ jsx(Box, { columnGap: 2, flexDirection: "row", children:
|
|
120
|
+
children: /* @__PURE__ */ jsx(Box, { columnGap: 2, flexDirection: "row", children: orderedDomains.map((domain) => {
|
|
119
121
|
const isActive = domain === activeDomain;
|
|
120
122
|
return /* @__PURE__ */ jsx(Text, { color: isActive ? CLI_COLORS.WARNING : void 0, bold: isActive, children: getDomainDisplayName(domain) }, domain);
|
|
121
123
|
}) })
|
|
@@ -141,4 +143,4 @@ var StepBuild = ({
|
|
|
141
143
|
export {
|
|
142
144
|
StepBuild
|
|
143
145
|
};
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-VAQJLHUW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-build.tsx","../src/cli/lib/wizard/index.ts","../src/cli/components/hooks/use-framework-filtering.ts"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { validateBuildStep } from \"../../lib/wizard/index.js\";\nimport type {\n Domain,\n MergedSkillsMatrix,\n SkillId,\n Subcategory,\n SubcategorySelections,\n} from \"../../types/index.js\";\nimport { useFrameworkFiltering } from \"../hooks/use-framework-filtering.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { CategoryGrid } from \"./category-grid.js\";\nimport { getDomainDisplayName, orderDomains } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\nexport type StepBuildProps = {\n matrix: MergedSkillsMatrix;\n domain: Domain;\n selectedDomains: Domain[];\n selections: SubcategorySelections;\n allSelections: SkillId[];\n showLabels: boolean;\n expertMode: boolean;\n /** Skill IDs already installed on disk, shown with a dimmed checkmark */\n installedSkillIds?: SkillId[];\n onToggle: (subcategoryId: Subcategory, technologyId: SkillId) => void;\n onToggleLabels: () => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype FooterProps = {\n validationError?: string;\n};\n\nconst Footer: React.FC<FooterProps> = ({ validationError }) => {\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {validationError && (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color={CLI_COLORS.WARNING}>{validationError}</Text>\n <Text dimColor>Press ESC to go back, or select a skill and press ENTER to continue.</Text>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const StepBuild: React.FC<StepBuildProps> = ({\n matrix,\n domain: activeDomain,\n selectedDomains,\n selections,\n allSelections,\n showLabels,\n expertMode,\n installedSkillIds,\n onToggle,\n onToggleLabels,\n onContinue,\n onBack,\n}) => {\n const [validationError, setValidationError] = useState<string | undefined>(undefined);\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n\n const orderedDomains = useMemo(() => orderDomains(selectedDomains), [selectedDomains]);\n\n const categories = useFrameworkFiltering({\n domain: activeDomain,\n allSelections,\n matrix,\n expertMode,\n selections,\n installedSkillIds,\n });\n\n useInput((_input, key) => {\n if (key.return) {\n const validation = validateBuildStep(categories, selections);\n if (validation.valid) {\n setValidationError(undefined);\n onContinue();\n } else {\n setValidationError(validation.message);\n }\n } else if (key.escape) {\n setValidationError(undefined);\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box\n columnGap={2}\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginBottom={1}\n paddingRight={1}\n marginTop={-1}\n borderTop={false}\n borderRight={false}\n borderLeft={false}\n borderColor={CLI_COLORS.NEUTRAL}\n borderStyle=\"single\"\n >\n <Box columnGap={2} flexDirection=\"row\">\n {orderedDomains.map((domain) => {\n const isActive = domain === activeDomain;\n return (\n <Text key={domain} color={isActive ? CLI_COLORS.WARNING : undefined} bold={isActive}>\n {getDomainDisplayName(domain)}\n </Text>\n );\n })}\n </Box>\n </Box>\n <ViewTitle>{`Customize your ${getDomainDisplayName(activeDomain)} stack`}</ViewTitle>\n\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <CategoryGrid\n key={activeDomain}\n categories={categories}\n availableHeight={gridHeight}\n expertMode={expertMode}\n showLabels={showLabels}\n onToggle={onToggle}\n onToggleLabels={onToggleLabels}\n />\n </Box>\n\n <Footer validationError={validationError} />\n </Box>\n );\n};\n","export {\n type BuildStepValidation,\n validateBuildStep,\n computeOptionState,\n getSkillDisplayLabel,\n buildCategoriesForDomain,\n} from \"./build-step-logic\";\n","import { useMemo } from \"react\";\nimport type {\n Domain,\n MergedSkillsMatrix,\n SkillId,\n SubcategorySelections,\n} from \"../../types/index.js\";\nimport { buildCategoriesForDomain } from \"../../lib/wizard/index.js\";\nimport type { CategoryRow } from \"../wizard/category-grid.js\";\n\ntype UseFrameworkFilteringOptions = {\n domain: Domain;\n allSelections: SkillId[];\n matrix: MergedSkillsMatrix;\n expertMode: boolean;\n selections: SubcategorySelections;\n installedSkillIds?: SkillId[];\n};\n\nexport function useFrameworkFiltering({\n domain,\n allSelections,\n matrix,\n expertMode,\n selections,\n installedSkillIds,\n}: UseFrameworkFilteringOptions): CategoryRow[] {\n return useMemo(\n () =>\n buildCategoriesForDomain(\n domain,\n allSelections,\n matrix,\n expertMode,\n selections,\n installedSkillIds,\n ),\n [domain, allSelections, matrix, expertMode, selections, installedSkillIds],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,KAAK,MAAM,gBAAgB;AACpC,SAAgB,WAAAA,UAAS,gBAAgB;;;ACDzC;;;ACAA;AAAA,SAAS,eAAe;AAmBjB,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,SAAO;AAAA,IACL,MACE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACF,CAAC,QAAQ,eAAe,QAAQ,YAAY,YAAY,iBAAiB;AAAA,EAC3E;AACF;;;AFEQ,SACE,KADF;AAJR,IAAM,SAAgC,CAAC,EAAE,gBAAgB,MAAM;AAC7D,SACE,oBAAC,OAAI,eAAc,UAAS,WAAW,GACpC,6BACC,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,wBAAC,QAAK,OAAO,WAAW,SAAU,2BAAgB;AAAA,IAClD,oBAAC,QAAK,UAAQ,MAAC,kFAAoE;AAAA,KACrF,GAEJ;AAEJ;AAEO,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAA6B,MAAS;AACpF,QAAM,EAAE,KAAK,SAAS,gBAAgB,WAAW,IAAI,kBAAkB;AAEvE,QAAM,iBAAiBC,SAAQ,MAAM,aAAa,eAAe,GAAG,CAAC,eAAe,CAAC;AAErF,QAAM,aAAa,sBAAsB;AAAA,IACvC,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,YAAM,aAAa,kBAAkB,YAAY,UAAU;AAC3D,UAAI,WAAW,OAAO;AACpB,2BAAmB,MAAS;AAC5B,mBAAW;AAAA,MACb,OAAO;AACL,2BAAmB,WAAW,OAAO;AAAA,MACvC;AAAA,IACF,WAAW,IAAI,QAAQ;AACrB,yBAAmB,MAAS;AAC5B,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SACE,qBAAC,OAAI,eAAc,UAAS,OAAM,QAAO,UAAU,GAAG,WAAW,GAC/D;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,cAAc;AAAA,QACd,cAAc;AAAA,QACd,WAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aAAa,WAAW;AAAA,QACxB,aAAY;AAAA,QAEZ,8BAAC,OAAI,WAAW,GAAG,eAAc,OAC9B,yBAAe,IAAI,CAAC,WAAW;AAC9B,gBAAM,WAAW,WAAW;AAC5B,iBACE,oBAAC,QAAkB,OAAO,WAAW,WAAW,UAAU,QAAW,MAAM,UACxE,+BAAqB,MAAM,KADnB,MAEX;AAAA,QAEJ,CAAC,GACH;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,aAAW,4BAAkB,qBAAqB,YAAY,CAAC,UAAS;AAAA,IAEzE,oBAAC,OAAI,KAAK,SAAS,UAAU,GAAG,WAAW,GACzC;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MANK;AAAA,IAOP,GACF;AAAA,IAEA,oBAAC,UAAO,iBAAkC;AAAA,KAC5C;AAEJ;","names":["useMemo","useMemo"]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-KUV24B5M.js";
|
|
5
5
|
import {
|
|
6
6
|
CLI_COLORS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
8
8
|
import {
|
|
9
9
|
init_esm_shims
|
|
10
10
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -87,4 +87,4 @@ var SearchModal = ({ results, alias, onBind, onClose }) => {
|
|
|
87
87
|
export {
|
|
88
88
|
SearchModal
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-VSZ5GDET.js.map
|
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
WizardLayout
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OEJDFGAF.js";
|
|
5
5
|
import {
|
|
6
6
|
StepSettings
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JZHIF3K7.js";
|
|
8
8
|
import {
|
|
9
9
|
StepSources
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HPJP3HFD.js";
|
|
11
11
|
import {
|
|
12
12
|
StepStack
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-FMQ3A7W4.js";
|
|
14
14
|
import {
|
|
15
15
|
StepAgents
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-YTRFL3MR.js";
|
|
17
17
|
import {
|
|
18
18
|
StepBuild
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-VAQJLHUW.js";
|
|
20
20
|
import {
|
|
21
21
|
StepConfirm
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-DVW6ASTO.js";
|
|
23
23
|
import {
|
|
24
24
|
getStackName
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-NRCKIHND.js";
|
|
26
26
|
import {
|
|
27
27
|
cliTheme
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-N5OCAAXY.js";
|
|
29
29
|
import {
|
|
30
30
|
useWizardStore
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveAlias,
|
|
34
34
|
validateSelection
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
36
36
|
import {
|
|
37
37
|
warn
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-C4QI54PN.js";
|
|
39
39
|
import {
|
|
40
40
|
CLI_COLORS
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
42
42
|
import {
|
|
43
43
|
init_esm_shims
|
|
44
44
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -323,4 +323,4 @@ var Wizard = ({
|
|
|
323
323
|
export {
|
|
324
324
|
Wizard
|
|
325
325
|
};
|
|
326
|
-
//# sourceMappingURL=chunk-
|
|
326
|
+
//# sourceMappingURL=chunk-XTRPYUWK.js.map
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
} from "./chunk-K77I4XGL.js";
|
|
5
5
|
import {
|
|
6
6
|
getDomainDisplayName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NRCKIHND.js";
|
|
8
8
|
import {
|
|
9
9
|
ViewTitle
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
11
11
|
import {
|
|
12
12
|
useWizardStore
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
14
14
|
import {
|
|
15
15
|
typedKeys
|
|
16
16
|
} from "./chunk-T4EXUIBY.js";
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
CLI_COLORS,
|
|
19
19
|
SCROLL_VIEWPORT,
|
|
20
20
|
UI_SYMBOLS
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
22
22
|
import {
|
|
23
23
|
init_esm_shims
|
|
24
24
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -118,13 +118,13 @@ function buildAgentGroups(matrix) {
|
|
|
118
118
|
if (customAgentIds.length === 0) return BUILT_IN_AGENT_GROUPS;
|
|
119
119
|
const customGroupMap = /* @__PURE__ */ new Map();
|
|
120
120
|
for (const agentId of customAgentIds) {
|
|
121
|
-
const
|
|
122
|
-
const
|
|
121
|
+
const explicitDomain = matrix.agentDefinedDomains?.[agentId];
|
|
122
|
+
const domainKey = explicitDomain ?? (agentId.split("-")[0] || "custom");
|
|
123
|
+
const groupLabel = getDomainDisplayName(domainKey);
|
|
123
124
|
if (!customGroupMap.has(groupLabel)) {
|
|
124
125
|
customGroupMap.set(groupLabel, []);
|
|
125
126
|
}
|
|
126
127
|
customGroupMap.get(groupLabel).push({
|
|
127
|
-
// Boundary cast: custom agent names from matrix stacks are not in the AgentName union
|
|
128
128
|
id: agentId,
|
|
129
129
|
label: agentIdToLabel(agentId),
|
|
130
130
|
description: "Custom agent"
|
|
@@ -255,4 +255,4 @@ var StepAgents = ({ matrix }) => {
|
|
|
255
255
|
export {
|
|
256
256
|
StepAgents
|
|
257
257
|
};
|
|
258
|
-
//# sourceMappingURL=chunk-
|
|
258
|
+
//# sourceMappingURL=chunk-YTRFL3MR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-agents.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { CLI_COLORS, SCROLL_VIEWPORT, UI_SYMBOLS } from \"../../consts.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { AgentName, MergedSkillsMatrix } from \"../../types/index.js\";\nimport { typedKeys } from \"../../utils/typed-object.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\ntype AgentItem = {\n id: AgentName;\n label: string;\n description: string;\n};\n\ntype AgentGroup = {\n label: string;\n items: AgentItem[];\n};\n\nconst BUILT_IN_AGENT_GROUPS: AgentGroup[] = [\n {\n label: \"Web\",\n items: [\n {\n id: \"web-developer\",\n label: \"Web Developer\",\n description: \"Frontend features, components, TypeScript\",\n },\n { id: \"web-reviewer\", label: \"Web Reviewer\", description: \"UI component code review\" },\n { id: \"web-researcher\", label: \"Web Researcher\", description: \"Frontend pattern discovery\" },\n {\n id: \"web-tester\",\n label: \"Web Tester\",\n description: \"Frontend tests, E2E, component tests\",\n },\n { id: \"web-pm\", label: \"Web PM\", description: \"Implementation specs and planning\" },\n {\n id: \"web-architecture\",\n label: \"Web Architecture\",\n description: \"App scaffolding, foundational patterns\",\n },\n {\n id: \"web-pattern-critique\",\n label: \"Web Pattern Critique\",\n description: \"Critique patterns against industry standards\",\n },\n ],\n },\n {\n label: \"API\",\n items: [\n {\n id: \"api-developer\",\n label: \"API Developer\",\n description: \"Backend routes, database, middleware\",\n },\n { id: \"api-reviewer\", label: \"API Reviewer\", description: \"Backend and config code review\" },\n { id: \"api-researcher\", label: \"API Researcher\", description: \"Backend pattern discovery\" },\n ],\n },\n {\n label: \"CLI\",\n items: [\n {\n id: \"cli-developer\",\n label: \"CLI Developer\",\n description: \"CLI commands, interactive prompts\",\n },\n { id: \"cli-tester\", label: \"CLI Tester\", description: \"CLI application tests\" },\n { id: \"cli-reviewer\", label: \"CLI Reviewer\", description: \"CLI code review\" },\n { id: \"cli-migrator\", label: \"CLI Migrator\", description: \"Commander.js to oclif migration\" },\n ],\n },\n {\n label: \"Meta\",\n items: [\n {\n id: \"pattern-scout\",\n label: \"Pattern Scout\",\n description: \"Extract codebase patterns and standards\",\n },\n { id: \"agent-summoner\", label: \"Agent Summoner\", description: \"Create and improve agents\" },\n {\n id: \"skill-summoner\",\n label: \"Skill Summoner\",\n description: \"Create technology-specific skills\",\n },\n { id: \"documentor\", label: \"Documentor\", description: \"AI-focused documentation\" },\n ],\n },\n];\n\n/** IDs of all built-in agents for fast lookup. */\nconst BUILT_IN_AGENT_IDS = new Set<string>(\n BUILT_IN_AGENT_GROUPS.flatMap((group) => group.items.map((a) => a.id)),\n);\n\n/** Convert a kebab-case agent ID to a title-case label. */\nfunction agentIdToLabel(id: string): string {\n return id\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n}\n\ntype FocusId = AgentName | \"continue\";\n\ntype ListRow =\n | { type: \"header\"; label: string }\n | { type: \"spacer\" }\n | { type: \"agent\"; agent: AgentItem };\n\nfunction buildAgentGroups(matrix: MergedSkillsMatrix): AgentGroup[] {\n const customAgentIds: string[] = [];\n for (const stack of matrix.suggestedStacks) {\n for (const agentName of typedKeys(stack.skills)) {\n if (!BUILT_IN_AGENT_IDS.has(agentName) && !customAgentIds.includes(agentName)) {\n customAgentIds.push(agentName);\n }\n }\n }\n\n if (customAgentIds.length === 0) return BUILT_IN_AGENT_GROUPS;\n\n // Group custom agents by explicit domain (from agent.yaml) or kebab prefix fallback\n const customGroupMap = new Map<string, AgentItem[]>();\n for (const agentId of customAgentIds) {\n // Boundary cast: custom agent names from matrix stacks are not in the AgentName union\n const explicitDomain = matrix.agentDefinedDomains?.[agentId as AgentName];\n const domainKey = explicitDomain ?? (agentId.split(\"-\")[0] || \"custom\");\n const groupLabel = getDomainDisplayName(domainKey);\n if (!customGroupMap.has(groupLabel)) {\n customGroupMap.set(groupLabel, []);\n }\n customGroupMap.get(groupLabel)!.push({\n id: agentId as AgentName,\n label: agentIdToLabel(agentId),\n description: \"Custom agent\",\n });\n }\n\n const customGroups: AgentGroup[] = [];\n for (const [label, items] of customGroupMap) {\n customGroups.push({ label, items });\n }\n\n return [...BUILT_IN_AGENT_GROUPS, ...customGroups];\n}\n\nfunction buildFlatRows(groups: AgentGroup[]): ListRow[] {\n return groups.flatMap((group, groupIndex): ListRow[] => [\n ...(groupIndex > 0 ? [{ type: \"spacer\" as const }] : []),\n { type: \"header\" as const, label: group.label },\n ...group.items.map((agent): ListRow => ({ type: \"agent\", agent })),\n ]);\n}\n\nfunction buildFocusableIds(groups: AgentGroup[]): FocusId[] {\n return [...groups.flatMap((group) => group.items.map((a) => a.id)), \"continue\"];\n}\n\ntype StepAgentsProps = {\n matrix: MergedSkillsMatrix;\n};\n\nexport const StepAgents: React.FC<StepAgentsProps> = ({ matrix }) => {\n const store = useWizardStore();\n\n const agentGroups = useMemo(() => buildAgentGroups(matrix), [matrix]);\n const flatRows = useMemo(() => buildFlatRows(agentGroups), [agentGroups]);\n const focusableIds = useMemo(() => buildFocusableIds(agentGroups), [agentGroups]);\n\n const [focusedId, setFocusedId] = useState<FocusId>(focusableIds[0]!);\n const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();\n\n const scrollTopRef = useRef(0);\n const scrollEnabled = listHeight > 0 && listHeight >= SCROLL_VIEWPORT.MIN_VIEWPORT_ROWS;\n\n if (scrollEnabled && focusedId !== \"continue\") {\n const rowIndex = flatRows.findIndex(\n (row) => row.type === \"agent\" && row.agent.id === focusedId,\n );\n if (rowIndex >= 0) {\n if (rowIndex < scrollTopRef.current) {\n scrollTopRef.current = rowIndex;\n } else if (rowIndex + 1 > scrollTopRef.current + listHeight) {\n scrollTopRef.current = rowIndex + 1 - listHeight;\n }\n }\n }\n\n useInput((input, key) => {\n if (key.escape) {\n store.goBack();\n return;\n }\n\n const currentIdx = focusableIds.indexOf(focusedId);\n\n if (key.upArrow || input === \"k\") {\n const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.downArrow || input === \"j\") {\n const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.return) {\n store.setStep(\"confirm\");\n return;\n }\n\n if (input === \" \" && focusedId !== \"continue\") {\n store.toggleAgent(focusedId);\n }\n });\n\n const selectedCount = store.selectedAgents.length;\n const continueLabel =\n selectedCount > 0 ? `Continue with ${selectedCount} agent(s)` : \"Continue without agents\";\n\n const isContinueFocused = focusedId === \"continue\";\n\n const rowElements = flatRows.map((row, index) => {\n switch (row.type) {\n case \"header\":\n return (\n <Box key={`header-${row.label}`} flexShrink={0}>\n <Text dimColor bold>\n {\" \"}\n {row.label}\n </Text>\n </Box>\n );\n case \"spacer\":\n return (\n <Box key={`spacer-${index}`} flexShrink={0}>\n <Text> </Text>\n </Box>\n );\n case \"agent\": {\n const isFocused = row.agent.id === focusedId;\n const isSelected = store.selectedAgents.includes(row.agent.id);\n const checkbox = isSelected ? \"[\\u2713]\" : \"[ ]\";\n const pointer = isFocused ? UI_SYMBOLS.CURRENT : \" \";\n return (\n <Box key={row.agent.id} flexShrink={0}>\n <Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>{pointer}</Text>\n <Text\n color={isSelected || isFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isFocused}\n >\n {\" \"}\n {checkbox} {row.agent.label}\n </Text>\n <Text dimColor> - {row.agent.description}</Text>\n </Text>\n </Box>\n );\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <ViewTitle>Select agents to compile:</ViewTitle>\n\n {!scrollEnabled ? (\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0} overflow=\"hidden\">\n {rowElements}\n </Box>\n ) : (\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0}>\n <Box flexDirection=\"column\" overflow=\"hidden\" flexGrow={1}>\n <Box\n flexDirection=\"column\"\n marginTop={scrollTopRef.current > 0 ? -scrollTopRef.current : 0}\n flexShrink={0}\n >\n {rowElements}\n </Box>\n </Box>\n </Box>\n )}\n\n <Text color={isContinueFocused ? CLI_COLORS.PRIMARY : undefined} bold={isContinueFocused}>\n {isContinueFocused ? UI_SYMBOLS.CURRENT : \" \"} {\"\\u2192\"} {continueLabel}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS,
|
|
4
4
|
UI_SYMBOLS
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esm_shims
|
|
8
8
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -37,4 +37,4 @@ var SelectionCard = ({
|
|
|
37
37
|
export {
|
|
38
38
|
SelectionCard
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
40
|
+
//# sourceMappingURL=chunk-ZWAL2ZY7.js.map
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
generateMarketplace,
|
|
4
4
|
getMarketplaceStats,
|
|
5
5
|
writeMarketplace
|
|
6
|
-
} from "../../chunk-
|
|
6
|
+
} from "../../chunk-TWDVLTU6.js";
|
|
7
7
|
import {
|
|
8
8
|
BaseCommand
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-LNA6M2IE.js";
|
|
10
10
|
import {
|
|
11
11
|
setVerbose
|
|
12
|
-
} from "../../chunk-
|
|
12
|
+
} from "../../chunk-C4QI54PN.js";
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_BRANDING,
|
|
15
15
|
DEFAULT_PLUGIN_NAME,
|
|
16
16
|
DEFAULT_VERSION,
|
|
17
17
|
PLUGIN_MANIFEST_DIR
|
|
18
|
-
} from "../../chunk-
|
|
18
|
+
} from "../../chunk-FTD5Z6QD.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esm_shims
|
|
21
21
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
import {
|
|
3
3
|
compileAllAgentPlugins,
|
|
4
4
|
printAgentCompilationSummary
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-JTTTXGHX.js";
|
|
6
6
|
import {
|
|
7
7
|
BaseCommand
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-LNA6M2IE.js";
|
|
9
9
|
import {
|
|
10
10
|
compileAllSkillPlugins,
|
|
11
11
|
compileSkillPlugin,
|
|
12
12
|
printCompilationSummary
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-GFDGYQ6M.js";
|
|
14
14
|
import "../../chunk-T4EXUIBY.js";
|
|
15
15
|
import {
|
|
16
16
|
setVerbose
|
|
17
|
-
} from "../../chunk-
|
|
17
|
+
} from "../../chunk-C4QI54PN.js";
|
|
18
18
|
import {
|
|
19
19
|
DIRS
|
|
20
|
-
} from "../../chunk-
|
|
20
|
+
} from "../../chunk-FTD5Z6QD.js";
|
|
21
21
|
import {
|
|
22
22
|
init_esm_shims
|
|
23
23
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getAgentDefinitions
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-JTTTXGHX.js";
|
|
5
5
|
import {
|
|
6
6
|
BaseCommand,
|
|
7
7
|
EXIT_CODES
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-LNA6M2IE.js";
|
|
9
9
|
import {
|
|
10
10
|
compileStackPlugin,
|
|
11
11
|
loadStacks,
|
|
12
12
|
printStackCompilationSummary
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-GFDGYQ6M.js";
|
|
14
14
|
import "../../chunk-T4EXUIBY.js";
|
|
15
15
|
import {
|
|
16
16
|
setVerbose
|
|
17
|
-
} from "../../chunk-
|
|
17
|
+
} from "../../chunk-C4QI54PN.js";
|
|
18
18
|
import {
|
|
19
19
|
PROJECT_ROOT
|
|
20
|
-
} from "../../chunk-
|
|
20
|
+
} from "../../chunk-FTD5Z6QD.js";
|
|
21
21
|
import {
|
|
22
22
|
init_esm_shims
|
|
23
23
|
} from "../../chunk-DHET7RCE.js";
|
package/dist/commands/compile.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getAgentDefinitions,
|
|
4
4
|
recompileAgents
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-JTTTXGHX.js";
|
|
6
6
|
import {
|
|
7
7
|
DRY_RUN_MESSAGES,
|
|
8
8
|
ERROR_MESSAGES,
|
|
9
9
|
INFO_MESSAGES,
|
|
10
10
|
STATUS_MESSAGES,
|
|
11
11
|
SUCCESS_MESSAGES
|
|
12
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-2RQYJFKA.js";
|
|
13
13
|
import {
|
|
14
14
|
BaseCommand,
|
|
15
15
|
EXIT_CODES
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-LNA6M2IE.js";
|
|
17
17
|
import {
|
|
18
18
|
detectInstallation,
|
|
19
19
|
discoverAllPluginSkills,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
normalizeStackRecord,
|
|
22
22
|
parseFrontmatter,
|
|
23
23
|
resolveSource
|
|
24
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-GFDGYQ6M.js";
|
|
25
25
|
import {
|
|
26
26
|
typedEntries,
|
|
27
27
|
typedKeys
|
|
@@ -36,12 +36,12 @@ import {
|
|
|
36
36
|
setVerbose,
|
|
37
37
|
verbose,
|
|
38
38
|
warn
|
|
39
|
-
} from "../chunk-
|
|
39
|
+
} from "../chunk-C4QI54PN.js";
|
|
40
40
|
import {
|
|
41
41
|
CLI_BIN_NAME,
|
|
42
42
|
LOCAL_SKILLS_PATH,
|
|
43
43
|
STANDARD_FILES
|
|
44
|
-
} from "../chunk-
|
|
44
|
+
} from "../chunk-FTD5Z6QD.js";
|
|
45
45
|
import {
|
|
46
46
|
init_esm_shims
|
|
47
47
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-LNA6M2IE.js";
|
|
6
6
|
import {
|
|
7
7
|
loadProjectSourceConfig,
|
|
8
8
|
resolveAgentsSource,
|
|
9
9
|
resolveSource
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-GFDGYQ6M.js";
|
|
11
11
|
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
import "../../chunk-C4QI54PN.js";
|
|
13
|
+
import "../../chunk-FTD5Z6QD.js";
|
|
14
14
|
import {
|
|
15
15
|
init_esm_shims
|
|
16
16
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ConfigShow
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-DC333ZDC.js";
|
|
5
|
+
import "../../chunk-LNA6M2IE.js";
|
|
6
|
+
import "../../chunk-GFDGYQ6M.js";
|
|
7
7
|
import "../../chunk-T4EXUIBY.js";
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-C4QI54PN.js";
|
|
9
|
+
import "../../chunk-FTD5Z6QD.js";
|
|
10
10
|
import {
|
|
11
11
|
init_esm_shims
|
|
12
12
|
} from "../../chunk-DHET7RCE.js";
|