@claude-collective/cli 0.13.4 → 0.25.1
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 +357 -0
- package/README.md +41 -27
- package/config/skills-matrix.yaml +202 -134
- package/config/stacks.yaml +14 -20
- package/dist/chunk-3X5D7RM5.js +69 -0
- package/dist/chunk-3X5D7RM5.js.map +1 -0
- package/dist/chunk-4S4FCAA2.js +100 -0
- package/dist/chunk-4S4FCAA2.js.map +1 -0
- package/dist/chunk-4WGN6SUE.js +197 -0
- package/dist/chunk-4WGN6SUE.js.map +1 -0
- package/dist/{chunk-DHET7RCE.js → chunk-AWKZ5BDL.js} +9 -2
- package/dist/{chunk-DHET7RCE.js.map → chunk-AWKZ5BDL.js.map} +1 -1
- package/dist/{chunk-6Q3Y7KVB.js → chunk-DBRUQQUF.js} +8 -2
- package/dist/chunk-DBRUQQUF.js.map +1 -0
- package/dist/{chunk-Z7G4B5HJ.js → chunk-ETCVEV3S.js} +73 -150
- package/dist/chunk-ETCVEV3S.js.map +1 -0
- package/dist/chunk-F4RD5FYM.js +45 -0
- package/dist/chunk-F4RD5FYM.js.map +1 -0
- package/dist/{chunk-ACNBKXXJ.js → chunk-GGFOD5PK.js} +13 -44
- package/dist/chunk-GGFOD5PK.js.map +1 -0
- package/dist/chunk-H7SSBSPR.js +29 -0
- package/dist/chunk-H7SSBSPR.js.map +1 -0
- package/dist/chunk-HWD32NP7.js +19 -0
- package/dist/chunk-HWD32NP7.js.map +1 -0
- package/dist/{chunk-JIPWV2FX.js → chunk-IAYAE6MG.js} +12 -34
- package/dist/chunk-IAYAE6MG.js.map +1 -0
- package/dist/{chunk-RTE64SJA.js → chunk-IXBCRT3F.js} +2 -2
- package/dist/chunk-IXBCRT3F.js.map +1 -0
- package/dist/chunk-KWYO3M5Q.js +67 -0
- package/dist/chunk-KWYO3M5Q.js.map +1 -0
- package/dist/{chunk-E3FJH4TF.js → chunk-MCTSHLAF.js} +18 -18
- package/dist/chunk-MCTSHLAF.js.map +1 -0
- package/dist/chunk-MH66WDFV.js +251 -0
- package/dist/chunk-MH66WDFV.js.map +1 -0
- package/dist/{chunk-K3NB6DSG.js → chunk-MTPM7BX5.js} +108 -110
- package/dist/chunk-MTPM7BX5.js.map +1 -0
- package/dist/chunk-NQJ47R4N.js +1092 -0
- package/dist/chunk-NQJ47R4N.js.map +1 -0
- package/dist/chunk-NRC7XYCI.js +211 -0
- package/dist/chunk-NRC7XYCI.js.map +1 -0
- package/dist/{chunk-76DWXGQE.js → chunk-O6ZTD7ZI.js} +14 -3
- package/dist/chunk-O6ZTD7ZI.js.map +1 -0
- package/dist/chunk-OBXAY23Y.js +56 -0
- package/dist/chunk-OBXAY23Y.js.map +1 -0
- package/dist/{chunk-XY3XDVMI.js → chunk-QR2EBWL2.js} +3 -3
- package/dist/{chunk-66UDJBF6.js → chunk-REJGRCVQ.js} +2 -2
- package/dist/{chunk-D237EVNB.js → chunk-TMED5DQ2.js} +71 -48
- package/dist/chunk-TMED5DQ2.js.map +1 -0
- package/dist/chunk-U7HFKR74.js +21 -0
- package/dist/chunk-U7HFKR74.js.map +1 -0
- package/dist/chunk-UEMRJI2K.js +146 -0
- package/dist/chunk-UEMRJI2K.js.map +1 -0
- package/dist/{chunk-Z2CWURZ6.js → chunk-UNN7523L.js} +2 -2
- package/dist/chunk-V2ZIH7HV.js +29 -0
- package/dist/chunk-V2ZIH7HV.js.map +1 -0
- package/dist/{chunk-X6QONICW.js → chunk-VVYNZZUX.js} +7 -19
- package/dist/chunk-VVYNZZUX.js.map +1 -0
- package/dist/chunk-WXS4S3MA.js +220 -0
- package/dist/chunk-WXS4S3MA.js.map +1 -0
- package/dist/{chunk-CDX4W4DM.js → chunk-XENOESJZ.js} +53 -33
- package/dist/chunk-XENOESJZ.js.map +1 -0
- package/dist/chunk-YDBSSAJ6.js +4207 -0
- package/dist/chunk-YDBSSAJ6.js.map +1 -0
- package/dist/chunk-ZDREFYD2.js +696 -0
- package/dist/chunk-ZDREFYD2.js.map +1 -0
- package/dist/chunk-ZW2PELOH.js +197 -0
- package/dist/chunk-ZW2PELOH.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +13 -14
- package/dist/commands/build/marketplace.js +19 -23
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +13 -240
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +13 -25
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +45 -82
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +9 -9
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +8 -8
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +7 -9
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +12 -13
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +7 -7
- package/dist/commands/config/unset-project.js +12 -13
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +15 -44
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +23 -67
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +98 -81
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +27 -79
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +38 -58
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +17 -24
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +103 -779
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +8 -11
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +11 -16
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +14 -18
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +16 -97
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +24 -43
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +22 -30
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +23 -154
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +38 -89
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +12 -28
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +8 -24
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +11 -26
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +8 -24
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.js +2 -2
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +3 -7
- package/dist/components/common/message.js.map +1 -1
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/common/spinner.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +138 -156
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/menu-item.js +9 -0
- package/dist/components/wizard/search-modal.js +9 -0
- package/dist/components/wizard/search-modal.test.js +216 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +16 -106
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +10 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +500 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/step-approach.js +7 -5
- package/dist/components/wizard/step-approach.test.js +115 -0
- package/dist/components/wizard/step-approach.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -5
- package/dist/components/wizard/step-build.test.js +160 -284
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -3
- package/dist/components/wizard/step-confirm.test.js +364 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +2 -3
- package/dist/components/wizard/step-refine.test.js +24 -26
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +14 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +240 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +17 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +290 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +7 -4
- package/dist/components/wizard/step-stack.test.js +344 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +9 -0
- package/dist/components/wizard/view-title.js.map +1 -0
- package/dist/components/wizard/wizard-layout.js +17 -0
- package/dist/components/wizard/wizard-layout.js.map +1 -0
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +292 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +22 -15
- package/dist/config/skills-matrix.yaml +202 -134
- package/dist/config/stacks.yaml +14 -20
- package/dist/hooks/init.js +6 -8
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
- package/dist/source-manager-DSYZEVGZ.js +16 -0
- package/dist/source-manager-DSYZEVGZ.js.map +1 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/examples.md +1 -6
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/workflow.md +1 -5
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/output-format.md +1 -3
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +94 -88
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -3
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/developer/web-developer/examples.md +1 -6
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/documentor/workflow.md +1 -5
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/anti-patterns.md +1 -3
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/output-format.md +1 -3
- package/dist/chunk-3U3R4NCG.js +0 -22
- package/dist/chunk-3U3R4NCG.js.map +0 -1
- package/dist/chunk-4K4ZXQRM.js +0 -317
- package/dist/chunk-4K4ZXQRM.js.map +0 -1
- package/dist/chunk-6Q3Y7KVB.js.map +0 -1
- package/dist/chunk-76DWXGQE.js.map +0 -1
- package/dist/chunk-7Q44DMSP.js +0 -582
- package/dist/chunk-7Q44DMSP.js.map +0 -1
- package/dist/chunk-ACNBKXXJ.js.map +0 -1
- package/dist/chunk-B7CCVP6Q.js +0 -639
- package/dist/chunk-B7CCVP6Q.js.map +0 -1
- package/dist/chunk-BDLUZVKU.js +0 -54
- package/dist/chunk-BDLUZVKU.js.map +0 -1
- package/dist/chunk-CDX4W4DM.js.map +0 -1
- package/dist/chunk-D237EVNB.js.map +0 -1
- package/dist/chunk-DRXPNNPB.js +0 -393
- package/dist/chunk-DRXPNNPB.js.map +0 -1
- package/dist/chunk-E3FJH4TF.js.map +0 -1
- package/dist/chunk-ED4E6Q2T.js +0 -114
- package/dist/chunk-ED4E6Q2T.js.map +0 -1
- package/dist/chunk-EHS3TWWP.js +0 -95
- package/dist/chunk-EHS3TWWP.js.map +0 -1
- package/dist/chunk-GDH553MV.js +0 -91
- package/dist/chunk-GDH553MV.js.map +0 -1
- package/dist/chunk-HLJX2FTL.js +0 -95
- package/dist/chunk-HLJX2FTL.js.map +0 -1
- package/dist/chunk-I2DSLOXZ.js +0 -75
- package/dist/chunk-I2DSLOXZ.js.map +0 -1
- package/dist/chunk-I4TPKIYX.js +0 -493
- package/dist/chunk-I4TPKIYX.js.map +0 -1
- package/dist/chunk-IAUAQJQ2.js +0 -57
- package/dist/chunk-IAUAQJQ2.js.map +0 -1
- package/dist/chunk-IBE7JIAG.js +0 -129
- package/dist/chunk-IBE7JIAG.js.map +0 -1
- package/dist/chunk-IMDW5ZUP.js +0 -132
- package/dist/chunk-IMDW5ZUP.js.map +0 -1
- package/dist/chunk-JIPWV2FX.js.map +0 -1
- package/dist/chunk-K3NB6DSG.js.map +0 -1
- package/dist/chunk-K7EVM5LY.js +0 -141
- package/dist/chunk-K7EVM5LY.js.map +0 -1
- package/dist/chunk-KAAEN2PO.js +0 -57
- package/dist/chunk-KAAEN2PO.js.map +0 -1
- package/dist/chunk-NDY25DTL.js +0 -453
- package/dist/chunk-NDY25DTL.js.map +0 -1
- package/dist/chunk-P26A2K5N.js +0 -64
- package/dist/chunk-P26A2K5N.js.map +0 -1
- package/dist/chunk-RFTSZDHV.js +0 -313
- package/dist/chunk-RFTSZDHV.js.map +0 -1
- package/dist/chunk-RTE64SJA.js.map +0 -1
- package/dist/chunk-SVYPSDWY.js +0 -84
- package/dist/chunk-SVYPSDWY.js.map +0 -1
- package/dist/chunk-TKFPKEV3.js +0 -69
- package/dist/chunk-TKFPKEV3.js.map +0 -1
- package/dist/chunk-UQTEPWU7.js +0 -108
- package/dist/chunk-UQTEPWU7.js.map +0 -1
- package/dist/chunk-V46GGCCI.js +0 -294
- package/dist/chunk-V46GGCCI.js.map +0 -1
- package/dist/chunk-X6QONICW.js.map +0 -1
- package/dist/chunk-Y2LW7R3Y.js +0 -23
- package/dist/chunk-Y2LW7R3Y.js.map +0 -1
- package/dist/chunk-Z7G4B5HJ.js.map +0 -1
- package/dist/chunk-ZENYS6KW.js +0 -90
- package/dist/chunk-ZENYS6KW.js.map +0 -1
- package/dist/chunk-ZFPSUQOU.js +0 -396
- package/dist/chunk-ZFPSUQOU.js.map +0 -1
- package/dist/commands/config/set.js +0 -61
- package/dist/commands/config/set.js.map +0 -1
- package/dist/commands/config/unset.js +0 -57
- package/dist/commands/config/unset.js.map +0 -1
- package/dist/commands/test-imports.js +0 -92
- package/dist/commands/test-imports.js.map +0 -1
- package/dist/components/wizard/step-stack-options.js +0 -11
- package/dist/components/wizard/wizard-footer.js +0 -9
- /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
- /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
- /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
- /package/dist/components/wizard/{step-stack-options.js.map → menu-item.js.map} +0 -0
- /package/dist/components/wizard/{wizard-footer.js.map → search-modal.js.map} +0 -0
- /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
StepRefine
|
|
4
|
+
} from "../../chunk-MCTSHLAF.js";
|
|
2
5
|
import {
|
|
3
6
|
ARROW_DOWN,
|
|
4
7
|
ARROW_UP,
|
|
@@ -7,24 +10,20 @@ import {
|
|
|
7
10
|
INPUT_DELAY_MS,
|
|
8
11
|
RENDER_DELAY_MS,
|
|
9
12
|
delay
|
|
10
|
-
} from "../../chunk-
|
|
13
|
+
} from "../../chunk-DBRUQQUF.js";
|
|
11
14
|
import {
|
|
12
15
|
render
|
|
13
|
-
} from "../../chunk-
|
|
16
|
+
} from "../../chunk-REJGRCVQ.js";
|
|
14
17
|
import {
|
|
15
18
|
afterEach,
|
|
16
19
|
describe,
|
|
17
20
|
globalExpect,
|
|
18
21
|
it,
|
|
19
22
|
vi
|
|
20
|
-
} from "../../chunk-
|
|
21
|
-
import {
|
|
22
|
-
StepRefine
|
|
23
|
-
} from "../../chunk-E3FJH4TF.js";
|
|
24
|
-
import "../../chunk-Y2LW7R3Y.js";
|
|
23
|
+
} from "../../chunk-QR2EBWL2.js";
|
|
25
24
|
import {
|
|
26
25
|
init_esm_shims
|
|
27
|
-
} from "../../chunk-
|
|
26
|
+
} from "../../chunk-AWKZ5BDL.js";
|
|
28
27
|
|
|
29
28
|
// src/cli/components/wizard/step-refine.test.tsx
|
|
30
29
|
init_esm_shims();
|
|
@@ -44,7 +43,6 @@ describe("StepRefine component", () => {
|
|
|
44
43
|
afterEach(() => {
|
|
45
44
|
cleanup?.();
|
|
46
45
|
cleanup = void 0;
|
|
47
|
-
vi.clearAllMocks();
|
|
48
46
|
});
|
|
49
47
|
describe("rendering", () => {
|
|
50
48
|
it("should render technology count correctly", () => {
|
|
@@ -92,11 +90,12 @@ describe("StepRefine component", () => {
|
|
|
92
90
|
const output = lastFrame();
|
|
93
91
|
globalExpect(output).toContain("Customize skill sources");
|
|
94
92
|
});
|
|
95
|
-
it("should show
|
|
93
|
+
it("should show customize option without coming soon label", () => {
|
|
96
94
|
const { lastFrame, unmount } = renderStepRefine();
|
|
97
95
|
cleanup = unmount;
|
|
98
96
|
const output = lastFrame();
|
|
99
|
-
globalExpect(output).toContain("
|
|
97
|
+
globalExpect(output).toContain("Customize skill sources");
|
|
98
|
+
globalExpect(output).not.toContain("(coming soon)");
|
|
100
99
|
});
|
|
101
100
|
it("should show customize description", () => {
|
|
102
101
|
const { lastFrame, unmount } = renderStepRefine();
|
|
@@ -106,19 +105,12 @@ describe("StepRefine component", () => {
|
|
|
106
105
|
});
|
|
107
106
|
});
|
|
108
107
|
describe("keyboard shortcuts display", () => {
|
|
109
|
-
it("should
|
|
110
|
-
const { lastFrame, unmount } = renderStepRefine();
|
|
111
|
-
cleanup = unmount;
|
|
112
|
-
const output = lastFrame();
|
|
113
|
-
globalExpect(output).toContain("ESC");
|
|
114
|
-
globalExpect(output).toContain("back");
|
|
115
|
-
});
|
|
116
|
-
it("should show ENTER instruction for continue", () => {
|
|
108
|
+
it("should render recommended option content", () => {
|
|
117
109
|
const { lastFrame, unmount } = renderStepRefine();
|
|
118
110
|
cleanup = unmount;
|
|
119
111
|
const output = lastFrame();
|
|
120
|
-
globalExpect(output).toContain("
|
|
121
|
-
globalExpect(output).toContain("
|
|
112
|
+
globalExpect(output).toContain("Use all recommended");
|
|
113
|
+
globalExpect(output).toContain("Customize skill sources");
|
|
122
114
|
});
|
|
123
115
|
});
|
|
124
116
|
describe("keyboard navigation", () => {
|
|
@@ -140,18 +132,24 @@ describe("StepRefine component", () => {
|
|
|
140
132
|
await delay(INPUT_DELAY_MS);
|
|
141
133
|
globalExpect(onBack).toHaveBeenCalledTimes(1);
|
|
142
134
|
});
|
|
143
|
-
it("should
|
|
135
|
+
it("should toggle to 'customize' on arrow up when recommended is selected", async () => {
|
|
144
136
|
const onSelectAction = vi.fn();
|
|
145
|
-
const { stdin, unmount } = renderStepRefine({
|
|
137
|
+
const { stdin, unmount } = renderStepRefine({
|
|
138
|
+
onSelectAction,
|
|
139
|
+
refineAction: "all-recommended"
|
|
140
|
+
});
|
|
146
141
|
cleanup = unmount;
|
|
147
142
|
await delay(RENDER_DELAY_MS);
|
|
148
143
|
stdin.write(ARROW_UP);
|
|
149
144
|
await delay(INPUT_DELAY_MS);
|
|
150
|
-
globalExpect(onSelectAction).toHaveBeenCalledWith("
|
|
145
|
+
globalExpect(onSelectAction).toHaveBeenCalledWith("customize");
|
|
151
146
|
});
|
|
152
|
-
it("should
|
|
147
|
+
it("should toggle to 'all-recommended' on arrow down when customize is selected", async () => {
|
|
153
148
|
const onSelectAction = vi.fn();
|
|
154
|
-
const { stdin, unmount } = renderStepRefine({
|
|
149
|
+
const { stdin, unmount } = renderStepRefine({
|
|
150
|
+
onSelectAction,
|
|
151
|
+
refineAction: "customize"
|
|
152
|
+
});
|
|
155
153
|
cleanup = unmount;
|
|
156
154
|
await delay(RENDER_DELAY_MS);
|
|
157
155
|
stdin.write(ARROW_DOWN);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/components/wizard/step-refine.test.tsx"],"sourcesContent":["/**\n * Tests for the StepRefine component.\n *\n * Tests the Refine step where users can choose skill sources.\n * For Phase 7, only \"Use all recommended\" is implemented.\n */\nimport React from \"react\";\nimport { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, vi } from \"vitest\";\nimport {\n StepRefine,\n type StepRefineProps,\n type RefineAction,\n} from \"./step-refine\";\nimport {\n ENTER,\n ESCAPE,\n ARROW_UP,\n ARROW_DOWN,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\n// =============================================================================\n// Test Fixtures\n// =============================================================================\n\nconst defaultProps: StepRefineProps = {\n technologyCount: 12,\n refineAction: \"all-recommended\",\n onSelectAction: vi.fn(),\n onContinue: vi.fn(),\n onBack: vi.fn(),\n};\n\nconst renderStepRefine = (props: Partial<StepRefineProps> = {}) => {\n return render(<StepRefine {...defaultProps} {...props} />);\n};\n\n// =============================================================================\n// Tests\n// =============================================================================\n\ndescribe(\"StepRefine component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n vi.clearAllMocks();\n });\n\n // ===========================================================================\n // Basic Rendering\n // ===========================================================================\n\n describe(\"rendering\", () => {\n it(\"should render technology count correctly\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 12 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"12\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should render different technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 5 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"5\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should render 'Use all recommended' option\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Use all recommended skills (verified)\");\n });\n\n it(\"should show 'Use all recommended' option as highlighted\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"all-recommended\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n // The option should have the \">\" indicator\n expect(output).toContain(\">\");\n expect(output).toContain(\"Use all recommended skills\");\n });\n\n it(\"should render verification description\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"fastest option\");\n expect(output).toContain(\"verified\");\n expect(output).toContain(\"Claude Collective\");\n });\n });\n\n // ===========================================================================\n // Customize Option Display\n // ===========================================================================\n\n describe(\"customize option\", () => {\n it(\"should show 'Customize' option as disabled/grayed\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Customize skill sources\");\n });\n\n it(\"should show '(coming soon)' label on customize option\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"(coming soon)\");\n });\n\n it(\"should show customize description\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose alternative skills for each technology\");\n });\n });\n\n // ===========================================================================\n // Keyboard Shortcuts Display\n // ===========================================================================\n\n describe(\"keyboard shortcuts display\", () => {\n it(\"should show ESC instruction for back\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"ESC\");\n expect(output).toContain(\"back\");\n });\n\n it(\"should show ENTER instruction for continue\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"ENTER\");\n expect(output).toContain(\"continue\");\n });\n });\n\n // ===========================================================================\n // Keyboard Navigation\n // ===========================================================================\n\n describe(\"keyboard navigation\", () => {\n it(\"should call onContinue when Enter key is pressed\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(1);\n });\n\n it(\"should call onBack when Escape key is pressed\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalledTimes(1);\n });\n\n it(\"should call onSelectAction with 'all-recommended' on arrow up\", async () => {\n const onSelectAction = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onSelectAction });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n expect(onSelectAction).toHaveBeenCalledWith(\"all-recommended\");\n });\n\n it(\"should call onSelectAction with 'all-recommended' on arrow down\", async () => {\n const onSelectAction = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onSelectAction });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n expect(onSelectAction).toHaveBeenCalledWith(\"all-recommended\");\n });\n });\n\n // ===========================================================================\n // Selection State\n // ===========================================================================\n\n describe(\"selection state\", () => {\n it(\"should handle null refineAction (defaults to recommended)\", () => {\n const { lastFrame, unmount } = renderStepRefine({ refineAction: null });\n cleanup = unmount;\n\n const output = lastFrame();\n // Should still show the recommended option with indicator\n expect(output).toContain(\">\");\n expect(output).toContain(\"Use all recommended\");\n });\n\n it(\"should handle 'all-recommended' refineAction\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"all-recommended\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Use all recommended\");\n });\n\n it(\"should handle 'customize' refineAction (even though disabled)\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"customize\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n // Should still render, even if customize is selected\n expect(output).toContain(\"Use all recommended\");\n expect(output).toContain(\"Customize skill sources\");\n });\n });\n\n // ===========================================================================\n // Edge Cases\n // ===========================================================================\n\n describe(\"edge cases\", () => {\n it(\"should handle zero technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 0 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"0\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should handle single technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 1 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"1\");\n // Note: \"technologies\" is plural even for 1 (simple implementation)\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should handle large technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 100 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"100\");\n expect(output).toContain(\"technologies\");\n });\n });\n\n // ===========================================================================\n // Multiple Keyboard Events\n // ===========================================================================\n\n describe(\"multiple keyboard events\", () => {\n it(\"should allow multiple Enter presses\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(2);\n });\n\n it(\"should allow multiple Escape presses\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalledTimes(2);\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/wizard/step-refine.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, vi } from \"vitest\";\nimport { StepRefine, type StepRefineProps, type RefineAction } from \"./step-refine\";\nimport {\n ENTER,\n ESCAPE,\n ARROW_UP,\n ARROW_DOWN,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst defaultProps: StepRefineProps = {\n technologyCount: 12,\n refineAction: \"all-recommended\",\n onSelectAction: vi.fn(),\n onContinue: vi.fn(),\n onBack: vi.fn(),\n};\n\nconst renderStepRefine = (props: Partial<StepRefineProps> = {}) => {\n return render(<StepRefine {...defaultProps} {...props} />);\n};\n\ndescribe(\"StepRefine component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render technology count correctly\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 12 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"12\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should render different technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 5 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"5\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should render 'Use all recommended' option\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Use all recommended skills (verified)\");\n });\n\n it(\"should show 'Use all recommended' option as highlighted\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"all-recommended\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n // The option should have the \">\" indicator\n expect(output).toContain(\">\");\n expect(output).toContain(\"Use all recommended skills\");\n });\n\n it(\"should render verification description\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"fastest option\");\n expect(output).toContain(\"verified\");\n expect(output).toContain(\"Claude Collective\");\n });\n });\n\n describe(\"customize option\", () => {\n it(\"should show 'Customize' option as disabled/grayed\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Customize skill sources\");\n });\n\n it(\"should show customize option without coming soon label\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Customize skill sources\");\n expect(output).not.toContain(\"(coming soon)\");\n });\n\n it(\"should show customize description\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose alternative skills for each technology\");\n });\n });\n\n describe(\"keyboard shortcuts display\", () => {\n it(\"should render recommended option content\", () => {\n const { lastFrame, unmount } = renderStepRefine();\n cleanup = unmount;\n\n const output = lastFrame();\n // Keyboard hints are now in WizardLayout footer, not in StepRefine\n // Verify core content renders\n expect(output).toContain(\"Use all recommended\");\n expect(output).toContain(\"Customize skill sources\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should call onContinue when Enter key is pressed\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(1);\n });\n\n it(\"should call onBack when Escape key is pressed\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalledTimes(1);\n });\n\n it(\"should toggle to 'customize' on arrow up when recommended is selected\", async () => {\n const onSelectAction = vi.fn();\n const { stdin, unmount } = renderStepRefine({\n onSelectAction,\n refineAction: \"all-recommended\",\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n expect(onSelectAction).toHaveBeenCalledWith(\"customize\");\n });\n\n it(\"should toggle to 'all-recommended' on arrow down when customize is selected\", async () => {\n const onSelectAction = vi.fn();\n const { stdin, unmount } = renderStepRefine({\n onSelectAction,\n refineAction: \"customize\",\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n expect(onSelectAction).toHaveBeenCalledWith(\"all-recommended\");\n });\n });\n\n describe(\"selection state\", () => {\n it(\"should handle null refineAction (defaults to recommended)\", () => {\n const { lastFrame, unmount } = renderStepRefine({ refineAction: null });\n cleanup = unmount;\n\n const output = lastFrame();\n // Should still show the recommended option with indicator\n expect(output).toContain(\">\");\n expect(output).toContain(\"Use all recommended\");\n });\n\n it(\"should handle 'all-recommended' refineAction\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"all-recommended\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Use all recommended\");\n });\n\n it(\"should handle 'customize' refineAction (even though disabled)\", () => {\n const { lastFrame, unmount } = renderStepRefine({\n refineAction: \"customize\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n // Should still render, even if customize is selected\n expect(output).toContain(\"Use all recommended\");\n expect(output).toContain(\"Customize skill sources\");\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle zero technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 0 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"0\");\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should handle single technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 1 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"1\");\n // Note: \"technologies\" is plural even for 1 (simple implementation)\n expect(output).toContain(\"technologies\");\n });\n\n it(\"should handle large technology count\", () => {\n const { lastFrame, unmount } = renderStepRefine({ technologyCount: 100 });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"100\");\n expect(output).toContain(\"technologies\");\n });\n });\n\n describe(\"multiple keyboard events\", () => {\n it(\"should allow multiple Enter presses\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(2);\n });\n\n it(\"should allow multiple Escape presses\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderStepRefine({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalledTimes(2);\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
StepSettings
|
|
4
|
+
} from "../../chunk-4WGN6SUE.js";
|
|
5
|
+
import "../../chunk-U7HFKR74.js";
|
|
6
|
+
import "../../chunk-YDBSSAJ6.js";
|
|
7
|
+
import "../../chunk-ZDREFYD2.js";
|
|
8
|
+
import "../../chunk-HWD32NP7.js";
|
|
9
|
+
import "../../chunk-O6ZTD7ZI.js";
|
|
10
|
+
import "../../chunk-AWKZ5BDL.js";
|
|
11
|
+
export {
|
|
12
|
+
StepSettings
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=step-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ARROW_DOWN,
|
|
4
|
+
ARROW_UP,
|
|
5
|
+
ESCAPE,
|
|
6
|
+
INPUT_DELAY_MS,
|
|
7
|
+
delay
|
|
8
|
+
} from "../../chunk-DBRUQQUF.js";
|
|
9
|
+
import {
|
|
10
|
+
render
|
|
11
|
+
} from "../../chunk-REJGRCVQ.js";
|
|
12
|
+
import {
|
|
13
|
+
afterEach,
|
|
14
|
+
beforeEach,
|
|
15
|
+
describe,
|
|
16
|
+
globalExpect,
|
|
17
|
+
it,
|
|
18
|
+
vi
|
|
19
|
+
} from "../../chunk-QR2EBWL2.js";
|
|
20
|
+
import {
|
|
21
|
+
StepSettings
|
|
22
|
+
} from "../../chunk-4WGN6SUE.js";
|
|
23
|
+
import "../../chunk-U7HFKR74.js";
|
|
24
|
+
import "../../chunk-YDBSSAJ6.js";
|
|
25
|
+
import "../../chunk-ZDREFYD2.js";
|
|
26
|
+
import "../../chunk-HWD32NP7.js";
|
|
27
|
+
import "../../chunk-O6ZTD7ZI.js";
|
|
28
|
+
import {
|
|
29
|
+
init_esm_shims
|
|
30
|
+
} from "../../chunk-AWKZ5BDL.js";
|
|
31
|
+
|
|
32
|
+
// src/cli/components/wizard/step-settings.test.tsx
|
|
33
|
+
init_esm_shims();
|
|
34
|
+
import { jsx } from "react/jsx-runtime";
|
|
35
|
+
vi.mock("../../lib/configuration/source-manager.js", () => ({
|
|
36
|
+
getSourceSummary: vi.fn(),
|
|
37
|
+
addSource: vi.fn(),
|
|
38
|
+
removeSource: vi.fn()
|
|
39
|
+
}));
|
|
40
|
+
vi.mock("../../lib/configuration/config.js", () => ({
|
|
41
|
+
DEFAULT_SOURCE: "github:claude-collective/skills"
|
|
42
|
+
}));
|
|
43
|
+
var LOADING_SETTLE_MS = 200;
|
|
44
|
+
var defaultProps = {
|
|
45
|
+
projectDir: "/test/project",
|
|
46
|
+
onClose: vi.fn()
|
|
47
|
+
};
|
|
48
|
+
var renderStepSettings = (props = {}) => {
|
|
49
|
+
return render(/* @__PURE__ */ jsx(StepSettings, { ...defaultProps, ...props }));
|
|
50
|
+
};
|
|
51
|
+
describe("StepSettings component", () => {
|
|
52
|
+
let cleanup;
|
|
53
|
+
beforeEach(async () => {
|
|
54
|
+
vi.resetAllMocks();
|
|
55
|
+
const { getSourceSummary } = await import("../../source-manager-DSYZEVGZ.js");
|
|
56
|
+
vi.mocked(getSourceSummary).mockResolvedValue({
|
|
57
|
+
sources: [
|
|
58
|
+
{ name: "public", url: "github:claude-collective/skills", enabled: true },
|
|
59
|
+
{ name: "acme-corp", url: "github:acme-corp/claude-skills", enabled: true }
|
|
60
|
+
],
|
|
61
|
+
localSkillCount: 3,
|
|
62
|
+
pluginSkillCount: 1
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
afterEach(() => {
|
|
66
|
+
cleanup?.();
|
|
67
|
+
cleanup = void 0;
|
|
68
|
+
});
|
|
69
|
+
describe("rendering", () => {
|
|
70
|
+
it("should render the title", async () => {
|
|
71
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
72
|
+
cleanup = unmount;
|
|
73
|
+
await delay(LOADING_SETTLE_MS);
|
|
74
|
+
const output = lastFrame();
|
|
75
|
+
globalExpect(output).toContain("Skill Sources");
|
|
76
|
+
});
|
|
77
|
+
it("should render configured sources", async () => {
|
|
78
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
79
|
+
cleanup = unmount;
|
|
80
|
+
await delay(LOADING_SETTLE_MS);
|
|
81
|
+
const output = lastFrame();
|
|
82
|
+
globalExpect(output).toContain("Public");
|
|
83
|
+
globalExpect(output).toContain("acme-corp");
|
|
84
|
+
});
|
|
85
|
+
it("should show default label for public source", async () => {
|
|
86
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
87
|
+
cleanup = unmount;
|
|
88
|
+
await delay(LOADING_SETTLE_MS);
|
|
89
|
+
const output = lastFrame();
|
|
90
|
+
globalExpect(output).toContain("(default)");
|
|
91
|
+
});
|
|
92
|
+
it("should show source URLs", async () => {
|
|
93
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
94
|
+
cleanup = unmount;
|
|
95
|
+
await delay(LOADING_SETTLE_MS);
|
|
96
|
+
const output = lastFrame();
|
|
97
|
+
globalExpect(output).toContain("github:claude-collective/skills");
|
|
98
|
+
globalExpect(output).toContain("github:acme-corp/claude-skills");
|
|
99
|
+
});
|
|
100
|
+
it("should show local skill count", async () => {
|
|
101
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
102
|
+
cleanup = unmount;
|
|
103
|
+
await delay(LOADING_SETTLE_MS);
|
|
104
|
+
const output = lastFrame();
|
|
105
|
+
globalExpect(output).toContain("3");
|
|
106
|
+
globalExpect(output).toContain(".claude/skills/");
|
|
107
|
+
});
|
|
108
|
+
it("should show plugin count", async () => {
|
|
109
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
110
|
+
cleanup = unmount;
|
|
111
|
+
await delay(LOADING_SETTLE_MS);
|
|
112
|
+
const output = lastFrame();
|
|
113
|
+
globalExpect(output).toContain("1");
|
|
114
|
+
globalExpect(output).toContain(".claude/plugins/");
|
|
115
|
+
});
|
|
116
|
+
it("should show add source input area", async () => {
|
|
117
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
118
|
+
cleanup = unmount;
|
|
119
|
+
await delay(LOADING_SETTLE_MS);
|
|
120
|
+
const output = lastFrame();
|
|
121
|
+
globalExpect(output).toContain("Add source");
|
|
122
|
+
});
|
|
123
|
+
it("should show loading state initially", () => {
|
|
124
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
125
|
+
cleanup = unmount;
|
|
126
|
+
const output = lastFrame();
|
|
127
|
+
globalExpect(output).toContain("Loading sources...");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe("keyboard navigation", () => {
|
|
131
|
+
it("should navigate down with arrow down", async () => {
|
|
132
|
+
const { lastFrame, stdin, unmount } = renderStepSettings();
|
|
133
|
+
cleanup = unmount;
|
|
134
|
+
await delay(LOADING_SETTLE_MS);
|
|
135
|
+
stdin.write(ARROW_DOWN);
|
|
136
|
+
await delay(INPUT_DELAY_MS);
|
|
137
|
+
const output = lastFrame();
|
|
138
|
+
globalExpect(output).toContain("acme-corp");
|
|
139
|
+
});
|
|
140
|
+
it("should navigate up with arrow up", async () => {
|
|
141
|
+
const { lastFrame, stdin, unmount } = renderStepSettings();
|
|
142
|
+
cleanup = unmount;
|
|
143
|
+
await delay(LOADING_SETTLE_MS);
|
|
144
|
+
stdin.write(ARROW_DOWN);
|
|
145
|
+
await delay(INPUT_DELAY_MS);
|
|
146
|
+
stdin.write(ARROW_UP);
|
|
147
|
+
await delay(INPUT_DELAY_MS);
|
|
148
|
+
const output = lastFrame();
|
|
149
|
+
globalExpect(output).toContain("Public");
|
|
150
|
+
});
|
|
151
|
+
it("should not navigate above first item", async () => {
|
|
152
|
+
const { lastFrame, stdin, unmount } = renderStepSettings();
|
|
153
|
+
cleanup = unmount;
|
|
154
|
+
await delay(LOADING_SETTLE_MS);
|
|
155
|
+
stdin.write(ARROW_UP);
|
|
156
|
+
await delay(INPUT_DELAY_MS);
|
|
157
|
+
const output = lastFrame();
|
|
158
|
+
globalExpect(output).toContain("Public");
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe("escape to close", () => {
|
|
162
|
+
it("should call onClose when Escape is pressed", async () => {
|
|
163
|
+
const onClose = vi.fn();
|
|
164
|
+
const { stdin, unmount } = renderStepSettings({ onClose });
|
|
165
|
+
cleanup = unmount;
|
|
166
|
+
await delay(LOADING_SETTLE_MS);
|
|
167
|
+
stdin.write(ESCAPE);
|
|
168
|
+
await delay(INPUT_DELAY_MS);
|
|
169
|
+
globalExpect(onClose).toHaveBeenCalledTimes(1);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe("add source input mode", () => {
|
|
173
|
+
it("should enter add source mode on 'a' key", async () => {
|
|
174
|
+
const { lastFrame, stdin, unmount } = renderStepSettings();
|
|
175
|
+
cleanup = unmount;
|
|
176
|
+
await delay(LOADING_SETTLE_MS);
|
|
177
|
+
stdin.write("a");
|
|
178
|
+
await delay(INPUT_DELAY_MS);
|
|
179
|
+
const output = lastFrame();
|
|
180
|
+
globalExpect(output).toContain("\u2588");
|
|
181
|
+
});
|
|
182
|
+
it("should exit add source mode on Escape", async () => {
|
|
183
|
+
const onClose = vi.fn();
|
|
184
|
+
const { lastFrame, stdin, unmount } = renderStepSettings({ onClose });
|
|
185
|
+
cleanup = unmount;
|
|
186
|
+
await delay(LOADING_SETTLE_MS);
|
|
187
|
+
stdin.write("a");
|
|
188
|
+
await delay(INPUT_DELAY_MS);
|
|
189
|
+
stdin.write(ESCAPE);
|
|
190
|
+
await delay(INPUT_DELAY_MS);
|
|
191
|
+
globalExpect(onClose).not.toHaveBeenCalled();
|
|
192
|
+
const output = lastFrame();
|
|
193
|
+
globalExpect(output).toContain("Skill Sources");
|
|
194
|
+
});
|
|
195
|
+
it("should show hint text for add mode", async () => {
|
|
196
|
+
const { lastFrame, stdin, unmount } = renderStepSettings();
|
|
197
|
+
cleanup = unmount;
|
|
198
|
+
await delay(LOADING_SETTLE_MS);
|
|
199
|
+
stdin.write("a");
|
|
200
|
+
await delay(INPUT_DELAY_MS);
|
|
201
|
+
const output = lastFrame();
|
|
202
|
+
globalExpect(output).toContain("ENTER submit");
|
|
203
|
+
globalExpect(output).toContain("ESC cancel");
|
|
204
|
+
});
|
|
205
|
+
it("should show hint text for normal mode", async () => {
|
|
206
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
207
|
+
cleanup = unmount;
|
|
208
|
+
await delay(LOADING_SETTLE_MS);
|
|
209
|
+
const output = lastFrame();
|
|
210
|
+
globalExpect(output).toContain("DEL remove");
|
|
211
|
+
globalExpect(output).toContain("ESC close");
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
describe("edge cases", () => {
|
|
215
|
+
it("should handle empty sources list gracefully", async () => {
|
|
216
|
+
const { getSourceSummary } = await import("../../source-manager-DSYZEVGZ.js");
|
|
217
|
+
vi.mocked(getSourceSummary).mockResolvedValue({
|
|
218
|
+
sources: [{ name: "public", url: "github:claude-collective/skills", enabled: true }],
|
|
219
|
+
localSkillCount: 0,
|
|
220
|
+
pluginSkillCount: 0
|
|
221
|
+
});
|
|
222
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
223
|
+
cleanup = unmount;
|
|
224
|
+
await delay(LOADING_SETTLE_MS);
|
|
225
|
+
const output = lastFrame();
|
|
226
|
+
globalExpect(output).toContain("Public");
|
|
227
|
+
globalExpect(output).toContain("0");
|
|
228
|
+
});
|
|
229
|
+
it("should handle getSourceSummary failure gracefully", async () => {
|
|
230
|
+
const { getSourceSummary } = await import("../../source-manager-DSYZEVGZ.js");
|
|
231
|
+
vi.mocked(getSourceSummary).mockRejectedValue(new Error("Config read failed"));
|
|
232
|
+
const { lastFrame, unmount } = renderStepSettings();
|
|
233
|
+
cleanup = unmount;
|
|
234
|
+
await delay(LOADING_SETTLE_MS);
|
|
235
|
+
const output = lastFrame();
|
|
236
|
+
globalExpect(output).toContain("Public");
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=step-settings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/wizard/step-settings.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, beforeEach, vi } from \"vitest\";\nimport { StepSettings, type StepSettingsProps } from \"./step-settings\";\nimport {\n ESCAPE,\n ARROW_UP,\n ARROW_DOWN,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\n// Mock source-manager\nvi.mock(\"../../lib/configuration/source-manager.js\", () => ({\n getSourceSummary: vi.fn(),\n addSource: vi.fn(),\n removeSource: vi.fn(),\n}));\n\n// Mock config\nvi.mock(\"../../lib/configuration/config.js\", () => ({\n DEFAULT_SOURCE: \"github:claude-collective/skills\",\n}));\n\nconst LOADING_SETTLE_MS = 200;\n\nconst defaultProps: StepSettingsProps = {\n projectDir: \"/test/project\",\n onClose: vi.fn(),\n};\n\nconst renderStepSettings = (props: Partial<StepSettingsProps> = {}) => {\n return render(<StepSettings {...defaultProps} {...props} />);\n};\n\ndescribe(\"StepSettings component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(async () => {\n vi.resetAllMocks();\n\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockResolvedValue({\n sources: [\n { name: \"public\", url: \"github:claude-collective/skills\", enabled: true },\n { name: \"acme-corp\", url: \"github:acme-corp/claude-skills\", enabled: true },\n ],\n localSkillCount: 3,\n pluginSkillCount: 1,\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render the title\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"Skill Sources\");\n });\n\n it(\"should render configured sources\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n expect(output).toContain(\"acme-corp\");\n });\n\n it(\"should show default label for public source\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"(default)\");\n });\n\n it(\"should show source URLs\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"github:claude-collective/skills\");\n expect(output).toContain(\"github:acme-corp/claude-skills\");\n });\n\n it(\"should show local skill count\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"3\");\n expect(output).toContain(\".claude/skills/\");\n });\n\n it(\"should show plugin count\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"1\");\n expect(output).toContain(\".claude/plugins/\");\n });\n\n it(\"should show add source input area\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"Add source\");\n });\n\n it(\"should show loading state initially\", () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Loading sources...\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should navigate down with arrow down\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Move focus down\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // The second source (acme-corp) should now be focused\n expect(output).toContain(\"acme-corp\");\n });\n\n it(\"should navigate up with arrow up\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Move down then up\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n });\n\n it(\"should not navigate above first item\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Try to move up from first item\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n });\n });\n\n describe(\"escape to close\", () => {\n it(\"should call onClose when Escape is pressed\", async () => {\n const onClose = vi.fn();\n const { stdin, unmount } = renderStepSettings({ onClose });\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"add source input mode\", () => {\n it(\"should enter add source mode on 'a' key\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should show cursor block character indicating input mode\n expect(output).toContain(\"\\u2588\");\n });\n\n it(\"should exit add source mode on Escape\", async () => {\n const onClose = vi.fn();\n const { lastFrame, stdin, unmount } = renderStepSettings({ onClose });\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Enter add mode\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n // Escape from add mode (should NOT close settings)\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).not.toHaveBeenCalled();\n\n const output = lastFrame();\n // Should still show the settings view\n expect(output).toContain(\"Skill Sources\");\n });\n\n it(\"should show hint text for add mode\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"ENTER submit\");\n expect(output).toContain(\"ESC cancel\");\n });\n\n it(\"should show hint text for normal mode\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"DEL remove\");\n expect(output).toContain(\"ESC close\");\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle empty sources list gracefully\", async () => {\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockResolvedValue({\n sources: [{ name: \"public\", url: \"github:claude-collective/skills\", enabled: true }],\n localSkillCount: 0,\n pluginSkillCount: 0,\n });\n\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n expect(output).toContain(\"0\");\n });\n\n it(\"should handle getSourceSummary failure gracefully\", async () => {\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockRejectedValue(new Error(\"Config read failed\"));\n\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n // Should show fallback with default source\n expect(output).toContain(\"Public\");\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
StepSources
|
|
4
|
+
} from "../../chunk-MH66WDFV.js";
|
|
5
|
+
import "../../chunk-ZW2PELOH.js";
|
|
6
|
+
import "../../chunk-4S4FCAA2.js";
|
|
7
|
+
import "../../chunk-U7HFKR74.js";
|
|
8
|
+
import "../../chunk-TMED5DQ2.js";
|
|
9
|
+
import "../../chunk-YDBSSAJ6.js";
|
|
10
|
+
import "../../chunk-ZDREFYD2.js";
|
|
11
|
+
import "../../chunk-HWD32NP7.js";
|
|
12
|
+
import "../../chunk-O6ZTD7ZI.js";
|
|
13
|
+
import "../../chunk-AWKZ5BDL.js";
|
|
14
|
+
export {
|
|
15
|
+
StepSources
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=step-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|