@agents-inc/cli 0.32.1 → 0.35.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 +24 -0
- package/README.md +7 -7
- package/config/skills-matrix.yaml +10 -10
- package/config/stacks.yaml +9 -9
- package/dist/{chunk-IZZ4IIEG.js → chunk-5LPPIT6H.js} +4 -4
- package/dist/{chunk-Z4TWOP3H.js → chunk-5YNZJ5TP.js} +2 -2
- package/dist/chunk-AQQVSNUX.js +33 -0
- package/dist/chunk-AQQVSNUX.js.map +1 -0
- package/dist/{chunk-ODUOU55D.js → chunk-BLLXNFWP.js} +2 -2
- package/dist/{chunk-YND42IXK.js → chunk-BPD4VUAU.js} +12 -10
- package/dist/chunk-BPD4VUAU.js.map +1 -0
- package/dist/{chunk-4RAY5AOI.js → chunk-CEWNZQMH.js} +3 -3
- package/dist/{chunk-WEUVWHMA.js → chunk-CXWPUVA7.js} +16 -11
- package/dist/chunk-CXWPUVA7.js.map +1 -0
- package/dist/{chunk-R74PZWQS.js → chunk-GGHH3KR2.js} +5 -5
- package/dist/chunk-GGHH3KR2.js.map +1 -0
- package/dist/chunk-HTTPKSL6.js +31 -0
- package/dist/chunk-HTTPKSL6.js.map +1 -0
- package/dist/{chunk-A27LOC4Z.js → chunk-IG7CUREJ.js} +3 -3
- package/dist/{chunk-FJQRVFMB.js → chunk-JXMRTHDT.js} +2 -2
- package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
- package/dist/chunk-KUV24B5M.js.map +1 -0
- package/dist/{chunk-B2UBHA66.js → chunk-KWF6D7ZP.js} +38 -36
- package/dist/chunk-KWF6D7ZP.js.map +1 -0
- package/dist/{chunk-IYG2LAIM.js → chunk-LFHZBF6N.js} +5 -17
- package/dist/chunk-LFHZBF6N.js.map +1 -0
- package/dist/{chunk-SO22IQPY.js → chunk-MZB3GGOH.js} +2 -2
- package/dist/chunk-MZB3GGOH.js.map +1 -0
- package/dist/{chunk-W2ZSCZ2U.js → chunk-NJ775OJ4.js} +4 -4
- package/dist/chunk-NVQEHRJY.js +120 -0
- package/dist/chunk-NVQEHRJY.js.map +1 -0
- package/dist/{chunk-LGUI3PMO.js → chunk-OGJ7DFCL.js} +9 -9
- package/dist/chunk-OGJ7DFCL.js.map +1 -0
- package/dist/{chunk-3ZOIOVKT.js → chunk-OGXSTJP2.js} +4 -4
- package/dist/chunk-OGXSTJP2.js.map +1 -0
- package/dist/{chunk-BZN2Z5P7.js → chunk-OI4WBRC7.js} +12 -3
- package/dist/chunk-OI4WBRC7.js.map +1 -0
- package/dist/{chunk-OGJIZ6QH.js → chunk-OKILA27U.js} +122 -232
- package/dist/chunk-OKILA27U.js.map +1 -0
- package/dist/{chunk-PBEHPQLK.js → chunk-PKUIO2Z7.js} +57 -21
- package/dist/chunk-PKUIO2Z7.js.map +1 -0
- package/dist/{chunk-5PIKNCZX.js → chunk-U36YCEBK.js} +79 -39
- package/dist/chunk-U36YCEBK.js.map +1 -0
- package/dist/{chunk-OMV7TLWD.js → chunk-UFUQUFV6.js} +23 -107
- package/dist/chunk-UFUQUFV6.js.map +1 -0
- package/dist/{chunk-R3XFQKPG.js → chunk-VEZ2GZEK.js} +2 -2
- package/dist/{chunk-MM7NK5N2.js → chunk-WMVGRAFB.js} +2896 -2945
- package/dist/chunk-WMVGRAFB.js.map +1 -0
- package/dist/{chunk-UX2H2K2G.js → chunk-XNQJBQ5X.js} +2 -2
- package/dist/{chunk-EMJ2ZKS7.js → chunk-XYCN2GCV.js} +3 -3
- package/dist/{chunk-LAPCUV4D.js → chunk-YCS7GF6Y.js} +2 -4
- package/dist/chunk-YCS7GF6Y.js.map +1 -0
- package/dist/{chunk-UICL22RT.js → chunk-YIKBNGE3.js} +4 -4
- package/dist/{chunk-BZQBJP34.js → chunk-YN35L5NE.js} +2 -2
- package/dist/chunk-YN35L5NE.js.map +1 -0
- package/dist/{chunk-QPTOIZAT.js → chunk-YPJKOM42.js} +2 -2
- package/dist/{chunk-FZGYSLJL.js → chunk-ZE355C6C.js} +2 -2
- package/dist/commands/build/marketplace.js +3 -3
- package/dist/commands/build/plugins.js +5 -5
- package/dist/commands/build/stack.js +5 -5
- package/dist/commands/compile.js +20 -9
- package/dist/commands/compile.js.map +1 -1
- 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 +5 -5
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +7 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +35 -32
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +5 -5
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +5 -5
- package/dist/commands/info.js +6 -6
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +37 -41
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +5 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +5 -5
- package/dist/commands/new/skill.js +5 -5
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +5 -5
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +105 -28
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +7 -7
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +5 -5
- package/dist/commands/version/bump.js +4 -4
- package/dist/commands/version/index.js +4 -4
- package/dist/commands/version/set.js +4 -4
- package/dist/commands/version/show.js +4 -4
- 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 +34 -66
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +5 -5
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.js +2 -2
- package/dist/components/wizard/search-modal.js +3 -3
- package/dist/components/wizard/search-modal.test.js +3 -3
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/source-grid.js +4 -4
- package/dist/components/wizard/source-grid.test.js +4 -4
- package/dist/components/wizard/stack-selection.js +8 -8
- package/dist/components/wizard/step-build.js +8 -7
- package/dist/components/wizard/step-build.test.js +18 -17
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -3
- package/dist/components/wizard/step-confirm.test.js +6 -6
- 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 +6 -6
- package/dist/components/wizard/step-settings.test.js +13 -13
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +10 -9
- package/dist/components/wizard/step-sources.test.js +11 -10
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +10 -10
- package/dist/components/wizard/step-stack.test.js +19 -23
- 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 +7 -7
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +7 -8
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +24 -23
- package/dist/config/skills-matrix.yaml +10 -10
- package/dist/config/stacks.yaml +9 -9
- package/dist/hooks/init.js +5 -3
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-manager-SBPPLOQQ.js → source-manager-PTK4P6BF.js} +4 -4
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
- package/dist/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
- package/dist/src/agents/meta/agent-summoner/examples.md +2 -2
- package/dist/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/output-format.md +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/stores/wizard-store.js +4 -4
- package/dist/stores/wizard-store.test.js +5 -5
- package/package.json +8 -8
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
- package/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
- package/src/agents/meta/agent-summoner/examples.md +2 -2
- package/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/output-format.md +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/src/schemas/project-config.schema.json +3 -0
- package/src/schemas/project-source-config.schema.json +12 -0
- package/dist/chunk-3ZOIOVKT.js.map +0 -1
- package/dist/chunk-5PIKNCZX.js.map +0 -1
- package/dist/chunk-B2UBHA66.js.map +0 -1
- package/dist/chunk-BZN2Z5P7.js.map +0 -1
- package/dist/chunk-BZQBJP34.js.map +0 -1
- package/dist/chunk-H566H3MQ.js +0 -87
- package/dist/chunk-H566H3MQ.js.map +0 -1
- package/dist/chunk-IYG2LAIM.js.map +0 -1
- package/dist/chunk-JMVWYAHT.js.map +0 -1
- package/dist/chunk-LAPCUV4D.js.map +0 -1
- package/dist/chunk-LGUI3PMO.js.map +0 -1
- package/dist/chunk-MM7NK5N2.js.map +0 -1
- package/dist/chunk-O4D67NN7.js +0 -24
- package/dist/chunk-O4D67NN7.js.map +0 -1
- package/dist/chunk-OGJIZ6QH.js.map +0 -1
- package/dist/chunk-OMV7TLWD.js.map +0 -1
- package/dist/chunk-PBEHPQLK.js.map +0 -1
- package/dist/chunk-R74PZWQS.js.map +0 -1
- package/dist/chunk-SO22IQPY.js.map +0 -1
- package/dist/chunk-WEUVWHMA.js.map +0 -1
- package/dist/chunk-YND42IXK.js.map +0 -1
- /package/dist/{chunk-IZZ4IIEG.js.map → chunk-5LPPIT6H.js.map} +0 -0
- /package/dist/{chunk-Z4TWOP3H.js.map → chunk-5YNZJ5TP.js.map} +0 -0
- /package/dist/{chunk-ODUOU55D.js.map → chunk-BLLXNFWP.js.map} +0 -0
- /package/dist/{chunk-4RAY5AOI.js.map → chunk-CEWNZQMH.js.map} +0 -0
- /package/dist/{chunk-A27LOC4Z.js.map → chunk-IG7CUREJ.js.map} +0 -0
- /package/dist/{chunk-FJQRVFMB.js.map → chunk-JXMRTHDT.js.map} +0 -0
- /package/dist/{chunk-W2ZSCZ2U.js.map → chunk-NJ775OJ4.js.map} +0 -0
- /package/dist/{chunk-R3XFQKPG.js.map → chunk-VEZ2GZEK.js.map} +0 -0
- /package/dist/{chunk-UX2H2K2G.js.map → chunk-XNQJBQ5X.js.map} +0 -0
- /package/dist/{chunk-EMJ2ZKS7.js.map → chunk-XYCN2GCV.js.map} +0 -0
- /package/dist/{chunk-UICL22RT.js.map → chunk-YIKBNGE3.js.map} +0 -0
- /package/dist/{chunk-QPTOIZAT.js.map → chunk-YPJKOM42.js.map} +0 -0
- /package/dist/{chunk-FZGYSLJL.js.map → chunk-ZE355C6C.js.map} +0 -0
- /package/dist/{source-manager-SBPPLOQQ.js.map → source-manager-PTK4P6BF.js.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getErrorMessage,
|
|
4
4
|
warn
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OI4WBRC7.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esm_shims
|
|
8
8
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -180,4 +180,4 @@ export {
|
|
|
180
180
|
claudePluginMarketplaceAdd,
|
|
181
181
|
claudePluginUninstall
|
|
182
182
|
};
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
183
|
+
//# sourceMappingURL=chunk-XNQJBQ5X.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
cliTheme
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5YNZJ5TP.js";
|
|
5
5
|
import {
|
|
6
6
|
useTextInput
|
|
7
7
|
} from "./chunk-U3IGFMCY.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
CLI_COLORS,
|
|
10
10
|
UI_LAYOUT,
|
|
11
11
|
UI_SYMBOLS
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YCS7GF6Y.js";
|
|
13
13
|
import {
|
|
14
14
|
init_esm_shims
|
|
15
15
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -343,4 +343,4 @@ var SkillSearch = ({
|
|
|
343
343
|
export {
|
|
344
344
|
SkillSearch
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-XYCN2GCV.js.map
|
|
@@ -56,7 +56,7 @@ var STANDARD_DIRS = {
|
|
|
56
56
|
};
|
|
57
57
|
var DEFAULT_VERSION = "1.0.0";
|
|
58
58
|
var DEFAULT_DISPLAY_VERSION = "0.0.0";
|
|
59
|
-
var SCHEMA_PKG_PREFIX = "https://raw.githubusercontent.com/
|
|
59
|
+
var SCHEMA_PKG_PREFIX = "https://raw.githubusercontent.com/agents-inc/cli/main/src/schemas";
|
|
60
60
|
var SCHEMA_PATHS = {
|
|
61
61
|
agent: `${SCHEMA_PKG_PREFIX}/agent.schema.json`,
|
|
62
62
|
metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,
|
|
@@ -115,8 +115,6 @@ var SCROLL_VIEWPORT = {
|
|
|
115
115
|
SCROLL_INDICATOR_HEIGHT: 1,
|
|
116
116
|
/** Estimated lines per category name row (including top margin) */
|
|
117
117
|
CATEGORY_NAME_LINES: 2,
|
|
118
|
-
/** Estimated average width of a single skill tag in characters (borders + padding + label) */
|
|
119
|
-
AVG_TAG_WIDTH: 22,
|
|
120
118
|
/** Margin between category sections (marginTop on CategorySection) */
|
|
121
119
|
CATEGORY_MARGIN_LINES: 1,
|
|
122
120
|
/** Minimum rows to show at least 1 category before enabling scroll */
|
|
@@ -188,4 +186,4 @@ export {
|
|
|
188
186
|
DEFAULT_SCRATCH_DOMAINS,
|
|
189
187
|
DEFAULT_PRESELECTED_SKILLS
|
|
190
188
|
};
|
|
191
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-YCS7GF6Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/consts.ts"],"sourcesContent":["import path from \"path\";\nimport os from \"os\";\nimport { fileURLToPath } from \"url\";\nimport type { Domain, SkillId } from \"./types/index.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// After tsup build, dist/ is flat, so we go up one level from dist/ to get CLI root\n// In development (src/cli/consts.ts), we go up two levels\nconst isInDist = __dirname.includes(\"/dist\");\nconst CLI_ROOT = isInDist ? path.resolve(__dirname, \"..\") : path.resolve(__dirname, \"../..\");\nexport const PROJECT_ROOT = CLI_ROOT;\n\nexport const CLAUDE_DIR = \".claude\";\nexport const CLAUDE_SRC_DIR = \".claude-src\";\nexport const PLUGINS_SUBDIR = \"plugins\";\nexport const PLUGIN_MANIFEST_DIR = \".claude-plugin\";\nexport const PLUGIN_MANIFEST_FILE = \"plugin.json\";\nexport const DEFAULT_PLUGIN_NAME = \"agents-inc\";\n\nexport const CACHE_DIR = path.join(os.homedir(), \".cache\", DEFAULT_PLUGIN_NAME);\n\nexport const SKILLS_MATRIX_PATH = \"config/skills-matrix.yaml\";\nexport const STACKS_FILE_PATH = \"config/stacks.yaml\";\nexport const SKILLS_DIR_PATH = \"src/skills\";\nexport const LOCAL_SKILLS_PATH = \".claude/skills\";\nexport const ARCHIVED_SKILLS_DIR_NAME = \"_archived\";\n\nexport const DIRS = {\n agents: \"src/agents\",\n skills: \"src/skills\",\n stacks: \"src/stacks\",\n templates: \"src/agents/_templates\",\n commands: \"src/commands\",\n} as const;\n\nexport const STANDARD_FILES = {\n SKILL_MD: \"SKILL.md\",\n METADATA_YAML: \"metadata.yaml\",\n METADATA_JSON: \"metadata.json\",\n CONFIG_YAML: \"config.yaml\",\n SKILLS_MATRIX_YAML: \"skills-matrix.yaml\",\n AGENT_YAML: \"agent.yaml\",\n PLUGIN_JSON: \"plugin.json\",\n CLAUDE_MD: \"CLAUDE.md\",\n REFERENCE_MD: \"reference.md\",\n INTRO_MD: \"intro.md\",\n WORKFLOW_MD: \"workflow.md\",\n EXAMPLES_MD: \"examples.md\",\n OUTPUT_FORMAT_MD: \"output-format.md\",\n CRITICAL_REQUIREMENTS_MD: \"critical-requirements.md\",\n CRITICAL_REMINDERS_MD: \"critical-reminders.md\",\n} as const;\n\nexport const STANDARD_DIRS = {\n EXAMPLES: \"examples\",\n SCRIPTS: \"scripts\",\n SKILLS: \"skills\",\n} as const;\n\nexport const DEFAULT_VERSION = \"1.0.0\";\n\n// \"0.0.0\" indicates no version was explicitly set\nexport const DEFAULT_DISPLAY_VERSION = \"0.0.0\";\n\n// JSON Schema URLs for yaml-language-server $schema comments.\n// Uses raw.githubusercontent.com so schemas resolve without requiring the CLI as a dependency.\nconst SCHEMA_PKG_PREFIX = \"https://raw.githubusercontent.com/agents-inc/cli/main/src/schemas\";\n\nexport const SCHEMA_PATHS = {\n agent: `${SCHEMA_PKG_PREFIX}/agent.schema.json`,\n metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,\n marketplace: `${SCHEMA_PKG_PREFIX}/marketplace.schema.json`,\n projectConfig: `${SCHEMA_PKG_PREFIX}/project-config.schema.json`,\n projectSourceConfig: `${SCHEMA_PKG_PREFIX}/project-source-config.schema.json`,\n skillsMatrix: `${SCHEMA_PKG_PREFIX}/skills-matrix.schema.json`,\n stacks: `${SCHEMA_PKG_PREFIX}/stacks.schema.json`,\n} as const;\n\n/** Generates a yaml-language-server schema comment for the top of YAML files. */\nexport function yamlSchemaComment(schemaPath: string): string {\n return `# yaml-language-server: $schema=${schemaPath}`;\n}\n\nexport const YAML_FORMATTING = {\n INDENT: 2,\n LINE_WIDTH: 120,\n /** lineWidth: 0 disables wrapping — used for metadata files */\n LINE_WIDTH_NONE: 0,\n} as const;\n\nexport const UI_SYMBOLS = {\n CHECKBOX_CHECKED: \"[x]\",\n CHECKBOX_UNCHECKED: \"[ ]\",\n CHEVRON: \"\\u276F\",\n CHEVRON_SPACER: \" \",\n SELECTED: \"\\u2713\",\n UNSELECTED: \"\\u25CB\",\n CURRENT: \"\\u25CF\",\n SKIPPED: \"\\u2013\",\n DISCOURAGED: \"!\",\n DISABLED: \"\\u2013\",\n SCROLL_UP: \"\\u25B2\",\n SCROLL_DOWN: \"\\u25BC\",\n} as const;\n\nexport const UI_LAYOUT = {\n MAX_VISIBLE_RESULTS: 10,\n DESCRIPTION_WIDTH: 30,\n COPIED_MESSAGE_TIMEOUT_MS: 2000,\n FALLBACK_MESSAGE_TIMEOUT_MS: 3000,\n} as const;\n\nexport const GITHUB_SOURCE = {\n HTTPS_PREFIX: \"https://github.com/\",\n GITHUB_PREFIX: \"github:\",\n GH_PREFIX: \"gh:\",\n} as const;\n\nexport const DEFAULT_SKILLS_SUBDIR = \"skills\";\n\nexport const HASH_PREFIX_LENGTH = 7;\n\n/** Hex chars from SHA-256 hash used in cache directory names (64 bits of collision resistance) */\nexport const CACHE_HASH_LENGTH = 16;\n\n/** Max chars of human-readable prefix in cache directory names (for debugging) */\nexport const CACHE_READABLE_PREFIX_LENGTH = 32;\n\n// File size limits for parsing boundaries (DoS prevention)\nconst ONE_MB = 1024 * 1024;\nexport const MAX_MARKETPLACE_FILE_SIZE = 10 * ONE_MB;\nexport const MAX_PLUGIN_FILE_SIZE = ONE_MB;\nexport const MAX_CONFIG_FILE_SIZE = ONE_MB;\n\nexport const MAX_JSON_NESTING_DEPTH = 10;\nexport const MAX_MARKETPLACE_PLUGINS = 10_000;\n\nexport const SCROLL_VIEWPORT = {\n /** Height of the \"N more above\" scroll indicator */\n SCROLL_INDICATOR_HEIGHT: 1,\n /** Estimated lines per category name row (including top margin) */\n CATEGORY_NAME_LINES: 2,\n /** Margin between category sections (marginTop on CategorySection) */\n CATEGORY_MARGIN_LINES: 1,\n /** Minimum rows to show at least 1 category before enabling scroll */\n MIN_VIEWPORT_ROWS: 5,\n /** Minimum terminal height to show the wizard at all */\n MIN_TERMINAL_HEIGHT: 15,\n} as const;\n\nexport const DEFAULT_BRANDING = {\n NAME: \"Agents Inc.\",\n TAGLINE: \"AI-powered development tools\",\n} as const;\n\nexport const CLI_COLORS = {\n PRIMARY: \"cyan\",\n SUCCESS: \"green\",\n ERROR: \"red\",\n WARNING: \"yellow\",\n INFO: \"blue\",\n NEUTRAL: \"gray\",\n FOCUS: \"cyan\",\n UNFOCUSED: \"white\",\n} as const;\n\n/** Default domains pre-selected when \"Start from scratch\" is chosen (all except CLI) */\nexport const DEFAULT_SCRATCH_DOMAINS: readonly Domain[] = [\"web\", \"web-extras\", \"api\", \"mobile\"];\n\nexport const DEFAULT_PRESELECTED_SKILLS: readonly SkillId[] = [\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-context-management\",\n \"meta-methodology-improvement-protocol\",\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-success-criteria\",\n \"meta-methodology-write-verification\",\n];\n"],"mappings":"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","names":[]}
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
resolveAgents,
|
|
19
19
|
writeContentHash,
|
|
20
20
|
writePluginManifest
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-WMVGRAFB.js";
|
|
22
22
|
import {
|
|
23
23
|
typedEntries,
|
|
24
24
|
typedKeys
|
|
@@ -36,12 +36,12 @@ import {
|
|
|
36
36
|
verbose,
|
|
37
37
|
warn,
|
|
38
38
|
writeFile
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-OI4WBRC7.js";
|
|
40
40
|
import {
|
|
41
41
|
CLAUDE_DIR,
|
|
42
42
|
DIRS,
|
|
43
43
|
PROJECT_ROOT
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-YCS7GF6Y.js";
|
|
45
45
|
import {
|
|
46
46
|
init_esm_shims
|
|
47
47
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -315,4 +315,4 @@ export {
|
|
|
315
315
|
compileAllAgentPlugins,
|
|
316
316
|
printAgentCompilationSummary
|
|
317
317
|
};
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
318
|
+
//# sourceMappingURL=chunk-YIKBNGE3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_BRANDING
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YCS7GF6Y.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -183,4 +183,4 @@ export {
|
|
|
183
183
|
createMockCategory,
|
|
184
184
|
createMockResolvedStack
|
|
185
185
|
};
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# sourceMappingURL=chunk-YN35L5NE.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 { CategoryPath, ResolvedSkill, SkillDisplayName, SkillId } from \"../../types\";\nimport { createMockSkill } 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/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/framework\",\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: \"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: \"meta/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","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 } 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\";\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 CategoryDefinition,\n CategoryPath,\n CompileContext,\n Domain,\n DomainSelections,\n MergedSkillsMatrix,\n ResolvedSkill,\n ResolvedStack,\n Skill,\n SkillDisplayName,\n SkillId,\n Subcategory,\n} from \"../../types\";\nimport type { WizardResultV2 } from \"../../components/wizard/wizard\";\nimport type { SourceLoadResult } from \"../loading/source-loader\";\nimport type { ResolvedConfig } from \"../configuration/config\";\nimport { getTestSkill } 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 selectedStackId: null,\n domainSelections: {} as DomainSelections,\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 createMockMatrix(\n skills: Record<string, ResolvedSkill>,\n overrides?: Partial<MergedSkillsMatrix>,\n): MergedSkillsMatrix {\n return {\n version: \"1.0.0\",\n categories: {} as Record<Subcategory, import(\"../../types\").CategoryDefinition>,\n skills,\n suggestedStacks: [],\n displayNameToId: {} as Record<SkillDisplayName, SkillId>,\n displayNames: {} as Record<SkillId, SkillDisplayName>,\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 permission_mode: \"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 `version: 1\nauthor: ${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?: { author?: string; description?: string },\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 createSkillContent(skillName, options?.description),\n );\n\n await writeFile(\n path.join(skillDir, STANDARD_FILES.METADATA_YAML),\n createMetadataContent(options?.author),\n );\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 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 audience: [],\n skills: {},\n allSkillIds: [],\n philosophy: \"\",\n ...overrides,\n };\n}\n\n/**\n * Builds a comprehensive test matrix with 7 skills across 6 categories,\n * 2 suggested stacks, display name mappings, and relationship data\n * (conflicts, recommends). Suitable for full wizard and compilation tests.\n * @returns A fully populated MergedSkillsMatrix with realistic test data\n */\nexport function createComprehensiveMatrix(\n overrides?: Partial<MergedSkillsMatrix>,\n): MergedSkillsMatrix {\n // Skill categories use bare Subcategory IDs (matching production metadata.yaml\n // and the categories map keys). The test fixture factories default to \"web/framework\"\n // CategoryPath format, but the wizard's populateFromStack needs bare IDs to match\n // the categories map lookup (e.g., \"framework\" not \"web/framework\").\n const skills = {\n \"web-framework-react\": getTestSkill(\"react\", { category: \"framework\" }),\n \"web-framework-vue\": getTestSkill(\"vue\", {\n category: \"framework\",\n conflictsWith: [{ skillId: \"web-framework-react\", reason: \"Choose one framework\" }],\n }),\n \"web-state-zustand\": getTestSkill(\"zustand\", {\n category: \"client-state\",\n recommends: [{ skillId: \"web-framework-react\", reason: \"Works great with React\" }],\n }),\n \"web-styling-scss-modules\": getTestSkill(\"scss-modules\", { category: \"styling\" }),\n \"api-framework-hono\": getTestSkill(\"hono\", { category: \"api\" }),\n \"api-database-drizzle\": getTestSkill(\"drizzle\", { category: \"database\" }),\n \"web-testing-vitest\": getTestSkill(\"vitest\", { category: \"testing\" }),\n };\n\n const categories = {\n framework: createMockCategory(\"framework\" as Subcategory, \"Framework\", {\n domain: \"web\" as Domain,\n exclusive: true,\n required: true,\n }),\n \"client-state\": createMockCategory(\"client-state\" as Subcategory, \"State\", {\n domain: \"web\" as Domain,\n order: 1,\n }),\n styling: createMockCategory(\"styling\" as Subcategory, \"Styling\", {\n domain: \"web\" as Domain,\n order: 2,\n }),\n api: createMockCategory(\"api\" as Subcategory, \"Backend Framework\", {\n domain: \"api\" as Domain,\n exclusive: true,\n required: true,\n }),\n database: createMockCategory(\"database\" as Subcategory, \"Database\", {\n domain: \"api\" as Domain,\n order: 1,\n }),\n testing: createMockCategory(\"testing\" as Subcategory, \"Testing\", {\n domain: \"shared\" as Domain,\n exclusive: false,\n order: 10,\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 audience: [\"startups\", \"enterprise\"],\n skills: {\n \"web-developer\": {\n framework: \"web-framework-react\",\n \"client-state\": \"web-state-zustand\",\n styling: \"web-styling-scss-modules\",\n },\n \"api-developer\": {\n api: \"api-framework-hono\",\n 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 audience: [\"startups\"],\n skills: {\n \"web-developer\": {\n 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 // 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 // Bare Subcategory IDs — see createComprehensiveMatrix comment\n const skills = {\n \"web-framework-react\": getTestSkill(\"react\", { category: \"framework\" }),\n \"web-state-zustand\": getTestSkill(\"zustand\", { category: \"client-state\" }),\n \"api-framework-hono\": getTestSkill(\"hono\", { category: \"api\" }),\n \"web-testing-vitest\": getTestSkill(\"vitest\", { category: \"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 framework: createMockCategory(\"framework\" as Subcategory, \"Framework\", {\n domain: \"web\" as Domain,\n exclusive: true,\n required: true,\n }),\n \"client-state\": createMockCategory(\"client-state\" as Subcategory, \"State\", {\n domain: \"web\" as Domain,\n order: 1,\n }),\n api: createMockCategory(\"api\" as Subcategory, \"Backend Framework\", {\n domain: \"api\" as Domain,\n exclusive: true,\n required: true,\n }),\n testing: createMockCategory(\"testing\" as Subcategory, \"Testing Framework\", {\n domain: \"shared\" as Domain,\n exclusive: false,\n }),\n } as Record<Subcategory, CategoryDefinition>,\n ...overrides,\n });\n}\n\nexport { getTestSkill } from \"./test-fixtures\";\nexport type { TestSkillName } from \"./test-fixtures\";\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-YCS7GF6Y.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esm_shims
|
|
8
8
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -29,4 +29,4 @@ var MenuItem = ({
|
|
|
29
29
|
export {
|
|
30
30
|
MenuItem
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-YPJKOM42.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YCS7GF6Y.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -82,4 +82,4 @@ var HelpModal = ({ currentStep }) => {
|
|
|
82
82
|
export {
|
|
83
83
|
HelpModal
|
|
84
84
|
};
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-ZE355C6C.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
5
5
|
import {
|
|
6
6
|
ensureDir,
|
|
7
7
|
getErrorMessage,
|
|
@@ -12,14 +12,14 @@ import {
|
|
|
12
12
|
verbose,
|
|
13
13
|
warn,
|
|
14
14
|
writeFile
|
|
15
|
-
} from "../../chunk-
|
|
15
|
+
} from "../../chunk-OI4WBRC7.js";
|
|
16
16
|
import {
|
|
17
17
|
DEFAULT_BRANDING,
|
|
18
18
|
DEFAULT_PLUGIN_NAME,
|
|
19
19
|
DEFAULT_VERSION,
|
|
20
20
|
MAX_PLUGIN_FILE_SIZE,
|
|
21
21
|
PLUGIN_MANIFEST_DIR
|
|
22
|
-
} from "../../chunk-
|
|
22
|
+
} from "../../chunk-YCS7GF6Y.js";
|
|
23
23
|
import {
|
|
24
24
|
init_esm_shims
|
|
25
25
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
import {
|
|
3
3
|
compileAllAgentPlugins,
|
|
4
4
|
printAgentCompilationSummary
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-YIKBNGE3.js";
|
|
6
6
|
import {
|
|
7
7
|
BaseCommand
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
9
9
|
import {
|
|
10
10
|
compileAllSkillPlugins,
|
|
11
11
|
compileSkillPlugin,
|
|
12
12
|
printCompilationSummary
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
14
14
|
import "../../chunk-T4EXUIBY.js";
|
|
15
15
|
import {
|
|
16
16
|
setVerbose
|
|
17
|
-
} from "../../chunk-
|
|
17
|
+
} from "../../chunk-OI4WBRC7.js";
|
|
18
18
|
import {
|
|
19
19
|
DIRS
|
|
20
|
-
} from "../../chunk-
|
|
20
|
+
} from "../../chunk-YCS7GF6Y.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-YIKBNGE3.js";
|
|
5
5
|
import {
|
|
6
6
|
BaseCommand,
|
|
7
7
|
EXIT_CODES
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
9
9
|
import {
|
|
10
10
|
compileStackPlugin,
|
|
11
11
|
loadStacks,
|
|
12
12
|
printStackCompilationSummary
|
|
13
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
14
14
|
import "../../chunk-T4EXUIBY.js";
|
|
15
15
|
import {
|
|
16
16
|
setVerbose
|
|
17
|
-
} from "../../chunk-
|
|
17
|
+
} from "../../chunk-OI4WBRC7.js";
|
|
18
18
|
import {
|
|
19
19
|
PROJECT_ROOT
|
|
20
|
-
} from "../../chunk-
|
|
20
|
+
} from "../../chunk-YCS7GF6Y.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-YIKBNGE3.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-GGHH3KR2.js";
|
|
13
13
|
import {
|
|
14
14
|
BaseCommand,
|
|
15
15
|
EXIT_CODES
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-BLLXNFWP.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-WMVGRAFB.js";
|
|
25
25
|
import {
|
|
26
26
|
typedEntries
|
|
27
27
|
} from "../chunk-T4EXUIBY.js";
|
|
@@ -33,11 +33,13 @@ import {
|
|
|
33
33
|
projectConfigLoaderSchema,
|
|
34
34
|
readFile,
|
|
35
35
|
setVerbose,
|
|
36
|
-
verbose
|
|
37
|
-
|
|
36
|
+
verbose,
|
|
37
|
+
warn
|
|
38
|
+
} from "../chunk-OI4WBRC7.js";
|
|
38
39
|
import {
|
|
39
|
-
LOCAL_SKILLS_PATH
|
|
40
|
-
|
|
40
|
+
LOCAL_SKILLS_PATH,
|
|
41
|
+
STANDARD_FILES
|
|
42
|
+
} from "../chunk-YCS7GF6Y.js";
|
|
41
43
|
import {
|
|
42
44
|
init_esm_shims
|
|
43
45
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -57,6 +59,15 @@ async function loadSkillsFromDir(skillsDir, pathPrefix = "") {
|
|
|
57
59
|
const skillPath = path.join(skillsDir, skillFile);
|
|
58
60
|
const skillDir = path.dirname(skillPath);
|
|
59
61
|
const relativePath = path.relative(skillsDir, skillDir);
|
|
62
|
+
const skillDirName = path.basename(skillDir);
|
|
63
|
+
const metadataPath = path.join(skillDir, STANDARD_FILES.METADATA_YAML);
|
|
64
|
+
if (!await fileExists(metadataPath)) {
|
|
65
|
+
const displayPath = pathPrefix ? `${pathPrefix}/${relativePath}/` : `${relativePath}/`;
|
|
66
|
+
warn(
|
|
67
|
+
`Skill '${skillDirName}' in '${displayPath}' is missing ${STANDARD_FILES.METADATA_YAML} \u2014 skipped. Add ${STANDARD_FILES.METADATA_YAML} to register it with the CLI.`
|
|
68
|
+
);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
60
71
|
try {
|
|
61
72
|
const content = await readFile(skillPath);
|
|
62
73
|
const frontmatter = parseFrontmatter(content, skillPath);
|
|
@@ -161,7 +172,7 @@ var Compile = class _Compile extends BaseCommand {
|
|
|
161
172
|
if (totalSkillCount === 0) {
|
|
162
173
|
this.log(ERROR_MESSAGES.NO_SKILLS_FOUND);
|
|
163
174
|
this.error(
|
|
164
|
-
"No skills found. Add skills with '
|
|
175
|
+
"No skills found. Add skills with 'agentsinc add <skill>' or create in .claude/skills/.",
|
|
165
176
|
{ exit: EXIT_CODES.ERROR }
|
|
166
177
|
);
|
|
167
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose } from \"../utils/logger\";\nimport { discoverAllPluginSkills } from \"../lib/plugins\";\nimport { getAgentDefinitions } from \"../lib/agents\";\nimport { resolveSource } from \"../lib/configuration\";\nimport { directoryExists, ensureDir, glob, readFile, fileExists } from \"../utils/fs\";\nimport { recompileAgents } from \"../lib/agents\";\nimport { parseFrontmatter } from \"../lib/loading\";\nimport { LOCAL_SKILLS_PATH } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport {\n ERROR_MESSAGES,\n SUCCESS_MESSAGES,\n STATUS_MESSAGES,\n DRY_RUN_MESSAGES,\n INFO_MESSAGES,\n} from \"../utils/messages\";\nimport { detectInstallation, type Installation } from \"../lib/installation\";\nimport type { AgentSourcePaths, ProjectConfig, SkillDefinition, SkillId } from \"../types\";\nimport { projectConfigLoaderSchema } from \"../lib/schemas\";\nimport { normalizeStackRecord, getStackSkillIds } from \"../lib/stacks/stacks-loader\";\nimport { typedEntries } from \"../utils/typed-object\";\n\nasync function loadSkillsFromDir(\n skillsDir: string,\n pathPrefix = \"\",\n): Promise<Partial<Record<SkillId, SkillDefinition>>> {\n const skills: Partial<Record<SkillId, SkillDefinition>> = {};\n\n if (!(await directoryExists(skillsDir))) {\n return skills;\n }\n\n const skillFiles = await glob(\"**/SKILL.md\", skillsDir);\n\n for (const skillFile of skillFiles) {\n const skillPath = path.join(skillsDir, skillFile);\n const skillDir = path.dirname(skillPath);\n const relativePath = path.relative(skillsDir, skillDir);\n\n try {\n const content = await readFile(skillPath);\n const frontmatter = parseFrontmatter(content, skillPath);\n\n const skillName = frontmatter?.name || path.basename(skillDir);\n // Boundary cast: skill name from frontmatter/directory is an untyped string\n const canonicalId = skillName as SkillId;\n\n const skill: SkillDefinition = {\n id: canonicalId,\n path: pathPrefix ? `${pathPrefix}/${relativePath}/` : `${relativePath}/`,\n description: frontmatter?.description || \"\",\n };\n\n skills[canonicalId] = skill;\n verbose(` Loaded skill: ${canonicalId}`);\n } catch (error) {\n verbose(` Failed to load skill: ${skillFile} - ${error}`);\n }\n }\n\n return skills;\n}\n\nasync function discoverLocalProjectSkills(\n projectDir: string,\n): Promise<Partial<Record<SkillId, SkillDefinition>>> {\n const localSkillsDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n return loadSkillsFromDir(localSkillsDir, LOCAL_SKILLS_PATH);\n}\n\n/** Merge skills from multiple sources. Later sources take precedence. */\nfunction mergeSkills(\n ...skillSources: Partial<Record<SkillId, SkillDefinition>>[]\n): Partial<Record<SkillId, SkillDefinition>> {\n const merged: Partial<Record<SkillId, SkillDefinition>> = {};\n\n for (const source of skillSources) {\n for (const [id, skill] of typedEntries<SkillId, SkillDefinition | undefined>(source)) {\n if (skill) {\n merged[id] = skill;\n }\n }\n }\n\n return merged;\n}\n\ntype CompileFlags = {\n source?: string;\n \"agent-source\"?: string;\n refresh: boolean;\n verbose: boolean;\n \"dry-run\": boolean;\n};\n\ntype DiscoveredSkills = {\n allSkills: Partial<Record<SkillId, SkillDefinition>>;\n totalSkillCount: number;\n};\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. By default, compiles to the Claude plugin directory. Use --output to compile to a custom directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n \"<%= config.bin %> <%= command.id %> --output ./agents\",\n \"<%= config.bin %> <%= command.id %> --dry-run\",\n \"<%= config.bin %> <%= command.id %> --source /path/to/marketplace --refresh\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output directory for compiled agents (skips plugin mode)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n\n setVerbose(flags.verbose);\n\n if (flags.output) {\n await this.runCustomOutputCompile({\n ...flags,\n output: flags.output,\n });\n return;\n }\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n if (installation.mode === \"local\") {\n this.log(\"\");\n this.log(\"Local Mode Compile (auto-detected)\");\n this.log(\"\");\n await this.runCustomOutputCompile({\n ...flags,\n output: installation.agentsDir,\n });\n } else {\n await this.runPluginModeCompile(flags, installation);\n }\n }\n\n private async discoverAllSkills(): Promise<DiscoveredSkills> {\n const projectDir = process.cwd();\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n\n const pluginSkills = await discoverAllPluginSkills(projectDir);\n const pluginSkillCount = Object.keys(pluginSkills).length;\n verbose(` Found ${pluginSkillCount} skills from installed plugins`);\n\n const localSkills = await discoverLocalProjectSkills(projectDir);\n const localSkillCount = Object.keys(localSkills).length;\n verbose(` Found ${localSkillCount} local skills from .claude/skills/`);\n\n const allSkills = mergeSkills(pluginSkills, localSkills);\n const totalSkillCount = Object.keys(allSkills).length;\n\n if (totalSkillCount === 0) {\n this.log(ERROR_MESSAGES.NO_SKILLS_FOUND);\n this.error(\n \"No skills found. Add skills with 'cc add <skill>' or create in .claude/skills/.\",\n { exit: EXIT_CODES.ERROR },\n );\n }\n\n if (localSkillCount > 0 && pluginSkillCount > 0) {\n this.log(\n `Discovered ${totalSkillCount} skills (${pluginSkillCount} from plugins, ${localSkillCount} local)`,\n );\n } else if (localSkillCount > 0) {\n this.log(`Discovered ${localSkillCount} local skills`);\n } else {\n this.log(`Discovered ${pluginSkillCount} skills from plugins`);\n }\n\n return { allSkills, totalSkillCount };\n }\n\n private async resolveSourceForCompile(flags: CompileFlags): Promise<void> {\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n const sourceConfig = await resolveSource(flags.source);\n this.log(`Source: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n }\n\n private async loadAgentDefsForCompile(flags: CompileFlags): Promise<AgentSourcePaths> {\n const projectDir = process.cwd();\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n projectDir,\n });\n this.log(flags[\"agent-source\"] ? \"Agent partials fetched\" : \"Agent partials loaded\");\n verbose(` Agents: ${agentDefs.agentsDir}`);\n verbose(` Templates: ${agentDefs.templatesDir}`);\n return agentDefs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n return this.handleError(error);\n }\n }\n\n private async runPluginModeCompile(\n flags: CompileFlags,\n installation: Installation,\n ): Promise<void> {\n this.log(\"\");\n this.log(\"Plugin Mode Compile\");\n this.log(\"\");\n\n const projectDir = installation.projectDir;\n const agentsDir = installation.agentsDir;\n\n this.log(\"Using individual plugin mode\");\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${agentsDir}`);\n\n const configPath = installation.configPath;\n const hasConfig = await fileExists(configPath);\n if (hasConfig) {\n try {\n const configContent = await readFile(configPath);\n const parsed = parseYaml(configContent);\n const configResult = projectConfigLoaderSchema.safeParse(parsed);\n if (configResult.success) {\n // Boundary cast: Zod loader schema validates structure; cast narrows passthrough output\n const config = configResult.data as ProjectConfig;\n // Normalize stack values to SkillAssignment[] (same as loadProjectConfig)\n if (config.stack) {\n config.stack = normalizeStackRecord(\n config.stack as unknown as Record<string, Record<string, unknown>>,\n );\n }\n const agentCount = config.agents?.length ?? 0;\n const stackSkillCount = config.stack ? getStackSkillIds(config.stack).length : 0;\n this.log(`Using config.yaml (${agentCount} agents, ${stackSkillCount} skills)`);\n verbose(` Config: ${configPath}`);\n } else {\n this.warn(\"config.yaml found but has invalid structure - using defaults\");\n }\n } catch {\n this.warn(\"config.yaml found but could not be parsed - using defaults\");\n }\n } else {\n verbose(` No config.yaml found - using defaults`);\n }\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills();\n await this.resolveSourceForCompile(flags);\n const agentDefs = await this.loadAgentDefsForCompile(flags);\n\n if (flags[\"dry-run\"]) {\n this.log(\"\");\n this.log(`[dry-run] Would compile ${totalSkillCount} skills`);\n this.log(`[dry-run] Would use agent partials from: ${agentDefs.sourcePath}`);\n this.log(`[dry-run] Would output to: ${agentsDir}`);\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_WRITTEN);\n this.log(\"\");\n return;\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath: agentDefs.sourcePath,\n skills: allSkills,\n projectDir,\n outputDir: agentsDir,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Recompiled ${recompileResult.compiled.length} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.PLUGIN_COMPILE_COMPLETE);\n this.log(\"\");\n }\n\n private async runCustomOutputCompile(flags: CompileFlags & { output: string }): Promise<void> {\n const outputDir = path.resolve(process.cwd(), flags.output);\n this.log(\"\");\n this.log(\"Custom Output Compile\");\n this.log(\"\");\n this.log(`Output directory: ${outputDir}`);\n this.log(\"\");\n\n if (flags[\"dry-run\"]) {\n this.log(`[dry-run] Preview mode - no files will be written`);\n }\n\n await ensureDir(outputDir);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills();\n await this.resolveSourceForCompile(flags);\n const agentDefs = await this.loadAgentDefsForCompile(flags);\n\n if (flags[\"dry-run\"]) {\n this.log(\"\");\n this.log(`[dry-run] Would compile agents with ${totalSkillCount} skills`);\n this.log(`[dry-run] Would use agent definitions from: ${agentDefs.sourcePath}`);\n this.log(`[dry-run] Would output to: ${outputDir}`);\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_WRITTEN);\n this.log(\"\");\n return;\n }\n\n const projectDir = process.cwd();\n\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n try {\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath: agentDefs.sourcePath,\n skills: allSkills,\n outputDir,\n projectDir,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Compiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Compiled ${recompileResult.compiled.length} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_COMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${outputDir}`);\n for (const agentName of recompileResult.compiled) {\n this.log(` ${agentName}.md`);\n }\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.CUSTOM_COMPILE_COMPLETE);\n this.log(\"\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/compile.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { BaseCommand } from \"../base-command\";\nimport { setVerbose, verbose, warn } from \"../utils/logger\";\nimport { discoverAllPluginSkills } from \"../lib/plugins\";\nimport { getAgentDefinitions } from \"../lib/agents\";\nimport { resolveSource } from \"../lib/configuration\";\nimport { directoryExists, ensureDir, glob, readFile, fileExists } from \"../utils/fs\";\nimport { recompileAgents } from \"../lib/agents\";\nimport { parseFrontmatter } from \"../lib/loading\";\nimport { LOCAL_SKILLS_PATH, STANDARD_FILES } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport {\n ERROR_MESSAGES,\n SUCCESS_MESSAGES,\n STATUS_MESSAGES,\n DRY_RUN_MESSAGES,\n INFO_MESSAGES,\n} from \"../utils/messages\";\nimport { detectInstallation, type Installation } from \"../lib/installation\";\nimport type { AgentSourcePaths, ProjectConfig, SkillDefinition, SkillId } from \"../types\";\nimport { projectConfigLoaderSchema } from \"../lib/schemas\";\nimport { normalizeStackRecord, getStackSkillIds } from \"../lib/stacks/stacks-loader\";\nimport { typedEntries } from \"../utils/typed-object\";\n\nasync function loadSkillsFromDir(\n skillsDir: string,\n pathPrefix = \"\",\n): Promise<Partial<Record<SkillId, SkillDefinition>>> {\n const skills: Partial<Record<SkillId, SkillDefinition>> = {};\n\n if (!(await directoryExists(skillsDir))) {\n return skills;\n }\n\n const skillFiles = await glob(\"**/SKILL.md\", skillsDir);\n\n for (const skillFile of skillFiles) {\n const skillPath = path.join(skillsDir, skillFile);\n const skillDir = path.dirname(skillPath);\n const relativePath = path.relative(skillsDir, skillDir);\n const skillDirName = path.basename(skillDir);\n\n const metadataPath = path.join(skillDir, STANDARD_FILES.METADATA_YAML);\n if (!(await fileExists(metadataPath))) {\n const displayPath = pathPrefix ? `${pathPrefix}/${relativePath}/` : `${relativePath}/`;\n warn(\n `Skill '${skillDirName}' in '${displayPath}' is missing ${STANDARD_FILES.METADATA_YAML} — skipped. Add ${STANDARD_FILES.METADATA_YAML} to register it with the CLI.`,\n );\n continue;\n }\n\n try {\n const content = await readFile(skillPath);\n const frontmatter = parseFrontmatter(content, skillPath);\n\n const skillName = frontmatter?.name || path.basename(skillDir);\n // Boundary cast: skill name from frontmatter/directory is an untyped string\n const canonicalId = skillName as SkillId;\n\n const skill: SkillDefinition = {\n id: canonicalId,\n path: pathPrefix ? `${pathPrefix}/${relativePath}/` : `${relativePath}/`,\n description: frontmatter?.description || \"\",\n };\n\n skills[canonicalId] = skill;\n verbose(` Loaded skill: ${canonicalId}`);\n } catch (error) {\n verbose(` Failed to load skill: ${skillFile} - ${error}`);\n }\n }\n\n return skills;\n}\n\nasync function discoverLocalProjectSkills(\n projectDir: string,\n): Promise<Partial<Record<SkillId, SkillDefinition>>> {\n const localSkillsDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n return loadSkillsFromDir(localSkillsDir, LOCAL_SKILLS_PATH);\n}\n\n/** Merge skills from multiple sources. Later sources take precedence. */\nfunction mergeSkills(\n ...skillSources: Partial<Record<SkillId, SkillDefinition>>[]\n): Partial<Record<SkillId, SkillDefinition>> {\n const merged: Partial<Record<SkillId, SkillDefinition>> = {};\n\n for (const source of skillSources) {\n for (const [id, skill] of typedEntries<SkillId, SkillDefinition | undefined>(source)) {\n if (skill) {\n merged[id] = skill;\n }\n }\n }\n\n return merged;\n}\n\ntype CompileFlags = {\n source?: string;\n \"agent-source\"?: string;\n refresh: boolean;\n verbose: boolean;\n \"dry-run\": boolean;\n};\n\ntype DiscoveredSkills = {\n allSkills: Partial<Record<SkillId, SkillDefinition>>;\n totalSkillCount: number;\n};\n\nexport default class Compile extends BaseCommand {\n static summary = \"Compile agents using local skills and agent definitions\";\n\n static description =\n \"Compile agents with resolved skill references. By default, compiles to the Claude plugin directory. Use --output to compile to a custom directory.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --verbose\",\n \"<%= config.bin %> <%= command.id %> --output ./agents\",\n \"<%= config.bin %> <%= command.id %> --dry-run\",\n \"<%= config.bin %> <%= command.id %> --source /path/to/marketplace --refresh\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n \"agent-source\": Flags.string({\n description: \"Remote agent partials source (default: local CLI)\",\n }),\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output directory for compiled agents (skips plugin mode)\",\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Compile);\n\n setVerbose(flags.verbose);\n\n if (flags.output) {\n await this.runCustomOutputCompile({\n ...flags,\n output: flags.output,\n });\n return;\n }\n\n const installation = await detectInstallation();\n\n if (!installation) {\n this.error(ERROR_MESSAGES.NO_INSTALLATION, {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n if (installation.mode === \"local\") {\n this.log(\"\");\n this.log(\"Local Mode Compile (auto-detected)\");\n this.log(\"\");\n await this.runCustomOutputCompile({\n ...flags,\n output: installation.agentsDir,\n });\n } else {\n await this.runPluginModeCompile(flags, installation);\n }\n }\n\n private async discoverAllSkills(): Promise<DiscoveredSkills> {\n const projectDir = process.cwd();\n this.log(STATUS_MESSAGES.DISCOVERING_SKILLS);\n\n const pluginSkills = await discoverAllPluginSkills(projectDir);\n const pluginSkillCount = Object.keys(pluginSkills).length;\n verbose(` Found ${pluginSkillCount} skills from installed plugins`);\n\n const localSkills = await discoverLocalProjectSkills(projectDir);\n const localSkillCount = Object.keys(localSkills).length;\n verbose(` Found ${localSkillCount} local skills from .claude/skills/`);\n\n const allSkills = mergeSkills(pluginSkills, localSkills);\n const totalSkillCount = Object.keys(allSkills).length;\n\n if (totalSkillCount === 0) {\n this.log(ERROR_MESSAGES.NO_SKILLS_FOUND);\n this.error(\n \"No skills found. Add skills with 'agentsinc add <skill>' or create in .claude/skills/.\",\n { exit: EXIT_CODES.ERROR },\n );\n }\n\n if (localSkillCount > 0 && pluginSkillCount > 0) {\n this.log(\n `Discovered ${totalSkillCount} skills (${pluginSkillCount} from plugins, ${localSkillCount} local)`,\n );\n } else if (localSkillCount > 0) {\n this.log(`Discovered ${localSkillCount} local skills`);\n } else {\n this.log(`Discovered ${pluginSkillCount} skills from plugins`);\n }\n\n return { allSkills, totalSkillCount };\n }\n\n private async resolveSourceForCompile(flags: CompileFlags): Promise<void> {\n this.log(STATUS_MESSAGES.RESOLVING_SOURCE);\n try {\n const sourceConfig = await resolveSource(flags.source);\n this.log(`Source: ${sourceConfig.sourceOrigin}`);\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_RESOLVE_SOURCE);\n this.handleError(error);\n }\n }\n\n private async loadAgentDefsForCompile(flags: CompileFlags): Promise<AgentSourcePaths> {\n const projectDir = process.cwd();\n this.log(\n flags[\"agent-source\"]\n ? STATUS_MESSAGES.FETCHING_AGENT_PARTIALS\n : STATUS_MESSAGES.LOADING_AGENT_PARTIALS,\n );\n\n try {\n const agentDefs = await getAgentDefinitions(flags[\"agent-source\"], {\n forceRefresh: flags.refresh,\n projectDir,\n });\n this.log(flags[\"agent-source\"] ? \"Agent partials fetched\" : \"Agent partials loaded\");\n verbose(` Agents: ${agentDefs.agentsDir}`);\n verbose(` Templates: ${agentDefs.templatesDir}`);\n return agentDefs;\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_LOAD_AGENT_PARTIALS);\n return this.handleError(error);\n }\n }\n\n private async runPluginModeCompile(\n flags: CompileFlags,\n installation: Installation,\n ): Promise<void> {\n this.log(\"\");\n this.log(\"Plugin Mode Compile\");\n this.log(\"\");\n\n const projectDir = installation.projectDir;\n const agentsDir = installation.agentsDir;\n\n this.log(\"Using individual plugin mode\");\n verbose(` Project: ${projectDir}`);\n verbose(` Agents: ${agentsDir}`);\n\n const configPath = installation.configPath;\n const hasConfig = await fileExists(configPath);\n if (hasConfig) {\n try {\n const configContent = await readFile(configPath);\n const parsed = parseYaml(configContent);\n const configResult = projectConfigLoaderSchema.safeParse(parsed);\n if (configResult.success) {\n // Boundary cast: Zod loader schema validates structure; cast narrows passthrough output\n const config = configResult.data as ProjectConfig;\n // Normalize stack values to SkillAssignment[] (same as loadProjectConfig)\n if (config.stack) {\n config.stack = normalizeStackRecord(\n config.stack as unknown as Record<string, Record<string, unknown>>,\n );\n }\n const agentCount = config.agents?.length ?? 0;\n const stackSkillCount = config.stack ? getStackSkillIds(config.stack).length : 0;\n this.log(`Using config.yaml (${agentCount} agents, ${stackSkillCount} skills)`);\n verbose(` Config: ${configPath}`);\n } else {\n this.warn(\"config.yaml found but has invalid structure - using defaults\");\n }\n } catch {\n this.warn(\"config.yaml found but could not be parsed - using defaults\");\n }\n } else {\n verbose(` No config.yaml found - using defaults`);\n }\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills();\n await this.resolveSourceForCompile(flags);\n const agentDefs = await this.loadAgentDefsForCompile(flags);\n\n if (flags[\"dry-run\"]) {\n this.log(\"\");\n this.log(`[dry-run] Would compile ${totalSkillCount} skills`);\n this.log(`[dry-run] Would use agent partials from: ${agentDefs.sourcePath}`);\n this.log(`[dry-run] Would output to: ${agentsDir}`);\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_WRITTEN);\n this.log(\"\");\n return;\n }\n\n this.log(STATUS_MESSAGES.RECOMPILING_AGENTS);\n try {\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath: agentDefs.sourcePath,\n skills: allSkills,\n projectDir,\n outputDir: agentsDir,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Recompiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Recompiled ${recompileResult.compiled.length} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_RECOMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.PLUGIN_COMPILE_COMPLETE);\n this.log(\"\");\n }\n\n private async runCustomOutputCompile(flags: CompileFlags & { output: string }): Promise<void> {\n const outputDir = path.resolve(process.cwd(), flags.output);\n this.log(\"\");\n this.log(\"Custom Output Compile\");\n this.log(\"\");\n this.log(`Output directory: ${outputDir}`);\n this.log(\"\");\n\n if (flags[\"dry-run\"]) {\n this.log(`[dry-run] Preview mode - no files will be written`);\n }\n\n await ensureDir(outputDir);\n\n const { allSkills, totalSkillCount } = await this.discoverAllSkills();\n await this.resolveSourceForCompile(flags);\n const agentDefs = await this.loadAgentDefsForCompile(flags);\n\n if (flags[\"dry-run\"]) {\n this.log(\"\");\n this.log(`[dry-run] Would compile agents with ${totalSkillCount} skills`);\n this.log(`[dry-run] Would use agent definitions from: ${agentDefs.sourcePath}`);\n this.log(`[dry-run] Would output to: ${outputDir}`);\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_WRITTEN);\n this.log(\"\");\n return;\n }\n\n const projectDir = process.cwd();\n\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n try {\n const recompileResult = await recompileAgents({\n pluginDir: projectDir,\n sourcePath: agentDefs.sourcePath,\n skills: allSkills,\n outputDir,\n projectDir,\n });\n\n if (recompileResult.failed.length > 0) {\n this.log(\n `Compiled ${recompileResult.compiled.length} agents (${recompileResult.failed.length} failed)`,\n );\n for (const warning of recompileResult.warnings) {\n this.warn(warning);\n }\n } else if (recompileResult.compiled.length > 0) {\n this.log(`Compiled ${recompileResult.compiled.length} agents`);\n } else {\n this.log(INFO_MESSAGES.NO_AGENTS_TO_COMPILE);\n }\n\n if (recompileResult.compiled.length > 0) {\n verbose(` Compiled: ${recompileResult.compiled.join(\", \")}`);\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${outputDir}`);\n for (const agentName of recompileResult.compiled) {\n this.log(` ${agentName}.md`);\n }\n }\n } catch (error) {\n this.log(ERROR_MESSAGES.FAILED_COMPILE_AGENTS);\n this.handleError(error);\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.CUSTOM_COMPILE_COMPLETE);\n this.log(\"\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
loadProjectSourceConfig,
|
|
8
8
|
resolveAgentsSource,
|
|
9
9
|
resolveSource
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
11
11
|
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
import "../../chunk-OI4WBRC7.js";
|
|
13
|
+
import "../../chunk-YCS7GF6Y.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-NJ775OJ4.js";
|
|
5
|
+
import "../../chunk-BLLXNFWP.js";
|
|
6
|
+
import "../../chunk-WMVGRAFB.js";
|
|
7
7
|
import "../../chunk-T4EXUIBY.js";
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-OI4WBRC7.js";
|
|
9
|
+
import "../../chunk-YCS7GF6Y.js";
|
|
10
10
|
import {
|
|
11
11
|
init_esm_shims
|
|
12
12
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
5
5
|
import {
|
|
6
6
|
getProjectConfigPath
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
8
8
|
import "../../chunk-T4EXUIBY.js";
|
|
9
|
-
import "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
9
|
+
import "../../chunk-OI4WBRC7.js";
|
|
10
|
+
import "../../chunk-YCS7GF6Y.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
getProjectConfigPath,
|
|
8
8
|
loadProjectSourceConfig,
|
|
9
9
|
saveProjectConfig
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
11
11
|
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
import "../../chunk-OI4WBRC7.js";
|
|
13
|
+
import "../../chunk-YCS7GF6Y.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-NJ775OJ4.js";
|
|
5
|
+
import "../../chunk-BLLXNFWP.js";
|
|
6
|
+
import "../../chunk-WMVGRAFB.js";
|
|
7
7
|
import "../../chunk-T4EXUIBY.js";
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-OI4WBRC7.js";
|
|
9
|
+
import "../../chunk-YCS7GF6Y.js";
|
|
10
10
|
import "../../chunk-DHET7RCE.js";
|
|
11
11
|
export {
|
|
12
12
|
ConfigShow as default
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
loadProjectSourceConfig,
|
|
8
8
|
saveProjectConfig
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-
|
|
12
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-OI4WBRC7.js";
|
|
12
|
+
import "../../chunk-YCS7GF6Y.js";
|
|
13
13
|
import {
|
|
14
14
|
init_esm_shims
|
|
15
15
|
} from "../../chunk-DHET7RCE.js";
|