@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
|
@@ -4,21 +4,22 @@ import {
|
|
|
4
4
|
} from "./chunk-K77I4XGL.js";
|
|
5
5
|
import {
|
|
6
6
|
CategoryGrid
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-H7WJK7NJ.js";
|
|
8
8
|
import {
|
|
9
9
|
getDomainDisplayName,
|
|
10
10
|
orderDomains
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-BKJHAJQW.js";
|
|
12
12
|
import {
|
|
13
13
|
ViewTitle
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-MGNYPVOJ.js";
|
|
15
15
|
import {
|
|
16
16
|
buildCategoriesForDomain,
|
|
17
|
+
useWizardStore,
|
|
17
18
|
validateBuildStep
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-IGM6HA3S.js";
|
|
19
20
|
import {
|
|
20
21
|
CLI_COLORS
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-6OWHQ7HM.js";
|
|
22
23
|
import {
|
|
23
24
|
init_esm_shims
|
|
24
25
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -26,7 +27,7 @@ import {
|
|
|
26
27
|
// src/cli/components/wizard/step-build.tsx
|
|
27
28
|
init_esm_shims();
|
|
28
29
|
import { Box, Text, useInput } from "ink";
|
|
29
|
-
import { useMemo as useMemo2, useState } from "react";
|
|
30
|
+
import { useCallback, useMemo as useMemo2, useState } from "react";
|
|
30
31
|
|
|
31
32
|
// src/cli/lib/wizard/index.ts
|
|
32
33
|
init_esm_shims();
|
|
@@ -39,11 +40,19 @@ function useFrameworkFiltering({
|
|
|
39
40
|
allSelections,
|
|
40
41
|
matrix,
|
|
41
42
|
selections,
|
|
42
|
-
installedSkillIds
|
|
43
|
+
installedSkillIds,
|
|
44
|
+
skillConfigs
|
|
43
45
|
}) {
|
|
44
46
|
return useMemo(
|
|
45
|
-
() => buildCategoriesForDomain(
|
|
46
|
-
|
|
47
|
+
() => buildCategoriesForDomain(
|
|
48
|
+
domain,
|
|
49
|
+
allSelections,
|
|
50
|
+
matrix,
|
|
51
|
+
selections,
|
|
52
|
+
installedSkillIds,
|
|
53
|
+
skillConfigs
|
|
54
|
+
),
|
|
55
|
+
[domain, allSelections, matrix, selections, installedSkillIds, skillConfigs]
|
|
47
56
|
);
|
|
48
57
|
}
|
|
49
58
|
|
|
@@ -70,13 +79,19 @@ var StepBuild = ({
|
|
|
70
79
|
}) => {
|
|
71
80
|
const [validationError, setValidationError] = useState(void 0);
|
|
72
81
|
const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();
|
|
82
|
+
const skillConfigs = useWizardStore((s) => s.skillConfigs);
|
|
83
|
+
const handleFocusedSkillChange = useCallback(
|
|
84
|
+
(id) => useWizardStore.getState().setFocusedSkillId(id),
|
|
85
|
+
[]
|
|
86
|
+
);
|
|
73
87
|
const orderedDomains = useMemo2(() => orderDomains(selectedDomains), [selectedDomains]);
|
|
74
88
|
const categories = useFrameworkFiltering({
|
|
75
89
|
domain: activeDomain,
|
|
76
90
|
allSelections,
|
|
77
91
|
matrix,
|
|
78
92
|
selections,
|
|
79
|
-
installedSkillIds
|
|
93
|
+
installedSkillIds,
|
|
94
|
+
skillConfigs
|
|
80
95
|
});
|
|
81
96
|
useInput((_input, key) => {
|
|
82
97
|
if (key.return) {
|
|
@@ -121,7 +136,8 @@ var StepBuild = ({
|
|
|
121
136
|
availableHeight: gridHeight,
|
|
122
137
|
showLabels,
|
|
123
138
|
onToggle,
|
|
124
|
-
onToggleLabels
|
|
139
|
+
onToggleLabels,
|
|
140
|
+
onFocusedSkillChange: handleFocusedSkillChange
|
|
125
141
|
},
|
|
126
142
|
activeDomain
|
|
127
143
|
) }),
|
|
@@ -132,4 +148,4 @@ var StepBuild = ({
|
|
|
132
148
|
export {
|
|
133
149
|
StepBuild
|
|
134
150
|
};
|
|
135
|
-
//# sourceMappingURL=chunk-
|
|
151
|
+
//# sourceMappingURL=chunk-KD2YS76O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-build.tsx","../src/cli/lib/wizard/index.ts","../src/cli/components/hooks/use-framework-filtering.ts"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { validateBuildStep } from \"../../lib/wizard/index.js\";\nimport type {\n Domain,\n MergedSkillsMatrix,\n SkillId,\n Category,\n CategorySelections,\n} from \"../../types/index.js\";\nimport { useFrameworkFiltering } from \"../hooks/use-framework-filtering.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { CategoryGrid } from \"./category-grid.js\";\nimport { getDomainDisplayName, orderDomains } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\nexport type StepBuildProps = {\n matrix: MergedSkillsMatrix;\n domain: Domain;\n selectedDomains: Domain[];\n selections: CategorySelections;\n allSelections: SkillId[];\n showLabels: boolean;\n /** Skill IDs already installed on disk, shown with a dimmed checkmark */\n installedSkillIds?: SkillId[];\n onToggle: (categoryId: Category, technologyId: SkillId) => void;\n onToggleLabels: () => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype FooterProps = {\n validationError?: string;\n};\n\nconst Footer: React.FC<FooterProps> = ({ validationError }) => {\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {validationError && (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color={CLI_COLORS.WARNING}>{validationError}</Text>\n <Text dimColor>Press ESC to go back, or select a skill and press ENTER to continue.</Text>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const StepBuild: React.FC<StepBuildProps> = ({\n matrix,\n domain: activeDomain,\n selectedDomains,\n selections,\n allSelections,\n showLabels,\n installedSkillIds,\n onToggle,\n onToggleLabels,\n onContinue,\n onBack,\n}) => {\n const [validationError, setValidationError] = useState<string | undefined>(undefined);\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n const skillConfigs = useWizardStore((s) => s.skillConfigs);\n\n const handleFocusedSkillChange = useCallback(\n (id: SkillId | null) => useWizardStore.getState().setFocusedSkillId(id),\n [],\n );\n\n const orderedDomains = useMemo(() => orderDomains(selectedDomains), [selectedDomains]);\n\n const categories = useFrameworkFiltering({\n domain: activeDomain,\n allSelections,\n matrix,\n selections,\n installedSkillIds,\n skillConfigs,\n });\n\n useInput((_input, key) => {\n if (key.return) {\n const validation = validateBuildStep(categories, selections);\n if (validation.valid) {\n setValidationError(undefined);\n onContinue();\n } else {\n setValidationError(validation.message);\n }\n } else if (key.escape) {\n setValidationError(undefined);\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box\n columnGap={2}\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginBottom={1}\n paddingRight={1}\n marginTop={-1}\n borderTop={false}\n borderRight={false}\n borderLeft={false}\n borderColor={CLI_COLORS.NEUTRAL}\n borderStyle=\"single\"\n >\n <Box columnGap={2} flexDirection=\"row\">\n {orderedDomains.map((domain) => {\n const isActive = domain === activeDomain;\n return (\n <Text key={domain} color={isActive ? CLI_COLORS.WARNING : undefined} bold={isActive}>\n {getDomainDisplayName(domain)}\n </Text>\n );\n })}\n </Box>\n </Box>\n <ViewTitle>{`Customize your ${getDomainDisplayName(activeDomain)} stack`}</ViewTitle>\n\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <CategoryGrid\n key={activeDomain}\n categories={categories}\n availableHeight={gridHeight}\n showLabels={showLabels}\n onToggle={onToggle}\n onToggleLabels={onToggleLabels}\n onFocusedSkillChange={handleFocusedSkillChange}\n />\n </Box>\n\n <Footer validationError={validationError} />\n </Box>\n );\n};\n","export {\n type BuildStepValidation,\n validateBuildStep,\n computeOptionState,\n getSkillDisplayLabel,\n buildCategoriesForDomain,\n} from \"./build-step-logic\";\n","import { useMemo } from \"react\";\nimport type { Domain, MergedSkillsMatrix, SkillId, CategorySelections } from \"../../types/index.js\";\nimport type { SkillConfig } from \"../../types/config.js\";\nimport { buildCategoriesForDomain } from \"../../lib/wizard/index.js\";\nimport type { CategoryRow } from \"../wizard/category-grid.js\";\n\ntype UseFrameworkFilteringOptions = {\n domain: Domain;\n allSelections: SkillId[];\n matrix: MergedSkillsMatrix;\n selections: CategorySelections;\n installedSkillIds?: SkillId[];\n skillConfigs?: SkillConfig[];\n};\n\nexport function useFrameworkFiltering({\n domain,\n allSelections,\n matrix,\n selections,\n installedSkillIds,\n skillConfigs,\n}: UseFrameworkFilteringOptions): CategoryRow[] {\n return useMemo(\n () =>\n buildCategoriesForDomain(\n domain,\n allSelections,\n matrix,\n selections,\n installedSkillIds,\n skillConfigs,\n ),\n [domain, allSelections, matrix, selections, installedSkillIds, skillConfigs],\n );\n}\n"],"mappings":"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","names":["useMemo","useMemo"]}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
getDomainDisplayName
|
|
4
|
-
|
|
3
|
+
getDomainDisplayName,
|
|
4
|
+
orderDomains
|
|
5
|
+
} from "./chunk-BKJHAJQW.js";
|
|
5
6
|
import {
|
|
6
7
|
CheckboxGrid
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-CIG7IKX3.js";
|
|
8
9
|
import {
|
|
9
10
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-IGM6HA3S.js";
|
|
11
12
|
import {
|
|
12
13
|
typedEntries
|
|
13
14
|
} from "./chunk-T4EXUIBY.js";
|
|
14
|
-
import {
|
|
15
|
-
BUILT_IN_DOMAIN_ORDER
|
|
16
|
-
} from "./chunk-AWP5A6IM.js";
|
|
17
15
|
import {
|
|
18
16
|
init_esm_shims
|
|
19
17
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -34,12 +32,9 @@ var DomainSelection = ({ matrix }) => {
|
|
|
34
32
|
const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();
|
|
35
33
|
const availableDomains = useMemo(() => {
|
|
36
34
|
const matrixDomains = unique(
|
|
37
|
-
typedEntries(matrix.categories).map(([, cat]) => cat?.domain).filter((d) => d != null
|
|
35
|
+
typedEntries(matrix.categories).map(([, cat]) => cat?.domain).filter((d) => d != null)
|
|
38
36
|
);
|
|
39
|
-
const ordered =
|
|
40
|
-
...BUILT_IN_DOMAIN_ORDER.filter((d) => matrixDomains.includes(d)),
|
|
41
|
-
...matrixDomains.filter((d) => !BUILT_IN_DOMAIN_ORDER.includes(d))
|
|
42
|
-
];
|
|
37
|
+
const ordered = orderDomains(matrixDomains);
|
|
43
38
|
return ordered.map((domain) => ({
|
|
44
39
|
id: domain,
|
|
45
40
|
label: getDomainDisplayName(domain),
|
|
@@ -67,4 +62,4 @@ var DomainSelection = ({ matrix }) => {
|
|
|
67
62
|
export {
|
|
68
63
|
DomainSelection
|
|
69
64
|
};
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-KDO6WU76.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/domain-selection.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { unique } from \"remeda\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { Domain, MergedSkillsMatrix } from \"../../types/index.js\";\nimport { typedEntries } from \"../../utils/typed-object.js\";\nimport { CheckboxGrid, type CheckboxItem } from \"./checkbox-grid.js\";\nimport { getDomainDisplayName, orderDomains } from \"./utils.js\";\n\nconst BUILT_IN_DOMAIN_DESCRIPTIONS: Record<Domain, string> = {\n web: \"Frontend web applications\",\n api: \"Backend APIs and services\",\n cli: \"Command-line tools\",\n mobile: \"Mobile applications\",\n shared: \"Shared utilities and methodology\",\n};\n\ntype DomainSelectionProps = {\n matrix: MergedSkillsMatrix;\n};\n\nexport const DomainSelection: React.FC<DomainSelectionProps> = ({ matrix }) => {\n const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();\n\n const availableDomains = useMemo((): CheckboxItem<Domain>[] => {\n const matrixDomains = unique(\n typedEntries(matrix.categories)\n .map(([, cat]) => cat?.domain)\n .filter((d): d is Domain => d != null),\n );\n\n const ordered = orderDomains(matrixDomains);\n\n return ordered.map((domain) => ({\n id: domain,\n label: getDomainDisplayName(domain),\n description: BUILT_IN_DOMAIN_DESCRIPTIONS[domain] ?? `${getDomainDisplayName(domain)} skills`,\n }));\n }, [matrix]);\n\n const handleBack = () => {\n setApproach(null);\n selectStack(null);\n };\n\n return (\n <CheckboxGrid\n title=\"Select domains to configure\"\n // subtitle=\"Select one or more domains, then continue\"\n items={availableDomains}\n selectedIds={selectedDomains}\n onToggle={toggleDomain}\n onContinue={() => setStep(\"build\")}\n onBack={handleBack}\n emptyMessage=\"Please select at least one domain\"\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,eAAe;AAC/B,SAAS,cAAc;AA4CnB;AArCJ,IAAM,+BAAuD;AAAA,EAC3D,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AACV;AAMO,IAAM,kBAAkD,CAAC,EAAE,OAAO,MAAM;AAC7E,QAAM,EAAE,iBAAiB,cAAc,SAAS,aAAa,YAAY,IAAI,eAAe;AAE5F,QAAM,mBAAmB,QAAQ,MAA8B;AAC7D,UAAM,gBAAgB;AAAA,MACpB,aAAa,OAAO,UAAU,EAC3B,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,KAAK,MAAM,EAC5B,OAAO,CAAC,MAAmB,KAAK,IAAI;AAAA,IACzC;AAEA,UAAM,UAAU,aAAa,aAAa;AAE1C,WAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9B,IAAI;AAAA,MACJ,OAAO,qBAAqB,MAAM;AAAA,MAClC,aAAa,6BAA6B,MAAM,KAAK,GAAG,qBAAqB,MAAM,CAAC;AAAA,IACtF,EAAE;AAAA,EACJ,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,MAAM;AACvB,gBAAY,IAAI;AAChB,gBAAY,IAAI;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MAEN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,MAAM,QAAQ,OAAO;AAAA,MACjC,QAAQ;AAAA,MACR,cAAa;AAAA;AAAA,EACf;AAEJ;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getDomainDisplayName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BKJHAJQW.js";
|
|
5
5
|
import {
|
|
6
6
|
ViewTitle
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MGNYPVOJ.js";
|
|
8
8
|
import {
|
|
9
9
|
CLI_COLORS
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6OWHQ7HM.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -15,7 +15,15 @@ import {
|
|
|
15
15
|
// src/cli/components/wizard/step-confirm.tsx
|
|
16
16
|
init_esm_shims();
|
|
17
17
|
import { Box, Text, useInput } from "ink";
|
|
18
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
19
|
+
var getInstallModeLabel = (skillConfigs) => {
|
|
20
|
+
if (skillConfigs.length === 0) return "Local (editable copies)";
|
|
21
|
+
const localCount = skillConfigs.filter((s) => s.source === "local").length;
|
|
22
|
+
const pluginCount = skillConfigs.length - localCount;
|
|
23
|
+
if (localCount === 0) return "Plugin";
|
|
24
|
+
if (pluginCount === 0) return "Local (editable copies)";
|
|
25
|
+
return `Mixed (${localCount} local, ${pluginCount} plugin)`;
|
|
26
|
+
};
|
|
19
27
|
var StepConfirm = ({
|
|
20
28
|
onComplete,
|
|
21
29
|
stackName,
|
|
@@ -24,7 +32,8 @@ var StepConfirm = ({
|
|
|
24
32
|
technologyCount,
|
|
25
33
|
skillCount,
|
|
26
34
|
agentCount,
|
|
27
|
-
|
|
35
|
+
skillConfigs,
|
|
36
|
+
agentConfigs,
|
|
28
37
|
onBack
|
|
29
38
|
}) => {
|
|
30
39
|
useInput((_input, key) => {
|
|
@@ -69,12 +78,33 @@ var StepConfirm = ({
|
|
|
69
78
|
agentCount !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
|
|
70
79
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Agents:" }),
|
|
71
80
|
" ",
|
|
72
|
-
/* @__PURE__ */ jsx(Text, { bold: true, children: agentCount })
|
|
81
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: agentCount }),
|
|
82
|
+
agentConfigs && agentConfigs.length > 0 && /* @__PURE__ */ jsxs(Text, { children: [
|
|
83
|
+
" ",
|
|
84
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
85
|
+
"(",
|
|
86
|
+
agentConfigs.filter((a) => a.scope === "project").length,
|
|
87
|
+
" project",
|
|
88
|
+
agentConfigs.some((a) => a.scope === "global") && `, ${agentConfigs.filter((a) => a.scope === "global").length} global`,
|
|
89
|
+
")"
|
|
90
|
+
] })
|
|
91
|
+
] })
|
|
73
92
|
] }),
|
|
74
|
-
|
|
75
|
-
/* @__PURE__ */
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
skillConfigs && skillConfigs.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
94
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
95
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Install mode:" }),
|
|
96
|
+
" ",
|
|
97
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: getInstallModeLabel(skillConfigs) })
|
|
98
|
+
] }),
|
|
99
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
100
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Scope:" }),
|
|
101
|
+
" ",
|
|
102
|
+
/* @__PURE__ */ jsxs(Text, { bold: true, children: [
|
|
103
|
+
skillConfigs.filter((s) => s.scope === "project").length,
|
|
104
|
+
" project",
|
|
105
|
+
skillConfigs.some((s) => s.scope === "global") && `, ${skillConfigs.filter((s) => s.scope === "global").length} global`
|
|
106
|
+
] })
|
|
107
|
+
] })
|
|
78
108
|
] })
|
|
79
109
|
] }),
|
|
80
110
|
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "ENTER install ESC go back" }) })
|
|
@@ -84,4 +114,4 @@ var StepConfirm = ({
|
|
|
84
114
|
export {
|
|
85
115
|
StepConfirm
|
|
86
116
|
};
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
117
|
+
//# sourceMappingURL=chunk-KIWFEBKH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { AgentScopeConfig, SkillConfig } from \"../../types/config.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 skillConfigs?: SkillConfig[];\n agentConfigs?: AgentScopeConfig[];\n onBack?: () => void;\n};\n\nconst getInstallModeLabel = (skillConfigs: SkillConfig[]): string => {\n if (skillConfigs.length === 0) return \"Local (editable copies)\";\n\n const localCount = skillConfigs.filter((s) => s.source === \"local\").length;\n const pluginCount = skillConfigs.length - localCount;\n\n if (localCount === 0) return \"Plugin\";\n if (pluginCount === 0) return \"Local (editable copies)\";\n return `Mixed (${localCount} local, ${pluginCount} plugin)`;\n};\n\nexport const StepConfirm: React.FC<StepConfirmProps> = ({\n onComplete,\n stackName,\n selectedDomains,\n domainSelections,\n technologyCount,\n skillCount,\n agentCount,\n skillConfigs,\n agentConfigs,\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 {agentConfigs && agentConfigs.length > 0 && (\n <Text>\n {\" \"}\n <Text dimColor>\n ({agentConfigs.filter((a) => a.scope === \"project\").length} project\n {agentConfigs.some((a) => a.scope === \"global\") &&\n `, ${agentConfigs.filter((a) => a.scope === \"global\").length} global`}\n )\n </Text>\n </Text>\n )}\n </Text>\n )}\n {skillConfigs && skillConfigs.length > 0 && (\n <>\n <Text>\n <Text dimColor>Install mode:</Text>{\" \"}\n <Text bold>{getInstallModeLabel(skillConfigs)}</Text>\n </Text>\n <Text>\n <Text dimColor>Scope:</Text>{\" \"}\n <Text bold>\n {skillConfigs.filter((s) => s.scope === \"project\").length} project\n {skillConfigs.some((s) => s.scope === \"global\") &&\n `, ${skillConfigs.filter((s) => s.scope === \"global\").length} global`}\n </Text>\n </Text>\n </>\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":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
KEBAB_CASE_PATTERN
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6OWHQ7HM.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -135,7 +135,7 @@ var boundSkillSchema = z.object({
|
|
|
135
135
|
boundTo: z.string(),
|
|
136
136
|
description: z.string().optional()
|
|
137
137
|
});
|
|
138
|
-
var
|
|
138
|
+
var CATEGORY_VALUES = [
|
|
139
139
|
"web-framework",
|
|
140
140
|
"web-styling",
|
|
141
141
|
"web-client-state",
|
|
@@ -175,8 +175,8 @@ var SUBCATEGORY_VALUES = [
|
|
|
175
175
|
"cli-prompts",
|
|
176
176
|
"cli-testing"
|
|
177
177
|
];
|
|
178
|
-
var
|
|
179
|
-
var
|
|
178
|
+
var categorySchema = z.enum(CATEGORY_VALUES);
|
|
179
|
+
var CATEGORY_VALUES_SET = new Set(CATEGORY_VALUES);
|
|
180
180
|
var agentNameSchema = z.enum([
|
|
181
181
|
"web-developer",
|
|
182
182
|
"api-developer",
|
|
@@ -210,7 +210,7 @@ var permissionModeSchema = z.enum([
|
|
|
210
210
|
"plan",
|
|
211
211
|
"delegate"
|
|
212
212
|
]);
|
|
213
|
-
var
|
|
213
|
+
var skillSlugSchema = z.enum([
|
|
214
214
|
"react",
|
|
215
215
|
"vue",
|
|
216
216
|
"angular",
|
|
@@ -279,7 +279,6 @@ var skillDisplayNameSchema = z.enum([
|
|
|
279
279
|
"file-upload",
|
|
280
280
|
"image-handling",
|
|
281
281
|
"date-fns",
|
|
282
|
-
"api-testing",
|
|
283
282
|
"api-performance",
|
|
284
283
|
"web-performance",
|
|
285
284
|
"security",
|
|
@@ -312,9 +311,9 @@ var extensibleSkillIdSchema = z.string().refine(
|
|
|
312
311
|
(val) => skillIdSchema.safeParse(val).success || customExtensions.skillIds.has(val),
|
|
313
312
|
{ message: "Must be a valid skill ID" }
|
|
314
313
|
);
|
|
315
|
-
var
|
|
316
|
-
(val) =>
|
|
317
|
-
{ message: "Must be a valid
|
|
314
|
+
var extensibleCategorySchema = z.string().refine(
|
|
315
|
+
(val) => categorySchema.safeParse(val).success || customExtensions.categories.has(val),
|
|
316
|
+
{ message: "Must be a valid category" }
|
|
318
317
|
);
|
|
319
318
|
var extensibleAgentNameSchema = z.string().refine(
|
|
320
319
|
(val) => agentNameSchema.safeParse(val).success || customExtensions.agentNames.has(val),
|
|
@@ -356,7 +355,7 @@ var categoryPathSchema = z.string().refine(
|
|
|
356
355
|
(val) => {
|
|
357
356
|
if (val === "local") return true;
|
|
358
357
|
if (/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(val)) return true;
|
|
359
|
-
if (
|
|
358
|
+
if (categorySchema.safeParse(val).success) return true;
|
|
360
359
|
return customExtensions.categories.has(val);
|
|
361
360
|
},
|
|
362
361
|
{
|
|
@@ -398,10 +397,7 @@ var skillMetadataLoaderSchema = z.object({
|
|
|
398
397
|
category: z.string().optional(),
|
|
399
398
|
author: z.string().optional(),
|
|
400
399
|
tags: z.array(z.string()).optional(),
|
|
401
|
-
|
|
402
|
-
compatibleWith: z.array(extensibleSkillIdSchema).optional(),
|
|
403
|
-
conflictsWith: z.array(extensibleSkillIdSchema).optional(),
|
|
404
|
-
domain: extensibleDomainSchema.optional(),
|
|
400
|
+
domain: extensibleDomainSchema,
|
|
405
401
|
custom: z.boolean().optional()
|
|
406
402
|
}).passthrough().superRefine(validateCategoryField);
|
|
407
403
|
var pluginAuthorSchema = z.object({
|
|
@@ -448,30 +444,35 @@ var stackAgentConfigSchema = z.record(
|
|
|
448
444
|
z.string(),
|
|
449
445
|
z.union([skillAssignmentElementSchema, z.array(skillAssignmentElementSchema)])
|
|
450
446
|
).superRefine(
|
|
451
|
-
validateExtensibleRecordKeys(
|
|
452
|
-
SUBCATEGORY_VALUES_SET,
|
|
453
|
-
customExtensions.categories,
|
|
454
|
-
"subcategory"
|
|
455
|
-
)
|
|
447
|
+
validateExtensibleRecordKeys(CATEGORY_VALUES_SET, customExtensions.categories, "category")
|
|
456
448
|
);
|
|
457
449
|
var projectConfigLoaderSchema = z.object({
|
|
458
450
|
version: z.literal("1").optional(),
|
|
459
451
|
/** Project/plugin name in kebab-case */
|
|
460
452
|
name: z.string().optional(),
|
|
461
453
|
description: z.string().optional(),
|
|
462
|
-
/**
|
|
463
|
-
agents: z.array(
|
|
464
|
-
|
|
465
|
-
|
|
454
|
+
/** Per-agent configuration with scope (e.g., [{ name: "web-developer", scope: "project" }]) */
|
|
455
|
+
agents: z.array(
|
|
456
|
+
z.object({
|
|
457
|
+
name: z.string(),
|
|
458
|
+
scope: z.enum(["project", "global"])
|
|
459
|
+
})
|
|
460
|
+
).optional(),
|
|
461
|
+
/** Per-skill configuration with scope and source */
|
|
462
|
+
skills: z.array(
|
|
463
|
+
z.object({
|
|
464
|
+
id: extensibleSkillIdSchema,
|
|
465
|
+
scope: z.enum(["project", "global"]),
|
|
466
|
+
source: z.string()
|
|
467
|
+
})
|
|
468
|
+
).optional(),
|
|
466
469
|
/** Author handle (e.g., "@vince") */
|
|
467
470
|
author: z.string().optional(),
|
|
468
|
-
/** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
|
|
469
|
-
installMode: z.enum(["local", "plugin"]).optional(),
|
|
470
471
|
/** Selected domains from the wizard (persisted for edit mode restoration) */
|
|
471
472
|
domains: z.array(extensibleDomainSchema).optional(),
|
|
472
473
|
/** Selected agents from the wizard (persisted for edit mode restoration) */
|
|
473
474
|
selectedAgents: z.array(z.string()).optional(),
|
|
474
|
-
/** Agent-to-
|
|
475
|
+
/** Agent-to-category-to-skill mappings from selected stack (accepts same formats as stacks.ts) */
|
|
475
476
|
stack: z.record(z.string(), stackAgentConfigSchema).optional(),
|
|
476
477
|
/** Skills source path or URL (e.g., "github:my-org/skills") */
|
|
477
478
|
source: z.string().optional(),
|
|
@@ -480,42 +481,15 @@ var projectConfigLoaderSchema = z.object({
|
|
|
480
481
|
/** Separate source for agents when different from skills source */
|
|
481
482
|
agentsSource: z.string().optional()
|
|
482
483
|
}).passthrough();
|
|
483
|
-
var projectConfigValidationSchema = z.object({
|
|
484
|
-
version: z.literal("1").optional(),
|
|
485
|
-
/** Project/plugin name in kebab-case */
|
|
486
|
-
name: z.string(),
|
|
487
|
-
description: z.string().optional(),
|
|
488
|
-
/** Agent IDs to compile (e.g., ["web-developer", "api-developer"]) */
|
|
489
|
-
agents: z.array(z.string()),
|
|
490
|
-
/** Flat list of all skill IDs used by this project */
|
|
491
|
-
skills: z.array(skillIdSchema),
|
|
492
|
-
/** Author handle (e.g., "@vince") */
|
|
493
|
-
author: z.string().optional(),
|
|
494
|
-
/** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
|
|
495
|
-
installMode: z.enum(["local", "plugin"]),
|
|
496
|
-
/** Selected domains from the wizard (persisted for edit mode restoration) */
|
|
497
|
-
domains: z.array(domainSchema).optional(),
|
|
498
|
-
/** Selected agents from the wizard (persisted for edit mode restoration) */
|
|
499
|
-
selectedAgents: z.array(z.string()).optional(),
|
|
500
|
-
/** Agent-to-subcategory-to-skill mappings from selected stack */
|
|
501
|
-
stack: z.record(z.string(), stackAgentConfigSchema),
|
|
502
|
-
/** Skills source path or URL (e.g., "github:my-org/skills") */
|
|
503
|
-
source: z.string(),
|
|
504
|
-
/** Marketplace identifier for plugin installation */
|
|
505
|
-
marketplace: z.string().optional(),
|
|
506
|
-
/** Separate source for agents when different from skills source */
|
|
507
|
-
agentsSource: z.string().optional()
|
|
508
|
-
});
|
|
509
484
|
var categoryDefinitionSchema = z.object({
|
|
510
|
-
id:
|
|
485
|
+
id: extensibleCategorySchema,
|
|
511
486
|
displayName: z.string(),
|
|
512
487
|
description: z.string(),
|
|
513
488
|
domain: extensibleDomainSchema.optional(),
|
|
514
489
|
exclusive: z.boolean(),
|
|
515
490
|
required: z.boolean(),
|
|
516
491
|
order: z.number(),
|
|
517
|
-
icon: z.string().optional()
|
|
518
|
-
custom: z.boolean().optional()
|
|
492
|
+
icon: z.string().optional()
|
|
519
493
|
});
|
|
520
494
|
var skillRefInYaml = z.string();
|
|
521
495
|
var conflictRuleSchema = z.object({
|
|
@@ -526,9 +500,17 @@ var discourageRuleSchema = z.object({
|
|
|
526
500
|
skills: z.array(skillRefInYaml).min(2),
|
|
527
501
|
reason: z.string()
|
|
528
502
|
});
|
|
529
|
-
var
|
|
530
|
-
|
|
531
|
-
|
|
503
|
+
var recommendationSchema = z.object({
|
|
504
|
+
skill: skillIdSchema,
|
|
505
|
+
reason: z.string()
|
|
506
|
+
});
|
|
507
|
+
var compatibilityGroupSchema = z.object({
|
|
508
|
+
skills: z.array(skillIdSchema).min(2),
|
|
509
|
+
reason: z.string()
|
|
510
|
+
});
|
|
511
|
+
var setupPairSchema = z.object({
|
|
512
|
+
setup: skillIdSchema,
|
|
513
|
+
configures: z.array(skillIdSchema).min(1),
|
|
532
514
|
reason: z.string()
|
|
533
515
|
});
|
|
534
516
|
var requireRuleSchema = z.object({
|
|
@@ -544,46 +526,41 @@ var alternativeGroupSchema = z.object({
|
|
|
544
526
|
var relationshipDefinitionsSchema = z.object({
|
|
545
527
|
conflicts: z.array(conflictRuleSchema),
|
|
546
528
|
discourages: z.array(discourageRuleSchema),
|
|
547
|
-
recommends: z.array(
|
|
529
|
+
recommends: z.array(recommendationSchema),
|
|
548
530
|
requires: z.array(requireRuleSchema),
|
|
549
|
-
alternatives: z.array(alternativeGroupSchema)
|
|
531
|
+
alternatives: z.array(alternativeGroupSchema),
|
|
532
|
+
compatibleWith: z.array(compatibilityGroupSchema).optional().default([]),
|
|
533
|
+
setupPairs: z.array(setupPairSchema).optional().default([])
|
|
550
534
|
});
|
|
551
535
|
var skillCategoriesFileSchema = z.object({
|
|
552
536
|
version: z.string(),
|
|
553
537
|
categories: z.record(z.string(), categoryDefinitionSchema).superRefine(
|
|
554
538
|
validateExtensibleRecordKeys(
|
|
555
|
-
|
|
539
|
+
CATEGORY_VALUES_SET,
|
|
556
540
|
customExtensions.categories,
|
|
557
541
|
"category key"
|
|
558
542
|
)
|
|
559
543
|
)
|
|
560
544
|
});
|
|
561
|
-
var perSkillRulesSchema = z.object({
|
|
562
|
-
compatibleWith: z.array(extensibleSkillIdSchema).optional(),
|
|
563
|
-
conflictsWith: z.array(extensibleSkillIdSchema).optional(),
|
|
564
|
-
requires: z.array(extensibleSkillIdSchema).optional(),
|
|
565
|
-
requiresSetup: z.array(extensibleSkillIdSchema).optional(),
|
|
566
|
-
providesSetupFor: z.array(extensibleSkillIdSchema).optional()
|
|
567
|
-
});
|
|
568
545
|
var skillRulesFileSchema = z.object({
|
|
569
546
|
version: z.string(),
|
|
570
|
-
|
|
571
|
-
relationships: relationshipDefinitionsSchema.optional(),
|
|
572
|
-
"per-skill": z.record(z.string(), perSkillRulesSchema).optional()
|
|
547
|
+
relationships: relationshipDefinitionsSchema.optional()
|
|
573
548
|
});
|
|
574
549
|
var localRawMetadataSchema = z.object({
|
|
575
550
|
/** Short name shown in the wizard grid (e.g., "my-custom-react") */
|
|
576
|
-
displayName: z.string()
|
|
551
|
+
displayName: z.string(),
|
|
552
|
+
/** Kebab-case short key for alias resolution (e.g., "react") */
|
|
553
|
+
slug: z.string(),
|
|
577
554
|
/** One-line description for the wizard */
|
|
578
555
|
cliDescription: z.string().optional(),
|
|
579
|
-
/**
|
|
556
|
+
/** Category to place this skill in (e.g., "web-framework") */
|
|
580
557
|
// Field accepts any string; cross-field validation in superRefine enforces strict/custom rules
|
|
581
|
-
category: z.string()
|
|
558
|
+
category: z.string(),
|
|
582
559
|
/** When an AI agent should invoke this skill */
|
|
583
560
|
usageGuidance: z.string().optional(),
|
|
584
561
|
tags: z.array(z.string()).optional(),
|
|
585
|
-
/**
|
|
586
|
-
domain: extensibleDomainSchema
|
|
562
|
+
/** Domain this skill belongs to (e.g., "web", "api", "cli") */
|
|
563
|
+
domain: extensibleDomainSchema,
|
|
587
564
|
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
588
565
|
custom: z.boolean().optional()
|
|
589
566
|
}).passthrough().superRefine(validateCategoryField);
|
|
@@ -603,7 +580,7 @@ var stackSchema = z.object({
|
|
|
603
580
|
id: z.string().min(1),
|
|
604
581
|
name: z.string().min(1),
|
|
605
582
|
description: z.string(),
|
|
606
|
-
/** Maps agent IDs to their
|
|
583
|
+
/** Maps agent IDs to their category-to-skill assignments */
|
|
607
584
|
agents: z.record(z.string(), stackAgentConfigSchema),
|
|
608
585
|
/** High-level philosophy guiding this stack's technology choices */
|
|
609
586
|
philosophy: z.string().optional()
|
|
@@ -693,7 +670,7 @@ var projectSourceConfigSchema = z.object({
|
|
|
693
670
|
ref: z.string().optional()
|
|
694
671
|
})
|
|
695
672
|
).optional(),
|
|
696
|
-
/** Skills explicitly bound to
|
|
673
|
+
/** Skills explicitly bound to categories via search (from Step Sources) */
|
|
697
674
|
boundSkills: z.array(boundSkillSchema).optional(),
|
|
698
675
|
/** Branding overrides for white-labeling the CLI */
|
|
699
676
|
branding: brandingConfigSchema.optional(),
|
|
@@ -701,11 +678,11 @@ var projectSourceConfigSchema = z.object({
|
|
|
701
678
|
skillsDir: z.string().optional(),
|
|
702
679
|
/** Custom agents directory override (default: "src/agents") */
|
|
703
680
|
agentsDir: z.string().optional(),
|
|
704
|
-
/** Custom stacks file path override (default: "config/stacks.
|
|
681
|
+
/** Custom stacks file path override (default: "config/stacks.ts") */
|
|
705
682
|
stacksFile: z.string().optional(),
|
|
706
|
-
/** Custom categories file path override (default: "config/skill-categories.
|
|
683
|
+
/** Custom categories file path override (default: "config/skill-categories.ts") */
|
|
707
684
|
categoriesFile: z.string().optional(),
|
|
708
|
-
/** Custom rules file path override (default: "config/skill-rules.
|
|
685
|
+
/** Custom rules file path override (default: "config/skill-rules.ts") */
|
|
709
686
|
rulesFile: z.string().optional()
|
|
710
687
|
}).passthrough();
|
|
711
688
|
var projectSourceConfigValidationSchema = z.object({
|
|
@@ -775,8 +752,8 @@ var skillFrontmatterValidationSchema = z.object({
|
|
|
775
752
|
"argument-hint": z.string().optional()
|
|
776
753
|
}).strict();
|
|
777
754
|
var metadataValidationSchema = z.object({
|
|
778
|
-
/** Domain-prefixed
|
|
779
|
-
category:
|
|
755
|
+
/** Domain-prefixed category (e.g., "web-framework") */
|
|
756
|
+
category: extensibleCategorySchema,
|
|
780
757
|
/** Author handle — must start with @ (e.g., "@vince") */
|
|
781
758
|
author: z.string().regex(/^@[a-z][a-z0-9-]*$/),
|
|
782
759
|
/** Short display name for the wizard grid (max 30 chars) */
|
|
@@ -785,13 +762,10 @@ var metadataValidationSchema = z.object({
|
|
|
785
762
|
cliDescription: z.string().min(1).max(60),
|
|
786
763
|
/** When an AI agent should invoke this skill (min 10 chars to ensure usefulness) */
|
|
787
764
|
usageGuidance: z.string().min(10),
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
conflictsWith: z.array(z.string().min(1)).optional(),
|
|
765
|
+
/** Kebab-case short key for alias resolution, search, and relationship rules */
|
|
766
|
+
slug: z.string().regex(/^[a-z][a-z0-9-]*$/).min(1).max(50),
|
|
791
767
|
/** Searchable tags — kebab-case only */
|
|
792
768
|
tags: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/)).optional(),
|
|
793
|
-
requiresSetup: z.array(z.string().min(1)).optional(),
|
|
794
|
-
providesSetupFor: z.array(z.string().min(1)).optional(),
|
|
795
769
|
/** 7-char hex SHA of skill content (for change detection) */
|
|
796
770
|
contentHash: z.string().regex(/^[a-f0-9]{7}$/).optional(),
|
|
797
771
|
/** ISO date of last update */
|
|
@@ -809,7 +783,7 @@ var metadataValidationSchema = z.object({
|
|
|
809
783
|
/** ISO date of the fork */
|
|
810
784
|
date: z.string()
|
|
811
785
|
}).optional(),
|
|
812
|
-
/**
|
|
786
|
+
/** Domain assignment from metadata */
|
|
813
787
|
domain: extensibleDomainSchema.optional(),
|
|
814
788
|
/** True if this skill was created outside the CLI's built-in vocabulary */
|
|
815
789
|
custom: z.boolean().optional()
|
|
@@ -836,7 +810,7 @@ var stackConfigValidationSchema = z.object({
|
|
|
836
810
|
skills: z.array(stackSkillAssignmentSchema).min(1),
|
|
837
811
|
/** Agent IDs this stack compiles (at least one required) */
|
|
838
812
|
agents: z.array(z.string().regex(KEBAB_CASE_PATTERN)).min(1),
|
|
839
|
-
/** Per-agent skill assignments: { agentId: {
|
|
813
|
+
/** Per-agent skill assignments: { agentId: { category: [skillAssignment] } } */
|
|
840
814
|
agentSkills: z.record(z.string(), z.record(z.string(), z.array(stackSkillAssignmentSchema))).optional(),
|
|
841
815
|
/** High-level philosophy guiding technology choices */
|
|
842
816
|
philosophy: z.string().optional(),
|
|
@@ -930,12 +904,10 @@ export {
|
|
|
930
904
|
remove,
|
|
931
905
|
copy,
|
|
932
906
|
DOMAIN_VALUES,
|
|
933
|
-
|
|
907
|
+
CATEGORY_VALUES,
|
|
934
908
|
agentNameSchema,
|
|
935
|
-
skillDisplayNameSchema,
|
|
936
909
|
SKILL_ID_PATTERN,
|
|
937
910
|
isValidSkillId,
|
|
938
|
-
skillIdSchema,
|
|
939
911
|
extensibleDomainSchema,
|
|
940
912
|
categoryPathSchema,
|
|
941
913
|
hooksRecordSchema,
|
|
@@ -964,4 +936,4 @@ export {
|
|
|
964
936
|
warnUnknownFields,
|
|
965
937
|
extendSchemasWithCustomValues
|
|
966
938
|
};
|
|
967
|
-
//# sourceMappingURL=chunk-
|
|
939
|
+
//# sourceMappingURL=chunk-LWXRUR6B.js.map
|