@agents-inc/cli 0.48.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 +181 -5
- package/README.md +1 -2
- package/dist/{chunk-2DNDAXF6.js → chunk-52M2XF3W.js} +57 -27
- package/dist/chunk-52M2XF3W.js.map +1 -0
- package/dist/{chunk-WSGKCBY5.js → chunk-52XO4ULK.js} +6 -9
- package/dist/chunk-52XO4ULK.js.map +1 -0
- package/dist/{chunk-AMNCCZSG.js → chunk-6G3KZSO4.js} +82 -63
- package/dist/chunk-6G3KZSO4.js.map +1 -0
- package/dist/{chunk-LESHL6SM.js → chunk-6OWHQ7HM.js} +21 -13
- package/dist/chunk-6OWHQ7HM.js.map +1 -0
- package/dist/{chunk-X3SZIBVW.js → chunk-7FMEMXJ4.js} +71 -71
- package/dist/chunk-7FMEMXJ4.js.map +1 -0
- package/dist/{chunk-I52THVF6.js → chunk-AJJJE7F7.js} +2 -2
- package/dist/{chunk-ZML3OCYA.js → chunk-AX3SZZWA.js} +2 -2
- package/dist/{chunk-NJVJ7VO5.js → chunk-BFD5NZQ4.js} +5 -4
- package/dist/chunk-BFD5NZQ4.js.map +1 -0
- package/dist/{chunk-GSPPOXMG.js → chunk-BKJHAJQW.js} +2 -2
- package/dist/{chunk-GSPPOXMG.js.map → chunk-BKJHAJQW.js.map} +1 -1
- package/dist/{chunk-FPTUCWBY.js → chunk-BMJZBLP7.js} +46 -30
- package/dist/chunk-BMJZBLP7.js.map +1 -0
- package/dist/chunk-BNQ5O6LE.js +74 -0
- package/dist/chunk-BNQ5O6LE.js.map +1 -0
- package/dist/{chunk-W62XVWXB.js → chunk-C577AJE7.js} +3 -3
- package/dist/chunk-CIG7IKX3.js +118 -0
- package/dist/chunk-CIG7IKX3.js.map +1 -0
- package/dist/chunk-EC3UJRKZ.js +1534 -0
- package/dist/chunk-EC3UJRKZ.js.map +1 -0
- package/dist/{chunk-IS7GP6XC.js → chunk-EMIUPGPL.js} +57 -52
- package/dist/chunk-EMIUPGPL.js.map +1 -0
- package/dist/chunk-G6WHCALR.js +593 -0
- package/dist/chunk-G6WHCALR.js.map +1 -0
- package/dist/{chunk-OTTITQ7C.js → chunk-H7WJK7NJ.js} +48 -95
- 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-G5OZQ376.js → chunk-K6OLORQL.js} +6 -6
- package/dist/{chunk-OHDEJEYB.js → chunk-KIWFEBKH.js} +41 -11
- package/dist/chunk-KIWFEBKH.js.map +1 -0
- package/dist/{chunk-YMUWTPOM.js → chunk-LWXRUR6B.js} +92 -100
- package/dist/chunk-LWXRUR6B.js.map +1 -0
- package/dist/{chunk-U2AEK4ZL.js → chunk-MGNYPVOJ.js} +2 -2
- package/dist/chunk-MKCHLXMY.js +40 -0
- package/dist/chunk-MKCHLXMY.js.map +1 -0
- package/dist/{chunk-37QYD33C.js → chunk-MMFQNJPE.js} +2 -2
- package/dist/{chunk-DG2U2WY3.js → chunk-MR6OBL3B.js} +3 -11
- package/dist/{chunk-DG2U2WY3.js.map → chunk-MR6OBL3B.js.map} +1 -1
- package/dist/{chunk-7IAKVZL5.js → chunk-O6BA7Q2B.js} +28 -59
- 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-RO6LX3UV.js +342 -0
- package/dist/chunk-RO6LX3UV.js.map +1 -0
- package/dist/{chunk-34BP5BC4.js → chunk-SDKCQXWE.js} +2 -2
- package/dist/{chunk-VBAAATPU.js → chunk-SEJF7CGJ.js} +41 -28
- package/dist/chunk-SEJF7CGJ.js.map +1 -0
- package/dist/{chunk-5O6GKXAN.js → chunk-SZRK3VOR.js} +24 -14
- package/dist/chunk-SZRK3VOR.js.map +1 -0
- package/dist/{chunk-5MN5S3DV.js → chunk-TC3NHO34.js} +22 -17
- package/dist/chunk-TC3NHO34.js.map +1 -0
- package/dist/{chunk-SPVSWDFM.js → chunk-TGLRDEEL.js} +8 -14
- package/dist/chunk-TGLRDEEL.js.map +1 -0
- package/dist/{chunk-P2SFRDWI.js → chunk-TZXYBG3R.js} +3634 -2875
- package/dist/chunk-TZXYBG3R.js.map +1 -0
- package/dist/{chunk-2BVZOYJP.js → chunk-VR3CDXDT.js} +2 -6
- package/dist/chunk-VR3CDXDT.js.map +1 -0
- package/dist/{chunk-KPJJOLAQ.js → chunk-WF6RM73R.js} +272 -40
- package/dist/chunk-WF6RM73R.js.map +1 -0
- package/dist/chunk-WYVDNGJB.js +31 -0
- package/dist/chunk-WYVDNGJB.js.map +1 -0
- package/dist/{chunk-F7KTUFGU.js → chunk-X5EG4EFP.js} +3 -2
- package/dist/chunk-X5EG4EFP.js.map +1 -0
- package/dist/{chunk-FHKNG3UA.js → chunk-XUDTFI4M.js} +2 -2
- package/dist/{chunk-AXV7NFFJ.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 +45 -72
- 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 +196 -94
- 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 +41 -435
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +8 -6
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +28 -15
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +67 -31
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +17 -208
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +16 -10
- 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 +42 -267
- 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 -2
- package/dist/components/wizard/category-grid.test.js +113 -59
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +5 -3
- package/dist/components/wizard/checkbox-grid.test.js +6 -5
- package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +12 -9
- 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 -3
- package/dist/components/wizard/source-grid.test.js +5 -4
- 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 -8
- package/dist/components/wizard/step-agents.test.js +20 -18
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +11 -8
- package/dist/components/wizard/step-build.test.js +18 -36
- 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 -5
- package/dist/components/wizard/step-settings.test.js +13 -9
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +13 -10
- package/dist/components/wizard/step-sources.test.js +19 -16
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +16 -12
- package/dist/components/wizard/step-stack.test.js +18 -14
- 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 -25
- package/dist/config-exports.js +20 -0
- package/dist/config-exports.js.map +1 -0
- package/dist/hooks/init.js +56 -3
- 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/critical-reminders.md +1 -1
- package/dist/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
- package/dist/src/agents/meta/agent-summoner/examples.md +2 -2
- package/dist/src/agents/meta/agent-summoner/output-format.md +1 -1
- package/dist/src/agents/meta/agent-summoner/workflow.md +8 -10
- package/{src/agents/meta/documentor/agent.yaml → dist/src/agents/meta/documentor/metadata.yaml} +1 -0
- 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 +367 -75
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -1
- package/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
- package/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
- package/src/agents/meta/agent-summoner/examples.md +2 -2
- package/src/agents/meta/agent-summoner/output-format.md +1 -1
- package/src/agents/meta/agent-summoner/workflow.md +8 -10
- package/{dist/src/agents/meta/documentor/agent.yaml → src/agents/meta/documentor/metadata.yaml} +1 -0
- 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/agent.schema.json +1 -1
- package/src/schemas/metadata.schema.json +6 -0
- package/src/schemas/project-config.schema.json +0 -3
- 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 -1865
- package/dist/chunk-2BVZOYJP.js.map +0 -1
- package/dist/chunk-2DNDAXF6.js.map +0 -1
- package/dist/chunk-5MN5S3DV.js.map +0 -1
- package/dist/chunk-5O6GKXAN.js.map +0 -1
- package/dist/chunk-7IAKVZL5.js.map +0 -1
- package/dist/chunk-AMNCCZSG.js.map +0 -1
- package/dist/chunk-AXV7NFFJ.js.map +0 -1
- package/dist/chunk-AXZNJ5PN.js +0 -99
- package/dist/chunk-AXZNJ5PN.js.map +0 -1
- package/dist/chunk-C7DLY64D.js +0 -115
- package/dist/chunk-C7DLY64D.js.map +0 -1
- package/dist/chunk-F7KTUFGU.js.map +0 -1
- package/dist/chunk-FPTUCWBY.js.map +0 -1
- package/dist/chunk-IS7GP6XC.js.map +0 -1
- package/dist/chunk-KPJJOLAQ.js.map +0 -1
- package/dist/chunk-LESHL6SM.js.map +0 -1
- package/dist/chunk-NJVJ7VO5.js.map +0 -1
- package/dist/chunk-OHDEJEYB.js.map +0 -1
- package/dist/chunk-OTTITQ7C.js.map +0 -1
- package/dist/chunk-P2SFRDWI.js.map +0 -1
- package/dist/chunk-PY2XZUBF.js +0 -29
- package/dist/chunk-PY2XZUBF.js.map +0 -1
- package/dist/chunk-SPVSWDFM.js.map +0 -1
- package/dist/chunk-VBAAATPU.js.map +0 -1
- package/dist/chunk-WSGKCBY5.js.map +0 -1
- package/dist/chunk-X3SZIBVW.js.map +0 -1
- package/dist/chunk-YDASDMTH.js +0 -183
- package/dist/chunk-YDASDMTH.js.map +0 -1
- package/dist/chunk-YMUWTPOM.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 -1865
- package/dist/source-manager-Y7R6WPOW.js +0 -16
- package/dist/src/agents/migration/cli-migrator/agent.yaml +0 -12
- package/dist/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
- package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
- package/dist/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
- package/dist/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
- package/dist/src/agents/migration/cli-migrator/intro.md +0 -15
- package/dist/src/agents/migration/cli-migrator/output-format.md +0 -164
- package/dist/src/agents/migration/cli-migrator/workflow.md +0 -230
- package/src/agents/migration/cli-migrator/agent.yaml +0 -12
- package/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
- package/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
- package/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
- package/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
- package/src/agents/migration/cli-migrator/intro.md +0 -15
- package/src/agents/migration/cli-migrator/output-format.md +0 -164
- package/src/agents/migration/cli-migrator/workflow.md +0 -230
- /package/dist/{chunk-I52THVF6.js.map → chunk-AJJJE7F7.js.map} +0 -0
- /package/dist/{chunk-ZML3OCYA.js.map → chunk-AX3SZZWA.js.map} +0 -0
- /package/dist/{chunk-W62XVWXB.js.map → chunk-C577AJE7.js.map} +0 -0
- /package/dist/{chunk-G5OZQ376.js.map → chunk-K6OLORQL.js.map} +0 -0
- /package/dist/{chunk-U2AEK4ZL.js.map → chunk-MGNYPVOJ.js.map} +0 -0
- /package/dist/{chunk-37QYD33C.js.map → chunk-MMFQNJPE.js.map} +0 -0
- /package/dist/{chunk-34BP5BC4.js.map → chunk-SDKCQXWE.js.map} +0 -0
- /package/dist/{chunk-FHKNG3UA.js.map → chunk-XUDTFI4M.js.map} +0 -0
- /package/dist/{source-manager-Y7R6WPOW.js.map → loader-2O32KKAQ.js.map} +0 -0
- /package/dist/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
- /package/dist/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
- /package/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +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,13 +50,13 @@ describe("WizardStore", () => {
|
|
|
47
50
|
const { selectedStackId } = useWizardStore.getState();
|
|
48
51
|
globalExpect(selectedStackId).toBeNull();
|
|
49
52
|
});
|
|
50
|
-
it("should have
|
|
51
|
-
const {
|
|
52
|
-
globalExpect(
|
|
53
|
+
it("should have empty skillConfigs", () => {
|
|
54
|
+
const { skillConfigs } = useWizardStore.getState();
|
|
55
|
+
globalExpect(skillConfigs).toEqual([]);
|
|
53
56
|
});
|
|
54
|
-
it("should
|
|
55
|
-
const {
|
|
56
|
-
globalExpect(
|
|
57
|
+
it("should have null focusedSkillId", () => {
|
|
58
|
+
const { focusedSkillId } = useWizardStore.getState();
|
|
59
|
+
globalExpect(focusedSkillId).toBeNull();
|
|
57
60
|
});
|
|
58
61
|
it("should have empty navigation history", () => {
|
|
59
62
|
const { history } = useWizardStore.getState();
|
|
@@ -193,6 +196,78 @@ describe("WizardStore", () => {
|
|
|
193
196
|
globalExpect(store.getTechnologyCount()).toBe(1);
|
|
194
197
|
globalExpect(store.getAllSelectedTechnologies()).toEqual(["api-framework-hono"]);
|
|
195
198
|
});
|
|
199
|
+
it("should restore stack skills when re-toggling a domain ON after populateFromStack", () => {
|
|
200
|
+
const store = useWizardStore.getState();
|
|
201
|
+
const stack = {
|
|
202
|
+
agents: {
|
|
203
|
+
web: {
|
|
204
|
+
"web-framework": [sa("web-framework-react", true)],
|
|
205
|
+
"web-client-state": [sa("web-state-zustand")]
|
|
206
|
+
},
|
|
207
|
+
api: { "api-api": [sa("api-framework-hono", true)] }
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
const categories = {
|
|
211
|
+
"web-framework": { domain: "web" },
|
|
212
|
+
"web-client-state": { domain: "web" },
|
|
213
|
+
"api-api": { domain: "api" }
|
|
214
|
+
};
|
|
215
|
+
store.populateFromStack(stack, categories);
|
|
216
|
+
store.toggleDomain("web");
|
|
217
|
+
globalExpect(useWizardStore.getState().domainSelections.web).toBeUndefined();
|
|
218
|
+
store.toggleDomain("web");
|
|
219
|
+
const { domainSelections } = useWizardStore.getState();
|
|
220
|
+
globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
|
|
221
|
+
globalExpect(domainSelections.web["web-client-state"]).toEqual(["web-state-zustand"]);
|
|
222
|
+
});
|
|
223
|
+
it("should restore stack skills when re-toggling a domain ON after populateFromSkillIds", () => {
|
|
224
|
+
const store = useWizardStore.getState();
|
|
225
|
+
const skills = {
|
|
226
|
+
"web-framework-react": TEST_SKILLS.react,
|
|
227
|
+
"api-framework-hono": TEST_SKILLS.hono
|
|
228
|
+
};
|
|
229
|
+
const categories = {
|
|
230
|
+
"web-framework": TEST_CATEGORIES.framework,
|
|
231
|
+
"api-api": TEST_CATEGORIES.api
|
|
232
|
+
};
|
|
233
|
+
store.populateFromSkillIds(["web-framework-react", "api-framework-hono"], skills, categories);
|
|
234
|
+
store.toggleDomain("web");
|
|
235
|
+
globalExpect(useWizardStore.getState().domainSelections.web).toBeUndefined();
|
|
236
|
+
store.toggleDomain("web");
|
|
237
|
+
const { domainSelections } = useWizardStore.getState();
|
|
238
|
+
globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
|
|
239
|
+
});
|
|
240
|
+
it("should not restore skills when no stack was populated", () => {
|
|
241
|
+
const store = useWizardStore.getState();
|
|
242
|
+
store.toggleDomain("web");
|
|
243
|
+
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
244
|
+
store.toggleDomain("web");
|
|
245
|
+
store.toggleDomain("web");
|
|
246
|
+
const { domainSelections } = useWizardStore.getState();
|
|
247
|
+
globalExpect(domainSelections.web).toBeUndefined();
|
|
248
|
+
globalExpect(store.getAllSelectedTechnologies()).toEqual([]);
|
|
249
|
+
});
|
|
250
|
+
it("should not affect other domains when restoring stack skills for one domain", () => {
|
|
251
|
+
const store = useWizardStore.getState();
|
|
252
|
+
const stack = {
|
|
253
|
+
agents: {
|
|
254
|
+
web: { "web-framework": [sa("web-framework-react", true)] },
|
|
255
|
+
api: { "api-api": [sa("api-framework-hono", true)] }
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const categories = {
|
|
259
|
+
"web-framework": { domain: "web" },
|
|
260
|
+
"api-api": { domain: "api" }
|
|
261
|
+
};
|
|
262
|
+
store.populateFromStack(stack, categories);
|
|
263
|
+
store.toggleTechnology("api", "api-api", "api-framework-hono", true);
|
|
264
|
+
store.toggleTechnology("api", "api-api", "api-framework-express", true);
|
|
265
|
+
store.toggleDomain("web");
|
|
266
|
+
store.toggleDomain("web");
|
|
267
|
+
const { domainSelections } = useWizardStore.getState();
|
|
268
|
+
globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
|
|
269
|
+
globalExpect(domainSelections.api["api-api"]).toEqual(["api-framework-express"]);
|
|
270
|
+
});
|
|
196
271
|
});
|
|
197
272
|
describe("technology selection", () => {
|
|
198
273
|
it("should toggle technology in exclusive mode", () => {
|
|
@@ -281,32 +356,6 @@ describe("WizardStore", () => {
|
|
|
281
356
|
});
|
|
282
357
|
});
|
|
283
358
|
describe("mode toggles", () => {
|
|
284
|
-
it("should toggle expert mode on", () => {
|
|
285
|
-
const store = useWizardStore.getState();
|
|
286
|
-
store.toggleExpertMode();
|
|
287
|
-
const { expertMode } = useWizardStore.getState();
|
|
288
|
-
globalExpect(expertMode).toBe(true);
|
|
289
|
-
});
|
|
290
|
-
it("should toggle expert mode off", () => {
|
|
291
|
-
const store = useWizardStore.getState();
|
|
292
|
-
store.toggleExpertMode();
|
|
293
|
-
store.toggleExpertMode();
|
|
294
|
-
const { expertMode } = useWizardStore.getState();
|
|
295
|
-
globalExpect(expertMode).toBe(false);
|
|
296
|
-
});
|
|
297
|
-
it("should toggle install mode to plugin", () => {
|
|
298
|
-
const store = useWizardStore.getState();
|
|
299
|
-
store.toggleInstallMode();
|
|
300
|
-
const { installMode } = useWizardStore.getState();
|
|
301
|
-
globalExpect(installMode).toBe("plugin");
|
|
302
|
-
});
|
|
303
|
-
it("should toggle install mode back to local", () => {
|
|
304
|
-
const store = useWizardStore.getState();
|
|
305
|
-
store.toggleInstallMode();
|
|
306
|
-
store.toggleInstallMode();
|
|
307
|
-
const { installMode } = useWizardStore.getState();
|
|
308
|
-
globalExpect(installMode).toBe("local");
|
|
309
|
-
});
|
|
310
359
|
it("should toggle show labels", () => {
|
|
311
360
|
const store = useWizardStore.getState();
|
|
312
361
|
store.toggleShowLabels();
|
|
@@ -362,28 +411,175 @@ describe("WizardStore", () => {
|
|
|
362
411
|
globalExpect(showSettings).toBe(false);
|
|
363
412
|
});
|
|
364
413
|
});
|
|
365
|
-
describe("
|
|
366
|
-
it("should
|
|
367
|
-
useWizardStore.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
useWizardStore.getState()
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
const
|
|
386
|
-
|
|
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");
|
|
387
583
|
});
|
|
388
584
|
});
|
|
389
585
|
describe("computed getters", () => {
|
|
@@ -419,7 +615,7 @@ describe("WizardStore", () => {
|
|
|
419
615
|
const perDomain = store.getSelectedTechnologiesPerDomain();
|
|
420
616
|
globalExpect(perDomain).toEqual({});
|
|
421
617
|
});
|
|
422
|
-
it("should omit domains with empty
|
|
618
|
+
it("should omit domains with empty category arrays from getSelectedTechnologiesPerDomain", () => {
|
|
423
619
|
const store = useWizardStore.getState();
|
|
424
620
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
425
621
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
@@ -479,15 +675,12 @@ describe("WizardStore", () => {
|
|
|
479
675
|
store.setApproach("scratch");
|
|
480
676
|
store.selectStack("nextjs-fullstack");
|
|
481
677
|
store.toggleDomain("web");
|
|
482
|
-
store.toggleExpertMode();
|
|
483
678
|
store.reset();
|
|
484
679
|
const state = useWizardStore.getState();
|
|
485
680
|
globalExpect(state.step).toBe("stack");
|
|
486
681
|
globalExpect(state.approach).toBeNull();
|
|
487
682
|
globalExpect(state.selectedStackId).toBeNull();
|
|
488
683
|
globalExpect(state.selectedDomains).toEqual([]);
|
|
489
|
-
globalExpect(state.expertMode).toBe(false);
|
|
490
|
-
globalExpect(state.installMode).toBe("local");
|
|
491
684
|
globalExpect(state.history).toEqual([]);
|
|
492
685
|
});
|
|
493
686
|
});
|
|
@@ -504,7 +697,7 @@ describe("WizardStore", () => {
|
|
|
504
697
|
};
|
|
505
698
|
store.populateFromStack(stack, categories);
|
|
506
699
|
const { selectedDomains, domainSelections } = useWizardStore.getState();
|
|
507
|
-
globalExpect(selectedDomains).toEqual(["web", "api", "
|
|
700
|
+
globalExpect(selectedDomains).toEqual(["web", "api", "mobile", "cli", "shared"]);
|
|
508
701
|
globalExpect(domainSelections.web).toBeDefined();
|
|
509
702
|
globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
|
|
510
703
|
globalExpect(domainSelections.api).toBeUndefined();
|
|
@@ -545,7 +738,7 @@ describe("WizardStore", () => {
|
|
|
545
738
|
const { domainSelections } = useWizardStore.getState();
|
|
546
739
|
globalExpect(typedKeys(domainSelections)).toHaveLength(0);
|
|
547
740
|
});
|
|
548
|
-
it("should populate multiple skills from array-valued
|
|
741
|
+
it("should populate multiple skills from array-valued categories", () => {
|
|
549
742
|
const store = useWizardStore.getState();
|
|
550
743
|
const stack = {
|
|
551
744
|
agents: {
|
|
@@ -701,7 +894,7 @@ describe("WizardStore", () => {
|
|
|
701
894
|
const skill = {
|
|
702
895
|
...getTestSkill("react"),
|
|
703
896
|
availableSources: [
|
|
704
|
-
makeSource({ name: "
|
|
897
|
+
makeSource({ name: "agents-inc", type: "public" }),
|
|
705
898
|
makeSource({ name: "Acme Corp", type: "private", primary: true })
|
|
706
899
|
]
|
|
707
900
|
};
|
|
@@ -709,8 +902,9 @@ describe("WizardStore", () => {
|
|
|
709
902
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
710
903
|
const rows = store.buildSourceRows(matrix);
|
|
711
904
|
globalExpect(rows).toHaveLength(1);
|
|
712
|
-
globalExpect(rows[0].options[0].id).toBe("
|
|
713
|
-
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");
|
|
714
908
|
});
|
|
715
909
|
it("should sort default public marketplace before third-party sources", () => {
|
|
716
910
|
const store = useWizardStore.getState();
|
|
@@ -718,15 +912,16 @@ describe("WizardStore", () => {
|
|
|
718
912
|
...getTestSkill("react"),
|
|
719
913
|
availableSources: [
|
|
720
914
|
makeSource({ name: "Extra Corp", type: "private" }),
|
|
721
|
-
makeSource({ name: "
|
|
915
|
+
makeSource({ name: "agents-inc", type: "public" })
|
|
722
916
|
]
|
|
723
917
|
};
|
|
724
918
|
const matrix = createMockMatrix({ "web-framework-react": skill });
|
|
725
919
|
store.toggleTechnology("web", "web-framework", "web-framework-react", true);
|
|
726
920
|
const rows = store.buildSourceRows(matrix);
|
|
727
921
|
globalExpect(rows).toHaveLength(1);
|
|
728
|
-
globalExpect(rows[0].options[0].id).toBe("
|
|
729
|
-
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");
|
|
730
925
|
});
|
|
731
926
|
it("should sort all four tiers in correct order", () => {
|
|
732
927
|
const store = useWizardStore.getState();
|
|
@@ -734,7 +929,7 @@ describe("WizardStore", () => {
|
|
|
734
929
|
...getTestSkill("react"),
|
|
735
930
|
availableSources: [
|
|
736
931
|
makeSource({ name: "Extra Corp", type: "private" }),
|
|
737
|
-
makeSource({ name: "
|
|
932
|
+
makeSource({ name: "agents-inc", type: "public" }),
|
|
738
933
|
makeSource({ name: "Acme Corp", type: "private", primary: true }),
|
|
739
934
|
makeSource({ name: "local", type: "local", installed: true, installMode: "local" })
|
|
740
935
|
]
|
|
@@ -744,7 +939,7 @@ describe("WizardStore", () => {
|
|
|
744
939
|
const rows = store.buildSourceRows(matrix);
|
|
745
940
|
globalExpect(rows).toHaveLength(1);
|
|
746
941
|
const sourceNames = rows[0].options.map((opt) => opt.id);
|
|
747
|
-
globalExpect(sourceNames).toEqual(["local", "Acme Corp", "
|
|
942
|
+
globalExpect(sourceNames).toEqual(["local", "Acme Corp", "agents-inc", "Extra Corp"]);
|
|
748
943
|
});
|
|
749
944
|
});
|
|
750
945
|
describe("agent selection", () => {
|
|
@@ -781,6 +976,59 @@ describe("WizardStore", () => {
|
|
|
781
976
|
globalExpect(selectedAgents).toEqual([]);
|
|
782
977
|
});
|
|
783
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
|
+
});
|
|
784
1032
|
describe("preselectAgentsFromDomains", () => {
|
|
785
1033
|
it("should preselect web-related agents when web domain is selected", () => {
|
|
786
1034
|
const store = useWizardStore.getState();
|
|
@@ -812,7 +1060,6 @@ describe("WizardStore", () => {
|
|
|
812
1060
|
globalExpect(selectedAgents).toContain("cli-developer");
|
|
813
1061
|
globalExpect(selectedAgents).toContain("cli-tester");
|
|
814
1062
|
globalExpect(selectedAgents).toContain("cli-reviewer");
|
|
815
|
-
globalExpect(selectedAgents).toContain("cli-migrator");
|
|
816
1063
|
});
|
|
817
1064
|
it("should never include optional agents regardless of domains", () => {
|
|
818
1065
|
const store = useWizardStore.getState();
|
|
@@ -907,5 +1154,50 @@ describe("WizardStore", () => {
|
|
|
907
1154
|
globalExpect(skippedSteps).toContain("sources");
|
|
908
1155
|
});
|
|
909
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
|
+
});
|
|
910
1202
|
});
|
|
911
1203
|
//# sourceMappingURL=wizard-store.test.js.map
|