@agents-inc/cli 0.50.0 → 0.61.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 +167 -5
- package/dist/{chunk-KQOU4POU.js → chunk-46DQG2N7.js} +72 -51
- package/dist/chunk-46DQG2N7.js.map +1 -0
- package/dist/{chunk-2BWCR762.js → chunk-52XO4ULK.js} +6 -8
- package/dist/chunk-52XO4ULK.js.map +1 -0
- package/dist/{chunk-DCE423KO.js → chunk-6DAZG54T.js} +5 -5
- package/dist/{chunk-AWP5A6IM.js → chunk-6OWHQ7HM.js} +14 -12
- package/dist/chunk-6OWHQ7HM.js.map +1 -0
- package/dist/{chunk-D72AFYQR.js → chunk-7FMEMXJ4.js} +71 -71
- package/dist/chunk-7FMEMXJ4.js.map +1 -0
- package/dist/{chunk-RA2IPRO2.js → chunk-AJJJE7F7.js} +2 -2
- package/dist/{chunk-4R52TQ3K.js → chunk-AX3SZZWA.js} +2 -2
- package/dist/{chunk-U2W5SENM.js → chunk-BFD5NZQ4.js} +5 -4
- package/dist/chunk-BFD5NZQ4.js.map +1 -0
- package/dist/{chunk-HYEUETIC.js → chunk-BKJHAJQW.js} +2 -2
- package/dist/{chunk-HYEUETIC.js.map → chunk-BKJHAJQW.js.map} +1 -1
- package/dist/{chunk-GBOW6FUW.js → chunk-BNQ5O6LE.js} +2 -2
- package/dist/{chunk-KAO3LKB5.js → chunk-C577AJE7.js} +3 -3
- package/dist/{chunk-C3Q43WLC.js → chunk-CIG7IKX3.js} +4 -4
- package/dist/chunk-EC3UJRKZ.js +1534 -0
- package/dist/chunk-EC3UJRKZ.js.map +1 -0
- package/dist/{chunk-HMSHB5EQ.js → chunk-FWMWWE3X.js} +3543 -3037
- package/dist/chunk-FWMWWE3X.js.map +1 -0
- package/dist/{chunk-YDYRAXSY.js → chunk-GH2RQ4MI.js} +6 -6
- package/dist/{chunk-5FPIKTSA.js → chunk-H5DASUX5.js} +7 -7
- package/dist/{chunk-JFF7P4LC.js → chunk-H7WJK7NJ.js} +22 -6
- package/dist/chunk-H7WJK7NJ.js.map +1 -0
- package/dist/chunk-HGTC76BX.js +16 -0
- package/dist/chunk-HGTC76BX.js.map +1 -0
- package/dist/{chunk-WFFV254H.js → chunk-IEEVXLJB.js} +110 -82
- package/dist/chunk-IEEVXLJB.js.map +1 -0
- package/dist/{chunk-5FCHJLM7.js → chunk-IGM6HA3S.js} +252 -38
- package/dist/chunk-IGM6HA3S.js.map +1 -0
- package/dist/{chunk-QB5HHTAA.js → chunk-KD2YS76O.js} +28 -12
- package/dist/chunk-KD2YS76O.js.map +1 -0
- package/dist/{chunk-5L724R4C.js → chunk-KDO6WU76.js} +8 -13
- package/dist/chunk-KDO6WU76.js.map +1 -0
- package/dist/{chunk-XDSVV5GZ.js → chunk-KIWFEBKH.js} +41 -11
- package/dist/chunk-KIWFEBKH.js.map +1 -0
- package/dist/{chunk-WBHPCBVN.js → chunk-LWXRUR6B.js} +66 -94
- package/dist/chunk-LWXRUR6B.js.map +1 -0
- package/dist/{chunk-SPFHPHYL.js → chunk-M6YWRMXH.js} +24 -14
- package/dist/chunk-M6YWRMXH.js.map +1 -0
- package/dist/{chunk-CMNKHDOX.js → chunk-MGNYPVOJ.js} +2 -2
- package/dist/{chunk-U7X4V4HE.js → chunk-MMFQNJPE.js} +2 -2
- package/dist/{chunk-WLZHCM7O.js → chunk-MR6OBL3B.js} +3 -11
- package/dist/{chunk-WLZHCM7O.js.map → chunk-MR6OBL3B.js.map} +1 -1
- package/dist/{chunk-RFKDGJAJ.js → chunk-O6BA7Q2B.js} +6 -6
- package/dist/chunk-O6BA7Q2B.js.map +1 -0
- package/dist/chunk-OCEFD7V6.js +201 -0
- package/dist/chunk-OCEFD7V6.js.map +1 -0
- package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
- package/dist/chunk-PUT7X3GA.js.map +1 -0
- package/dist/{chunk-QYLCINGC.js → chunk-SDKCQXWE.js} +2 -2
- package/dist/{chunk-RDWGYKDY.js → chunk-SDLDPFNV.js} +6 -6
- package/dist/{chunk-7LV4V6A4.js → chunk-SRBN6RRD.js} +14 -10
- package/dist/chunk-SRBN6RRD.js.map +1 -0
- package/dist/{chunk-PGY5XROM.js → chunk-VR3CDXDT.js} +2 -6
- package/dist/chunk-VR3CDXDT.js.map +1 -0
- package/dist/{chunk-I6IOGZSZ.js → chunk-WHISPMAQ.js} +11 -15
- package/dist/chunk-WHISPMAQ.js.map +1 -0
- package/dist/{chunk-3VOL4WEG.js → chunk-WYVDNGJB.js} +3 -3
- package/dist/{chunk-WJHFV6RI.js → chunk-X5EG4EFP.js} +2 -2
- package/dist/{chunk-JWYRXE6C.js → chunk-XUDTFI4M.js} +2 -2
- package/dist/{chunk-4QWDB2MD.js → chunk-YHOHLNHM.js} +127 -105
- package/dist/chunk-YHOHLNHM.js.map +1 -0
- package/dist/{chunk-M3GQ2R3E.js → chunk-Z3TM4N37.js} +19 -7
- package/dist/chunk-Z3TM4N37.js.map +1 -0
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +9 -7
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +13 -10
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +110 -129
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/index.js +7 -5
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +8 -6
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/show.js +7 -5
- package/dist/commands/diff.js +9 -7
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +20 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +175 -79
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +20 -41
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +10 -18
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +21 -20
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +32 -31
- package/dist/commands/list.js +8 -6
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +23 -11
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +63 -46
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +11 -9
- package/dist/commands/outdated.js +9 -7
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +45 -35
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +93 -123
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +11 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +23 -27
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/common/confirm.test.js +4 -4
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +3 -3
- package/dist/components/wizard/category-grid.test.js +4 -4
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +5 -5
- package/dist/components/wizard/checkbox-grid.test.js +6 -6
- package/dist/components/wizard/domain-selection.js +12 -11
- 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 +3 -3
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +4 -4
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/selection-card.js +2 -2
- package/dist/components/wizard/source-grid.js +4 -4
- package/dist/components/wizard/source-grid.test.js +5 -5
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +9 -8
- package/dist/components/wizard/step-agents.js +11 -10
- package/dist/components/wizard/step-agents.test.js +13 -12
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +11 -9
- package/dist/components/wizard/step-build.test.js +18 -22
- 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 +83 -23
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +3 -3
- package/dist/components/wizard/step-settings.js +9 -7
- package/dist/components/wizard/step-settings.test.js +13 -11
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +13 -11
- package/dist/components/wizard/step-sources.test.js +19 -17
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +15 -14
- package/dist/components/wizard/step-stack.test.js +17 -16
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +10 -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 +29 -27
- package/dist/config-exports.js +20 -0
- package/dist/config-exports.js.map +1 -0
- package/dist/hooks/init.js +34 -33
- package/dist/hooks/init.js.map +1 -1
- package/dist/loader-2O32KKAQ.js +19 -0
- package/dist/source-loader-KMEBBZCQ.js +16 -0
- package/dist/source-loader-KMEBBZCQ.js.map +1 -0
- package/dist/source-manager-5XBSPJNR.js +18 -0
- package/dist/source-manager-5XBSPJNR.js.map +1 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
- package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
- package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
- package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
- package/dist/stores/wizard-store.js +6 -5
- package/dist/stores/wizard-store.test.js +299 -59
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -1
- package/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
- package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
- package/src/agents/meta/skill-summoner/intro.md +1 -1
- package/src/agents/meta/skill-summoner/output-format.md +3 -3
- package/src/agents/meta/skill-summoner/workflow.md +8 -8
- package/src/schemas/metadata.schema.json +6 -0
- package/src/schemas/stacks.schema.json +1 -1
- package/config/skill-categories.yaml +0 -344
- package/config/skill-rules.yaml +0 -740
- package/config/stacks.yaml +0 -1864
- package/dist/chunk-26MXZUHU.js +0 -183
- package/dist/chunk-26MXZUHU.js.map +0 -1
- package/dist/chunk-2BWCR762.js.map +0 -1
- package/dist/chunk-4QWDB2MD.js.map +0 -1
- package/dist/chunk-5FCHJLM7.js.map +0 -1
- package/dist/chunk-5L724R4C.js.map +0 -1
- package/dist/chunk-7LV4V6A4.js.map +0 -1
- package/dist/chunk-AWP5A6IM.js.map +0 -1
- package/dist/chunk-D72AFYQR.js.map +0 -1
- package/dist/chunk-HMSHB5EQ.js.map +0 -1
- package/dist/chunk-I6IOGZSZ.js.map +0 -1
- package/dist/chunk-JFF7P4LC.js.map +0 -1
- package/dist/chunk-KQOU4POU.js.map +0 -1
- package/dist/chunk-M3GQ2R3E.js.map +0 -1
- package/dist/chunk-PGY5XROM.js.map +0 -1
- package/dist/chunk-QB5HHTAA.js.map +0 -1
- package/dist/chunk-RFKDGJAJ.js.map +0 -1
- package/dist/chunk-SPFHPHYL.js.map +0 -1
- package/dist/chunk-U2W5SENM.js.map +0 -1
- package/dist/chunk-UAD3SC27.js +0 -107
- package/dist/chunk-UAD3SC27.js.map +0 -1
- package/dist/chunk-WBHPCBVN.js.map +0 -1
- package/dist/chunk-WFFV254H.js.map +0 -1
- package/dist/chunk-XDSVV5GZ.js.map +0 -1
- package/dist/chunk-YZTWZVGX.js.map +0 -1
- package/dist/commands/config/get.js +0 -61
- package/dist/commands/config/get.js.map +0 -1
- package/dist/commands/config/set-project.js +0 -61
- package/dist/commands/config/set-project.js.map +0 -1
- package/dist/commands/config/unset-project.js +0 -57
- package/dist/commands/config/unset-project.js.map +0 -1
- package/dist/config/skill-categories.yaml +0 -344
- package/dist/config/skill-rules.yaml +0 -740
- package/dist/config/stacks.yaml +0 -1864
- package/dist/source-manager-BVB2SG73.js +0 -16
- /package/dist/{chunk-DCE423KO.js.map → chunk-6DAZG54T.js.map} +0 -0
- /package/dist/{chunk-RA2IPRO2.js.map → chunk-AJJJE7F7.js.map} +0 -0
- /package/dist/{chunk-4R52TQ3K.js.map → chunk-AX3SZZWA.js.map} +0 -0
- /package/dist/{chunk-GBOW6FUW.js.map → chunk-BNQ5O6LE.js.map} +0 -0
- /package/dist/{chunk-KAO3LKB5.js.map → chunk-C577AJE7.js.map} +0 -0
- /package/dist/{chunk-C3Q43WLC.js.map → chunk-CIG7IKX3.js.map} +0 -0
- /package/dist/{chunk-YDYRAXSY.js.map → chunk-GH2RQ4MI.js.map} +0 -0
- /package/dist/{chunk-5FPIKTSA.js.map → chunk-H5DASUX5.js.map} +0 -0
- /package/dist/{chunk-CMNKHDOX.js.map → chunk-MGNYPVOJ.js.map} +0 -0
- /package/dist/{chunk-U7X4V4HE.js.map → chunk-MMFQNJPE.js.map} +0 -0
- /package/dist/{chunk-QYLCINGC.js.map → chunk-SDKCQXWE.js.map} +0 -0
- /package/dist/{chunk-RDWGYKDY.js.map → chunk-SDLDPFNV.js.map} +0 -0
- /package/dist/{chunk-3VOL4WEG.js.map → chunk-WYVDNGJB.js.map} +0 -0
- /package/dist/{chunk-WJHFV6RI.js.map → chunk-X5EG4EFP.js.map} +0 -0
- /package/dist/{chunk-JWYRXE6C.js.map → chunk-XUDTFI4M.js.map} +0 -0
- /package/dist/{source-manager-BVB2SG73.js.map → loader-2O32KKAQ.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/new/skill.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { BaseCommand } from \"../../base-command.js\";\nimport { resolveAuthor } from \"../../lib/configuration/index.js\";\nimport { writeFile, readFile, directoryExists, fileExists, ensureDir } from \"../../utils/fs.js\";\nimport { getErrorMessage } from \"../../utils/errors.js\";\nimport { verbose } from \"../../utils/logger.js\";\nimport {\n CLI_BIN_NAME,\n KEBAB_CASE_PATTERN,\n LOCAL_SKILLS_PATH,\n PLUGIN_MANIFEST_DIR,\n SKILL_CATEGORIES_YAML_PATH,\n SKILL_RULES_YAML_PATH,\n SKILLS_DIR_PATH,\n STANDARD_FILES,\n} from \"../../consts.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\nimport { LOCAL_DEFAULTS } from \"../../lib/metadata-keys.js\";\nimport { computeSkillFolderHash } from \"../../lib/versioning.js\";\nimport type { CategoryPath } from \"../../types/index.js\";\n\nexport function validateSkillName(name: string): string | null {\n if (!name || name.trim() === \"\") {\n return \"Skill name is required\";\n }\n\n if (!KEBAB_CASE_PATTERN.test(name)) {\n return \"Skill name must be kebab-case (lowercase letters, numbers, and hyphens, starting with a letter)\";\n }\n\n return null;\n}\n\nexport function toTitleCase(kebabCase: string): string {\n return kebabCase\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function generateSkillMd(name: string): string {\n const titleName = toTitleCase(name);\n\n return `---\nname: ${name}\ndescription: Brief description of this skill\n---\n\n# ${titleName}\n\n> **Quick Guide:** Add a brief summary of what this skill teaches.\n\n---\n\n<critical_requirements>\n\n## CRITICAL: Before Using This Skill\n\n**(Add critical requirements here)**\n\n</critical_requirements>\n\n---\n\n**When to use:**\n\n- Add use cases here\n\n**Key patterns covered:**\n\n- Add patterns here\n\n---\n\n<patterns>\n\n## Core Patterns\n\n### Pattern 1: Example Pattern\n\nAdd your patterns here.\n\n</patterns>\n\n---\n\n<critical_reminders>\n\n## CRITICAL REMINDERS\n\n**(Repeat critical requirements here)**\n\n</critical_reminders>\n`;\n}\n\nexport function generateMetadataYaml(\n name: string,\n author: string,\n category: CategoryPath,\n contentHash: string,\n): string {\n const titleName = toTitleCase(name);\n\n return `custom: true\ncategory: ${category}\nauthor: \"${author}\"\ndisplayName: ${titleName}\ncliDescription: Brief description\nusageGuidance: Use when <guidance>.\ncontentHash: ${contentHash}\ntags:\n - local\n - custom\n`;\n}\n\nconst KNOWN_DOMAINS = new Set([\"web\", \"api\", \"mobile\", \"cli\", \"shared\"]);\nconst DEFAULT_CATEGORY_ORDER = 99;\n\nexport function generateSkillCategoriesYaml(category: CategoryPath): string {\n const prefix = category.split(\"-\")[0];\n const subcategoryPart = category.includes(\"-\")\n ? category.slice(category.indexOf(\"-\") + 1)\n : category;\n const displayName = toTitleCase(subcategoryPart);\n const domainLine = KNOWN_DOMAINS.has(prefix) ? `\\n domain: ${prefix}` : \"\";\n\n return `version: \"1.0.0\"\n\ncategories:\n ${category}:\n id: ${category}\n displayName: ${displayName}\n description: Skills for ${displayName}${domainLine}\n exclusive: true\n required: false\n order: ${DEFAULT_CATEGORY_ORDER}\n custom: true\n`;\n}\n\nexport function generateSkillRulesYaml(skillName: string): string {\n return `version: \"1.0.0\"\n\n# Short aliases mapping to canonical skill IDs\n# Example: react: \"web-framework-react\"\naliases:\n ${skillName}: \"${skillName}\"\n`;\n}\n\nexport default class NewSkill extends BaseCommand {\n static summary = \"Create a new local skill with proper structure\";\n static description = \"Create a new local skill scaffold with SKILL.md and metadata.yaml files\";\n\n static args = {\n name: Args.string({\n description: \"Name of the skill to create (kebab-case)\",\n required: true,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n author: Flags.string({\n char: \"a\",\n description: \"Author identifier (e.g., @myhandle)\",\n required: false,\n }),\n category: Flags.string({\n char: \"c\",\n description: \"Skill category\",\n default: LOCAL_DEFAULTS.CATEGORY,\n }),\n force: Flags.boolean({\n char: \"f\",\n description: \"Overwrite existing skill directory\",\n default: false,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output directory for the skill (overrides marketplace detection)\",\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(NewSkill);\n const projectDir = process.cwd();\n\n this.log(\"\");\n this.log(\"Create New Skill\");\n this.log(\"\");\n\n const validationError = validateSkillName(args.name);\n if (validationError) {\n this.error(validationError, { exit: EXIT_CODES.INVALID_ARGS });\n }\n\n // Determine author: flag > project config > default\n let author = flags.author;\n if (!author) {\n author = (await resolveAuthor(projectDir)) || LOCAL_DEFAULTS.AUTHOR;\n }\n\n // CLI flag is an untyped string — cast at data boundary\n const category = flags.category as CategoryPath;\n\n // Determine skill output path: --output flag > marketplace detection > local default\n let skillsBasePath: string;\n if (flags.output) {\n skillsBasePath = path.resolve(flags.output);\n } else {\n const marketplacePath = path.join(projectDir, PLUGIN_MANIFEST_DIR, \"marketplace.json\");\n if (await fileExists(marketplacePath)) {\n this.log(`Detected marketplace context, creating skill in ${SKILLS_DIR_PATH}/`);\n skillsBasePath = path.join(projectDir, SKILLS_DIR_PATH);\n } else {\n skillsBasePath = path.join(projectDir, LOCAL_SKILLS_PATH);\n }\n }\n\n const skillDir = path.join(skillsBasePath, args.name);\n\n if (await directoryExists(skillDir)) {\n if (!flags.force) {\n this.error(`Skill directory already exists: ${skillDir}\\nUse --force to overwrite.`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n this.warn(`Overwriting existing skill at ${skillDir}`);\n }\n\n this.log(`Skill name: ${args.name}`);\n this.log(`Author: ${author}`);\n this.log(`Category: ${category}`);\n this.log(`Directory: ${skillDir}`);\n this.log(\"\");\n\n if (flags[\"dry-run\"]) {\n this.log(\"[DRY RUN] Would create skill files\");\n return;\n }\n\n this.log(\"Creating skill files...\");\n\n try {\n const skillMdContent = generateSkillMd(args.name);\n\n const skillMdPath = path.join(skillDir, STANDARD_FILES.SKILL_MD);\n const metadataPath = path.join(skillDir, STANDARD_FILES.METADATA_YAML);\n\n await writeFile(skillMdPath, skillMdContent);\n\n const contentHash = await computeSkillFolderHash(skillDir);\n const metadataContent = generateMetadataYaml(args.name, author, category, contentHash);\n await writeFile(metadataPath, metadataContent);\n\n this.log(\"\");\n this.logSuccess(`Created ${STANDARD_FILES.SKILL_MD} at ${skillMdPath}`);\n this.logSuccess(`Created ${STANDARD_FILES.METADATA_YAML} at ${metadataPath}`);\n\n // Update config files when in marketplace context\n if (!flags.output) {\n const marketplacePath = path.join(projectDir, PLUGIN_MANIFEST_DIR, \"marketplace.json\");\n if (await fileExists(marketplacePath)) {\n try {\n await this.updateConfigFiles(projectDir, args.name, category);\n } catch (error) {\n this.warn(`Could not update config files: ${getErrorMessage(error)}`);\n }\n }\n }\n\n this.log(\"\");\n this.log(\n `Skill created successfully! Run '${CLI_BIN_NAME} compile' to include it in your agents.`,\n );\n this.log(\"\");\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async updateConfigFiles(\n projectRoot: string,\n skillName: string,\n category: CategoryPath,\n ): Promise<void> {\n const categoriesPath = path.join(projectRoot, SKILL_CATEGORIES_YAML_PATH);\n const rulesPath = path.join(projectRoot, SKILL_RULES_YAML_PATH);\n\n // Update skill-categories.yaml\n if (await fileExists(categoriesPath)) {\n const content = await readFile(categoriesPath);\n const parsed = parseYaml(content) as Record<string, unknown>;\n const categories = (parsed.categories ?? {}) as Record<string, unknown>;\n if (!categories[category]) {\n const prefix = category.split(\"-\")[0];\n const subcategoryPart = category.includes(\"-\")\n ? category.slice(category.indexOf(\"-\") + 1)\n : category;\n const entry: Record<string, unknown> = {\n id: category,\n displayName: toTitleCase(subcategoryPart),\n description: `Skills for ${toTitleCase(subcategoryPart)}`,\n exclusive: true,\n required: false,\n order: DEFAULT_CATEGORY_ORDER,\n custom: true,\n };\n if (KNOWN_DOMAINS.has(prefix)) entry.domain = prefix;\n categories[category] = entry;\n parsed.categories = categories;\n await writeFile(categoriesPath, stringifyYaml(parsed));\n verbose(`Added category '${category}' to ${SKILL_CATEGORIES_YAML_PATH}`);\n }\n } else {\n await ensureDir(path.dirname(categoriesPath));\n await writeFile(categoriesPath, generateSkillCategoriesYaml(category));\n verbose(`Created ${SKILL_CATEGORIES_YAML_PATH}`);\n }\n\n // Update skill-rules.yaml\n if (await fileExists(rulesPath)) {\n const content = await readFile(rulesPath);\n const parsed = parseYaml(content) as Record<string, unknown>;\n const aliases = (parsed.aliases ?? {}) as Record<string, unknown>;\n if (!aliases[skillName]) {\n aliases[skillName] = skillName;\n parsed.aliases = aliases;\n await writeFile(rulesPath, stringifyYaml(parsed));\n verbose(`Added alias '${skillName}' to ${SKILL_RULES_YAML_PATH}`);\n }\n } else {\n await ensureDir(path.dirname(rulesPath));\n await writeFile(rulesPath, generateSkillRulesYaml(skillName));\n verbose(`Created ${SKILL_RULES_YAML_PATH}`);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/step-confirm.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { Domain, DomainSelections } from \"../../types/index.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\ntype StepConfirmProps = {\n onComplete: () => void;\n stackName?: string;\n selectedDomains?: Domain[];\n domainSelections?: DomainSelections;\n technologyCount?: number;\n skillCount?: number;\n agentCount?: number;\n installMode?: \"plugin\" | \"local\";\n onBack?: () => void;\n};\n\nexport const StepConfirm: React.FC<StepConfirmProps> = ({\n onComplete,\n stackName,\n selectedDomains,\n domainSelections,\n technologyCount,\n skillCount,\n agentCount,\n installMode,\n onBack,\n}) => {\n useInput((_input, key) => {\n if (key.return) {\n onComplete();\n }\n if (key.escape && onBack) {\n onBack();\n }\n });\n\n const domainsText = selectedDomains?.map(getDomainDisplayName).join(\" + \") || \"\";\n const title = stackName\n ? `Ready to install ${stackName}`\n : `Ready to install your custom stack${domainsText ? ` (${domainsText})` : \"\"}`;\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <ViewTitle>{title}</ViewTitle>\n <Text> </Text>\n\n {domainSelections && selectedDomains && !stackName && (\n <Box flexDirection=\"column\" marginBottom={1}>\n {selectedDomains.map((domain) => {\n const selections = domainSelections[domain] || {};\n const techs = Object.values(selections).flat();\n if (techs.length === 0) return null;\n return (\n <Text key={domain}>\n <Text bold>{getDomainDisplayName(domain)}:</Text> <Text>{techs.join(\", \")}</Text>\n </Text>\n );\n })}\n </Box>\n )}\n\n <Box flexDirection=\"column\" marginY={1}>\n {technologyCount !== undefined && (\n <Text>\n <Text dimColor>Technologies:</Text> <Text bold>{technologyCount}</Text>\n </Text>\n )}\n {skillCount !== undefined && (\n <Text>\n <Text dimColor>Skills:</Text> <Text bold>{skillCount}</Text>{\" \"}\n <Text color={CLI_COLORS.PRIMARY}>(all verified)</Text>\n </Text>\n )}\n {agentCount !== undefined && (\n <Text>\n <Text dimColor>Agents:</Text> <Text bold>{agentCount}</Text>\n </Text>\n )}\n {installMode && (\n <Text>\n <Text dimColor>Install mode:</Text>{\" \"}\n <Text bold>{installMode === \"plugin\" ? \"Plugin\" : \"Local\"}</Text>\n </Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>ENTER install ESC go back</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA,SAAS,KAAK,MAAM,gBAAgB;AA8C9B,cAWU,YAXV;AA3BC,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,iBAAW;AAAA,IACb;AACA,QAAI,IAAI,UAAU,QAAQ;AACxB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,cAAc,iBAAiB,IAAI,oBAAoB,EAAE,KAAK,KAAK,KAAK;AAC9E,QAAM,QAAQ,YACV,oBAAoB,SAAS,KAC7B,qCAAqC,cAAc,KAAK,WAAW,MAAM,EAAE;AAE/E,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GACpC;AAAA,wBAAC,aAAW,iBAAM;AAAA,IAClB,oBAAC,QAAK,eAAC;AAAA,IAEN,oBAAoB,mBAAmB,CAAC,aACvC,oBAAC,OAAI,eAAc,UAAS,cAAc,GACvC,0BAAgB,IAAI,CAAC,WAAW;AAC/B,YAAM,aAAa,iBAAiB,MAAM,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,OAAO,UAAU,EAAE,KAAK;AAC7C,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,aACE,qBAAC,QACC;AAAA,6BAAC,QAAK,MAAI,MAAE;AAAA,+BAAqB,MAAM;AAAA,UAAE;AAAA,WAAC;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAM,gBAAM,KAAK,IAAI,GAAE;AAAA,WADjE,MAEX;AAAA,IAEJ,CAAC,GACH;AAAA,IAGF,qBAAC,OAAI,eAAc,UAAS,SAAS,GAClC;AAAA,0BAAoB,UACnB,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,2BAAa;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,2BAAgB;AAAA,SAClE;AAAA,MAED,eAAe,UACd,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,qBAAO;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,sBAAW;AAAA,QAAQ;AAAA,QAC7D,oBAAC,QAAK,OAAO,WAAW,SAAS,4BAAc;AAAA,SACjD;AAAA,MAED,eAAe,UACd,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,qBAAO;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,sBAAW;AAAA,SACvD;AAAA,MAED,eACC,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,2BAAa;AAAA,QAAQ;AAAA,QACpC,oBAAC,QAAK,MAAI,MAAE,0BAAgB,WAAW,WAAW,SAAQ;AAAA,SAC5D;AAAA,OAEJ;AAAA,IAEA,oBAAC,OAAI,WAAW,GACd,8BAAC,QAAK,UAAQ,MAAC,uCAAyB,GAC1C;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/__tests__/test-constants.ts"],"sourcesContent":["// Keyboard escape sequences\nexport const ARROW_UP = \"\\x1B[A\";\nexport const ARROW_DOWN = \"\\x1B[B\";\nexport const ARROW_LEFT = \"\\x1B[D\";\nexport const ARROW_RIGHT = \"\\x1B[C\";\nexport const ENTER = \"\\r\";\nexport const ESCAPE = \"\\x1B\";\nexport const CTRL_C = \"\\x03\";\nexport const TAB = \"\\t\";\nexport const SPACE = \" \";\nexport const BACKSPACE = \"\\x7F\";\nexport const KEY_Y = \"y\";\nexport const KEY_N = \"n\";\n\n// Timing constants (ms)\nexport const INPUT_DELAY_MS = 50;\nexport const RENDER_DELAY_MS = 100;\nexport const SELECT_NAV_DELAY_MS = 100;\nexport const CONFIRM_INPUT_DELAY_MS = 100;\nexport const OPERATION_DELAY_MS = 150;\nexport const STEP_TRANSITION_DELAY_MS = 150;\n\nexport const delay = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n// Realistic pool of available skills across domains for agent-skill mapping tests\nexport const TEST_AVAILABLE_SKILLS = [\n \"web-framework-react\",\n \"web-framework-vue\",\n \"web-styling-scss-modules\",\n \"web-state-zustand\",\n \"web-testing-vitest\",\n \"web-mocks-msw\",\n \"api-framework-hono\",\n \"api-database-drizzle\",\n \"api-auth-better-auth\",\n \"api-testing-api-testing\",\n \"cli-framework-cli-commander\",\n \"cli-framework-oclif\",\n \"mobile-framework-react-native\",\n \"mobile-framework-expo\",\n \"infra-monorepo-turborepo\",\n \"infra-env-setup\",\n \"security-web-security\",\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-anti-over-engineering\",\n \"meta-reviewing-reviewing\",\n \"meta-research-research-methodology\",\n] as const;\n"],"mappings":";;;;;;AAAA;AACO,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,QAAQ;AACd,IAAM,SAAS;AAEf,IAAM,MAAM;AACZ,IAAM,QAAQ;AAEd,IAAM,QAAQ;AACd,IAAM,QAAQ;AAGd,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAI/B,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;","names":[]}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
BaseCommand,
|
|
4
|
-
EXIT_CODES
|
|
5
|
-
} from "../../chunk-PGY5XROM.js";
|
|
6
|
-
import {
|
|
7
|
-
loadProjectSourceConfig,
|
|
8
|
-
resolveAgentsSource,
|
|
9
|
-
resolveSource
|
|
10
|
-
} from "../../chunk-HMSHB5EQ.js";
|
|
11
|
-
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-WBHPCBVN.js";
|
|
13
|
-
import "../../chunk-AWP5A6IM.js";
|
|
14
|
-
import {
|
|
15
|
-
init_esm_shims
|
|
16
|
-
} from "../../chunk-DHET7RCE.js";
|
|
17
|
-
|
|
18
|
-
// src/cli/commands/config/get.ts
|
|
19
|
-
init_esm_shims();
|
|
20
|
-
import { Args } from "@oclif/core";
|
|
21
|
-
var ConfigGet = class _ConfigGet extends BaseCommand {
|
|
22
|
-
static summary = "Get a configuration value";
|
|
23
|
-
static description = "Get the effective value of a configuration key (source, author, marketplace, agentsSource)";
|
|
24
|
-
static args = {
|
|
25
|
-
key: Args.string({
|
|
26
|
-
description: "Configuration key (source, author, marketplace, agentsSource)",
|
|
27
|
-
required: true
|
|
28
|
-
})
|
|
29
|
-
};
|
|
30
|
-
static flags = {
|
|
31
|
-
...BaseCommand.baseFlags
|
|
32
|
-
};
|
|
33
|
-
async run() {
|
|
34
|
-
const { args } = await this.parse(_ConfigGet);
|
|
35
|
-
const projectDir = process.cwd();
|
|
36
|
-
const { key } = args;
|
|
37
|
-
if (key === "source") {
|
|
38
|
-
const resolved = await resolveSource(void 0, projectDir);
|
|
39
|
-
this.log(resolved.source);
|
|
40
|
-
} else if (key === "author") {
|
|
41
|
-
const projectConfig = await loadProjectSourceConfig(projectDir);
|
|
42
|
-
this.log(projectConfig?.author || "");
|
|
43
|
-
} else if (key === "marketplace") {
|
|
44
|
-
const resolved = await resolveSource(void 0, projectDir);
|
|
45
|
-
this.log(resolved.marketplace || "");
|
|
46
|
-
} else if (key === "agentsSource") {
|
|
47
|
-
const resolved = await resolveAgentsSource(void 0, projectDir);
|
|
48
|
-
this.log(resolved.agentsSource || "");
|
|
49
|
-
} else {
|
|
50
|
-
this.error(
|
|
51
|
-
`Unknown configuration key: ${key}
|
|
52
|
-
Valid keys: source, author, marketplace, agentsSource`,
|
|
53
|
-
{ exit: EXIT_CODES.INVALID_ARGS }
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
export {
|
|
59
|
-
ConfigGet as default
|
|
60
|
-
};
|
|
61
|
-
//# sourceMappingURL=get.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/config/get.ts"],"sourcesContent":["import { Args } from \"@oclif/core\";\n\nimport { BaseCommand } from \"../../base-command.js\";\nimport {\n resolveSource,\n resolveAgentsSource,\n loadProjectSourceConfig,\n} from \"../../lib/configuration/index.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\n\nexport default class ConfigGet extends BaseCommand {\n static summary = \"Get a configuration value\";\n static description =\n \"Get the effective value of a configuration key (source, author, marketplace, agentsSource)\";\n\n static args = {\n key: Args.string({\n description: \"Configuration key (source, author, marketplace, agentsSource)\",\n required: true,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(ConfigGet);\n const projectDir = process.cwd();\n\n const { key } = args;\n\n if (key === \"source\") {\n const resolved = await resolveSource(undefined, projectDir);\n this.log(resolved.source);\n } else if (key === \"author\") {\n const projectConfig = await loadProjectSourceConfig(projectDir);\n this.log(projectConfig?.author || \"\");\n } else if (key === \"marketplace\") {\n const resolved = await resolveSource(undefined, projectDir);\n this.log(resolved.marketplace || \"\");\n } else if (key === \"agentsSource\") {\n const resolved = await resolveAgentsSource(undefined, projectDir);\n this.log(resolved.agentsSource || \"\");\n } else {\n this.error(\n `Unknown configuration key: ${key}\\nValid keys: source, author, marketplace, agentsSource`,\n { exit: EXIT_CODES.INVALID_ARGS },\n );\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,YAAY;AAUrB,IAAqB,YAArB,MAAqB,mBAAkB,YAAY;AAAA,EACjD,OAAO,UAAU;AAAA,EACjB,OAAO,cACL;AAAA,EAEF,OAAO,OAAO;AAAA,IACZ,KAAK,KAAK,OAAO;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,UAAS;AAC3C,UAAM,aAAa,QAAQ,IAAI;AAE/B,UAAM,EAAE,IAAI,IAAI;AAEhB,QAAI,QAAQ,UAAU;AACpB,YAAM,WAAW,MAAM,cAAc,QAAW,UAAU;AAC1D,WAAK,IAAI,SAAS,MAAM;AAAA,IAC1B,WAAW,QAAQ,UAAU;AAC3B,YAAM,gBAAgB,MAAM,wBAAwB,UAAU;AAC9D,WAAK,IAAI,eAAe,UAAU,EAAE;AAAA,IACtC,WAAW,QAAQ,eAAe;AAChC,YAAM,WAAW,MAAM,cAAc,QAAW,UAAU;AAC1D,WAAK,IAAI,SAAS,eAAe,EAAE;AAAA,IACrC,WAAW,QAAQ,gBAAgB;AACjC,YAAM,WAAW,MAAM,oBAAoB,QAAW,UAAU;AAChE,WAAK,IAAI,SAAS,gBAAgB,EAAE;AAAA,IACtC,OAAO;AACL,WAAK;AAAA,QACH,8BAA8B,GAAG;AAAA;AAAA,QACjC,EAAE,MAAM,WAAW,aAAa;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
BaseCommand,
|
|
4
|
-
EXIT_CODES
|
|
5
|
-
} from "../../chunk-PGY5XROM.js";
|
|
6
|
-
import {
|
|
7
|
-
getProjectConfigPath,
|
|
8
|
-
loadProjectSourceConfig,
|
|
9
|
-
saveProjectConfig
|
|
10
|
-
} from "../../chunk-HMSHB5EQ.js";
|
|
11
|
-
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-WBHPCBVN.js";
|
|
13
|
-
import "../../chunk-AWP5A6IM.js";
|
|
14
|
-
import {
|
|
15
|
-
init_esm_shims
|
|
16
|
-
} from "../../chunk-DHET7RCE.js";
|
|
17
|
-
|
|
18
|
-
// src/cli/commands/config/set-project.ts
|
|
19
|
-
init_esm_shims();
|
|
20
|
-
import { Args } from "@oclif/core";
|
|
21
|
-
var ConfigSetProject = class _ConfigSetProject extends BaseCommand {
|
|
22
|
-
static summary = "Set a project-level configuration value";
|
|
23
|
-
static description = "Set a project-level configuration value (source, marketplace, agentsSource)";
|
|
24
|
-
static args = {
|
|
25
|
-
key: Args.string({
|
|
26
|
-
description: "Configuration key (source, marketplace, agentsSource)",
|
|
27
|
-
required: true
|
|
28
|
-
}),
|
|
29
|
-
value: Args.string({
|
|
30
|
-
description: "Configuration value",
|
|
31
|
-
required: true
|
|
32
|
-
})
|
|
33
|
-
};
|
|
34
|
-
static flags = {
|
|
35
|
-
...BaseCommand.baseFlags
|
|
36
|
-
};
|
|
37
|
-
async run() {
|
|
38
|
-
const { args } = await this.parse(_ConfigSetProject);
|
|
39
|
-
const projectDir = process.cwd();
|
|
40
|
-
const { key, value } = args;
|
|
41
|
-
const validKeys = ["source", "marketplace", "agentsSource"];
|
|
42
|
-
if (!validKeys.includes(key)) {
|
|
43
|
-
this.error(`Unknown configuration key: ${key}
|
|
44
|
-
Valid keys: ${validKeys.join(", ")}`, {
|
|
45
|
-
exit: EXIT_CODES.INVALID_ARGS
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
const existingConfig = await loadProjectSourceConfig(projectDir) || {};
|
|
49
|
-
const newConfig = {
|
|
50
|
-
...existingConfig,
|
|
51
|
-
[key]: value
|
|
52
|
-
};
|
|
53
|
-
await saveProjectConfig(projectDir, newConfig);
|
|
54
|
-
this.logSuccess(`Set ${key} = ${value} (project-level)`);
|
|
55
|
-
this.logInfo(`Saved to ${getProjectConfigPath(projectDir)}`);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
export {
|
|
59
|
-
ConfigSetProject as default
|
|
60
|
-
};
|
|
61
|
-
//# sourceMappingURL=set-project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/config/set-project.ts"],"sourcesContent":["import { Args } from \"@oclif/core\";\nimport { BaseCommand } from \"../../base-command.js\";\nimport {\n loadProjectSourceConfig,\n saveProjectConfig,\n getProjectConfigPath,\n type ProjectSourceConfig,\n} from \"../../lib/configuration/index.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\n\nexport default class ConfigSetProject extends BaseCommand {\n static summary = \"Set a project-level configuration value\";\n static description =\n \"Set a project-level configuration value (source, marketplace, agentsSource)\";\n\n static args = {\n key: Args.string({\n description: \"Configuration key (source, marketplace, agentsSource)\",\n required: true,\n }),\n value: Args.string({\n description: \"Configuration value\",\n required: true,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(ConfigSetProject);\n const projectDir = process.cwd();\n const { key, value } = args;\n\n const validKeys = [\"source\", \"marketplace\", \"agentsSource\"];\n\n if (!validKeys.includes(key)) {\n this.error(`Unknown configuration key: ${key}\\nValid keys: ${validKeys.join(\", \")}`, {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n\n const existingConfig = (await loadProjectSourceConfig(projectDir)) || {};\n\n const newConfig: ProjectSourceConfig = {\n ...existingConfig,\n [key]: value,\n };\n\n await saveProjectConfig(projectDir, newConfig);\n\n this.logSuccess(`Set ${key} = ${value} (project-level)`);\n this.logInfo(`Saved to ${getProjectConfigPath(projectDir)}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,YAAY;AAUrB,IAAqB,mBAArB,MAAqB,0BAAyB,YAAY;AAAA,EACxD,OAAO,UAAU;AAAA,EACjB,OAAO,cACL;AAAA,EAEF,OAAO,OAAO;AAAA,IACZ,KAAK,KAAK,OAAO;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,OAAO,KAAK,OAAO;AAAA,MACjB,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,iBAAgB;AAClD,UAAM,aAAa,QAAQ,IAAI;AAC/B,UAAM,EAAE,KAAK,MAAM,IAAI;AAEvB,UAAM,YAAY,CAAC,UAAU,eAAe,cAAc;AAE1D,QAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC5B,WAAK,MAAM,8BAA8B,GAAG;AAAA,cAAiB,UAAU,KAAK,IAAI,CAAC,IAAI;AAAA,QACnF,MAAM,WAAW;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,UAAM,iBAAkB,MAAM,wBAAwB,UAAU,KAAM,CAAC;AAEvE,UAAM,YAAiC;AAAA,MACrC,GAAG;AAAA,MACH,CAAC,GAAG,GAAG;AAAA,IACT;AAEA,UAAM,kBAAkB,YAAY,SAAS;AAE7C,SAAK,WAAW,OAAO,GAAG,MAAM,KAAK,kBAAkB;AACvD,SAAK,QAAQ,YAAY,qBAAqB,UAAU,CAAC,EAAE;AAAA,EAC7D;AACF;","names":[]}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
BaseCommand,
|
|
4
|
-
EXIT_CODES
|
|
5
|
-
} from "../../chunk-PGY5XROM.js";
|
|
6
|
-
import {
|
|
7
|
-
loadProjectSourceConfig,
|
|
8
|
-
saveProjectConfig
|
|
9
|
-
} from "../../chunk-HMSHB5EQ.js";
|
|
10
|
-
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-WBHPCBVN.js";
|
|
12
|
-
import "../../chunk-AWP5A6IM.js";
|
|
13
|
-
import {
|
|
14
|
-
init_esm_shims
|
|
15
|
-
} from "../../chunk-DHET7RCE.js";
|
|
16
|
-
|
|
17
|
-
// src/cli/commands/config/unset-project.ts
|
|
18
|
-
init_esm_shims();
|
|
19
|
-
import { Args } from "@oclif/core";
|
|
20
|
-
var ConfigUnsetProject = class _ConfigUnsetProject extends BaseCommand {
|
|
21
|
-
static summary = "Remove a project-level configuration value";
|
|
22
|
-
static description = "Remove a project-level configuration value";
|
|
23
|
-
static args = {
|
|
24
|
-
key: Args.string({
|
|
25
|
-
description: "Configuration key to remove",
|
|
26
|
-
required: true
|
|
27
|
-
})
|
|
28
|
-
};
|
|
29
|
-
static flags = {
|
|
30
|
-
...BaseCommand.baseFlags
|
|
31
|
-
};
|
|
32
|
-
async run() {
|
|
33
|
-
const { args } = await this.parse(_ConfigUnsetProject);
|
|
34
|
-
const projectDir = process.cwd();
|
|
35
|
-
const { key } = args;
|
|
36
|
-
const validKeys = ["source", "marketplace", "agentsSource"];
|
|
37
|
-
if (!validKeys.includes(key)) {
|
|
38
|
-
this.error(`Unknown configuration key: ${key}
|
|
39
|
-
Valid keys: ${validKeys.join(", ")}`, {
|
|
40
|
-
exit: EXIT_CODES.INVALID_ARGS
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
const existingConfig = await loadProjectSourceConfig(projectDir);
|
|
44
|
-
if (!existingConfig) {
|
|
45
|
-
this.logInfo("No project configuration exists.");
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const newConfig = { ...existingConfig };
|
|
49
|
-
delete newConfig[key];
|
|
50
|
-
await saveProjectConfig(projectDir, newConfig);
|
|
51
|
-
this.logSuccess(`Removed ${key} from project configuration`);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
export {
|
|
55
|
-
ConfigUnsetProject as default
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=unset-project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/config/unset-project.ts"],"sourcesContent":["import { Args } from \"@oclif/core\";\nimport { BaseCommand } from \"../../base-command.js\";\nimport {\n loadProjectSourceConfig,\n saveProjectConfig,\n type ProjectSourceConfig,\n} from \"../../lib/configuration/index.js\";\nimport { EXIT_CODES } from \"../../lib/exit-codes.js\";\n\nexport default class ConfigUnsetProject extends BaseCommand {\n static summary = \"Remove a project-level configuration value\";\n static description = \"Remove a project-level configuration value\";\n\n static args = {\n key: Args.string({\n description: \"Configuration key to remove\",\n required: true,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(ConfigUnsetProject);\n const projectDir = process.cwd();\n const { key } = args;\n\n const validKeys = [\"source\", \"marketplace\", \"agentsSource\"];\n\n if (!validKeys.includes(key)) {\n this.error(`Unknown configuration key: ${key}\\nValid keys: ${validKeys.join(\", \")}`, {\n exit: EXIT_CODES.INVALID_ARGS,\n });\n }\n\n const existingConfig = await loadProjectSourceConfig(projectDir);\n\n if (!existingConfig) {\n this.logInfo(\"No project configuration exists.\");\n return;\n }\n\n const newConfig: ProjectSourceConfig = { ...existingConfig };\n delete newConfig[key as keyof ProjectSourceConfig];\n\n await saveProjectConfig(projectDir, newConfig);\n\n this.logSuccess(`Removed ${key} from project configuration`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,YAAY;AASrB,IAAqB,qBAArB,MAAqB,4BAA2B,YAAY;AAAA,EAC1D,OAAO,UAAU;AAAA,EACjB,OAAO,cAAc;AAAA,EAErB,OAAO,OAAO;AAAA,IACZ,KAAK,KAAK,OAAO;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,mBAAkB;AACpD,UAAM,aAAa,QAAQ,IAAI;AAC/B,UAAM,EAAE,IAAI,IAAI;AAEhB,UAAM,YAAY,CAAC,UAAU,eAAe,cAAc;AAE1D,QAAI,CAAC,UAAU,SAAS,GAAG,GAAG;AAC5B,WAAK,MAAM,8BAA8B,GAAG;AAAA,cAAiB,UAAU,KAAK,IAAI,CAAC,IAAI;AAAA,QACnF,MAAM,WAAW;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,UAAM,iBAAiB,MAAM,wBAAwB,UAAU;AAE/D,QAAI,CAAC,gBAAgB;AACnB,WAAK,QAAQ,kCAAkC;AAC/C;AAAA,IACF;AAEA,UAAM,YAAiC,EAAE,GAAG,eAAe;AAC3D,WAAO,UAAU,GAAgC;AAEjD,UAAM,kBAAkB,YAAY,SAAS;AAE7C,SAAK,WAAW,WAAW,GAAG,6BAA6B;AAAA,EAC7D;AACF;","names":[]}
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
version: "1.0.0"
|
|
2
|
-
|
|
3
|
-
categories:
|
|
4
|
-
web-framework:
|
|
5
|
-
id: web-framework
|
|
6
|
-
displayName: Framework
|
|
7
|
-
description: UI framework (React, Vue, Angular, SolidJS, Next.js, Remix, Nuxt)
|
|
8
|
-
domain: web
|
|
9
|
-
exclusive: true
|
|
10
|
-
required: true
|
|
11
|
-
order: 1
|
|
12
|
-
|
|
13
|
-
web-styling:
|
|
14
|
-
id: web-styling
|
|
15
|
-
displayName: Styling
|
|
16
|
-
description: CSS approach (SCSS Modules, Tailwind, CVA)
|
|
17
|
-
domain: web
|
|
18
|
-
exclusive: false
|
|
19
|
-
required: true
|
|
20
|
-
order: 3
|
|
21
|
-
|
|
22
|
-
web-client-state:
|
|
23
|
-
id: web-client-state
|
|
24
|
-
displayName: Client State Management
|
|
25
|
-
description: UI state, forms, local data (Zustand, Redux, MobX)
|
|
26
|
-
domain: web
|
|
27
|
-
exclusive: true
|
|
28
|
-
required: false
|
|
29
|
-
order: 4
|
|
30
|
-
|
|
31
|
-
web-server-state:
|
|
32
|
-
id: web-server-state
|
|
33
|
-
displayName: Server State / Data Fetching
|
|
34
|
-
description: API data caching (React Query, SWR)
|
|
35
|
-
domain: web
|
|
36
|
-
exclusive: true
|
|
37
|
-
required: false
|
|
38
|
-
order: 5
|
|
39
|
-
|
|
40
|
-
web-forms:
|
|
41
|
-
id: web-forms
|
|
42
|
-
displayName: Forms & Validation
|
|
43
|
-
description: Form handling and schema validation
|
|
44
|
-
domain: web
|
|
45
|
-
exclusive: false
|
|
46
|
-
required: false
|
|
47
|
-
order: 6
|
|
48
|
-
|
|
49
|
-
web-testing:
|
|
50
|
-
id: web-testing
|
|
51
|
-
displayName: Testing
|
|
52
|
-
description: Unit, integration, and E2E testing
|
|
53
|
-
domain: web
|
|
54
|
-
exclusive: false
|
|
55
|
-
required: false
|
|
56
|
-
order: 7
|
|
57
|
-
|
|
58
|
-
web-ui-components:
|
|
59
|
-
id: web-ui-components
|
|
60
|
-
displayName: UI Component Library
|
|
61
|
-
description: Pre-built component systems (Radix, shadcn)
|
|
62
|
-
domain: web
|
|
63
|
-
exclusive: false
|
|
64
|
-
required: false
|
|
65
|
-
order: 8
|
|
66
|
-
|
|
67
|
-
web-mocking:
|
|
68
|
-
id: web-mocking
|
|
69
|
-
displayName: API Mocking
|
|
70
|
-
description: Mock Service Worker for development and testing
|
|
71
|
-
domain: web
|
|
72
|
-
exclusive: false
|
|
73
|
-
required: false
|
|
74
|
-
order: 10
|
|
75
|
-
|
|
76
|
-
web-error-handling:
|
|
77
|
-
id: web-error-handling
|
|
78
|
-
displayName: Error Handling
|
|
79
|
-
description: Error boundaries, result types, and error patterns
|
|
80
|
-
domain: web
|
|
81
|
-
exclusive: false
|
|
82
|
-
required: false
|
|
83
|
-
order: 11
|
|
84
|
-
|
|
85
|
-
web-i18n:
|
|
86
|
-
id: web-i18n
|
|
87
|
-
displayName: Internationalization
|
|
88
|
-
description: i18n libraries (next-intl, react-intl, vue-i18n)
|
|
89
|
-
domain: web
|
|
90
|
-
exclusive: true
|
|
91
|
-
required: false
|
|
92
|
-
order: 12
|
|
93
|
-
|
|
94
|
-
web-file-upload:
|
|
95
|
-
id: web-file-upload
|
|
96
|
-
displayName: File Upload
|
|
97
|
-
description: File upload patterns and handling
|
|
98
|
-
domain: web
|
|
99
|
-
exclusive: false
|
|
100
|
-
required: false
|
|
101
|
-
order: 13
|
|
102
|
-
|
|
103
|
-
web-files:
|
|
104
|
-
id: web-files
|
|
105
|
-
displayName: Files & Images
|
|
106
|
-
description: Image handling and file processing
|
|
107
|
-
domain: web
|
|
108
|
-
exclusive: false
|
|
109
|
-
required: false
|
|
110
|
-
order: 14
|
|
111
|
-
|
|
112
|
-
web-utilities:
|
|
113
|
-
id: web-utilities
|
|
114
|
-
displayName: Utilities
|
|
115
|
-
description: Utility libraries (date-fns, native JS patterns)
|
|
116
|
-
domain: web
|
|
117
|
-
exclusive: false
|
|
118
|
-
required: false
|
|
119
|
-
order: 15
|
|
120
|
-
|
|
121
|
-
web-realtime:
|
|
122
|
-
id: web-realtime
|
|
123
|
-
displayName: Realtime
|
|
124
|
-
description: WebSockets, SSE, and real-time communication
|
|
125
|
-
domain: web
|
|
126
|
-
exclusive: true
|
|
127
|
-
required: false
|
|
128
|
-
order: 16
|
|
129
|
-
|
|
130
|
-
web-animation:
|
|
131
|
-
id: web-animation
|
|
132
|
-
displayName: Animation
|
|
133
|
-
description: Animation libraries and CSS animations
|
|
134
|
-
domain: web
|
|
135
|
-
exclusive: false
|
|
136
|
-
required: false
|
|
137
|
-
order: 17
|
|
138
|
-
|
|
139
|
-
web-pwa:
|
|
140
|
-
id: web-pwa
|
|
141
|
-
displayName: Progressive Web App
|
|
142
|
-
description: Service workers, offline-first patterns, and PWA features
|
|
143
|
-
domain: web
|
|
144
|
-
exclusive: false
|
|
145
|
-
required: false
|
|
146
|
-
order: 18
|
|
147
|
-
|
|
148
|
-
web-accessibility:
|
|
149
|
-
id: web-accessibility
|
|
150
|
-
displayName: Accessibility
|
|
151
|
-
description: WCAG compliance, ARIA, and keyboard navigation
|
|
152
|
-
domain: web
|
|
153
|
-
exclusive: false
|
|
154
|
-
required: false
|
|
155
|
-
order: 19
|
|
156
|
-
|
|
157
|
-
web-performance:
|
|
158
|
-
id: web-performance
|
|
159
|
-
displayName: Web Performance
|
|
160
|
-
description: Bundle optimization, render performance, and code splitting
|
|
161
|
-
domain: web
|
|
162
|
-
exclusive: false
|
|
163
|
-
required: false
|
|
164
|
-
order: 20
|
|
165
|
-
|
|
166
|
-
web-base-framework:
|
|
167
|
-
id: web-base-framework
|
|
168
|
-
displayName: Base Framework
|
|
169
|
-
description: Base framework setup and configuration
|
|
170
|
-
domain: web
|
|
171
|
-
exclusive: false
|
|
172
|
-
required: false
|
|
173
|
-
order: 21
|
|
174
|
-
|
|
175
|
-
api-api:
|
|
176
|
-
id: api-api
|
|
177
|
-
displayName: API Framework
|
|
178
|
-
description: Backend framework (Hono, Express, Fastify)
|
|
179
|
-
domain: api
|
|
180
|
-
exclusive: true
|
|
181
|
-
required: true
|
|
182
|
-
order: 1
|
|
183
|
-
|
|
184
|
-
api-database:
|
|
185
|
-
id: api-database
|
|
186
|
-
displayName: Database ORM
|
|
187
|
-
description: Database access layer (Drizzle, Prisma)
|
|
188
|
-
domain: api
|
|
189
|
-
exclusive: true
|
|
190
|
-
required: false
|
|
191
|
-
order: 2
|
|
192
|
-
|
|
193
|
-
api-auth:
|
|
194
|
-
id: api-auth
|
|
195
|
-
displayName: Authentication
|
|
196
|
-
description: Auth solution (Better Auth, Auth.js)
|
|
197
|
-
domain: api
|
|
198
|
-
exclusive: true
|
|
199
|
-
required: false
|
|
200
|
-
order: 3
|
|
201
|
-
|
|
202
|
-
api-observability:
|
|
203
|
-
id: api-observability
|
|
204
|
-
displayName: Observability
|
|
205
|
-
description: Logging, monitoring, error tracking
|
|
206
|
-
domain: api
|
|
207
|
-
exclusive: false
|
|
208
|
-
required: false
|
|
209
|
-
order: 4
|
|
210
|
-
|
|
211
|
-
api-analytics:
|
|
212
|
-
id: api-analytics
|
|
213
|
-
displayName: Analytics
|
|
214
|
-
description: Product analytics and tracking
|
|
215
|
-
domain: api
|
|
216
|
-
exclusive: false
|
|
217
|
-
required: false
|
|
218
|
-
order: 5
|
|
219
|
-
|
|
220
|
-
api-email:
|
|
221
|
-
id: api-email
|
|
222
|
-
displayName: Email
|
|
223
|
-
description: Transactional email (Resend, Sendgrid)
|
|
224
|
-
domain: api
|
|
225
|
-
exclusive: true
|
|
226
|
-
required: false
|
|
227
|
-
order: 6
|
|
228
|
-
|
|
229
|
-
api-performance:
|
|
230
|
-
id: api-performance
|
|
231
|
-
displayName: Performance
|
|
232
|
-
description: API performance patterns and optimization
|
|
233
|
-
domain: api
|
|
234
|
-
exclusive: false
|
|
235
|
-
required: false
|
|
236
|
-
order: 7
|
|
237
|
-
|
|
238
|
-
mobile-framework:
|
|
239
|
-
id: mobile-framework
|
|
240
|
-
displayName: Mobile Framework
|
|
241
|
-
description: Native mobile framework (React Native, Expo)
|
|
242
|
-
domain: mobile
|
|
243
|
-
exclusive: true
|
|
244
|
-
required: true
|
|
245
|
-
order: 1
|
|
246
|
-
|
|
247
|
-
mobile-platform:
|
|
248
|
-
id: mobile-platform
|
|
249
|
-
displayName: Mobile Platform
|
|
250
|
-
description: Mobile platform tooling and configuration
|
|
251
|
-
domain: mobile
|
|
252
|
-
exclusive: false
|
|
253
|
-
required: false
|
|
254
|
-
order: 2
|
|
255
|
-
|
|
256
|
-
shared-monorepo:
|
|
257
|
-
id: shared-monorepo
|
|
258
|
-
displayName: Monorepo
|
|
259
|
-
description: Monorepo tooling (Turborepo, Nx)
|
|
260
|
-
domain: shared
|
|
261
|
-
exclusive: true
|
|
262
|
-
required: false
|
|
263
|
-
order: 1
|
|
264
|
-
|
|
265
|
-
shared-tooling:
|
|
266
|
-
id: shared-tooling
|
|
267
|
-
displayName: Build Tooling
|
|
268
|
-
description: ESLint, Prettier, TypeScript, Vite
|
|
269
|
-
domain: shared
|
|
270
|
-
exclusive: false
|
|
271
|
-
required: false
|
|
272
|
-
order: 2
|
|
273
|
-
|
|
274
|
-
shared-security:
|
|
275
|
-
id: shared-security
|
|
276
|
-
displayName: Security
|
|
277
|
-
description: Authentication security patterns and best practices
|
|
278
|
-
domain: shared
|
|
279
|
-
exclusive: false
|
|
280
|
-
required: false
|
|
281
|
-
order: 3
|
|
282
|
-
|
|
283
|
-
shared-methodology:
|
|
284
|
-
id: shared-methodology
|
|
285
|
-
displayName: Methodology
|
|
286
|
-
description: Development methodology and engineering principles
|
|
287
|
-
domain: shared
|
|
288
|
-
exclusive: false
|
|
289
|
-
required: false
|
|
290
|
-
order: 4
|
|
291
|
-
|
|
292
|
-
shared-research:
|
|
293
|
-
id: shared-research
|
|
294
|
-
displayName: Research
|
|
295
|
-
description: Codebase investigation and research methodology
|
|
296
|
-
domain: shared
|
|
297
|
-
exclusive: false
|
|
298
|
-
required: false
|
|
299
|
-
order: 5
|
|
300
|
-
|
|
301
|
-
shared-reviewing:
|
|
302
|
-
id: shared-reviewing
|
|
303
|
-
displayName: Code Review
|
|
304
|
-
description: Code review patterns and guidance
|
|
305
|
-
domain: shared
|
|
306
|
-
exclusive: false
|
|
307
|
-
required: false
|
|
308
|
-
order: 6
|
|
309
|
-
|
|
310
|
-
shared-ci-cd:
|
|
311
|
-
id: shared-ci-cd
|
|
312
|
-
displayName: CI/CD
|
|
313
|
-
description: Continuous integration and deployment pipelines
|
|
314
|
-
domain: shared
|
|
315
|
-
exclusive: false
|
|
316
|
-
required: false
|
|
317
|
-
order: 7
|
|
318
|
-
|
|
319
|
-
cli-framework:
|
|
320
|
-
id: cli-framework
|
|
321
|
-
displayName: CLI Framework
|
|
322
|
-
description: CLI application framework (Commander, oclif)
|
|
323
|
-
domain: cli
|
|
324
|
-
exclusive: true
|
|
325
|
-
required: true
|
|
326
|
-
order: 1
|
|
327
|
-
|
|
328
|
-
cli-prompts:
|
|
329
|
-
id: cli-prompts
|
|
330
|
-
displayName: CLI Prompts
|
|
331
|
-
description: Interactive prompts and UI
|
|
332
|
-
domain: cli
|
|
333
|
-
exclusive: true
|
|
334
|
-
required: false
|
|
335
|
-
order: 2
|
|
336
|
-
|
|
337
|
-
cli-testing:
|
|
338
|
-
id: cli-testing
|
|
339
|
-
displayName: CLI Testing
|
|
340
|
-
description: CLI testing utilities
|
|
341
|
-
domain: cli
|
|
342
|
-
exclusive: false
|
|
343
|
-
required: false
|
|
344
|
-
order: 3
|