@claude-collective/cli 0.26.0 → 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 +125 -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-ZDREFYD2.js → chunk-5WIHSJRO.js} +234 -59
- 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-R7B63JAP.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-TDZE4TDG.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-4357L7VK.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-I3YYG5IO.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-ETQ3BPGU.js → chunk-SSHG7MEE.js} +1252 -728
- 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-R5KJVI54.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-3X5D7RM5.js.map +0 -1
- package/dist/chunk-4357L7VK.js.map +0 -1
- package/dist/chunk-4S4FCAA2.js.map +0 -1
- package/dist/chunk-7UPXT32F.js +0 -197
- package/dist/chunk-7UPXT32F.js.map +0 -1
- package/dist/chunk-ETCVEV3S.js.map +0 -1
- package/dist/chunk-ETQ3BPGU.js.map +0 -1
- package/dist/chunk-F4RD5FYM.js.map +0 -1
- package/dist/chunk-GGFOD5PK.js.map +0 -1
- package/dist/chunk-H7SSBSPR.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-O6ZTD7ZI.js +0 -70
- package/dist/chunk-O6ZTD7ZI.js.map +0 -1
- package/dist/chunk-OBXAY23Y.js.map +0 -1
- package/dist/chunk-R5KJVI54.js.map +0 -1
- package/dist/chunk-R7B63JAP.js.map +0 -1
- package/dist/chunk-TDZE4TDG.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-ZDREFYD2.js.map +0 -1
- package/dist/chunk-ZW2PELOH.js.map +0 -1
- package/dist/source-manager-EYO3F2DV.js +0 -16
- /package/dist/{chunk-I3YYG5IO.js.map → chunk-PNXFJPXF.js.map} +0 -0
- /package/dist/{source-manager-EYO3F2DV.js.map → components/wizard/domain-selection.js.map} +0 -0
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ViewTitle
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FY5D4KIC.js";
|
|
5
5
|
import {
|
|
6
6
|
MenuItem
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OA5RCL2L.js";
|
|
8
|
+
import {
|
|
9
|
+
useKeyboardNavigation
|
|
10
|
+
} from "./chunk-7ICBJZV2.js";
|
|
8
11
|
import {
|
|
9
12
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IQUBOWWU.js";
|
|
11
14
|
import {
|
|
12
15
|
init_esm_shims
|
|
13
16
|
} from "./chunk-AWKZ5BDL.js";
|
|
14
17
|
|
|
15
18
|
// src/cli/components/wizard/step-approach.tsx
|
|
16
19
|
init_esm_shims();
|
|
17
|
-
import {
|
|
18
|
-
import { Box,
|
|
20
|
+
import { useCallback } from "react";
|
|
21
|
+
import { Box, Text } from "ink";
|
|
19
22
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
-
var INITIAL_FOCUSED_INDEX = 0;
|
|
21
23
|
var APPROACH_OPTIONS = [
|
|
22
24
|
{
|
|
23
25
|
value: "stack",
|
|
24
|
-
label: "Use a
|
|
26
|
+
label: "Use a stack"
|
|
25
27
|
},
|
|
26
28
|
{
|
|
27
29
|
value: "scratch",
|
|
@@ -30,11 +32,9 @@ var APPROACH_OPTIONS = [
|
|
|
30
32
|
];
|
|
31
33
|
var StepApproach = () => {
|
|
32
34
|
const { setStep, setApproach } = useWizardStore();
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (key.return) {
|
|
37
|
-
const option = APPROACH_OPTIONS[focusedIndex];
|
|
35
|
+
const handleEnter = useCallback(
|
|
36
|
+
(index) => {
|
|
37
|
+
const option = APPROACH_OPTIONS[index];
|
|
38
38
|
if (option) {
|
|
39
39
|
if (option.value === "stack") {
|
|
40
40
|
setApproach("stack");
|
|
@@ -44,24 +44,25 @@ var StepApproach = () => {
|
|
|
44
44
|
setStep("stack");
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
if (key.downArrow || input === "j") {
|
|
54
|
-
setFocusedIndex((prev) => (prev + 1) % optionCount);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
47
|
+
},
|
|
48
|
+
[setApproach, setStep]
|
|
49
|
+
);
|
|
50
|
+
const { focusedIndex } = useKeyboardNavigation(APPROACH_OPTIONS.length, {
|
|
51
|
+
onEnter: handleEnter
|
|
57
52
|
});
|
|
58
53
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
59
54
|
/* @__PURE__ */ jsx(ViewTitle, { children: "How would you like to set up your stack?" }),
|
|
60
|
-
/* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: APPROACH_OPTIONS.map((option, index) => /* @__PURE__ */ jsx(MenuItem, { label: option.label, isFocused: index === focusedIndex }, option.value)) })
|
|
55
|
+
/* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: APPROACH_OPTIONS.map((option, index) => /* @__PURE__ */ jsx(MenuItem, { label: option.label, isFocused: index === focusedIndex }, option.value)) }),
|
|
56
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
57
|
+
"\u2191",
|
|
58
|
+
"/",
|
|
59
|
+
"\u2193",
|
|
60
|
+
" navigate ENTER select"
|
|
61
|
+
] }) })
|
|
61
62
|
] });
|
|
62
63
|
};
|
|
63
64
|
|
|
64
65
|
export {
|
|
65
66
|
StepApproach
|
|
66
67
|
};
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
68
|
+
//# sourceMappingURL=chunk-GVVEPVR7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-approach.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { useKeyboardNavigation } from \"../hooks/use-keyboard-navigation.js\";\nimport { MenuItem } from \"./menu-item.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\nconst APPROACH_OPTIONS = [\n {\n value: \"stack\",\n label: \"Use a stack\",\n },\n {\n value: \"scratch\",\n label: \"Start from scratch\",\n },\n] as const;\n\nexport const StepApproach: React.FC = () => {\n const { setStep, setApproach } = useWizardStore();\n\n const handleEnter = useCallback(\n (index: number) => {\n const option = APPROACH_OPTIONS[index];\n if (option) {\n if (option.value === \"stack\") {\n setApproach(\"stack\");\n setStep(\"stack\");\n } else if (option.value === \"scratch\") {\n setApproach(\"scratch\");\n setStep(\"stack\");\n }\n }\n },\n [setApproach, setStep],\n );\n\n const { focusedIndex } = useKeyboardNavigation(APPROACH_OPTIONS.length, {\n onEnter: handleEnter,\n });\n\n return (\n <Box flexDirection=\"column\">\n <ViewTitle>How would you like to set up your stack?</ViewTitle>\n <Box flexDirection=\"column\" marginTop={1}>\n {APPROACH_OPTIONS.map((option, index) => (\n <MenuItem key={option.value} label={option.label} isFocused={index === focusedIndex} />\n ))}\n </Box>\n <Box marginTop={1}>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate ENTER select\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,mBAAmB;AACnC,SAAS,KAAK,YAAY;AA0CpB,cAOE,YAPF;AApCN,IAAM,mBAAmB;AAAA,EACvB;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAEO,IAAM,eAAyB,MAAM;AAC1C,QAAM,EAAE,SAAS,YAAY,IAAI,eAAe;AAEhD,QAAM,cAAc;AAAA,IAClB,CAAC,UAAkB;AACjB,YAAM,SAAS,iBAAiB,KAAK;AACrC,UAAI,QAAQ;AACV,YAAI,OAAO,UAAU,SAAS;AAC5B,sBAAY,OAAO;AACnB,kBAAQ,OAAO;AAAA,QACjB,WAAW,OAAO,UAAU,WAAW;AACrC,sBAAY,SAAS;AACrB,kBAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,aAAa,OAAO;AAAA,EACvB;AAEA,QAAM,EAAE,aAAa,IAAI,sBAAsB,iBAAiB,QAAQ;AAAA,IACtE,SAAS;AAAA,EACX,CAAC;AAED,SACE,qBAAC,OAAI,eAAc,UACjB;AAAA,wBAAC,aAAU,sDAAwC;AAAA,IACnD,oBAAC,OAAI,eAAc,UAAS,WAAW,GACpC,2BAAiB,IAAI,CAAC,QAAQ,UAC7B,oBAAC,YAA4B,OAAO,OAAO,OAAO,WAAW,UAAU,gBAAxD,OAAO,KAA+D,CACtF,GACH;AAAA,IACA,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,162 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
|
+
|
|
6
|
+
// src/cli/consts.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
import path from "path";
|
|
9
|
+
import os from "os";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
var __dirname = path.dirname(__filename);
|
|
13
|
+
var isInDist = __dirname.includes("/dist");
|
|
14
|
+
var CLI_ROOT = isInDist ? path.resolve(__dirname, "..") : path.resolve(__dirname, "../..");
|
|
15
|
+
var PROJECT_ROOT = CLI_ROOT;
|
|
16
|
+
var CLAUDE_DIR = ".claude";
|
|
17
|
+
var CLAUDE_SRC_DIR = ".claude-src";
|
|
18
|
+
var PLUGINS_SUBDIR = "plugins";
|
|
19
|
+
var PLUGIN_MANIFEST_DIR = ".claude-plugin";
|
|
20
|
+
var PLUGIN_MANIFEST_FILE = "plugin.json";
|
|
21
|
+
var DEFAULT_PLUGIN_NAME = "claude-collective";
|
|
22
|
+
var CACHE_DIR = path.join(os.homedir(), ".cache", DEFAULT_PLUGIN_NAME);
|
|
23
|
+
var SKILLS_MATRIX_PATH = "config/skills-matrix.yaml";
|
|
24
|
+
var SKILLS_DIR_PATH = "src/skills";
|
|
25
|
+
var LOCAL_SKILLS_PATH = ".claude/skills";
|
|
26
|
+
var ARCHIVED_SKILLS_DIR_NAME = "_archived";
|
|
27
|
+
var DIRS = {
|
|
28
|
+
agents: "src/agents",
|
|
29
|
+
skills: "src/skills",
|
|
30
|
+
stacks: "src/stacks",
|
|
31
|
+
templates: "src/agents/_templates",
|
|
32
|
+
commands: "src/commands"
|
|
33
|
+
};
|
|
34
|
+
var STANDARD_FILES = {
|
|
35
|
+
SKILL_MD: "SKILL.md",
|
|
36
|
+
METADATA_YAML: "metadata.yaml",
|
|
37
|
+
METADATA_JSON: "metadata.json",
|
|
38
|
+
CONFIG_YAML: "config.yaml",
|
|
39
|
+
SKILLS_MATRIX_YAML: "skills-matrix.yaml",
|
|
40
|
+
AGENT_YAML: "agent.yaml",
|
|
41
|
+
PLUGIN_JSON: "plugin.json",
|
|
42
|
+
CLAUDE_MD: "CLAUDE.md",
|
|
43
|
+
REFERENCE_MD: "reference.md",
|
|
44
|
+
INTRO_MD: "intro.md",
|
|
45
|
+
WORKFLOW_MD: "workflow.md",
|
|
46
|
+
EXAMPLES_MD: "examples.md",
|
|
47
|
+
OUTPUT_FORMAT_MD: "output-format.md",
|
|
48
|
+
CRITICAL_REQUIREMENTS_MD: "critical-requirements.md",
|
|
49
|
+
CRITICAL_REMINDERS_MD: "critical-reminders.md"
|
|
50
|
+
};
|
|
51
|
+
var STANDARD_DIRS = {
|
|
52
|
+
EXAMPLES: "examples",
|
|
53
|
+
SCRIPTS: "scripts",
|
|
54
|
+
SKILLS: "skills"
|
|
55
|
+
};
|
|
56
|
+
var DEFAULT_VERSION = "1.0.0";
|
|
57
|
+
var DEFAULT_DISPLAY_VERSION = "0.0.0";
|
|
58
|
+
var SCHEMA_PKG_PREFIX = "https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas";
|
|
59
|
+
var SCHEMA_PATHS = {
|
|
60
|
+
projectConfig: `${SCHEMA_PKG_PREFIX}/project-config.schema.json`,
|
|
61
|
+
projectSourceConfig: `${SCHEMA_PKG_PREFIX}/project-source-config.schema.json`,
|
|
62
|
+
metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,
|
|
63
|
+
marketplace: `${SCHEMA_PKG_PREFIX}/marketplace.schema.json`
|
|
64
|
+
};
|
|
65
|
+
function yamlSchemaComment(schemaPath) {
|
|
66
|
+
return `# yaml-language-server: $schema=${schemaPath}`;
|
|
67
|
+
}
|
|
68
|
+
var YAML_FORMATTING = {
|
|
69
|
+
INDENT: 2,
|
|
70
|
+
LINE_WIDTH: 120,
|
|
71
|
+
/** lineWidth: 0 disables wrapping — used for metadata files */
|
|
72
|
+
LINE_WIDTH_NONE: 0
|
|
73
|
+
};
|
|
74
|
+
var UI_SYMBOLS = {
|
|
75
|
+
CHECKBOX_CHECKED: "[x]",
|
|
76
|
+
CHECKBOX_UNCHECKED: "[ ]",
|
|
77
|
+
CHEVRON: "\u276F",
|
|
78
|
+
CHEVRON_SPACER: " ",
|
|
79
|
+
SELECTED: "\u2713",
|
|
80
|
+
UNSELECTED: "\u25CB",
|
|
81
|
+
CURRENT: "\u25CF",
|
|
82
|
+
SKIPPED: "\u2013",
|
|
83
|
+
DISCOURAGED: "!",
|
|
84
|
+
DISABLED: "\u2013"
|
|
85
|
+
};
|
|
86
|
+
var UI_LAYOUT = {
|
|
87
|
+
MAX_VISIBLE_RESULTS: 10,
|
|
88
|
+
DESCRIPTION_WIDTH: 30,
|
|
89
|
+
COPIED_MESSAGE_TIMEOUT_MS: 2e3,
|
|
90
|
+
FALLBACK_MESSAGE_TIMEOUT_MS: 3e3
|
|
91
|
+
};
|
|
92
|
+
var GITHUB_SOURCE = {
|
|
93
|
+
HTTPS_PREFIX: "https://github.com/",
|
|
94
|
+
GITHUB_PREFIX: "github:",
|
|
95
|
+
GH_PREFIX: "gh:"
|
|
96
|
+
};
|
|
97
|
+
var DEFAULT_SKILLS_SUBDIR = "skills";
|
|
98
|
+
var HASH_PREFIX_LENGTH = 7;
|
|
99
|
+
var CACHE_HASH_LENGTH = 16;
|
|
100
|
+
var CACHE_READABLE_PREFIX_LENGTH = 32;
|
|
101
|
+
var ONE_MB = 1024 * 1024;
|
|
102
|
+
var MAX_MARKETPLACE_FILE_SIZE = 10 * ONE_MB;
|
|
103
|
+
var MAX_PLUGIN_FILE_SIZE = ONE_MB;
|
|
104
|
+
var MAX_CONFIG_FILE_SIZE = ONE_MB;
|
|
105
|
+
var MAX_JSON_NESTING_DEPTH = 10;
|
|
106
|
+
var MAX_MARKETPLACE_PLUGINS = 1e4;
|
|
107
|
+
var CLI_COLORS = {
|
|
108
|
+
PRIMARY: "cyan",
|
|
109
|
+
SUCCESS: "green",
|
|
110
|
+
ERROR: "red",
|
|
111
|
+
WARNING: "yellow",
|
|
112
|
+
INFO: "blue",
|
|
113
|
+
NEUTRAL: "gray",
|
|
114
|
+
FOCUS: "cyan",
|
|
115
|
+
UNFOCUSED: "white"
|
|
116
|
+
};
|
|
117
|
+
var DEFAULT_PRESELECTED_SKILLS = [
|
|
118
|
+
"meta-methodology-anti-over-engineering",
|
|
119
|
+
"meta-methodology-context-management",
|
|
120
|
+
"meta-methodology-improvement-protocol",
|
|
121
|
+
"meta-methodology-investigation-requirements",
|
|
122
|
+
"meta-methodology-success-criteria",
|
|
123
|
+
"meta-methodology-write-verification"
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
export {
|
|
127
|
+
PROJECT_ROOT,
|
|
128
|
+
CLAUDE_DIR,
|
|
129
|
+
CLAUDE_SRC_DIR,
|
|
130
|
+
PLUGINS_SUBDIR,
|
|
131
|
+
PLUGIN_MANIFEST_DIR,
|
|
132
|
+
PLUGIN_MANIFEST_FILE,
|
|
133
|
+
DEFAULT_PLUGIN_NAME,
|
|
134
|
+
CACHE_DIR,
|
|
135
|
+
SKILLS_MATRIX_PATH,
|
|
136
|
+
SKILLS_DIR_PATH,
|
|
137
|
+
LOCAL_SKILLS_PATH,
|
|
138
|
+
ARCHIVED_SKILLS_DIR_NAME,
|
|
139
|
+
DIRS,
|
|
140
|
+
STANDARD_FILES,
|
|
141
|
+
STANDARD_DIRS,
|
|
142
|
+
DEFAULT_VERSION,
|
|
143
|
+
DEFAULT_DISPLAY_VERSION,
|
|
144
|
+
SCHEMA_PATHS,
|
|
145
|
+
yamlSchemaComment,
|
|
146
|
+
YAML_FORMATTING,
|
|
147
|
+
UI_SYMBOLS,
|
|
148
|
+
UI_LAYOUT,
|
|
149
|
+
GITHUB_SOURCE,
|
|
150
|
+
DEFAULT_SKILLS_SUBDIR,
|
|
151
|
+
HASH_PREFIX_LENGTH,
|
|
152
|
+
CACHE_HASH_LENGTH,
|
|
153
|
+
CACHE_READABLE_PREFIX_LENGTH,
|
|
154
|
+
MAX_MARKETPLACE_FILE_SIZE,
|
|
155
|
+
MAX_PLUGIN_FILE_SIZE,
|
|
156
|
+
MAX_CONFIG_FILE_SIZE,
|
|
157
|
+
MAX_JSON_NESTING_DEPTH,
|
|
158
|
+
MAX_MARKETPLACE_PLUGINS,
|
|
159
|
+
CLI_COLORS,
|
|
160
|
+
DEFAULT_PRESELECTED_SKILLS
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=chunk-IFODQTCX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/consts.ts"],"sourcesContent":["import path from \"path\";\nimport os from \"os\";\nimport { fileURLToPath } from \"url\";\nimport type { SkillId } from \"./types/index.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// After tsup build, dist/ is flat, so we go up one level from dist/ to get CLI root\n// In development (src/cli/consts.ts), we go up two levels\nconst isInDist = __dirname.includes(\"/dist\");\nconst CLI_ROOT = isInDist ? path.resolve(__dirname, \"..\") : path.resolve(__dirname, \"../..\");\nexport const PROJECT_ROOT = CLI_ROOT;\n\nexport const CLAUDE_DIR = \".claude\";\nexport const CLAUDE_SRC_DIR = \".claude-src\";\nexport const PLUGINS_SUBDIR = \"plugins\";\nexport const PLUGIN_MANIFEST_DIR = \".claude-plugin\";\nexport const PLUGIN_MANIFEST_FILE = \"plugin.json\";\nexport const DEFAULT_PLUGIN_NAME = \"claude-collective\";\n\nexport const CACHE_DIR = path.join(os.homedir(), \".cache\", DEFAULT_PLUGIN_NAME);\n\nexport const SKILLS_MATRIX_PATH = \"config/skills-matrix.yaml\";\nexport const SKILLS_DIR_PATH = \"src/skills\";\nexport const LOCAL_SKILLS_PATH = \".claude/skills\";\nexport const ARCHIVED_SKILLS_DIR_NAME = \"_archived\";\n\nexport const DIRS = {\n agents: \"src/agents\",\n skills: \"src/skills\",\n stacks: \"src/stacks\",\n templates: \"src/agents/_templates\",\n commands: \"src/commands\",\n} as const;\n\nexport const STANDARD_FILES = {\n SKILL_MD: \"SKILL.md\",\n METADATA_YAML: \"metadata.yaml\",\n METADATA_JSON: \"metadata.json\",\n CONFIG_YAML: \"config.yaml\",\n SKILLS_MATRIX_YAML: \"skills-matrix.yaml\",\n AGENT_YAML: \"agent.yaml\",\n PLUGIN_JSON: \"plugin.json\",\n CLAUDE_MD: \"CLAUDE.md\",\n REFERENCE_MD: \"reference.md\",\n INTRO_MD: \"intro.md\",\n WORKFLOW_MD: \"workflow.md\",\n EXAMPLES_MD: \"examples.md\",\n OUTPUT_FORMAT_MD: \"output-format.md\",\n CRITICAL_REQUIREMENTS_MD: \"critical-requirements.md\",\n CRITICAL_REMINDERS_MD: \"critical-reminders.md\",\n} as const;\n\nexport const STANDARD_DIRS = {\n EXAMPLES: \"examples\",\n SCRIPTS: \"scripts\",\n SKILLS: \"skills\",\n} as const;\n\nexport const DEFAULT_VERSION = \"1.0.0\";\n\n// \"0.0.0\" indicates no version was explicitly set\nexport const DEFAULT_DISPLAY_VERSION = \"0.0.0\";\n\n// JSON Schema URLs for yaml-language-server $schema comments.\n// Uses raw.githubusercontent.com so schemas resolve without requiring the CLI as a dependency.\nconst SCHEMA_PKG_PREFIX =\n \"https://raw.githubusercontent.com/claude-collective/cli/main/src/schemas\";\n\nexport const SCHEMA_PATHS = {\n projectConfig: `${SCHEMA_PKG_PREFIX}/project-config.schema.json`,\n projectSourceConfig: `${SCHEMA_PKG_PREFIX}/project-source-config.schema.json`,\n metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,\n marketplace: `${SCHEMA_PKG_PREFIX}/marketplace.schema.json`,\n} as const;\n\n/** Generates a yaml-language-server schema comment for the top of YAML files. */\nexport function yamlSchemaComment(schemaPath: string): string {\n return `# yaml-language-server: $schema=${schemaPath}`;\n}\n\nexport const YAML_FORMATTING = {\n INDENT: 2,\n LINE_WIDTH: 120,\n /** lineWidth: 0 disables wrapping — used for metadata files */\n LINE_WIDTH_NONE: 0,\n} as const;\n\nexport const UI_SYMBOLS = {\n CHECKBOX_CHECKED: \"[x]\",\n CHECKBOX_UNCHECKED: \"[ ]\",\n CHEVRON: \"\\u276F\",\n CHEVRON_SPACER: \" \",\n SELECTED: \"\\u2713\",\n UNSELECTED: \"\\u25CB\",\n CURRENT: \"\\u25CF\",\n SKIPPED: \"\\u2013\",\n DISCOURAGED: \"!\",\n DISABLED: \"\\u2013\",\n} as const;\n\nexport const UI_LAYOUT = {\n MAX_VISIBLE_RESULTS: 10,\n DESCRIPTION_WIDTH: 30,\n COPIED_MESSAGE_TIMEOUT_MS: 2000,\n FALLBACK_MESSAGE_TIMEOUT_MS: 3000,\n} as const;\n\nexport const GITHUB_SOURCE = {\n HTTPS_PREFIX: \"https://github.com/\",\n GITHUB_PREFIX: \"github:\",\n GH_PREFIX: \"gh:\",\n} as const;\n\nexport const DEFAULT_SKILLS_SUBDIR = \"skills\";\n\nexport const HASH_PREFIX_LENGTH = 7;\n\n/** Hex chars from SHA-256 hash used in cache directory names (64 bits of collision resistance) */\nexport const CACHE_HASH_LENGTH = 16;\n\n/** Max chars of human-readable prefix in cache directory names (for debugging) */\nexport const CACHE_READABLE_PREFIX_LENGTH = 32;\n\n// File size limits for parsing boundaries (DoS prevention)\nconst ONE_MB = 1024 * 1024;\nexport const MAX_MARKETPLACE_FILE_SIZE = 10 * ONE_MB;\nexport const MAX_PLUGIN_FILE_SIZE = ONE_MB;\nexport const MAX_CONFIG_FILE_SIZE = ONE_MB;\n\n// JSON/YAML structural complexity limits\nexport const MAX_JSON_NESTING_DEPTH = 10;\nexport const MAX_MARKETPLACE_PLUGINS = 10_000;\n\nexport const CLI_COLORS = {\n PRIMARY: \"cyan\",\n SUCCESS: \"green\",\n ERROR: \"red\",\n WARNING: \"yellow\",\n INFO: \"blue\",\n NEUTRAL: \"gray\",\n FOCUS: \"cyan\",\n UNFOCUSED: \"white\",\n} as const;\n\n// Foundational methodology skills preselected by default in the wizard\nexport const DEFAULT_PRESELECTED_SKILLS: readonly SkillId[] = [\n \"meta-methodology-anti-over-engineering\",\n \"meta-methodology-context-management\",\n \"meta-methodology-improvement-protocol\",\n \"meta-methodology-investigation-requirements\",\n \"meta-methodology-success-criteria\",\n \"meta-methodology-write-verification\",\n];\n"],"mappings":";;;;;;AAAA;AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAG9B,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,KAAK,QAAQ,UAAU;AAIzC,IAAM,WAAW,UAAU,SAAS,OAAO;AAC3C,IAAM,WAAW,WAAW,KAAK,QAAQ,WAAW,IAAI,IAAI,KAAK,QAAQ,WAAW,OAAO;AACpF,IAAM,eAAe;AAErB,IAAM,aAAa;AACnB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAE5B,IAAM,YAAY,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,mBAAmB;AAEvE,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AAEjC,IAAM,OAAO;AAAA,EAClB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AACZ;AAEO,IAAM,iBAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,uBAAuB;AACzB;AAEO,IAAM,gBAAgB;AAAA,EAC3B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AACV;AAEO,IAAM,kBAAkB;AAGxB,IAAM,0BAA0B;AAIvC,IAAM,oBACJ;AAEK,IAAM,eAAe;AAAA,EAC1B,eAAe,GAAG,iBAAiB;AAAA,EACnC,qBAAqB,GAAG,iBAAiB;AAAA,EACzC,UAAU,GAAG,iBAAiB;AAAA,EAC9B,aAAa,GAAG,iBAAiB;AACnC;AAGO,SAAS,kBAAkB,YAA4B;AAC5D,SAAO,mCAAmC,UAAU;AACtD;AAEO,IAAM,kBAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,YAAY;AAAA;AAAA,EAEZ,iBAAiB;AACnB;AAEO,IAAM,aAAa;AAAA,EACxB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AACZ;AAEO,IAAM,YAAY;AAAA,EACvB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,2BAA2B;AAAA,EAC3B,6BAA6B;AAC/B;AAEO,IAAM,gBAAgB;AAAA,EAC3B,cAAc;AAAA,EACd,eAAe;AAAA,EACf,WAAW;AACb;AAEO,IAAM,wBAAwB;AAE9B,IAAM,qBAAqB;AAG3B,IAAM,oBAAoB;AAG1B,IAAM,+BAA+B;AAG5C,IAAM,SAAS,OAAO;AACf,IAAM,4BAA4B,KAAK;AACvC,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAG7B,IAAM,yBAAyB;AAC/B,IAAM,0BAA0B;AAEhC,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AACb;AAGO,IAAM,6BAAiD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
resolveAlias,
|
|
4
|
+
typedEntries,
|
|
5
|
+
typedKeys
|
|
6
|
+
} from "./chunk-SSHG7MEE.js";
|
|
7
|
+
import {
|
|
8
|
+
warn
|
|
9
|
+
} from "./chunk-5WIHSJRO.js";
|
|
10
|
+
import {
|
|
11
|
+
DEFAULT_PRESELECTED_SKILLS
|
|
12
|
+
} from "./chunk-IFODQTCX.js";
|
|
13
|
+
import {
|
|
14
|
+
init_esm_shims
|
|
15
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
16
|
+
|
|
17
|
+
// src/cli/stores/wizard-store.ts
|
|
18
|
+
init_esm_shims();
|
|
19
|
+
import { create } from "zustand";
|
|
20
|
+
var ALL_DOMAINS = ["web", "web-extras", "api", "cli", "mobile", "shared"];
|
|
21
|
+
var DEFAULT_SOURCE_ID = "public";
|
|
22
|
+
var DEFAULT_SOURCE_LABEL = "Public";
|
|
23
|
+
var SOURCE_SORT_ORDER = {
|
|
24
|
+
local: 0,
|
|
25
|
+
public: 1,
|
|
26
|
+
private: 2
|
|
27
|
+
};
|
|
28
|
+
var SOURCE_DISPLAY_NAMES = {
|
|
29
|
+
public: "Public",
|
|
30
|
+
local: "Local"
|
|
31
|
+
};
|
|
32
|
+
var DEFAULT_SORT_PRIORITY = 3;
|
|
33
|
+
function formatSourceLabel(source) {
|
|
34
|
+
const displayName = SOURCE_DISPLAY_NAMES[source.name] ?? source.name;
|
|
35
|
+
const prefix = source.installed ? "\u2713 " : "";
|
|
36
|
+
const versionSuffix = source.version ? ` \xB7 v${source.version}` : "";
|
|
37
|
+
return `${prefix}${displayName}${versionSuffix}`;
|
|
38
|
+
}
|
|
39
|
+
function resolveSkillForPopulation(skillId, skills, categories) {
|
|
40
|
+
const skill = skills[skillId];
|
|
41
|
+
if (!skill?.category || !skill.displayName) {
|
|
42
|
+
warn(
|
|
43
|
+
`Installed skill '${skillId}' is missing from the marketplace \u2014 it may have been removed or renamed`
|
|
44
|
+
);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const subcat = skill.category;
|
|
48
|
+
const domain = categories[subcat]?.domain;
|
|
49
|
+
if (!domain) {
|
|
50
|
+
warn(`Installed skill '${skillId}' has unknown category '${skill.category}' \u2014 skipping`);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return { domain, subcat, techId: skill.displayName };
|
|
54
|
+
}
|
|
55
|
+
function buildBoundSkillOptions(boundSkills, alias, selectedSource) {
|
|
56
|
+
return boundSkills.filter((b) => b.boundTo === alias).map((bound) => ({
|
|
57
|
+
id: bound.sourceName,
|
|
58
|
+
label: formatSourceLabel({
|
|
59
|
+
name: bound.sourceName,
|
|
60
|
+
installed: false
|
|
61
|
+
}),
|
|
62
|
+
selected: selectedSource === bound.sourceName,
|
|
63
|
+
installed: false
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
function getSkillAlias(skillId, matrix) {
|
|
67
|
+
const displayName = matrix.displayNames?.[skillId];
|
|
68
|
+
if (displayName) return displayName;
|
|
69
|
+
const segments = skillId.split("-");
|
|
70
|
+
const fallback = segments[segments.length - 1] || skillId;
|
|
71
|
+
warn(`No display name found for skill '${skillId}', using fallback alias '${fallback}'`);
|
|
72
|
+
return fallback;
|
|
73
|
+
}
|
|
74
|
+
var createInitialState = () => ({
|
|
75
|
+
step: "approach",
|
|
76
|
+
approach: null,
|
|
77
|
+
selectedStackId: null,
|
|
78
|
+
stackAction: null,
|
|
79
|
+
selectedDomains: [],
|
|
80
|
+
currentDomainIndex: 0,
|
|
81
|
+
domainSelections: {},
|
|
82
|
+
showDescriptions: false,
|
|
83
|
+
expertMode: false,
|
|
84
|
+
installMode: "local",
|
|
85
|
+
sourceSelections: {},
|
|
86
|
+
customizeSources: false,
|
|
87
|
+
showSettings: false,
|
|
88
|
+
showHelp: false,
|
|
89
|
+
enabledSources: {},
|
|
90
|
+
boundSkills: [],
|
|
91
|
+
history: []
|
|
92
|
+
});
|
|
93
|
+
var useWizardStore = create((set, get) => ({
|
|
94
|
+
...createInitialState(),
|
|
95
|
+
setStep: (step) => set((state) => ({
|
|
96
|
+
step,
|
|
97
|
+
history: [...state.history, state.step]
|
|
98
|
+
})),
|
|
99
|
+
setApproach: (approach) => set({ approach }),
|
|
100
|
+
selectStack: (stackId) => set({ selectedStackId: stackId }),
|
|
101
|
+
setStackAction: (action) => set({ stackAction: action }),
|
|
102
|
+
populateFromStack: (stack, categories) => set(() => {
|
|
103
|
+
const domainSelections = {};
|
|
104
|
+
const domains = /* @__PURE__ */ new Set();
|
|
105
|
+
for (const agentConfig of Object.values(stack.agents)) {
|
|
106
|
+
for (const [subcat, assignments] of typedEntries(
|
|
107
|
+
agentConfig
|
|
108
|
+
)) {
|
|
109
|
+
const category = categories[subcat];
|
|
110
|
+
const domain = category?.domain;
|
|
111
|
+
if (!domain || !assignments) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
domains.add(domain);
|
|
115
|
+
if (!domainSelections[domain]) {
|
|
116
|
+
domainSelections[domain] = {};
|
|
117
|
+
}
|
|
118
|
+
if (!domainSelections[domain][subcat]) {
|
|
119
|
+
domainSelections[domain][subcat] = [];
|
|
120
|
+
}
|
|
121
|
+
for (const assignment of assignments) {
|
|
122
|
+
if (!domainSelections[domain][subcat].includes(assignment.id)) {
|
|
123
|
+
domainSelections[domain][subcat].push(assignment.id);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
domainSelections,
|
|
130
|
+
selectedDomains: ALL_DOMAINS
|
|
131
|
+
};
|
|
132
|
+
}),
|
|
133
|
+
populateFromSkillIds: (skillIds, skills, categories) => set(() => {
|
|
134
|
+
const domainSelections = {};
|
|
135
|
+
let skippedCount = 0;
|
|
136
|
+
for (const skillId of skillIds) {
|
|
137
|
+
const resolved = resolveSkillForPopulation(skillId, skills, categories);
|
|
138
|
+
if (!resolved) {
|
|
139
|
+
skippedCount++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const { domain, subcat, techId } = resolved;
|
|
143
|
+
if (!domainSelections[domain]) domainSelections[domain] = {};
|
|
144
|
+
if (!domainSelections[domain][subcat]) domainSelections[domain][subcat] = [];
|
|
145
|
+
if (!domainSelections[domain][subcat].includes(techId)) {
|
|
146
|
+
domainSelections[domain][subcat].push(techId);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (skippedCount > 0) {
|
|
150
|
+
warn(`${skippedCount} installed skill(s) could not be resolved and were skipped`);
|
|
151
|
+
}
|
|
152
|
+
return { domainSelections, selectedDomains: ALL_DOMAINS };
|
|
153
|
+
}),
|
|
154
|
+
toggleDomain: (domain) => set((state) => {
|
|
155
|
+
const isSelected = state.selectedDomains.includes(domain);
|
|
156
|
+
return {
|
|
157
|
+
selectedDomains: isSelected ? state.selectedDomains.filter((d) => d !== domain) : [...state.selectedDomains, domain]
|
|
158
|
+
};
|
|
159
|
+
}),
|
|
160
|
+
toggleTechnology: (domain, subcategory, technology, exclusive) => set((state) => {
|
|
161
|
+
const currentSelections = state.domainSelections[domain]?.[subcategory] || [];
|
|
162
|
+
const isSelected = currentSelections.includes(technology);
|
|
163
|
+
let newSelections;
|
|
164
|
+
if (exclusive) {
|
|
165
|
+
newSelections = isSelected ? [] : [technology];
|
|
166
|
+
} else {
|
|
167
|
+
newSelections = isSelected ? currentSelections.filter((t) => t !== technology) : [...currentSelections, technology];
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
domainSelections: {
|
|
171
|
+
...state.domainSelections,
|
|
172
|
+
[domain]: {
|
|
173
|
+
...state.domainSelections[domain],
|
|
174
|
+
[subcategory]: newSelections
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}),
|
|
179
|
+
nextDomain: () => {
|
|
180
|
+
const state = get();
|
|
181
|
+
if (state.currentDomainIndex < state.selectedDomains.length - 1) {
|
|
182
|
+
set({
|
|
183
|
+
currentDomainIndex: state.currentDomainIndex + 1
|
|
184
|
+
});
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
},
|
|
189
|
+
prevDomain: () => {
|
|
190
|
+
const state = get();
|
|
191
|
+
if (state.currentDomainIndex > 0) {
|
|
192
|
+
set({
|
|
193
|
+
currentDomainIndex: state.currentDomainIndex - 1
|
|
194
|
+
});
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
return false;
|
|
198
|
+
},
|
|
199
|
+
toggleShowDescriptions: () => set((state) => ({ showDescriptions: !state.showDescriptions })),
|
|
200
|
+
toggleExpertMode: () => set((state) => ({ expertMode: !state.expertMode })),
|
|
201
|
+
toggleInstallMode: () => set((state) => ({
|
|
202
|
+
installMode: state.installMode === "plugin" ? "local" : "plugin"
|
|
203
|
+
})),
|
|
204
|
+
setSourceSelection: (skillId, sourceId) => set((state) => {
|
|
205
|
+
if (!skillId) {
|
|
206
|
+
warn("Ignoring setSourceSelection call with empty skillId");
|
|
207
|
+
return state;
|
|
208
|
+
}
|
|
209
|
+
if (!sourceId) {
|
|
210
|
+
warn(`Ignoring setSourceSelection call with empty sourceId for skill '${skillId}'`);
|
|
211
|
+
return state;
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
sourceSelections: { ...state.sourceSelections, [skillId]: sourceId }
|
|
215
|
+
};
|
|
216
|
+
}),
|
|
217
|
+
setCustomizeSources: (customize) => set({ customizeSources: customize }),
|
|
218
|
+
toggleSettings: () => set((state) => ({ showSettings: !state.showSettings })),
|
|
219
|
+
toggleHelp: () => set((state) => ({ showHelp: !state.showHelp })),
|
|
220
|
+
setEnabledSources: (sources) => {
|
|
221
|
+
const invalidKeys = Object.keys(sources).filter((key) => !key.trim());
|
|
222
|
+
if (invalidKeys.length > 0) {
|
|
223
|
+
warn("Ignoring setEnabledSources call with empty source name(s)");
|
|
224
|
+
}
|
|
225
|
+
const validSources = Object.fromEntries(Object.entries(sources).filter(([key]) => key.trim()));
|
|
226
|
+
return set({ enabledSources: validSources });
|
|
227
|
+
},
|
|
228
|
+
bindSkill: (skill) => set((state) => {
|
|
229
|
+
const exists = state.boundSkills.some(
|
|
230
|
+
(b) => b.id === skill.id && b.sourceUrl === skill.sourceUrl
|
|
231
|
+
);
|
|
232
|
+
if (exists) {
|
|
233
|
+
warn(`Skill '${skill.id}' from '${skill.sourceUrl}' is already bound \u2014 skipping duplicate`);
|
|
234
|
+
return state;
|
|
235
|
+
}
|
|
236
|
+
return { boundSkills: [...state.boundSkills, skill] };
|
|
237
|
+
}),
|
|
238
|
+
goBack: () => set((state) => {
|
|
239
|
+
const history = [...state.history];
|
|
240
|
+
const previousStep = history.pop();
|
|
241
|
+
return {
|
|
242
|
+
step: previousStep || "approach",
|
|
243
|
+
history
|
|
244
|
+
};
|
|
245
|
+
}),
|
|
246
|
+
reset: () => set(createInitialState()),
|
|
247
|
+
getAllSelectedTechnologies: () => {
|
|
248
|
+
const state = get();
|
|
249
|
+
const technologies = [];
|
|
250
|
+
for (const domain of typedKeys(state.domainSelections)) {
|
|
251
|
+
const domainSel = state.domainSelections[domain];
|
|
252
|
+
if (!domainSel) continue;
|
|
253
|
+
for (const subcategory of typedKeys(domainSel)) {
|
|
254
|
+
const techs = domainSel[subcategory];
|
|
255
|
+
if (techs) technologies.push(...techs);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return technologies;
|
|
259
|
+
},
|
|
260
|
+
getSelectedTechnologiesPerDomain: () => {
|
|
261
|
+
const state = get();
|
|
262
|
+
const result = {};
|
|
263
|
+
for (const domain of typedKeys(state.domainSelections)) {
|
|
264
|
+
const domainSel = state.domainSelections[domain];
|
|
265
|
+
if (!domainSel) continue;
|
|
266
|
+
const techs = [];
|
|
267
|
+
for (const subcategory of typedKeys(domainSel)) {
|
|
268
|
+
const subTechs = domainSel[subcategory];
|
|
269
|
+
if (subTechs) techs.push(...subTechs);
|
|
270
|
+
}
|
|
271
|
+
if (techs.length > 0) {
|
|
272
|
+
result[domain] = techs;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return result;
|
|
276
|
+
},
|
|
277
|
+
getCurrentDomain: () => {
|
|
278
|
+
const state = get();
|
|
279
|
+
return state.selectedDomains[state.currentDomainIndex] || null;
|
|
280
|
+
},
|
|
281
|
+
getDefaultMethodologySkills: () => {
|
|
282
|
+
return [...DEFAULT_PRESELECTED_SKILLS];
|
|
283
|
+
},
|
|
284
|
+
getTechnologyCount: () => {
|
|
285
|
+
return get().getAllSelectedTechnologies().length;
|
|
286
|
+
},
|
|
287
|
+
getStepProgress: () => {
|
|
288
|
+
const state = get();
|
|
289
|
+
const completed = [];
|
|
290
|
+
const skipped = [];
|
|
291
|
+
if (state.step !== "approach") {
|
|
292
|
+
completed.push("approach");
|
|
293
|
+
}
|
|
294
|
+
if (state.step !== "approach" && state.step !== "stack") {
|
|
295
|
+
completed.push("stack");
|
|
296
|
+
}
|
|
297
|
+
if (state.approach === "stack" && state.selectedStackId && state.stackAction === "defaults") {
|
|
298
|
+
skipped.push("build");
|
|
299
|
+
skipped.push("sources");
|
|
300
|
+
} else if (state.step === "confirm") {
|
|
301
|
+
completed.push("build");
|
|
302
|
+
completed.push("sources");
|
|
303
|
+
} else if (state.step === "sources") {
|
|
304
|
+
completed.push("build");
|
|
305
|
+
}
|
|
306
|
+
return { completedSteps: completed, skippedSteps: skipped };
|
|
307
|
+
},
|
|
308
|
+
canGoToNextDomain: () => {
|
|
309
|
+
const state = get();
|
|
310
|
+
return state.currentDomainIndex < state.selectedDomains.length - 1;
|
|
311
|
+
},
|
|
312
|
+
canGoToPreviousDomain: () => {
|
|
313
|
+
const state = get();
|
|
314
|
+
return state.currentDomainIndex > 0;
|
|
315
|
+
},
|
|
316
|
+
getParentDomain: (domain, matrix) => {
|
|
317
|
+
const cat = Object.values(matrix.categories).find(
|
|
318
|
+
(c) => c.domain === domain && c.parent_domain
|
|
319
|
+
);
|
|
320
|
+
return cat?.parent_domain;
|
|
321
|
+
},
|
|
322
|
+
getParentDomainSelections: (domain, matrix) => {
|
|
323
|
+
const state = get();
|
|
324
|
+
const parentDomain = get().getParentDomain(domain, matrix);
|
|
325
|
+
if (!parentDomain) return void 0;
|
|
326
|
+
return state.domainSelections[parentDomain];
|
|
327
|
+
},
|
|
328
|
+
buildSourceRows: (matrix) => {
|
|
329
|
+
const state = get();
|
|
330
|
+
const selectedTechnologies = get().getAllSelectedTechnologies();
|
|
331
|
+
const { sourceSelections, boundSkills } = state;
|
|
332
|
+
return selectedTechnologies.map((tech) => {
|
|
333
|
+
const skillId = resolveAlias(tech, matrix);
|
|
334
|
+
const skill = matrix.skills[skillId];
|
|
335
|
+
const selectedSource = sourceSelections[skillId] || skill?.activeSource?.name || DEFAULT_SOURCE_ID;
|
|
336
|
+
const alias = getSkillAlias(skillId, matrix);
|
|
337
|
+
const sortedSources = [...skill?.availableSources || []].sort(
|
|
338
|
+
(a, b) => (SOURCE_SORT_ORDER[a.type] ?? DEFAULT_SORT_PRIORITY) - (SOURCE_SORT_ORDER[b.type] ?? DEFAULT_SORT_PRIORITY)
|
|
339
|
+
);
|
|
340
|
+
const options = sortedSources.length > 0 ? sortedSources.map((source) => ({
|
|
341
|
+
id: source.name,
|
|
342
|
+
label: formatSourceLabel({
|
|
343
|
+
name: source.name,
|
|
344
|
+
version: source.version,
|
|
345
|
+
installed: source.installed
|
|
346
|
+
}),
|
|
347
|
+
selected: selectedSource === source.name,
|
|
348
|
+
installed: source.installed
|
|
349
|
+
})) : [
|
|
350
|
+
{
|
|
351
|
+
id: DEFAULT_SOURCE_ID,
|
|
352
|
+
label: DEFAULT_SOURCE_LABEL,
|
|
353
|
+
selected: selectedSource === DEFAULT_SOURCE_ID,
|
|
354
|
+
installed: false
|
|
355
|
+
}
|
|
356
|
+
];
|
|
357
|
+
options.push(...buildBoundSkillOptions(boundSkills, alias, selectedSource));
|
|
358
|
+
return { skillId, displayName: alias, alias, options };
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}));
|
|
362
|
+
|
|
363
|
+
export {
|
|
364
|
+
useWizardStore
|
|
365
|
+
};
|
|
366
|
+
//# sourceMappingURL=chunk-IQUBOWWU.js.map
|