@agents-inc/cli 0.50.0 → 0.60.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 +155 -5
- package/dist/{chunk-YDYRAXSY.js → chunk-52M2XF3W.js} +6 -6
- package/dist/{chunk-2BWCR762.js → chunk-52XO4ULK.js} +6 -8
- package/dist/chunk-52XO4ULK.js.map +1 -0
- package/dist/{chunk-KQOU4POU.js → chunk-6G3KZSO4.js} +72 -51
- package/dist/chunk-6G3KZSO4.js.map +1 -0
- package/dist/{chunk-AWP5A6IM.js → chunk-6OWHQ7HM.js} +14 -12
- package/dist/chunk-6OWHQ7HM.js.map +1 -0
- package/dist/{chunk-D72AFYQR.js → chunk-7FMEMXJ4.js} +71 -71
- package/dist/chunk-7FMEMXJ4.js.map +1 -0
- package/dist/{chunk-RA2IPRO2.js → chunk-AJJJE7F7.js} +2 -2
- package/dist/{chunk-4R52TQ3K.js → chunk-AX3SZZWA.js} +2 -2
- package/dist/{chunk-U2W5SENM.js → chunk-BFD5NZQ4.js} +5 -4
- package/dist/chunk-BFD5NZQ4.js.map +1 -0
- package/dist/{chunk-HYEUETIC.js → chunk-BKJHAJQW.js} +2 -2
- package/dist/{chunk-HYEUETIC.js.map → chunk-BKJHAJQW.js.map} +1 -1
- package/dist/{chunk-DCE423KO.js → chunk-BMJZBLP7.js} +5 -5
- package/dist/{chunk-GBOW6FUW.js → chunk-BNQ5O6LE.js} +2 -2
- package/dist/{chunk-KAO3LKB5.js → chunk-C577AJE7.js} +3 -3
- package/dist/{chunk-C3Q43WLC.js → chunk-CIG7IKX3.js} +4 -4
- package/dist/chunk-EC3UJRKZ.js +1534 -0
- package/dist/chunk-EC3UJRKZ.js.map +1 -0
- package/dist/{chunk-I6IOGZSZ.js → chunk-EMIUPGPL.js} +11 -15
- package/dist/chunk-EMIUPGPL.js.map +1 -0
- package/dist/{chunk-4QWDB2MD.js → chunk-G6WHCALR.js} +127 -105
- package/dist/chunk-G6WHCALR.js.map +1 -0
- package/dist/{chunk-JFF7P4LC.js → chunk-H7WJK7NJ.js} +22 -6
- package/dist/chunk-H7WJK7NJ.js.map +1 -0
- package/dist/chunk-HGTC76BX.js +16 -0
- package/dist/chunk-HGTC76BX.js.map +1 -0
- package/dist/{chunk-RDWGYKDY.js → chunk-K6OLORQL.js} +6 -6
- package/dist/{chunk-XDSVV5GZ.js → chunk-KIWFEBKH.js} +41 -11
- package/dist/chunk-KIWFEBKH.js.map +1 -0
- package/dist/{chunk-WBHPCBVN.js → chunk-LWXRUR6B.js} +66 -94
- package/dist/chunk-LWXRUR6B.js.map +1 -0
- package/dist/{chunk-CMNKHDOX.js → chunk-MGNYPVOJ.js} +2 -2
- package/dist/{chunk-5FPIKTSA.js → chunk-MKCHLXMY.js} +7 -7
- package/dist/{chunk-U7X4V4HE.js → chunk-MMFQNJPE.js} +2 -2
- package/dist/{chunk-WLZHCM7O.js → chunk-MR6OBL3B.js} +3 -11
- package/dist/{chunk-WLZHCM7O.js.map → chunk-MR6OBL3B.js.map} +1 -1
- package/dist/{chunk-RFKDGJAJ.js → chunk-O6BA7Q2B.js} +6 -6
- package/dist/chunk-O6BA7Q2B.js.map +1 -0
- package/dist/chunk-OCEFD7V6.js +201 -0
- package/dist/chunk-OCEFD7V6.js.map +1 -0
- package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
- package/dist/chunk-PUT7X3GA.js.map +1 -0
- package/dist/{chunk-WFFV254H.js → chunk-RO6LX3UV.js} +110 -82
- package/dist/chunk-RO6LX3UV.js.map +1 -0
- package/dist/{chunk-QYLCINGC.js → chunk-SDKCQXWE.js} +2 -2
- package/dist/{chunk-M3GQ2R3E.js → chunk-SEJF7CGJ.js} +19 -7
- package/dist/chunk-SEJF7CGJ.js.map +1 -0
- package/dist/{chunk-SPFHPHYL.js → chunk-SZRK3VOR.js} +24 -14
- package/dist/chunk-SZRK3VOR.js.map +1 -0
- package/dist/{chunk-QB5HHTAA.js → chunk-TC3NHO34.js} +28 -12
- package/dist/chunk-TC3NHO34.js.map +1 -0
- package/dist/{chunk-5L724R4C.js → chunk-TGLRDEEL.js} +8 -13
- package/dist/chunk-TGLRDEEL.js.map +1 -0
- package/dist/{chunk-HMSHB5EQ.js → chunk-TZXYBG3R.js} +3544 -3037
- package/dist/chunk-TZXYBG3R.js.map +1 -0
- package/dist/{chunk-PGY5XROM.js → chunk-VR3CDXDT.js} +2 -6
- package/dist/chunk-VR3CDXDT.js.map +1 -0
- package/dist/{chunk-5FCHJLM7.js → chunk-WF6RM73R.js} +252 -38
- package/dist/chunk-WF6RM73R.js.map +1 -0
- package/dist/{chunk-3VOL4WEG.js → chunk-WYVDNGJB.js} +3 -3
- package/dist/{chunk-WJHFV6RI.js → chunk-X5EG4EFP.js} +2 -2
- package/dist/{chunk-JWYRXE6C.js → chunk-XUDTFI4M.js} +2 -2
- package/dist/{chunk-7LV4V6A4.js → chunk-YHCYKUA3.js} +14 -10
- package/dist/chunk-YHCYKUA3.js.map +1 -0
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +9 -7
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +13 -10
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +42 -71
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/index.js +7 -5
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +8 -6
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/show.js +7 -5
- package/dist/commands/diff.js +9 -7
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +20 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +175 -79
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +20 -41
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +10 -18
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +21 -20
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +32 -31
- package/dist/commands/list.js +8 -6
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +23 -11
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +63 -46
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +11 -9
- package/dist/commands/outdated.js +9 -7
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +45 -35
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +93 -123
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +11 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +23 -27
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/common/confirm.test.js +4 -4
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +3 -3
- package/dist/components/wizard/category-grid.test.js +4 -4
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +5 -5
- package/dist/components/wizard/checkbox-grid.test.js +6 -6
- package/dist/components/wizard/domain-selection.js +12 -11
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.js +1 -1
- package/dist/components/wizard/search-modal.js +2 -2
- package/dist/components/wizard/search-modal.test.js +3 -3
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +4 -4
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/selection-card.js +2 -2
- package/dist/components/wizard/source-grid.js +4 -4
- package/dist/components/wizard/source-grid.test.js +5 -5
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +9 -8
- package/dist/components/wizard/step-agents.js +11 -10
- package/dist/components/wizard/step-agents.test.js +13 -12
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +11 -9
- package/dist/components/wizard/step-build.test.js +18 -22
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +4 -4
- package/dist/components/wizard/step-confirm.test.js +83 -23
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +3 -3
- package/dist/components/wizard/step-settings.js +9 -7
- package/dist/components/wizard/step-settings.test.js +13 -11
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +13 -11
- package/dist/components/wizard/step-sources.test.js +19 -17
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +15 -14
- package/dist/components/wizard/step-stack.test.js +17 -16
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +10 -8
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +2 -2
- package/dist/components/wizard/wizard.js +29 -27
- package/dist/config-exports.js +20 -0
- package/dist/config-exports.js.map +1 -0
- package/dist/hooks/init.js +34 -33
- package/dist/hooks/init.js.map +1 -1
- package/dist/loader-2O32KKAQ.js +19 -0
- package/dist/source-loader-A6B3NDI4.js +16 -0
- package/dist/source-loader-A6B3NDI4.js.map +1 -0
- package/dist/source-manager-Q7IQSGIX.js +18 -0
- package/dist/source-manager-Q7IQSGIX.js.map +1 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
- package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
- package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
- package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
- package/dist/stores/wizard-store.js +6 -5
- package/dist/stores/wizard-store.test.js +299 -59
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -1
- package/src/agents/meta/agent-summoner/workflow.md +3 -3
- package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
- package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
- package/src/agents/meta/skill-summoner/intro.md +1 -1
- package/src/agents/meta/skill-summoner/output-format.md +3 -3
- package/src/agents/meta/skill-summoner/workflow.md +8 -8
- package/src/schemas/metadata.schema.json +6 -0
- package/src/schemas/stacks.schema.json +1 -1
- package/config/skill-categories.yaml +0 -344
- package/config/skill-rules.yaml +0 -740
- package/config/stacks.yaml +0 -1864
- package/dist/chunk-26MXZUHU.js +0 -183
- package/dist/chunk-26MXZUHU.js.map +0 -1
- package/dist/chunk-2BWCR762.js.map +0 -1
- package/dist/chunk-4QWDB2MD.js.map +0 -1
- package/dist/chunk-5FCHJLM7.js.map +0 -1
- package/dist/chunk-5L724R4C.js.map +0 -1
- package/dist/chunk-7LV4V6A4.js.map +0 -1
- package/dist/chunk-AWP5A6IM.js.map +0 -1
- package/dist/chunk-D72AFYQR.js.map +0 -1
- package/dist/chunk-HMSHB5EQ.js.map +0 -1
- package/dist/chunk-I6IOGZSZ.js.map +0 -1
- package/dist/chunk-JFF7P4LC.js.map +0 -1
- package/dist/chunk-KQOU4POU.js.map +0 -1
- package/dist/chunk-M3GQ2R3E.js.map +0 -1
- package/dist/chunk-PGY5XROM.js.map +0 -1
- package/dist/chunk-QB5HHTAA.js.map +0 -1
- package/dist/chunk-RFKDGJAJ.js.map +0 -1
- package/dist/chunk-SPFHPHYL.js.map +0 -1
- package/dist/chunk-U2W5SENM.js.map +0 -1
- package/dist/chunk-UAD3SC27.js +0 -107
- package/dist/chunk-UAD3SC27.js.map +0 -1
- package/dist/chunk-WBHPCBVN.js.map +0 -1
- package/dist/chunk-WFFV254H.js.map +0 -1
- package/dist/chunk-XDSVV5GZ.js.map +0 -1
- package/dist/chunk-YZTWZVGX.js.map +0 -1
- package/dist/commands/config/get.js +0 -61
- package/dist/commands/config/get.js.map +0 -1
- package/dist/commands/config/set-project.js +0 -61
- package/dist/commands/config/set-project.js.map +0 -1
- package/dist/commands/config/unset-project.js +0 -57
- package/dist/commands/config/unset-project.js.map +0 -1
- package/dist/config/skill-categories.yaml +0 -344
- package/dist/config/skill-rules.yaml +0 -740
- package/dist/config/stacks.yaml +0 -1864
- package/dist/source-manager-BVB2SG73.js +0 -16
- /package/dist/{chunk-YDYRAXSY.js.map → chunk-52M2XF3W.js.map} +0 -0
- /package/dist/{chunk-RA2IPRO2.js.map → chunk-AJJJE7F7.js.map} +0 -0
- /package/dist/{chunk-4R52TQ3K.js.map → chunk-AX3SZZWA.js.map} +0 -0
- /package/dist/{chunk-DCE423KO.js.map → chunk-BMJZBLP7.js.map} +0 -0
- /package/dist/{chunk-GBOW6FUW.js.map → chunk-BNQ5O6LE.js.map} +0 -0
- /package/dist/{chunk-KAO3LKB5.js.map → chunk-C577AJE7.js.map} +0 -0
- /package/dist/{chunk-C3Q43WLC.js.map → chunk-CIG7IKX3.js.map} +0 -0
- /package/dist/{chunk-RDWGYKDY.js.map → chunk-K6OLORQL.js.map} +0 -0
- /package/dist/{chunk-CMNKHDOX.js.map → chunk-MGNYPVOJ.js.map} +0 -0
- /package/dist/{chunk-5FPIKTSA.js.map → chunk-MKCHLXMY.js.map} +0 -0
- /package/dist/{chunk-U7X4V4HE.js.map → chunk-MMFQNJPE.js.map} +0 -0
- /package/dist/{chunk-QYLCINGC.js.map → chunk-SDKCQXWE.js.map} +0 -0
- /package/dist/{chunk-3VOL4WEG.js.map → chunk-WYVDNGJB.js.map} +0 -0
- /package/dist/{chunk-WJHFV6RI.js.map → chunk-X5EG4EFP.js.map} +0 -0
- /package/dist/{chunk-JWYRXE6C.js.map → chunk-XUDTFI4M.js.map} +0 -0
- /package/dist/{source-manager-BVB2SG73.js.map → loader-2O32KKAQ.js.map} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
TEST_CATEGORIES,
|
|
4
|
+
TEST_SKILLS,
|
|
3
5
|
createMockMatrix,
|
|
4
6
|
getTestSkill
|
|
5
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-7FMEMXJ4.js";
|
|
6
8
|
import {
|
|
7
9
|
beforeEach,
|
|
8
10
|
describe,
|
|
@@ -11,16 +13,17 @@ import {
|
|
|
11
13
|
} from "../chunk-XY3XDVMI.js";
|
|
12
14
|
import {
|
|
13
15
|
useWizardStore
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
16
|
-
import "../chunk-
|
|
16
|
+
} from "../chunk-WF6RM73R.js";
|
|
17
|
+
import "../chunk-TZXYBG3R.js";
|
|
18
|
+
import "../chunk-OCEFD7V6.js";
|
|
17
19
|
import {
|
|
18
20
|
typedKeys
|
|
19
21
|
} from "../chunk-T4EXUIBY.js";
|
|
20
|
-
import "../chunk-
|
|
22
|
+
import "../chunk-LWXRUR6B.js";
|
|
21
23
|
import {
|
|
22
24
|
DEFAULT_PRESELECTED_SKILLS
|
|
23
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-6OWHQ7HM.js";
|
|
26
|
+
import "../chunk-EC3UJRKZ.js";
|
|
24
27
|
import {
|
|
25
28
|
init_esm_shims
|
|
26
29
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -47,9 +50,13 @@ describe("WizardStore", () => {
|
|
|
47
50
|
const { selectedStackId } = useWizardStore.getState();
|
|
48
51
|
globalExpect(selectedStackId).toBeNull();
|
|
49
52
|
});
|
|
50
|
-
it("should
|
|
51
|
-
const {
|
|
52
|
-
globalExpect(
|
|
53
|
+
it("should have empty skillConfigs", () => {
|
|
54
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
55
|
+
globalExpect(skillConfigs).toEqual([]);
|
|
56
|
+
});
|
|
57
|
+
it("should have null focusedSkillId", () => {
|
|
58
|
+
const { focusedSkillId } = useWizardStore.getState();
|
|
59
|
+
globalExpect(focusedSkillId).toBeNull();
|
|
53
60
|
});
|
|
54
61
|
it("should have empty navigation history", () => {
|
|
55
62
|
const { history } = useWizardStore.getState();
|
|
@@ -216,12 +223,12 @@ describe("WizardStore", () => {
|
|
|
216
223
|
it("should restore stack skills when re-toggling a domain ON after populateFromSkillIds", () => {
|
|
217
224
|
const store = useWizardStore.getState();
|
|
218
225
|
const skills = {
|
|
219
|
-
"web-framework-react":
|
|
220
|
-
"api-framework-hono":
|
|
226
|
+
"web-framework-react": TEST_SKILLS.react,
|
|
227
|
+
"api-framework-hono": TEST_SKILLS.hono
|
|
221
228
|
};
|
|
222
229
|
const categories = {
|
|
223
|
-
"web-framework":
|
|
224
|
-
"api-api":
|
|
230
|
+
"web-framework": TEST_CATEGORIES.framework,
|
|
231
|
+
"api-api": TEST_CATEGORIES.api
|
|
225
232
|
};
|
|
226
233
|
store.populateFromSkillIds(["web-framework-react", "api-framework-hono"], skills, categories);
|
|
227
234
|
store.toggleDomain("web");
|
|
@@ -349,19 +356,6 @@ describe("WizardStore", () => {
|
|
|
349
356
|
});
|
|
350
357
|
});
|
|
351
358
|
describe("mode toggles", () => {
|
|
352
|
-
it("should toggle install mode to plugin", () => {
|
|
353
|
-
const store = useWizardStore.getState();
|
|
354
|
-
store.toggleInstallMode();
|
|
355
|
-
const { installMode } = useWizardStore.getState();
|
|
356
|
-
globalExpect(installMode).toBe("plugin");
|
|
357
|
-
});
|
|
358
|
-
it("should toggle install mode back to local", () => {
|
|
359
|
-
const store = useWizardStore.getState();
|
|
360
|
-
store.toggleInstallMode();
|
|
361
|
-
store.toggleInstallMode();
|
|
362
|
-
const { installMode } = useWizardStore.getState();
|
|
363
|
-
globalExpect(installMode).toBe("local");
|
|
364
|
-
});
|
|
365
359
|
it("should toggle show labels", () => {
|
|
366
360
|
const store = useWizardStore.getState();
|
|
367
361
|
store.toggleShowLabels();
|
|
@@ -417,28 +411,175 @@ describe("WizardStore", () => {
|
|
|
417
411
|
globalExpect(showSettings).toBe(false);
|
|
418
412
|
});
|
|
419
413
|
});
|
|
420
|
-
describe("
|
|
421
|
-
it("should
|
|
422
|
-
useWizardStore.
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
useWizardStore.getState()
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
const
|
|
441
|
-
|
|
414
|
+
describe("skillConfigs and per-skill scope", () => {
|
|
415
|
+
it("should sync skillConfigs when toggling a technology on", () => {
|
|
416
|
+
const store = useWizardStore.getState();
|
|
417
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
418
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
419
|
+
globalExpect(skillConfigs).toHaveLength(1);
|
|
420
|
+
globalExpect(skillConfigs[0]).toEqual({
|
|
421
|
+
id: "web-framework-react",
|
|
422
|
+
scope: "project",
|
|
423
|
+
source: "agents-inc"
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
it("should remove from skillConfigs when toggling a technology off", () => {
|
|
427
|
+
const store = useWizardStore.getState();
|
|
428
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
429
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
430
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
431
|
+
globalExpect(skillConfigs).toHaveLength(0);
|
|
432
|
+
});
|
|
433
|
+
it("should replace skillConfigs entry in exclusive mode", () => {
|
|
434
|
+
const store = useWizardStore.getState();
|
|
435
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
436
|
+
store.toggleTechnology("web", "web-framework", "web-framework-vue", true);
|
|
437
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
438
|
+
globalExpect(skillConfigs).toHaveLength(1);
|
|
439
|
+
globalExpect(skillConfigs[0].id).toBe("web-framework-vue");
|
|
440
|
+
});
|
|
441
|
+
it("should accumulate skillConfigs in non-exclusive mode", () => {
|
|
442
|
+
const store = useWizardStore.getState();
|
|
443
|
+
store.toggleTechnology("web", "web-testing", "web-testing-vitest", false);
|
|
444
|
+
store.toggleTechnology("web", "web-testing", "web-testing-playwright-e2e", false);
|
|
445
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
446
|
+
globalExpect(skillConfigs).toHaveLength(2);
|
|
447
|
+
globalExpect(skillConfigs.map((sc) => sc.id)).toEqual([
|
|
448
|
+
"web-testing-vitest",
|
|
449
|
+
"web-testing-playwright-e2e"
|
|
450
|
+
]);
|
|
451
|
+
});
|
|
452
|
+
it("should toggle skill scope between project and global", () => {
|
|
453
|
+
const store = useWizardStore.getState();
|
|
454
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
455
|
+
store.toggleSkillScope("web-framework-react");
|
|
456
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
457
|
+
globalExpect(skillConfigs[0].scope).toBe("global");
|
|
458
|
+
});
|
|
459
|
+
it("should toggle skill scope back to project", () => {
|
|
460
|
+
const store = useWizardStore.getState();
|
|
461
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
462
|
+
store.toggleSkillScope("web-framework-react");
|
|
463
|
+
store.toggleSkillScope("web-framework-react");
|
|
464
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
465
|
+
globalExpect(skillConfigs[0].scope).toBe("project");
|
|
466
|
+
});
|
|
467
|
+
it("should update source via setSkillSource", () => {
|
|
468
|
+
const store = useWizardStore.getState();
|
|
469
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
470
|
+
store.setSkillSource("web-framework-react", "local");
|
|
471
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
472
|
+
globalExpect(skillConfigs[0].source).toBe("local");
|
|
473
|
+
});
|
|
474
|
+
it("should set and clear focusedSkillId", () => {
|
|
475
|
+
const store = useWizardStore.getState();
|
|
476
|
+
store.setFocusedSkillId("web-framework-react");
|
|
477
|
+
globalExpect(useWizardStore.getState().focusedSkillId).toBe("web-framework-react");
|
|
478
|
+
store.setFocusedSkillId(null);
|
|
479
|
+
globalExpect(useWizardStore.getState().focusedSkillId).toBeNull();
|
|
480
|
+
});
|
|
481
|
+
it("should update source via setSourceSelection on skillConfigs", () => {
|
|
482
|
+
const store = useWizardStore.getState();
|
|
483
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
484
|
+
store.setSourceSelection("web-framework-react", "local");
|
|
485
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
486
|
+
globalExpect(skillConfigs[0].source).toBe("local");
|
|
487
|
+
});
|
|
488
|
+
it("should populate skillConfigs from populateFromStack", () => {
|
|
489
|
+
const store = useWizardStore.getState();
|
|
490
|
+
const stack = {
|
|
491
|
+
agents: {
|
|
492
|
+
web: {
|
|
493
|
+
"web-framework": [sa("web-framework-react", true)],
|
|
494
|
+
"web-client-state": [sa("web-state-zustand")]
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
const categories = {
|
|
499
|
+
"web-framework": { domain: "web" },
|
|
500
|
+
"web-client-state": { domain: "web" }
|
|
501
|
+
};
|
|
502
|
+
store.populateFromStack(stack, categories);
|
|
503
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
504
|
+
globalExpect(skillConfigs).toHaveLength(2);
|
|
505
|
+
globalExpect(skillConfigs.map((sc) => sc.id)).toEqual(["web-framework-react", "web-state-zustand"]);
|
|
506
|
+
globalExpect(skillConfigs.every((sc) => sc.scope === "project")).toBe(true);
|
|
507
|
+
globalExpect(skillConfigs.every((sc) => sc.source === "agents-inc")).toBe(true);
|
|
508
|
+
});
|
|
509
|
+
it("should populate skillConfigs from populateFromSkillIds", () => {
|
|
510
|
+
const store = useWizardStore.getState();
|
|
511
|
+
const skills = {
|
|
512
|
+
"web-framework-react": TEST_SKILLS.react,
|
|
513
|
+
"api-framework-hono": TEST_SKILLS.hono
|
|
514
|
+
};
|
|
515
|
+
const categories = {
|
|
516
|
+
"web-framework": TEST_CATEGORIES.framework,
|
|
517
|
+
"api-api": TEST_CATEGORIES.api
|
|
518
|
+
};
|
|
519
|
+
store.populateFromSkillIds(["web-framework-react", "api-framework-hono"], skills, categories);
|
|
520
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
521
|
+
globalExpect(skillConfigs).toHaveLength(2);
|
|
522
|
+
globalExpect(skillConfigs.map((sc) => sc.id)).toEqual([
|
|
523
|
+
"web-framework-react",
|
|
524
|
+
"api-framework-hono"
|
|
525
|
+
]);
|
|
526
|
+
});
|
|
527
|
+
it("should remove skillConfigs when domain is deselected", () => {
|
|
528
|
+
const store = useWizardStore.getState();
|
|
529
|
+
store.toggleDomain("web");
|
|
530
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
531
|
+
globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
|
|
532
|
+
store.toggleDomain("web");
|
|
533
|
+
globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(0);
|
|
534
|
+
});
|
|
535
|
+
it("should restore skillConfigs when domain is re-toggled after populateFromStack", () => {
|
|
536
|
+
const store = useWizardStore.getState();
|
|
537
|
+
const stack = {
|
|
538
|
+
agents: {
|
|
539
|
+
web: { "web-framework": [sa("web-framework-react", true)] }
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
const categories = {
|
|
543
|
+
"web-framework": { domain: "web" }
|
|
544
|
+
};
|
|
545
|
+
store.populateFromStack(stack, categories);
|
|
546
|
+
globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
|
|
547
|
+
store.toggleDomain("web");
|
|
548
|
+
globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(0);
|
|
549
|
+
store.toggleDomain("web");
|
|
550
|
+
globalExpect(useWizardStore.getState().skillConfigs).toHaveLength(1);
|
|
551
|
+
globalExpect(useWizardStore.getState().skillConfigs[0].id).toBe("web-framework-react");
|
|
552
|
+
});
|
|
553
|
+
it("should reset skillConfigs and focusedSkillId on reset", () => {
|
|
554
|
+
const store = useWizardStore.getState();
|
|
555
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
556
|
+
store.setFocusedSkillId("web-framework-react");
|
|
557
|
+
store.reset();
|
|
558
|
+
const state = useWizardStore.getState();
|
|
559
|
+
globalExpect(state.skillConfigs).toEqual([]);
|
|
560
|
+
globalExpect(state.focusedSkillId).toBeNull();
|
|
561
|
+
});
|
|
562
|
+
it("should set all sources to local via setAllSourcesLocal", () => {
|
|
563
|
+
const store = useWizardStore.getState();
|
|
564
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
565
|
+
store.toggleTechnology("api", "api-api", "api-framework-hono", true);
|
|
566
|
+
store.setAllSourcesLocal();
|
|
567
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
568
|
+
globalExpect(skillConfigs.every((sc) => sc.source === "local")).toBe(true);
|
|
569
|
+
});
|
|
570
|
+
it("should set all sources to plugin via setAllSourcesPlugin", () => {
|
|
571
|
+
const store = useWizardStore.getState();
|
|
572
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
573
|
+
store.setSourceSelection("web-framework-react", "local");
|
|
574
|
+
const matrix = createMockMatrix({
|
|
575
|
+
"web-framework-react": {
|
|
576
|
+
...getTestSkill("react"),
|
|
577
|
+
availableSources: [{ name: "Acme Corp", type: "private", installed: false }]
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
store.setAllSourcesPlugin(matrix);
|
|
581
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
582
|
+
globalExpect(skillConfigs[0].source).toBe("Acme Corp");
|
|
442
583
|
});
|
|
443
584
|
});
|
|
444
585
|
describe("computed getters", () => {
|
|
@@ -474,7 +615,7 @@ describe("WizardStore", () => {
|
|
|
474
615
|
const perDomain = store.getSelectedTechnologiesPerDomain();
|
|
475
616
|
globalExpect(perDomain).toEqual({});
|
|
476
617
|
});
|
|
477
|
-
it("should omit domains with empty
|
|
618
|
+
it("should omit domains with empty category arrays from getSelectedTechnologiesPerDomain", () => {
|
|
478
619
|
const store = useWizardStore.getState();
|
|
479
620
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
480
621
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
@@ -540,7 +681,6 @@ describe("WizardStore", () => {
|
|
|
540
681
|
globalExpect(state.approach).toBeNull();
|
|
541
682
|
globalExpect(state.selectedStackId).toBeNull();
|
|
542
683
|
globalExpect(state.selectedDomains).toEqual([]);
|
|
543
|
-
globalExpect(state.installMode).toBe("local");
|
|
544
684
|
globalExpect(state.history).toEqual([]);
|
|
545
685
|
});
|
|
546
686
|
});
|
|
@@ -598,7 +738,7 @@ describe("WizardStore", () => {
|
|
|
598
738
|
const { domainSelections } = useWizardStore.getState();
|
|
599
739
|
globalExpect(typedKeys(domainSelections)).toHaveLength(0);
|
|
600
740
|
});
|
|
601
|
-
it("should populate multiple skills from array-valued
|
|
741
|
+
it("should populate multiple skills from array-valued categories", () => {
|
|
602
742
|
const store = useWizardStore.getState();
|
|
603
743
|
const stack = {
|
|
604
744
|
agents: {
|
|
@@ -754,7 +894,7 @@ describe("WizardStore", () => {
|
|
|
754
894
|
const skill = {
|
|
755
895
|
...getTestSkill("react"),
|
|
756
896
|
availableSources: [
|
|
757
|
-
makeSource({ name: "
|
|
897
|
+
makeSource({ name: "agents-inc", type: "public" }),
|
|
758
898
|
makeSource({ name: "Acme Corp", type: "private", primary: true })
|
|
759
899
|
]
|
|
760
900
|
};
|
|
@@ -762,8 +902,9 @@ describe("WizardStore", () => {
|
|
|
762
902
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
763
903
|
const rows = store.buildSourceRows(matrix);
|
|
764
904
|
globalExpect(rows).toHaveLength(1);
|
|
765
|
-
globalExpect(rows[0].options[0].id).toBe("
|
|
766
|
-
globalExpect(rows[0].options[1].id).toBe("
|
|
905
|
+
globalExpect(rows[0].options[0].id).toBe("local");
|
|
906
|
+
globalExpect(rows[0].options[1].id).toBe("Acme Corp");
|
|
907
|
+
globalExpect(rows[0].options[2].id).toBe("agents-inc");
|
|
767
908
|
});
|
|
768
909
|
it("should sort default public marketplace before third-party sources", () => {
|
|
769
910
|
const store = useWizardStore.getState();
|
|
@@ -771,15 +912,16 @@ describe("WizardStore", () => {
|
|
|
771
912
|
...getTestSkill("react"),
|
|
772
913
|
availableSources: [
|
|
773
914
|
makeSource({ name: "Extra Corp", type: "private" }),
|
|
774
|
-
makeSource({ name: "
|
|
915
|
+
makeSource({ name: "agents-inc", type: "public" })
|
|
775
916
|
]
|
|
776
917
|
};
|
|
777
918
|
const matrix = createMockMatrix({ "web-framework-react": skill });
|
|
778
919
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
779
920
|
const rows = store.buildSourceRows(matrix);
|
|
780
921
|
globalExpect(rows).toHaveLength(1);
|
|
781
|
-
globalExpect(rows[0].options[0].id).toBe("
|
|
782
|
-
globalExpect(rows[0].options[1].id).toBe("
|
|
922
|
+
globalExpect(rows[0].options[0].id).toBe("local");
|
|
923
|
+
globalExpect(rows[0].options[1].id).toBe("agents-inc");
|
|
924
|
+
globalExpect(rows[0].options[2].id).toBe("Extra Corp");
|
|
783
925
|
});
|
|
784
926
|
it("should sort all four tiers in correct order", () => {
|
|
785
927
|
const store = useWizardStore.getState();
|
|
@@ -787,7 +929,7 @@ describe("WizardStore", () => {
|
|
|
787
929
|
...getTestSkill("react"),
|
|
788
930
|
availableSources: [
|
|
789
931
|
makeSource({ name: "Extra Corp", type: "private" }),
|
|
790
|
-
makeSource({ name: "
|
|
932
|
+
makeSource({ name: "agents-inc", type: "public" }),
|
|
791
933
|
makeSource({ name: "Acme Corp", type: "private", primary: true }),
|
|
792
934
|
makeSource({ name: "local", type: "local", installed: true, installMode: "local" })
|
|
793
935
|
]
|
|
@@ -797,7 +939,7 @@ describe("WizardStore", () => {
|
|
|
797
939
|
const rows = store.buildSourceRows(matrix);
|
|
798
940
|
globalExpect(rows).toHaveLength(1);
|
|
799
941
|
const sourceNames = rows[0].options.map((opt) => opt.id);
|
|
800
|
-
globalExpect(sourceNames).toEqual(["local", "Acme Corp", "
|
|
942
|
+
globalExpect(sourceNames).toEqual(["local", "Acme Corp", "agents-inc", "Extra Corp"]);
|
|
801
943
|
});
|
|
802
944
|
});
|
|
803
945
|
describe("agent selection", () => {
|
|
@@ -834,6 +976,59 @@ describe("WizardStore", () => {
|
|
|
834
976
|
globalExpect(selectedAgents).toEqual([]);
|
|
835
977
|
});
|
|
836
978
|
});
|
|
979
|
+
describe("agentConfigs and scope management", () => {
|
|
980
|
+
it("should have empty agentConfigs initially", () => {
|
|
981
|
+
const { agentConfigs } = useWizardStore.getState();
|
|
982
|
+
globalExpect(agentConfigs).toEqual([]);
|
|
983
|
+
});
|
|
984
|
+
it("should sync agentConfigs when toggleAgent is called", () => {
|
|
985
|
+
const store = useWizardStore.getState();
|
|
986
|
+
store.toggleAgent("web-developer");
|
|
987
|
+
const { agentConfigs } = useWizardStore.getState();
|
|
988
|
+
globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "project" }]);
|
|
989
|
+
});
|
|
990
|
+
it("should remove from agentConfigs when agent is toggled off", () => {
|
|
991
|
+
const store = useWizardStore.getState();
|
|
992
|
+
store.toggleAgent("web-developer");
|
|
993
|
+
store.toggleAgent("web-developer");
|
|
994
|
+
const { agentConfigs } = useWizardStore.getState();
|
|
995
|
+
globalExpect(agentConfigs).toEqual([]);
|
|
996
|
+
});
|
|
997
|
+
it("should toggle agent scope between project and global", () => {
|
|
998
|
+
const store = useWizardStore.getState();
|
|
999
|
+
store.toggleAgent("web-developer");
|
|
1000
|
+
store.toggleAgentScope("web-developer");
|
|
1001
|
+
const { agentConfigs } = useWizardStore.getState();
|
|
1002
|
+
globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "global" }]);
|
|
1003
|
+
store.toggleAgentScope("web-developer");
|
|
1004
|
+
globalExpect(useWizardStore.getState().agentConfigs).toEqual([
|
|
1005
|
+
{ name: "web-developer", scope: "project" }
|
|
1006
|
+
]);
|
|
1007
|
+
});
|
|
1008
|
+
it("should set and clear focusedAgentId", () => {
|
|
1009
|
+
const store = useWizardStore.getState();
|
|
1010
|
+
store.setFocusedAgentId("web-developer");
|
|
1011
|
+
globalExpect(useWizardStore.getState().focusedAgentId).toBe("web-developer");
|
|
1012
|
+
store.setFocusedAgentId(null);
|
|
1013
|
+
globalExpect(useWizardStore.getState().focusedAgentId).toBeNull();
|
|
1014
|
+
});
|
|
1015
|
+
it("should not toggle locked agents", () => {
|
|
1016
|
+
useWizardStore.setState({ lockedAgentNames: ["web-developer"] });
|
|
1017
|
+
const store = useWizardStore.getState();
|
|
1018
|
+
store.toggleAgent("web-developer");
|
|
1019
|
+
const { selectedAgents, agentConfigs } = useWizardStore.getState();
|
|
1020
|
+
globalExpect(selectedAgents).toEqual([]);
|
|
1021
|
+
globalExpect(agentConfigs).toEqual([]);
|
|
1022
|
+
});
|
|
1023
|
+
it("should not toggle scope of locked agents", () => {
|
|
1024
|
+
const store = useWizardStore.getState();
|
|
1025
|
+
store.toggleAgent("web-developer");
|
|
1026
|
+
useWizardStore.setState({ lockedAgentNames: ["web-developer"] });
|
|
1027
|
+
store.toggleAgentScope("web-developer");
|
|
1028
|
+
const { agentConfigs } = useWizardStore.getState();
|
|
1029
|
+
globalExpect(agentConfigs).toEqual([{ name: "web-developer", scope: "project" }]);
|
|
1030
|
+
});
|
|
1031
|
+
});
|
|
837
1032
|
describe("preselectAgentsFromDomains", () => {
|
|
838
1033
|
it("should preselect web-related agents when web domain is selected", () => {
|
|
839
1034
|
const store = useWizardStore.getState();
|
|
@@ -959,5 +1154,50 @@ describe("WizardStore", () => {
|
|
|
959
1154
|
globalExpect(skippedSteps).toContain("sources");
|
|
960
1155
|
});
|
|
961
1156
|
});
|
|
1157
|
+
describe("deriveInstallMode", () => {
|
|
1158
|
+
it("should return 'plugin' when all skills have default marketplace source", () => {
|
|
1159
|
+
const store = useWizardStore.getState();
|
|
1160
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
1161
|
+
store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
|
|
1162
|
+
const result = store.deriveInstallMode();
|
|
1163
|
+
globalExpect(result).toBe("plugin");
|
|
1164
|
+
});
|
|
1165
|
+
it("should return 'local' when all skills are set to local", () => {
|
|
1166
|
+
const store = useWizardStore.getState();
|
|
1167
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
1168
|
+
store.toggleTechnology("api", "api-api", "api-framework-hono", true);
|
|
1169
|
+
store.setSourceSelection("web-framework-react", "local");
|
|
1170
|
+
store.setSourceSelection("api-framework-hono", "local");
|
|
1171
|
+
const result = store.deriveInstallMode();
|
|
1172
|
+
globalExpect(result).toBe("local");
|
|
1173
|
+
});
|
|
1174
|
+
it("should return 'mixed' when some skills are local and some are not", () => {
|
|
1175
|
+
const store = useWizardStore.getState();
|
|
1176
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
1177
|
+
store.toggleTechnology("api", "api-api", "api-framework-hono", true);
|
|
1178
|
+
store.setSourceSelection("web-framework-react", "local");
|
|
1179
|
+
store.setSourceSelection("api-framework-hono", "agents-inc");
|
|
1180
|
+
const result = store.deriveInstallMode();
|
|
1181
|
+
globalExpect(result).toBe("mixed");
|
|
1182
|
+
});
|
|
1183
|
+
it("should return 'local' when no skills are configured", () => {
|
|
1184
|
+
const store = useWizardStore.getState();
|
|
1185
|
+
const result = store.deriveInstallMode();
|
|
1186
|
+
globalExpect(result).toBe("local");
|
|
1187
|
+
});
|
|
1188
|
+
it("should handle single skill as local", () => {
|
|
1189
|
+
const store = useWizardStore.getState();
|
|
1190
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
1191
|
+
store.setSourceSelection("web-framework-react", "local");
|
|
1192
|
+
const result = store.deriveInstallMode();
|
|
1193
|
+
globalExpect(result).toBe("local");
|
|
1194
|
+
});
|
|
1195
|
+
it("should handle single skill as plugin", () => {
|
|
1196
|
+
const store = useWizardStore.getState();
|
|
1197
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
1198
|
+
const result = store.deriveInstallMode();
|
|
1199
|
+
globalExpect(result).toBe("plugin");
|
|
1200
|
+
});
|
|
1201
|
+
});
|
|
962
1202
|
});
|
|
963
1203
|
//# sourceMappingURL=wizard-store.test.js.map
|