@claude-collective/cli 0.26.1 → 0.29.4
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 +117 -0
- package/README.md +47 -13
- package/config/stacks.yaml +330 -93
- package/dist/chunk-56ERY7H7.js +29 -0
- package/dist/chunk-56ERY7H7.js.map +1 -0
- package/dist/{chunk-OBXAY23Y.js → chunk-5I6VY2E7.js} +5 -5
- package/dist/chunk-5I6VY2E7.js.map +1 -0
- package/dist/{chunk-324DM2L6.js → chunk-5WIHSJRO.js} +230 -65
- package/dist/chunk-5WIHSJRO.js.map +1 -0
- package/dist/{chunk-GGFOD5PK.js → chunk-6F3ZKDVE.js} +122 -66
- package/dist/chunk-6F3ZKDVE.js.map +1 -0
- package/dist/{chunk-DBRUQQUF.js → chunk-7GHTQSWI.js} +5 -1
- package/dist/{chunk-DBRUQQUF.js.map → chunk-7GHTQSWI.js.map} +1 -1
- package/dist/chunk-7ICBJZV2.js +63 -0
- package/dist/chunk-7ICBJZV2.js.map +1 -0
- package/dist/{chunk-3X5D7RM5.js → chunk-7UKQZSWT.js} +15 -4
- package/dist/chunk-7UKQZSWT.js.map +1 -0
- package/dist/{chunk-F4RD5FYM.js → chunk-A4T4YSV4.js} +5 -2
- package/dist/chunk-A4T4YSV4.js.map +1 -0
- package/dist/{chunk-VVYNZZUX.js → chunk-AG5YGYJT.js} +9 -5
- package/dist/chunk-AG5YGYJT.js.map +1 -0
- package/dist/chunk-AJFSCLJ7.js +81 -0
- package/dist/chunk-AJFSCLJ7.js.map +1 -0
- package/dist/{chunk-NQJ47R4N.js → chunk-CQZAKMPJ.js} +66 -14
- package/dist/chunk-CQZAKMPJ.js.map +1 -0
- package/dist/chunk-DIRH4PDF.js +24 -0
- package/dist/chunk-DIRH4PDF.js.map +1 -0
- package/dist/{chunk-HIQGK5XJ.js → chunk-DUIYVKFK.js} +123 -86
- package/dist/chunk-DUIYVKFK.js.map +1 -0
- package/dist/chunk-EP6J44I4.js +142 -0
- package/dist/chunk-EP6J44I4.js.map +1 -0
- package/dist/{chunk-2YMMJP4Z.js → chunk-EUPMWSM3.js} +92 -29
- package/dist/chunk-EUPMWSM3.js.map +1 -0
- package/dist/chunk-FUPBGSRA.js +66 -0
- package/dist/chunk-FUPBGSRA.js.map +1 -0
- package/dist/{chunk-U7HFKR74.js → chunk-FY5D4KIC.js} +5 -2
- package/dist/chunk-FY5D4KIC.js.map +1 -0
- package/dist/chunk-G5WXKKQM.js +233 -0
- package/dist/chunk-G5WXKKQM.js.map +1 -0
- package/dist/{chunk-KWYO3M5Q.js → chunk-GVVEPVR7.js} +25 -24
- package/dist/chunk-GVVEPVR7.js.map +1 -0
- package/dist/chunk-IFODQTCX.js +162 -0
- package/dist/chunk-IFODQTCX.js.map +1 -0
- package/dist/chunk-IQUBOWWU.js +366 -0
- package/dist/chunk-IQUBOWWU.js.map +1 -0
- package/dist/{chunk-ETCVEV3S.js → chunk-IRG52AN5.js} +242 -155
- package/dist/chunk-IRG52AN5.js.map +1 -0
- package/dist/chunk-MQAYAISQ.js +88 -0
- package/dist/chunk-MQAYAISQ.js.map +1 -0
- package/dist/{chunk-G35SYE6Z.js → chunk-N73GQTCK.js} +37 -104
- package/dist/chunk-N73GQTCK.js.map +1 -0
- package/dist/{chunk-H7SSBSPR.js → chunk-OA5RCL2L.js} +8 -5
- package/dist/chunk-OA5RCL2L.js.map +1 -0
- package/dist/{chunk-CZBNDP5B.js → chunk-PNXFJPXF.js} +3 -3
- package/dist/{chunk-MCTSHLAF.js → chunk-RI5QEK5W.js} +41 -14
- package/dist/chunk-RI5QEK5W.js.map +1 -0
- package/dist/chunk-RXC7AF7N.js +31 -0
- package/dist/chunk-RXC7AF7N.js.map +1 -0
- package/dist/{chunk-CQ7657GA.js → chunk-SSHG7MEE.js} +1248 -735
- package/dist/chunk-SSHG7MEE.js.map +1 -0
- package/dist/{chunk-4S4FCAA2.js → chunk-VTUPUKFD.js} +26 -31
- package/dist/chunk-VTUPUKFD.js.map +1 -0
- package/dist/{chunk-XENOESJZ.js → chunk-WLQUQXWO.js} +10 -67
- package/dist/chunk-WLQUQXWO.js.map +1 -0
- package/dist/chunk-WPED6CL3.js +105 -0
- package/dist/chunk-WPED6CL3.js.map +1 -0
- package/dist/{chunk-NT4K647L.js → chunk-XPMEGGJK.js} +97 -76
- package/dist/chunk-XPMEGGJK.js.map +1 -0
- package/dist/chunk-XZKVOPCR.js +75 -0
- package/dist/chunk-XZKVOPCR.js.map +1 -0
- package/dist/{chunk-ZW2PELOH.js → chunk-ZX5DM4D5.js} +106 -69
- package/dist/chunk-ZX5DM4D5.js.map +1 -0
- package/dist/commands/build/marketplace.js +21 -20
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +7 -11
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +8 -13
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +109 -135
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +4 -5
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +5 -6
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +4 -5
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +4 -5
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +5 -6
- package/dist/commands/config/unset-project.js +4 -5
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +26 -11
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +13 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +71 -42
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +34 -14
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +93 -52
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +27 -9
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +98 -48
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +10 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +8 -11
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +17 -18
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +23 -9
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +23 -20
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +28 -21
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +30 -22
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +103 -39
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +4 -5
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +4 -5
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +4 -5
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +4 -5
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.test.js +2 -2
- package/dist/components/common/confirm.test.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +4 -2
- package/dist/components/wizard/category-grid.js +3 -1
- package/dist/components/wizard/category-grid.test.js +63 -64
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +13 -0
- package/dist/components/wizard/help-modal.js +10 -0
- package/dist/components/wizard/help-modal.js.map +1 -0
- package/dist/components/wizard/menu-item.js +2 -1
- package/dist/components/wizard/search-modal.js +3 -1
- package/dist/components/wizard/search-modal.test.js +4 -2
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -1
- package/dist/components/wizard/section-progress.test.js +2 -1
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +6 -2
- package/dist/components/wizard/source-grid.test.js +49 -45
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +15 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-approach.js +8 -6
- package/dist/components/wizard/step-approach.test.js +11 -9
- package/dist/components/wizard/step-approach.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +9 -13
- package/dist/components/wizard/step-build.test.js +27 -45
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +2 -1
- package/dist/components/wizard/step-confirm.test.js +6 -5
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -1
- package/dist/components/wizard/step-refine.test.js +3 -2
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +8 -6
- package/dist/components/wizard/step-settings.test.js +12 -10
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +11 -9
- package/dist/components/wizard/step-sources.test.js +16 -15
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +9 -6
- package/dist/components/wizard/step-stack.test.js +15 -12
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -1
- package/dist/components/wizard/wizard-layout.js +7 -9
- package/dist/components/wizard/wizard-tabs.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +26 -20
- package/dist/config/stacks.yaml +330 -93
- package/dist/hooks/init.js +3 -4
- package/dist/hooks/init.js.map +1 -1
- package/dist/source-manager-TV2YGPAN.js +15 -0
- package/dist/source-manager-TV2YGPAN.js.map +1 -0
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +272 -25
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +2 -1
- package/src/schemas/agent-frontmatter.schema.json +84 -0
- package/src/schemas/agent.schema.json +93 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +113 -0
- package/src/schemas/plugin.schema.json +130 -0
- package/src/schemas/project-config.schema.json +125 -0
- package/src/schemas/project-source-config.schema.json +81 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/skills-matrix.schema.json +467 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +111 -0
- package/dist/chunk-2OW7FCIF.js +0 -197
- package/dist/chunk-2OW7FCIF.js.map +0 -1
- package/dist/chunk-2YMMJP4Z.js.map +0 -1
- package/dist/chunk-324DM2L6.js.map +0 -1
- package/dist/chunk-3X5D7RM5.js.map +0 -1
- package/dist/chunk-4S4FCAA2.js.map +0 -1
- package/dist/chunk-CQ7657GA.js.map +0 -1
- package/dist/chunk-ETCVEV3S.js.map +0 -1
- package/dist/chunk-F4RD5FYM.js.map +0 -1
- package/dist/chunk-G35SYE6Z.js.map +0 -1
- package/dist/chunk-GGFOD5PK.js.map +0 -1
- package/dist/chunk-H7SSBSPR.js.map +0 -1
- package/dist/chunk-HIQGK5XJ.js.map +0 -1
- package/dist/chunk-HWD32NP7.js +0 -19
- package/dist/chunk-HWD32NP7.js.map +0 -1
- package/dist/chunk-KWYO3M5Q.js.map +0 -1
- package/dist/chunk-MCTSHLAF.js.map +0 -1
- package/dist/chunk-NQJ47R4N.js.map +0 -1
- package/dist/chunk-NT4K647L.js.map +0 -1
- package/dist/chunk-O6ZTD7ZI.js +0 -70
- package/dist/chunk-O6ZTD7ZI.js.map +0 -1
- package/dist/chunk-OBXAY23Y.js.map +0 -1
- package/dist/chunk-TMED5DQ2.js +0 -210
- package/dist/chunk-TMED5DQ2.js.map +0 -1
- package/dist/chunk-U7HFKR74.js.map +0 -1
- package/dist/chunk-UEMRJI2K.js +0 -146
- package/dist/chunk-UEMRJI2K.js.map +0 -1
- package/dist/chunk-UNN7523L.js +0 -78
- package/dist/chunk-UNN7523L.js.map +0 -1
- package/dist/chunk-VVYNZZUX.js.map +0 -1
- package/dist/chunk-XENOESJZ.js.map +0 -1
- package/dist/chunk-ZW2PELOH.js.map +0 -1
- package/dist/source-manager-VWIIDTK5.js +0 -16
- /package/dist/{chunk-CZBNDP5B.js.map → chunk-PNXFJPXF.js.map} +0 -0
- /package/dist/{source-manager-VWIIDTK5.js.map → components/wizard/domain-selection.js.map} +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CLI_COLORS
|
|
4
|
+
} from "./chunk-IFODQTCX.js";
|
|
5
|
+
import {
|
|
6
|
+
init_esm_shims
|
|
7
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/components/wizard/help-modal.tsx
|
|
10
|
+
init_esm_shims();
|
|
11
|
+
import { Box, Text, useInput } from "ink";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
var GLOBAL_KEYS = {
|
|
14
|
+
title: "Navigation",
|
|
15
|
+
keys: [
|
|
16
|
+
{ key: "Arrow keys", description: "Move focus" },
|
|
17
|
+
{ key: "SPACE", description: "Toggle selection" },
|
|
18
|
+
{ key: "ENTER", description: "Confirm / continue" },
|
|
19
|
+
{ key: "ESC", description: "Go back" },
|
|
20
|
+
{ key: "TAB", description: "Jump to next section" }
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
var GLOBAL_TOGGLES = {
|
|
24
|
+
title: "Global Toggles",
|
|
25
|
+
keys: [
|
|
26
|
+
{ key: "E", description: "Toggle expert mode" },
|
|
27
|
+
{ key: "P", description: "Toggle plugin/local install mode" },
|
|
28
|
+
{ key: "?", description: "Show this help" }
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
var BUILD_KEYS = {
|
|
32
|
+
title: "Build Step",
|
|
33
|
+
keys: [
|
|
34
|
+
{ key: "D", description: "Toggle skill descriptions" },
|
|
35
|
+
{ key: "A", description: "Accept stack defaults (stack path only)" },
|
|
36
|
+
{ key: "h/j/k/l", description: "Vim-style navigation" }
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
var SOURCES_KEYS = {
|
|
40
|
+
title: "Sources Step",
|
|
41
|
+
keys: [{ key: "G", description: "Open source settings" }]
|
|
42
|
+
};
|
|
43
|
+
var STEP_SECTIONS = {
|
|
44
|
+
build: BUILD_KEYS,
|
|
45
|
+
sources: SOURCES_KEYS
|
|
46
|
+
};
|
|
47
|
+
var KEY_COLUMN_WIDTH = 14;
|
|
48
|
+
var HelpSectionView = ({ section }) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
49
|
+
/* @__PURE__ */ jsx(Text, { bold: true, underline: true, children: section.title }),
|
|
50
|
+
section.keys.map(({ key, description }) => /* @__PURE__ */ jsxs(Box, { children: [
|
|
51
|
+
/* @__PURE__ */ jsx(Box, { width: KEY_COLUMN_WIDTH, children: /* @__PURE__ */ jsxs(Text, { backgroundColor: "black", color: CLI_COLORS.UNFOCUSED, children: [
|
|
52
|
+
" ",
|
|
53
|
+
key,
|
|
54
|
+
" "
|
|
55
|
+
] }) }),
|
|
56
|
+
/* @__PURE__ */ jsx(Text, { children: description })
|
|
57
|
+
] }, key))
|
|
58
|
+
] });
|
|
59
|
+
var HelpModal = ({ currentStep, onClose }) => {
|
|
60
|
+
useInput(() => {
|
|
61
|
+
onClose();
|
|
62
|
+
});
|
|
63
|
+
const stepSection = STEP_SECTIONS[currentStep];
|
|
64
|
+
return /* @__PURE__ */ jsxs(
|
|
65
|
+
Box,
|
|
66
|
+
{
|
|
67
|
+
flexDirection: "column",
|
|
68
|
+
borderStyle: "single",
|
|
69
|
+
borderColor: CLI_COLORS.PRIMARY,
|
|
70
|
+
paddingX: 2,
|
|
71
|
+
paddingY: 1,
|
|
72
|
+
marginTop: 1,
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: CLI_COLORS.PRIMARY, children: "Keyboard Shortcuts" }),
|
|
75
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
76
|
+
/* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_KEYS }),
|
|
77
|
+
/* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_TOGGLES }),
|
|
78
|
+
stepSection && /* @__PURE__ */ jsx(HelpSectionView, { section: stepSection }),
|
|
79
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Press any key to close" })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
HelpModal
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=chunk-MQAYAISQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/help-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\ntype HelpSection = {\n title: string;\n keys: { key: string; description: string }[];\n};\n\nconst GLOBAL_KEYS: HelpSection = {\n title: \"Navigation\",\n keys: [\n { key: \"Arrow keys\", description: \"Move focus\" },\n { key: \"SPACE\", description: \"Toggle selection\" },\n { key: \"ENTER\", description: \"Confirm / continue\" },\n { key: \"ESC\", description: \"Go back\" },\n { key: \"TAB\", description: \"Jump to next section\" },\n ],\n};\n\nconst GLOBAL_TOGGLES: HelpSection = {\n title: \"Global Toggles\",\n keys: [\n { key: \"E\", description: \"Toggle expert mode\" },\n { key: \"P\", description: \"Toggle plugin/local install mode\" },\n { key: \"?\", description: \"Show this help\" },\n ],\n};\n\nconst BUILD_KEYS: HelpSection = {\n title: \"Build Step\",\n keys: [\n { key: \"D\", description: \"Toggle skill descriptions\" },\n { key: \"A\", description: \"Accept stack defaults (stack path only)\" },\n { key: \"h/j/k/l\", description: \"Vim-style navigation\" },\n ],\n};\n\nconst SOURCES_KEYS: HelpSection = {\n title: \"Sources Step\",\n keys: [{ key: \"G\", description: \"Open source settings\" }],\n};\n\nconst STEP_SECTIONS: Partial<Record<WizardStep, HelpSection>> = {\n build: BUILD_KEYS,\n sources: SOURCES_KEYS,\n};\n\nconst KEY_COLUMN_WIDTH = 14;\n\ntype HelpSectionViewProps = {\n section: HelpSection;\n};\n\nconst HelpSectionView: React.FC<HelpSectionViewProps> = ({ section }) => (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold underline>\n {section.title}\n </Text>\n {section.keys.map(({ key, description }) => (\n <Box key={key}>\n <Box width={KEY_COLUMN_WIDTH}>\n <Text backgroundColor=\"black\" color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {key}{\" \"}\n </Text>\n </Box>\n <Text>{description}</Text>\n </Box>\n ))}\n </Box>\n);\n\nexport type HelpModalProps = {\n currentStep: WizardStep;\n onClose: () => void;\n};\n\nexport const HelpModal: React.FC<HelpModalProps> = ({ currentStep, onClose }) => {\n useInput(() => {\n onClose();\n });\n\n const stepSection = STEP_SECTIONS[currentStep];\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={CLI_COLORS.PRIMARY}\n paddingX={2}\n paddingY={1}\n marginTop={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Keyboard Shortcuts\n </Text>\n <Text> </Text>\n\n <HelpSectionView section={GLOBAL_KEYS} />\n <HelpSectionView section={GLOBAL_TOGGLES} />\n {stepSection && <HelpSectionView section={stepSection} />}\n\n <Text dimColor>Press any key to close</Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,MAAM,gBAAgB;AAwDhC,cAMM,YANN;AA/CJ,IAAM,cAA2B;AAAA,EAC/B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,cAAc,aAAa,aAAa;AAAA,IAC/C,EAAE,KAAK,SAAS,aAAa,mBAAmB;AAAA,IAChD,EAAE,KAAK,SAAS,aAAa,qBAAqB;AAAA,IAClD,EAAE,KAAK,OAAO,aAAa,UAAU;AAAA,IACrC,EAAE,KAAK,OAAO,aAAa,uBAAuB;AAAA,EACpD;AACF;AAEA,IAAM,iBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,qBAAqB;AAAA,IAC9C,EAAE,KAAK,KAAK,aAAa,mCAAmC;AAAA,IAC5D,EAAE,KAAK,KAAK,aAAa,iBAAiB;AAAA,EAC5C;AACF;AAEA,IAAM,aAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,4BAA4B;AAAA,IACrD,EAAE,KAAK,KAAK,aAAa,0CAA0C;AAAA,IACnE,EAAE,KAAK,WAAW,aAAa,uBAAuB;AAAA,EACxD;AACF;AAEA,IAAM,eAA4B;AAAA,EAChC,OAAO;AAAA,EACP,MAAM,CAAC,EAAE,KAAK,KAAK,aAAa,uBAAuB,CAAC;AAC1D;AAEA,IAAM,gBAA0D;AAAA,EAC9D,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,mBAAmB;AAMzB,IAAM,kBAAkD,CAAC,EAAE,QAAQ,MACjE,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,sBAAC,QAAK,MAAI,MAAC,WAAS,MACjB,kBAAQ,OACX;AAAA,EACC,QAAQ,KAAK,IAAI,CAAC,EAAE,KAAK,YAAY,MACpC,qBAAC,OACC;AAAA,wBAAC,OAAI,OAAO,kBACV,+BAAC,QAAK,iBAAgB,SAAQ,OAAO,WAAW,WAC7C;AAAA;AAAA,MACA;AAAA,MAAK;AAAA,OACR,GACF;AAAA,IACA,oBAAC,QAAM,uBAAY;AAAA,OAPX,GAQV,CACD;AAAA,GACH;AAQK,IAAM,YAAsC,CAAC,EAAE,aAAa,QAAQ,MAAM;AAC/E,WAAS,MAAM;AACb,YAAQ;AAAA,EACV,CAAC;AAED,QAAM,cAAc,cAAc,WAAW;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAa,WAAW;AAAA,MACxB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MAEX;AAAA,4BAAC,QAAK,MAAI,MAAC,OAAO,WAAW,SAAS,gCAEtC;AAAA,QACA,oBAAC,QAAK,eAAC;AAAA,QAEP,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QACvC,oBAAC,mBAAgB,SAAS,gBAAgB;AAAA,QACzC,eAAe,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QAEvD,oBAAC,QAAK,UAAQ,MAAC,oCAAsB;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":[]}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
SourceGrid
|
|
4
|
-
} from "./chunk-ZW2PELOH.js";
|
|
5
2
|
import {
|
|
6
3
|
ViewTitle
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FY5D4KIC.js";
|
|
5
|
+
import {
|
|
6
|
+
SourceGrid
|
|
7
|
+
} from "./chunk-ZX5DM4D5.js";
|
|
8
8
|
import {
|
|
9
9
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IQUBOWWU.js";
|
|
11
11
|
import {
|
|
12
|
-
resolveAlias,
|
|
13
12
|
resolveAllSources,
|
|
14
13
|
searchExtraSources
|
|
15
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SSHG7MEE.js";
|
|
16
15
|
import {
|
|
17
|
-
|
|
18
|
-
} from "./chunk-
|
|
16
|
+
CLI_COLORS
|
|
17
|
+
} from "./chunk-IFODQTCX.js";
|
|
19
18
|
import {
|
|
20
19
|
init_esm_shims
|
|
21
20
|
} from "./chunk-AWKZ5BDL.js";
|
|
@@ -25,72 +24,6 @@ init_esm_shims();
|
|
|
25
24
|
import { useState, useCallback } from "react";
|
|
26
25
|
import { Box, Text, useInput } from "ink";
|
|
27
26
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
28
|
-
var DEFAULT_SOURCE_ID = "public";
|
|
29
|
-
var DEFAULT_SOURCE_LABEL = "Public";
|
|
30
|
-
var SOURCE_SORT_ORDER = {
|
|
31
|
-
local: 0,
|
|
32
|
-
public: 1,
|
|
33
|
-
private: 2
|
|
34
|
-
};
|
|
35
|
-
var SOURCE_DISPLAY_NAMES = {
|
|
36
|
-
public: "Public",
|
|
37
|
-
local: "Local"
|
|
38
|
-
};
|
|
39
|
-
function formatSourceLabel(source) {
|
|
40
|
-
const displayName = SOURCE_DISPLAY_NAMES[source.name] ?? source.name;
|
|
41
|
-
const prefix = source.installed ? "\u2713 " : "";
|
|
42
|
-
const versionSuffix = source.version ? ` \xB7 v${source.version}` : "";
|
|
43
|
-
return `${prefix}${displayName}${versionSuffix}`;
|
|
44
|
-
}
|
|
45
|
-
function getSkillAlias(skillId, matrix) {
|
|
46
|
-
const displayName = matrix.displayNames?.[skillId];
|
|
47
|
-
if (displayName) return displayName;
|
|
48
|
-
const segments = skillId.split("-");
|
|
49
|
-
const fallback = segments[segments.length - 1] || skillId;
|
|
50
|
-
warn(`No display name found for skill "${skillId}", using fallback alias "${fallback}"`);
|
|
51
|
-
return fallback;
|
|
52
|
-
}
|
|
53
|
-
function buildSourceRows(selectedTechnologies, matrix, sourceSelections, boundSkills) {
|
|
54
|
-
return selectedTechnologies.map((tech) => {
|
|
55
|
-
const skillId = resolveAlias(tech, matrix);
|
|
56
|
-
const skill = matrix.skills[skillId];
|
|
57
|
-
const selectedSource = sourceSelections[skillId] || skill?.activeSource?.name || DEFAULT_SOURCE_ID;
|
|
58
|
-
const alias = getSkillAlias(skillId, matrix);
|
|
59
|
-
const sortedSources = [...skill?.availableSources || []].sort(
|
|
60
|
-
(a, b) => (SOURCE_SORT_ORDER[a.type] ?? 3) - (SOURCE_SORT_ORDER[b.type] ?? 3)
|
|
61
|
-
);
|
|
62
|
-
const options = sortedSources.length > 0 ? sortedSources.map((source) => ({
|
|
63
|
-
id: source.name,
|
|
64
|
-
label: formatSourceLabel({
|
|
65
|
-
name: source.name,
|
|
66
|
-
version: source.version,
|
|
67
|
-
installed: source.installed
|
|
68
|
-
}),
|
|
69
|
-
selected: selectedSource === source.name,
|
|
70
|
-
installed: source.installed
|
|
71
|
-
})) : [
|
|
72
|
-
{
|
|
73
|
-
id: DEFAULT_SOURCE_ID,
|
|
74
|
-
label: DEFAULT_SOURCE_LABEL,
|
|
75
|
-
selected: selectedSource === DEFAULT_SOURCE_ID,
|
|
76
|
-
installed: false
|
|
77
|
-
}
|
|
78
|
-
];
|
|
79
|
-
const boundForAlias = boundSkills.filter((b) => b.boundTo === alias);
|
|
80
|
-
for (const bound of boundForAlias) {
|
|
81
|
-
options.push({
|
|
82
|
-
id: bound.sourceName,
|
|
83
|
-
label: formatSourceLabel({
|
|
84
|
-
name: bound.sourceName,
|
|
85
|
-
installed: false
|
|
86
|
-
}),
|
|
87
|
-
selected: selectedSource === bound.sourceName,
|
|
88
|
-
installed: false
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
return { skillId, displayName: alias, alias, options };
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
27
|
var StepSources = ({
|
|
95
28
|
matrix,
|
|
96
29
|
projectDir,
|
|
@@ -100,26 +33,15 @@ var StepSources = ({
|
|
|
100
33
|
const store = useWizardStore();
|
|
101
34
|
const [view, setView] = useState("choice");
|
|
102
35
|
const [choiceIndex, setChoiceIndex] = useState(0);
|
|
103
|
-
const [gridFocusedRow, setGridFocusedRow] = useState(0);
|
|
104
|
-
const [gridFocusedCol, setGridFocusedCol] = useState(0);
|
|
105
36
|
const [isGridSearching, setIsGridSearching] = useState(false);
|
|
106
37
|
const selectedTechnologies = store.getAllSelectedTechnologies();
|
|
107
|
-
const rows = buildSourceRows(
|
|
108
|
-
selectedTechnologies,
|
|
109
|
-
matrix,
|
|
110
|
-
store.sourceSelections,
|
|
111
|
-
store.boundSkills
|
|
112
|
-
);
|
|
38
|
+
const rows = store.buildSourceRows(matrix);
|
|
113
39
|
const handleGridSelect = useCallback(
|
|
114
40
|
(skillId, sourceId) => {
|
|
115
41
|
store.setSourceSelection(skillId, sourceId);
|
|
116
42
|
},
|
|
117
43
|
[store]
|
|
118
44
|
);
|
|
119
|
-
const handleGridFocusChange = useCallback((row, col) => {
|
|
120
|
-
setGridFocusedRow(row);
|
|
121
|
-
setGridFocusedCol(col);
|
|
122
|
-
}, []);
|
|
123
45
|
const handleSearch = useCallback(
|
|
124
46
|
async (alias) => {
|
|
125
47
|
if (!projectDir) return [];
|
|
@@ -147,7 +69,7 @@ var StepSources = ({
|
|
|
147
69
|
const handleSearchStateChange = useCallback((active) => {
|
|
148
70
|
setIsGridSearching(active);
|
|
149
71
|
}, []);
|
|
150
|
-
useInput((
|
|
72
|
+
useInput((_input, key) => {
|
|
151
73
|
if (view === "choice") {
|
|
152
74
|
if (key.return) {
|
|
153
75
|
if (choiceIndex === 0) {
|
|
@@ -181,10 +103,7 @@ var StepSources = ({
|
|
|
181
103
|
SourceGrid,
|
|
182
104
|
{
|
|
183
105
|
rows,
|
|
184
|
-
focusedRow: gridFocusedRow,
|
|
185
|
-
focusedCol: gridFocusedCol,
|
|
186
106
|
onSelect: handleGridSelect,
|
|
187
|
-
onFocusChange: handleGridFocusChange,
|
|
188
107
|
onSearch: handleSearch,
|
|
189
108
|
onBind: handleBind,
|
|
190
109
|
onSearchStateChange: handleSearchStateChange
|
|
@@ -200,7 +119,7 @@ var StepSources = ({
|
|
|
200
119
|
/* @__PURE__ */ jsxs(Text, { children: [
|
|
201
120
|
"Your stack includes",
|
|
202
121
|
" ",
|
|
203
|
-
/* @__PURE__ */ jsx(Text, { color:
|
|
122
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, bold: true, children: selectedTechnologies.length }),
|
|
204
123
|
" ",
|
|
205
124
|
"technologies."
|
|
206
125
|
] }),
|
|
@@ -209,16 +128,23 @@ var StepSources = ({
|
|
|
209
128
|
Box,
|
|
210
129
|
{
|
|
211
130
|
borderStyle: "round",
|
|
212
|
-
borderColor: isRecommendedSelected ?
|
|
131
|
+
borderColor: isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
|
|
213
132
|
paddingX: 2,
|
|
214
133
|
paddingY: 1,
|
|
215
134
|
marginBottom: 1,
|
|
216
135
|
children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
217
|
-
/* @__PURE__ */ jsxs(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
136
|
+
/* @__PURE__ */ jsxs(
|
|
137
|
+
Text,
|
|
138
|
+
{
|
|
139
|
+
color: isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
|
|
140
|
+
bold: isRecommendedSelected,
|
|
141
|
+
children: [
|
|
142
|
+
isRecommendedSelected ? ">" : "\u25CB",
|
|
143
|
+
" ",
|
|
144
|
+
hasLocalSkills ? "Use installed skill sources" : "Use all recommended skills (verified)"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
),
|
|
222
148
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
223
149
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: hasLocalSkills ? "Keep your current local and public skill selections." : "This is the fastest option. All skills are verified and" }),
|
|
224
150
|
!hasLocalSkills && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "maintained by Claude Collective." })
|
|
@@ -229,14 +155,21 @@ var StepSources = ({
|
|
|
229
155
|
Box,
|
|
230
156
|
{
|
|
231
157
|
borderStyle: "round",
|
|
232
|
-
borderColor: !isRecommendedSelected ?
|
|
158
|
+
borderColor: !isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
|
|
233
159
|
paddingX: 2,
|
|
234
160
|
paddingY: 1,
|
|
235
161
|
children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
236
|
-
/* @__PURE__ */ jsxs(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
162
|
+
/* @__PURE__ */ jsxs(
|
|
163
|
+
Text,
|
|
164
|
+
{
|
|
165
|
+
color: !isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
|
|
166
|
+
bold: !isRecommendedSelected,
|
|
167
|
+
children: [
|
|
168
|
+
!isRecommendedSelected ? ">" : "\u25CB",
|
|
169
|
+
" Customize skill sources"
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
),
|
|
240
173
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
241
174
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Choose alternative skills for each technology" })
|
|
242
175
|
] })
|
|
@@ -248,4 +181,4 @@ var StepSources = ({
|
|
|
248
181
|
export {
|
|
249
182
|
StepSources
|
|
250
183
|
};
|
|
251
|
-
//# sourceMappingURL=chunk-
|
|
184
|
+
//# sourceMappingURL=chunk-N73GQTCK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-sources.tsx"],"sourcesContent":["import React, { useState, useCallback } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type {\n BoundSkillCandidate,\n MergedSkillsMatrix,\n SkillAlias,\n SkillId,\n} from \"../../types/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { SourceGrid } from \"./source-grid.js\";\nimport { ViewTitle } from \"./view-title.js\";\nimport { searchExtraSources } from \"../../lib/loading/multi-source-loader.js\";\nimport { resolveAllSources } from \"../../lib/configuration/index.js\";\n\nexport type StepSourcesProps = {\n matrix: MergedSkillsMatrix;\n projectDir?: string;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype SourcesView = \"choice\" | \"customize\";\n\nexport const StepSources: React.FC<StepSourcesProps> = ({\n matrix,\n projectDir,\n onContinue,\n onBack,\n}) => {\n const store = useWizardStore();\n const [view, setView] = useState<SourcesView>(\"choice\");\n const [choiceIndex, setChoiceIndex] = useState(0);\n const [isGridSearching, setIsGridSearching] = useState(false);\n\n const selectedTechnologies = store.getAllSelectedTechnologies();\n const rows = store.buildSourceRows(matrix);\n\n const handleGridSelect = useCallback(\n (skillId: SkillId, sourceId: string) => {\n store.setSourceSelection(skillId, sourceId);\n },\n [store],\n );\n\n const handleSearch = useCallback(\n async (alias: SkillAlias): Promise<BoundSkillCandidate[]> => {\n if (!projectDir) return [];\n try {\n const sources = await resolveAllSources(projectDir);\n return await searchExtraSources(alias, sources.extras);\n } catch {\n return [];\n }\n },\n [projectDir],\n );\n\n const handleBind = useCallback(\n (candidate: BoundSkillCandidate) => {\n store.bindSkill({\n id: candidate.id,\n sourceUrl: candidate.sourceUrl,\n sourceName: candidate.sourceName,\n boundTo: candidate.alias,\n description: candidate.description,\n });\n },\n [store],\n );\n\n const handleSearchStateChange = useCallback((active: boolean) => {\n setIsGridSearching(active);\n }, []);\n\n useInput((_input, key) => {\n if (view === \"choice\") {\n if (key.return) {\n if (choiceIndex === 0) {\n // \"Use all recommended\" -> continue\n onContinue();\n } else {\n // \"Customize skill sources\" -> switch to grid view\n store.setCustomizeSources(true);\n setView(\"customize\");\n }\n }\n if (key.escape) {\n onBack();\n }\n if (key.upArrow || key.downArrow) {\n setChoiceIndex((prev) => (prev === 0 ? 1 : 0));\n }\n } else if (view === \"customize\") {\n // Don't handle Enter/Escape while search modal is open\n if (isGridSearching) return;\n\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n store.setCustomizeSources(false);\n setView(\"choice\");\n }\n }\n });\n\n if (view === \"customize\") {\n return (\n <Box flexDirection=\"column\" width=\"100%\">\n <ViewTitle>Customize skill sources</ViewTitle>\n <SourceGrid\n rows={rows}\n onSelect={handleGridSelect}\n onSearch={handleSearch}\n onBind={handleBind}\n onSearchStateChange={handleSearchStateChange}\n />\n </Box>\n );\n }\n\n const isRecommendedSelected = choiceIndex === 0;\n const hasLocalSkills = rows.some((row) =>\n row.options.some((o) => o.installed && o.id === \"local\"),\n );\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text>\n Your stack includes{\" \"}\n <Text color={CLI_COLORS.PRIMARY} bold>\n {selectedTechnologies.length}\n </Text>{\" \"}\n technologies.\n </Text>\n <Text> </Text>\n\n <Box\n borderStyle=\"round\"\n borderColor={isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n marginBottom={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isRecommendedSelected}\n >\n {isRecommendedSelected ? \">\" : \"\\u25CB\"}{\" \"}\n {hasLocalSkills\n ? \"Use installed skill sources\"\n : \"Use all recommended skills (verified)\"}\n </Text>\n <Text> </Text>\n <Text dimColor>\n {hasLocalSkills\n ? \"Keep your current local and public skill selections.\"\n : \"This is the fastest option. All skills are verified and\"}\n </Text>\n {!hasLocalSkills && <Text dimColor>maintained by Claude Collective.</Text>}\n </Box>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor={!isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={!isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={!isRecommendedSelected}\n >\n {!isRecommendedSelected ? \">\" : \"\\u25CB\"} Customize skill sources\n </Text>\n <Text> </Text>\n <Text dimColor>Choose alternative skills for each technology</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CLI_COLORS,
|
|
4
|
+
UI_SYMBOLS
|
|
5
|
+
} from "./chunk-IFODQTCX.js";
|
|
2
6
|
import {
|
|
3
7
|
init_esm_shims
|
|
4
8
|
} from "./chunk-AWKZ5BDL.js";
|
|
@@ -7,8 +11,7 @@ import {
|
|
|
7
11
|
init_esm_shims();
|
|
8
12
|
import { Box, Text } from "ink";
|
|
9
13
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
-
var CHEVRON =
|
|
11
|
-
var CHEVRON_SPACER = " ";
|
|
14
|
+
var { CHEVRON, CHEVRON_SPACER } = UI_SYMBOLS;
|
|
12
15
|
var MenuItem = ({
|
|
13
16
|
label,
|
|
14
17
|
description,
|
|
@@ -17,8 +20,8 @@ var MenuItem = ({
|
|
|
17
20
|
}) => {
|
|
18
21
|
const showCyan = isFocused || isActive;
|
|
19
22
|
return /* @__PURE__ */ jsxs(Box, { columnGap: 1, children: [
|
|
20
|
-
/* @__PURE__ */ jsx(Text, { color: isFocused ?
|
|
21
|
-
/* @__PURE__ */ jsx(Text, { bold: isFocused, color: showCyan ?
|
|
23
|
+
/* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: isFocused ? CHEVRON : CHEVRON_SPACER }),
|
|
24
|
+
/* @__PURE__ */ jsx(Text, { bold: isFocused, color: showCyan ? CLI_COLORS.PRIMARY : void 0, children: label }),
|
|
22
25
|
isFocused && description && /* @__PURE__ */ jsx(Text, { dimColor: true, children: ` ${description}` })
|
|
23
26
|
] });
|
|
24
27
|
};
|
|
@@ -26,4 +29,4 @@ var MenuItem = ({
|
|
|
26
29
|
export {
|
|
27
30
|
MenuItem
|
|
28
31
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-OA5RCL2L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/menu-item.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\n\nconst { CHEVRON, CHEVRON_SPACER } = UI_SYMBOLS;\n\ntype MenuItemProps = {\n label: string;\n description?: string;\n isFocused?: boolean;\n isActive?: boolean;\n};\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n label,\n description,\n isFocused = false,\n isActive = false,\n}) => {\n const showCyan = isFocused || isActive;\n\n return (\n <Box columnGap={1}>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {isFocused ? CHEVRON : CHEVRON_SPACER}\n </Text>\n <Text bold={isFocused} color={showCyan ? CLI_COLORS.PRIMARY : undefined}>\n {label}\n </Text>\n {isFocused && description && <Text dimColor>{` ${description}`}</Text>}\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAqBtB,SACE,KADF;AAlBJ,IAAM,EAAE,SAAS,eAAe,IAAI;AAS7B,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb,MAAM;AACJ,QAAM,WAAW,aAAa;AAE9B,SACE,qBAAC,OAAI,WAAW,GACd;AAAA,wBAAC,QAAK,OAAO,YAAY,WAAW,UAAU,QAC3C,sBAAY,UAAU,gBACzB;AAAA,IACA,oBAAC,QAAK,MAAM,WAAW,OAAO,WAAW,WAAW,UAAU,QAC3D,iBACH;AAAA,IACC,aAAa,eAAe,oBAAC,QAAK,UAAQ,MAAE,cAAI,WAAW,IAAG;AAAA,KACjE;AAEJ;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5I6VY2E7.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_SOURCE,
|
|
7
7
|
SOURCE_ENV_VAR,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
loadProjectSourceConfig,
|
|
11
11
|
resolveAgentsSource,
|
|
12
12
|
resolveSource
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-SSHG7MEE.js";
|
|
14
14
|
import {
|
|
15
15
|
init_esm_shims
|
|
16
16
|
} from "./chunk-AWKZ5BDL.js";
|
|
@@ -85,4 +85,4 @@ var ConfigShow = class _ConfigShow extends BaseCommand {
|
|
|
85
85
|
export {
|
|
86
86
|
ConfigShow
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-PNXFJPXF.js.map
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
CLI_COLORS
|
|
4
|
+
} from "./chunk-IFODQTCX.js";
|
|
2
5
|
import {
|
|
3
6
|
init_esm_shims
|
|
4
7
|
} from "./chunk-AWKZ5BDL.js";
|
|
@@ -14,7 +17,7 @@ var StepRefine = ({
|
|
|
14
17
|
onContinue,
|
|
15
18
|
onBack
|
|
16
19
|
}) => {
|
|
17
|
-
useInput((
|
|
20
|
+
useInput((_input, key) => {
|
|
18
21
|
if (key.return) {
|
|
19
22
|
onContinue();
|
|
20
23
|
}
|
|
@@ -30,7 +33,7 @@ var StepRefine = ({
|
|
|
30
33
|
/* @__PURE__ */ jsxs(Text, { children: [
|
|
31
34
|
"Your stack includes",
|
|
32
35
|
" ",
|
|
33
|
-
/* @__PURE__ */ jsx(Text, { color:
|
|
36
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, bold: true, children: technologyCount }),
|
|
34
37
|
" ",
|
|
35
38
|
"technologies."
|
|
36
39
|
] }),
|
|
@@ -39,15 +42,24 @@ var StepRefine = ({
|
|
|
39
42
|
Box,
|
|
40
43
|
{
|
|
41
44
|
borderStyle: "round",
|
|
42
|
-
borderColor: isRecommendedSelected ?
|
|
45
|
+
borderColor: isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
|
|
43
46
|
paddingX: 2,
|
|
44
47
|
paddingY: 1,
|
|
45
48
|
marginBottom: 1,
|
|
46
49
|
children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
47
|
-
/* @__PURE__ */ jsxs(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
/* @__PURE__ */ jsxs(
|
|
51
|
+
Text,
|
|
52
|
+
{
|
|
53
|
+
color: isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
|
|
54
|
+
bold: isRecommendedSelected,
|
|
55
|
+
children: [
|
|
56
|
+
isRecommendedSelected ? ">" : "\u25CB",
|
|
57
|
+
" Use all recommended skills (verified)",
|
|
58
|
+
" ",
|
|
59
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: isRecommendedSelected ? "(Selected)" : "(Not selected)" })
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
),
|
|
51
63
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
52
64
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "This is the fastest option. All skills are verified and" }),
|
|
53
65
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "maintained by Claude Collective." })
|
|
@@ -58,23 +70,38 @@ var StepRefine = ({
|
|
|
58
70
|
Box,
|
|
59
71
|
{
|
|
60
72
|
borderStyle: "round",
|
|
61
|
-
borderColor: !isRecommendedSelected ?
|
|
73
|
+
borderColor: !isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
|
|
62
74
|
paddingX: 2,
|
|
63
75
|
paddingY: 1,
|
|
64
76
|
children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
65
|
-
/* @__PURE__ */ jsxs(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
/* @__PURE__ */ jsxs(
|
|
78
|
+
Text,
|
|
79
|
+
{
|
|
80
|
+
color: !isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
|
|
81
|
+
bold: !isRecommendedSelected,
|
|
82
|
+
children: [
|
|
83
|
+
!isRecommendedSelected ? ">" : "\u25CB",
|
|
84
|
+
" Customize skill sources",
|
|
85
|
+
" ",
|
|
86
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: !isRecommendedSelected ? "(Selected)" : "(Not selected)" })
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
),
|
|
69
90
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
70
91
|
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Choose alternative skills for each technology" })
|
|
71
92
|
] })
|
|
72
93
|
}
|
|
73
|
-
)
|
|
94
|
+
),
|
|
95
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
96
|
+
"\u2191",
|
|
97
|
+
"/",
|
|
98
|
+
"\u2193",
|
|
99
|
+
" navigate ENTER continue ESC back"
|
|
100
|
+
] }) })
|
|
74
101
|
] });
|
|
75
102
|
};
|
|
76
103
|
|
|
77
104
|
export {
|
|
78
105
|
StepRefine
|
|
79
106
|
};
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-RI5QEK5W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-refine.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\nexport type RefineAction = \"all-recommended\" | \"customize\" | null;\n\nexport type StepRefineProps = {\n technologyCount: number;\n refineAction: RefineAction;\n onSelectAction: (action: \"all-recommended\" | \"customize\") => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\nexport const StepRefine: React.FC<StepRefineProps> = ({\n technologyCount,\n refineAction,\n onSelectAction,\n onContinue,\n onBack,\n}) => {\n useInput((_input, key) => {\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n onBack();\n }\n if (key.upArrow || key.downArrow) {\n onSelectAction(refineAction === \"all-recommended\" ? \"customize\" : \"all-recommended\");\n }\n });\n\n const isRecommendedSelected = refineAction === \"all-recommended\" || refineAction === null;\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text>\n Your stack includes{\" \"}\n <Text color={CLI_COLORS.PRIMARY} bold>\n {technologyCount}\n </Text>{\" \"}\n technologies.\n </Text>\n <Text> </Text>\n\n <Box\n borderStyle=\"round\"\n borderColor={isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n marginBottom={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isRecommendedSelected}\n >\n {isRecommendedSelected ? \">\" : \"○\"} Use all recommended skills (verified){\" \"}\n <Text dimColor>{isRecommendedSelected ? \"(Selected)\" : \"(Not selected)\"}</Text>\n </Text>\n <Text> </Text>\n <Text dimColor>This is the fastest option. All skills are verified and</Text>\n <Text dimColor>maintained by Claude Collective.</Text>\n </Box>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor={!isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={!isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={!isRecommendedSelected}\n >\n {!isRecommendedSelected ? \">\" : \"○\"} Customize skill sources{\" \"}\n <Text dimColor>{!isRecommendedSelected ? \"(Selected)\" : \"(Not selected)\"}</Text>\n </Text>\n <Text> </Text>\n <Text dimColor>Choose alternative skills for each technology</Text>\n </Box>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate ENTER continue ESC back\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,MAAM,gBAAgB;AAoC9B,SAEE,KAFF;AAvBC,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,iBAAW;AAAA,IACb;AACA,QAAI,IAAI,QAAQ;AACd,aAAO;AAAA,IACT;AACA,QAAI,IAAI,WAAW,IAAI,WAAW;AAChC,qBAAe,iBAAiB,oBAAoB,cAAc,iBAAiB;AAAA,IACrF;AAAA,EACF,CAAC;AAED,QAAM,wBAAwB,iBAAiB,qBAAqB,iBAAiB;AAErF,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GACpC;AAAA,yBAAC,QAAK;AAAA;AAAA,MACgB;AAAA,MACpB,oBAAC,QAAK,OAAO,WAAW,SAAS,MAAI,MAClC,2BACH;AAAA,MAAQ;AAAA,MAAI;AAAA,OAEd;AAAA,IACA,oBAAC,QAAK,eAAC;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACrE,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QAEd,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,wBAAwB,WAAW,UAAU;AAAA,cACpD,MAAM;AAAA,cAEL;AAAA,wCAAwB,MAAM;AAAA,gBAAI;AAAA,gBAAuC;AAAA,gBAC1E,oBAAC,QAAK,UAAQ,MAAE,kCAAwB,eAAe,kBAAiB;AAAA;AAAA;AAAA,UAC1E;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MAAC,qEAAuD;AAAA,UACtE,oBAAC,QAAK,UAAQ,MAAC,8CAAgC;AAAA,WACjD;AAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,CAAC,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACtE,UAAU;AAAA,QACV,UAAU;AAAA,QAEV,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,CAAC,wBAAwB,WAAW,UAAU;AAAA,cACrD,MAAM,CAAC;AAAA,cAEN;AAAA,iBAAC,wBAAwB,MAAM;AAAA,gBAAI;AAAA,gBAAyB;AAAA,gBAC7D,oBAAC,QAAK,UAAQ,MAAE,WAAC,wBAAwB,eAAe,kBAAiB;AAAA;AAAA;AAAA,UAC3E;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MAAC,2DAA6C;AAAA,WAC9D;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,OAAI,WAAW,GACd,+BAAC,QAAK,UAAQ,MACX;AAAA;AAAA,MAAS;AAAA,MAAE;AAAA,MAAS;AAAA,OACvB,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
|
+
|
|
6
|
+
// src/cli/components/hooks/use-text-input.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
import { useState, useCallback } from "react";
|
|
9
|
+
var MIN_PRINTABLE_CHAR_CODE = 32;
|
|
10
|
+
var MAX_PRINTABLE_CHAR_CODE = 126;
|
|
11
|
+
function useTextInput(initialValue = "") {
|
|
12
|
+
const [value, setValue] = useState(initialValue);
|
|
13
|
+
const handleInput = useCallback((input, key) => {
|
|
14
|
+
if (key.backspace || key.delete) {
|
|
15
|
+
setValue((prev) => prev.slice(0, -1));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!key.ctrl && !key.meta && input && input.length === 1) {
|
|
19
|
+
const charCode = input.charCodeAt(0);
|
|
20
|
+
if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {
|
|
21
|
+
setValue((prev) => prev + input);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}, []);
|
|
25
|
+
return { value, setValue, handleInput };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
useTextInput
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=chunk-RXC7AF7N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/hooks/use-text-input.ts"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { Key } from \"ink\";\n\nconst MIN_PRINTABLE_CHAR_CODE = 32;\nconst MAX_PRINTABLE_CHAR_CODE = 126;\n\ntype UseTextInputResult = {\n value: string;\n setValue: (value: string) => void;\n handleInput: (input: string, key: Key) => void;\n};\n\n/**\n * Encapsulates text input handling for terminal UIs:\n * backspace/delete to remove the last character, and\n * printable ASCII character filtering (codes 32-126).\n */\nexport function useTextInput(initialValue = \"\"): UseTextInputResult {\n const [value, setValue] = useState(initialValue);\n\n const handleInput = useCallback((input: string, key: Key) => {\n if (key.backspace || key.delete) {\n setValue((prev) => prev.slice(0, -1));\n return;\n }\n\n if (!key.ctrl && !key.meta && input && input.length === 1) {\n const charCode = input.charCodeAt(0);\n if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {\n setValue((prev) => prev + input);\n }\n }\n }, []);\n\n return { value, setValue, handleInput };\n}\n"],"mappings":";;;;;;AAAA;AAAA,SAAS,UAAU,mBAAmB;AAGtC,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;AAazB,SAAS,aAAa,eAAe,IAAwB;AAClE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAE/C,QAAM,cAAc,YAAY,CAAC,OAAe,QAAa;AAC3D,QAAI,IAAI,aAAa,IAAI,QAAQ;AAC/B,eAAS,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC;AACpC;AAAA,IACF;AAEA,QAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,QAAQ,SAAS,MAAM,WAAW,GAAG;AACzD,YAAM,WAAW,MAAM,WAAW,CAAC;AACnC,UAAI,YAAY,2BAA2B,YAAY,yBAAyB;AAC9E,iBAAS,CAAC,SAAS,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,OAAO,UAAU,YAAY;AACxC;","names":[]}
|