@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
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
RENDER_DELAY_MS,
|
|
9
9
|
TAB,
|
|
10
10
|
delay
|
|
11
|
-
} from "../../chunk-
|
|
11
|
+
} from "../../chunk-PUT7X3GA.js";
|
|
12
12
|
import {
|
|
13
13
|
render
|
|
14
14
|
} from "../../chunk-66UDJBF6.js";
|
|
@@ -21,9 +21,10 @@ import {
|
|
|
21
21
|
} from "../../chunk-XY3XDVMI.js";
|
|
22
22
|
import {
|
|
23
23
|
CategoryGrid
|
|
24
|
-
} from "../../chunk-
|
|
24
|
+
} from "../../chunk-H7WJK7NJ.js";
|
|
25
25
|
import "../../chunk-GG4BSB6S.js";
|
|
26
|
-
import "../../chunk-
|
|
26
|
+
import "../../chunk-BNQ5O6LE.js";
|
|
27
|
+
import "../../chunk-6OWHQ7HM.js";
|
|
27
28
|
import {
|
|
28
29
|
init_esm_shims
|
|
29
30
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -186,7 +187,6 @@ var defaultProps = {
|
|
|
186
187
|
defaultFocusedRow: 0,
|
|
187
188
|
defaultFocusedCol: 0,
|
|
188
189
|
showLabels: false,
|
|
189
|
-
expertMode: false,
|
|
190
190
|
onToggle: vi.fn(),
|
|
191
191
|
onFocusChange: vi.fn(),
|
|
192
192
|
onToggleLabels: vi.fn()
|
|
@@ -274,11 +274,11 @@ describe("CategoryGrid component", () => {
|
|
|
274
274
|
const output = lastFrame();
|
|
275
275
|
globalExpect(output).not.toContain("\u26A0");
|
|
276
276
|
});
|
|
277
|
-
it("should show
|
|
277
|
+
it("should show discouraged options with warning styling", () => {
|
|
278
278
|
const categories = [
|
|
279
279
|
createCategory("web-testing", "Test", [
|
|
280
280
|
createOption("web-forms-react-hook-form", "Option 1"),
|
|
281
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
281
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" })
|
|
282
282
|
])
|
|
283
283
|
];
|
|
284
284
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
@@ -311,26 +311,26 @@ describe("CategoryGrid component", () => {
|
|
|
311
311
|
const output = lastFrame();
|
|
312
312
|
globalExpect(output).toContain("Unselected Skill");
|
|
313
313
|
});
|
|
314
|
-
it("should render
|
|
314
|
+
it("should render discouraged skills with label text", () => {
|
|
315
315
|
const categories = [
|
|
316
316
|
createCategory("web-forms", "Forms", [
|
|
317
|
-
createOption("web-forms-react-hook-form", "
|
|
317
|
+
createOption("web-forms-react-hook-form", "Discouraged Skill", { state: "discouraged" })
|
|
318
318
|
])
|
|
319
319
|
];
|
|
320
320
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
321
321
|
cleanup = unmount;
|
|
322
322
|
const output = lastFrame();
|
|
323
|
-
globalExpect(output).toContain("
|
|
323
|
+
globalExpect(output).toContain("Discouraged Skill");
|
|
324
324
|
});
|
|
325
|
-
it("should render
|
|
325
|
+
it("should render discouraged+selected skills with label text", () => {
|
|
326
326
|
const categories = [
|
|
327
327
|
createCategory("web-forms", "Forms", [
|
|
328
|
-
createOption("web-forms-react-hook-form", "
|
|
329
|
-
state: "
|
|
328
|
+
createOption("web-forms-react-hook-form", "Discouraged Selected", {
|
|
329
|
+
state: "discouraged",
|
|
330
330
|
selected: true
|
|
331
331
|
}),
|
|
332
|
-
createOption("web-forms-vee-validate", "
|
|
333
|
-
state: "
|
|
332
|
+
createOption("web-forms-vee-validate", "Discouraged Only", {
|
|
333
|
+
state: "discouraged",
|
|
334
334
|
selected: false
|
|
335
335
|
})
|
|
336
336
|
])
|
|
@@ -338,8 +338,8 @@ describe("CategoryGrid component", () => {
|
|
|
338
338
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
339
339
|
cleanup = unmount;
|
|
340
340
|
const output = lastFrame();
|
|
341
|
-
globalExpect(output).toContain("
|
|
342
|
-
globalExpect(output).toContain("
|
|
341
|
+
globalExpect(output).toContain("Discouraged Selected");
|
|
342
|
+
globalExpect(output).toContain("Discouraged Only");
|
|
343
343
|
});
|
|
344
344
|
it("should render discouraged skills with label text", () => {
|
|
345
345
|
const categories = [
|
|
@@ -359,7 +359,7 @@ describe("CategoryGrid component", () => {
|
|
|
359
359
|
createOption("web-forms-vee-validate", "Inactive", { selected: false })
|
|
360
360
|
])
|
|
361
361
|
];
|
|
362
|
-
const { lastFrame, unmount } = renderGrid({ categories
|
|
362
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
363
363
|
cleanup = unmount;
|
|
364
364
|
const output = lastFrame();
|
|
365
365
|
globalExpect(output).toContain("Active");
|
|
@@ -646,7 +646,6 @@ describe("CategoryGrid component", () => {
|
|
|
646
646
|
defaultFocusedRow: 0,
|
|
647
647
|
defaultFocusedCol: 0,
|
|
648
648
|
// react (selected)
|
|
649
|
-
expertMode: true,
|
|
650
649
|
onToggle
|
|
651
650
|
});
|
|
652
651
|
cleanup = unmount;
|
|
@@ -655,26 +654,25 @@ describe("CategoryGrid component", () => {
|
|
|
655
654
|
await delay(INPUT_DELAY_MS);
|
|
656
655
|
globalExpect(onToggle).toHaveBeenCalledWith("web-framework", "web-framework-react");
|
|
657
656
|
});
|
|
658
|
-
it("should
|
|
657
|
+
it("should call onToggle for discouraged options (still selectable)", async () => {
|
|
659
658
|
const onToggle = vi.fn();
|
|
660
659
|
const categories = [
|
|
661
660
|
createCategory("web-testing", "Test", [
|
|
662
|
-
createOption("web-forms-react-hook-form", "Option 1", { state: "
|
|
663
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
661
|
+
createOption("web-forms-react-hook-form", "Option 1", { state: "discouraged" }),
|
|
662
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" })
|
|
664
663
|
])
|
|
665
664
|
];
|
|
666
665
|
const { stdin, unmount } = renderGrid({
|
|
667
666
|
categories,
|
|
668
667
|
defaultFocusedRow: 0,
|
|
669
668
|
defaultFocusedCol: 0,
|
|
670
|
-
expertMode: true,
|
|
671
669
|
onToggle
|
|
672
670
|
});
|
|
673
671
|
cleanup = unmount;
|
|
674
672
|
await delay(RENDER_DELAY_MS);
|
|
675
673
|
await stdin.write(" ");
|
|
676
674
|
await delay(INPUT_DELAY_MS);
|
|
677
|
-
globalExpect(onToggle).
|
|
675
|
+
globalExpect(onToggle).toHaveBeenCalled();
|
|
678
676
|
});
|
|
679
677
|
it("should bounce focus away from locked sections on mount", async () => {
|
|
680
678
|
const onFocusChange = vi.fn();
|
|
@@ -689,13 +687,13 @@ describe("CategoryGrid component", () => {
|
|
|
689
687
|
globalExpect(onFocusChange).toHaveBeenCalledWith(0, 0);
|
|
690
688
|
});
|
|
691
689
|
});
|
|
692
|
-
describe("
|
|
693
|
-
it("should navigate to
|
|
690
|
+
describe("discouraged options navigation", () => {
|
|
691
|
+
it("should navigate to discouraged options when navigating right", async () => {
|
|
694
692
|
const onFocusChange = vi.fn();
|
|
695
693
|
const categories = [
|
|
696
694
|
createCategory("web-testing", "Test", [
|
|
697
695
|
createOption("web-forms-react-hook-form", "Option 1"),
|
|
698
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
696
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" }),
|
|
699
697
|
createOption("web-forms-zod-validation", "Option 3")
|
|
700
698
|
])
|
|
701
699
|
];
|
|
@@ -703,7 +701,6 @@ describe("CategoryGrid component", () => {
|
|
|
703
701
|
categories,
|
|
704
702
|
defaultFocusedRow: 0,
|
|
705
703
|
defaultFocusedCol: 0,
|
|
706
|
-
expertMode: true,
|
|
707
704
|
onFocusChange
|
|
708
705
|
});
|
|
709
706
|
cleanup = unmount;
|
|
@@ -712,12 +709,12 @@ describe("CategoryGrid component", () => {
|
|
|
712
709
|
await delay(INPUT_DELAY_MS);
|
|
713
710
|
globalExpect(onFocusChange).toHaveBeenCalledWith(0, 1);
|
|
714
711
|
});
|
|
715
|
-
it("should navigate to
|
|
712
|
+
it("should navigate to discouraged options when navigating left", async () => {
|
|
716
713
|
const onFocusChange = vi.fn();
|
|
717
714
|
const categories = [
|
|
718
715
|
createCategory("web-testing", "Test", [
|
|
719
716
|
createOption("web-forms-react-hook-form", "Option 1"),
|
|
720
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
717
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" }),
|
|
721
718
|
createOption("web-forms-zod-validation", "Option 3")
|
|
722
719
|
])
|
|
723
720
|
];
|
|
@@ -725,8 +722,7 @@ describe("CategoryGrid component", () => {
|
|
|
725
722
|
categories,
|
|
726
723
|
defaultFocusedRow: 0,
|
|
727
724
|
defaultFocusedCol: 2,
|
|
728
|
-
// Start at
|
|
729
|
-
expertMode: true,
|
|
725
|
+
// Start at opt3 (index 2)
|
|
730
726
|
onFocusChange
|
|
731
727
|
});
|
|
732
728
|
cleanup = unmount;
|
|
@@ -735,19 +731,18 @@ describe("CategoryGrid component", () => {
|
|
|
735
731
|
await delay(INPUT_DELAY_MS);
|
|
736
732
|
globalExpect(onFocusChange).toHaveBeenCalledWith(0, 1);
|
|
737
733
|
});
|
|
738
|
-
it("should navigate between all-
|
|
734
|
+
it("should navigate between all-discouraged options in a row", async () => {
|
|
739
735
|
const onFocusChange = vi.fn();
|
|
740
736
|
const categories = [
|
|
741
737
|
createCategory("web-testing", "Test", [
|
|
742
|
-
createOption("web-forms-react-hook-form", "Option 1", { state: "
|
|
743
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
738
|
+
createOption("web-forms-react-hook-form", "Option 1", { state: "discouraged" }),
|
|
739
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" })
|
|
744
740
|
])
|
|
745
741
|
];
|
|
746
742
|
const { stdin, unmount } = renderGrid({
|
|
747
743
|
categories,
|
|
748
744
|
defaultFocusedRow: 0,
|
|
749
745
|
defaultFocusedCol: 0,
|
|
750
|
-
expertMode: true,
|
|
751
746
|
onFocusChange
|
|
752
747
|
});
|
|
753
748
|
cleanup = unmount;
|
|
@@ -834,41 +829,100 @@ describe("CategoryGrid component", () => {
|
|
|
834
829
|
globalExpect(output).not.toContain("(recommended)");
|
|
835
830
|
globalExpect(output).not.toContain("(selected)");
|
|
836
831
|
globalExpect(output).not.toContain("(discouraged)");
|
|
837
|
-
globalExpect(output).not.toContain("(disabled)");
|
|
838
832
|
});
|
|
839
|
-
it("should show
|
|
833
|
+
it("should show discouraged label for discouraged options when showLabels is true", () => {
|
|
840
834
|
const categories = [
|
|
841
835
|
createCategory("web-testing", "Test", [
|
|
842
836
|
createOption("web-forms-react-hook-form", "Option 1"),
|
|
843
|
-
createOption("web-forms-vee-validate", "Option 2", { state: "
|
|
837
|
+
createOption("web-forms-vee-validate", "Option 2", { state: "discouraged" })
|
|
844
838
|
])
|
|
845
839
|
];
|
|
846
840
|
const { lastFrame, unmount } = renderGrid({ categories, showLabels: true });
|
|
847
841
|
cleanup = unmount;
|
|
848
842
|
const output = lastFrame();
|
|
849
|
-
globalExpect(output).toContain("(
|
|
850
|
-
});
|
|
851
|
-
});
|
|
852
|
-
describe("expert mode", () => {
|
|
853
|
-
it("should not handle expert mode toggle locally (handled globally)", () => {
|
|
854
|
-
const { lastFrame, unmount } = renderGrid();
|
|
855
|
-
cleanup = unmount;
|
|
856
|
-
const output = lastFrame();
|
|
857
|
-
globalExpect(output).not.toContain("[e] Expert Mode");
|
|
843
|
+
globalExpect(output).toContain("(discouraged)");
|
|
858
844
|
});
|
|
859
845
|
});
|
|
860
846
|
describe("option ordering", () => {
|
|
861
847
|
it("should preserve original order regardless of state", () => {
|
|
862
|
-
const
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
848
|
+
const categories = [
|
|
849
|
+
createCategory("web-client-state", "State", [
|
|
850
|
+
createOption("web-state-jotai", "Jotai"),
|
|
851
|
+
createOption("web-state-zustand", "Zustand", { state: "recommended" }),
|
|
852
|
+
createOption("web-state-redux-toolkit", "Redux", { state: "discouraged" }),
|
|
853
|
+
createOption("web-state-mobx", "MobX")
|
|
854
|
+
])
|
|
855
|
+
];
|
|
856
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
869
857
|
cleanup = unmount;
|
|
870
858
|
const output = lastFrame();
|
|
871
|
-
|
|
859
|
+
const jotaiIdx = output.indexOf("Jotai");
|
|
860
|
+
const zustandIdx = output.indexOf("Zustand");
|
|
861
|
+
const reduxIdx = output.indexOf("Redux");
|
|
862
|
+
const mobxIdx = output.indexOf("MobX");
|
|
863
|
+
globalExpect(jotaiIdx).toBeLessThan(zustandIdx);
|
|
864
|
+
globalExpect(zustandIdx).toBeLessThan(reduxIdx);
|
|
865
|
+
globalExpect(reduxIdx).toBeLessThan(mobxIdx);
|
|
866
|
+
});
|
|
867
|
+
it("should not change order when a skill is selected", () => {
|
|
868
|
+
const categoriesBefore = [
|
|
869
|
+
createCategory("web-client-state", "State", [
|
|
870
|
+
createOption("web-state-jotai", "Jotai"),
|
|
871
|
+
createOption("web-state-zustand", "Zustand"),
|
|
872
|
+
createOption("web-state-redux-toolkit", "Redux")
|
|
873
|
+
])
|
|
874
|
+
];
|
|
875
|
+
const categoriesAfter = [
|
|
876
|
+
createCategory("web-client-state", "State", [
|
|
877
|
+
createOption("web-state-jotai", "Jotai"),
|
|
878
|
+
createOption("web-state-zustand", "Zustand", { selected: true }),
|
|
879
|
+
createOption("web-state-redux-toolkit", "Redux")
|
|
880
|
+
])
|
|
881
|
+
];
|
|
882
|
+
const { lastFrame: frameBefore, unmount: unmountBefore } = renderGrid({
|
|
883
|
+
categories: categoriesBefore
|
|
884
|
+
});
|
|
885
|
+
const outputBefore = frameBefore();
|
|
886
|
+
unmountBefore();
|
|
887
|
+
const { lastFrame: frameAfter, unmount: unmountAfter } = renderGrid({
|
|
888
|
+
categories: categoriesAfter
|
|
889
|
+
});
|
|
890
|
+
cleanup = unmountAfter;
|
|
891
|
+
const outputAfter = frameAfter();
|
|
892
|
+
globalExpect(outputBefore.indexOf("Jotai")).toBeLessThan(outputBefore.indexOf("Zustand"));
|
|
893
|
+
globalExpect(outputBefore.indexOf("Zustand")).toBeLessThan(outputBefore.indexOf("Redux"));
|
|
894
|
+
globalExpect(outputAfter.indexOf("Jotai")).toBeLessThan(outputAfter.indexOf("Zustand"));
|
|
895
|
+
globalExpect(outputAfter.indexOf("Zustand")).toBeLessThan(outputAfter.indexOf("Redux"));
|
|
896
|
+
});
|
|
897
|
+
it("should not change order when a skill state changes from normal to discouraged", () => {
|
|
898
|
+
const categoriesBefore = [
|
|
899
|
+
createCategory("web-client-state", "State", [
|
|
900
|
+
createOption("web-state-jotai", "Jotai"),
|
|
901
|
+
createOption("web-state-zustand", "Zustand"),
|
|
902
|
+
createOption("web-state-redux-toolkit", "Redux")
|
|
903
|
+
])
|
|
904
|
+
];
|
|
905
|
+
const categoriesAfter = [
|
|
906
|
+
createCategory("web-client-state", "State", [
|
|
907
|
+
createOption("web-state-jotai", "Jotai"),
|
|
908
|
+
createOption("web-state-zustand", "Zustand", { state: "discouraged" }),
|
|
909
|
+
createOption("web-state-redux-toolkit", "Redux")
|
|
910
|
+
])
|
|
911
|
+
];
|
|
912
|
+
const { lastFrame: frameBefore, unmount: unmountBefore } = renderGrid({
|
|
913
|
+
categories: categoriesBefore
|
|
914
|
+
});
|
|
915
|
+
const outputBefore = frameBefore();
|
|
916
|
+
unmountBefore();
|
|
917
|
+
const { lastFrame: frameAfter, unmount: unmountAfter } = renderGrid({
|
|
918
|
+
categories: categoriesAfter
|
|
919
|
+
});
|
|
920
|
+
cleanup = unmountAfter;
|
|
921
|
+
const outputAfter = frameAfter();
|
|
922
|
+
globalExpect(outputBefore.indexOf("Jotai")).toBeLessThan(outputBefore.indexOf("Zustand"));
|
|
923
|
+
globalExpect(outputBefore.indexOf("Zustand")).toBeLessThan(outputBefore.indexOf("Redux"));
|
|
924
|
+
globalExpect(outputAfter.indexOf("Jotai")).toBeLessThan(outputAfter.indexOf("Zustand"));
|
|
925
|
+
globalExpect(outputAfter.indexOf("Zustand")).toBeLessThan(outputAfter.indexOf("Redux"));
|
|
872
926
|
});
|
|
873
927
|
});
|
|
874
928
|
describe("edge cases", () => {
|
|
@@ -1138,7 +1192,7 @@ describe("CategoryGrid component", () => {
|
|
|
1138
1192
|
const output = lastFrame();
|
|
1139
1193
|
globalExpect(output).toContain("(0 selected)");
|
|
1140
1194
|
});
|
|
1141
|
-
it("should
|
|
1195
|
+
it("should always show selection counter", () => {
|
|
1142
1196
|
const categories = [
|
|
1143
1197
|
createCategory(
|
|
1144
1198
|
"web-framework",
|
|
@@ -1153,11 +1207,11 @@ describe("CategoryGrid component", () => {
|
|
|
1153
1207
|
{ exclusive: false }
|
|
1154
1208
|
)
|
|
1155
1209
|
];
|
|
1156
|
-
const { lastFrame, unmount } = renderGrid({ categories
|
|
1210
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
1157
1211
|
cleanup = unmount;
|
|
1158
1212
|
const output = lastFrame();
|
|
1159
|
-
globalExpect(output).
|
|
1160
|
-
globalExpect(output).
|
|
1213
|
+
globalExpect(output).toContain("1 of 1");
|
|
1214
|
+
globalExpect(output).toContain("1 selected");
|
|
1161
1215
|
});
|
|
1162
1216
|
it("should show correct counts for mixed exclusive and non-exclusive categories", () => {
|
|
1163
1217
|
const categories = [
|