@agents-inc/cli 0.74.10 → 0.74.12

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.
Files changed (121) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +11 -5
  3. package/dist/{chunk-FW5C245M.js → chunk-2DKJM7RO.js} +6 -24
  4. package/dist/chunk-2DKJM7RO.js.map +1 -0
  5. package/dist/{chunk-NA6I5P5P.js → chunk-2PZ7LBFT.js} +1 -3
  6. package/dist/chunk-2PZ7LBFT.js.map +1 -0
  7. package/dist/{chunk-VILTRTBT.js → chunk-2YFC7IJ6.js} +4 -4
  8. package/dist/chunk-2YFC7IJ6.js.map +1 -0
  9. package/dist/{chunk-OV5UJWS5.js → chunk-62FBXUNR.js} +2 -2
  10. package/dist/{chunk-VYHRCFMD.js → chunk-6RGNXTTG.js} +5 -5
  11. package/dist/{chunk-2EXAK22V.js → chunk-6W4H2K3Z.js} +86 -55
  12. package/dist/chunk-6W4H2K3Z.js.map +1 -0
  13. package/dist/chunk-7M4INWUR.js +31 -0
  14. package/dist/chunk-7M4INWUR.js.map +1 -0
  15. package/dist/{chunk-EWKUUWYY.js → chunk-AKW425U6.js} +2 -2
  16. package/dist/{chunk-54AECXSH.js → chunk-ARGCINJC.js} +2 -2
  17. package/dist/{chunk-YZUAXX7F.js → chunk-DG2T7KYG.js} +3 -6
  18. package/dist/chunk-DG2T7KYG.js.map +1 -0
  19. package/dist/{chunk-M5IAGR5Z.js → chunk-DZUZVT5X.js} +3 -3
  20. package/dist/{chunk-PUZLP4SL.js → chunk-EWGFIBBU.js} +2 -2
  21. package/dist/{chunk-C6YLN4AW.js → chunk-GJWHA6P4.js} +18 -58
  22. package/dist/chunk-GJWHA6P4.js.map +1 -0
  23. package/dist/{chunk-PN65K3LH.js → chunk-I7WXUAWA.js} +2 -2
  24. package/dist/{chunk-YDBVG6RF.js → chunk-JBQRRJRY.js} +11 -21
  25. package/dist/chunk-JBQRRJRY.js.map +1 -0
  26. package/dist/{chunk-NDKIFVR4.js → chunk-MZQKSK3J.js} +3 -3
  27. package/dist/{chunk-IYA5PSXU.js → chunk-NO2XIAJC.js} +3 -3
  28. package/dist/{chunk-OINQ6OWM.js → chunk-NPMGVQM4.js} +2 -2
  29. package/dist/{chunk-GG4BSB6S.js → chunk-P2FHS5IS.js} +2 -3
  30. package/dist/{chunk-GG4BSB6S.js.map → chunk-P2FHS5IS.js.map} +1 -1
  31. package/dist/{chunk-X6LXHVA6.js → chunk-PJUC2WCA.js} +26 -21
  32. package/dist/chunk-PJUC2WCA.js.map +1 -0
  33. package/dist/{chunk-TPXDHJDB.js → chunk-TDHEAHXD.js} +2 -2
  34. package/dist/{chunk-XPRDNALD.js → chunk-W6NWOYMS.js} +2 -2
  35. package/dist/{chunk-VIVOJASC.js → chunk-YUSLPHXO.js} +5 -5
  36. package/dist/commands/build/plugins.js +2 -2
  37. package/dist/commands/build/stack.js +2 -2
  38. package/dist/commands/compile.js +2 -2
  39. package/dist/commands/config/index.js +2 -2
  40. package/dist/commands/config/path.js +1 -1
  41. package/dist/commands/config/show.js +2 -2
  42. package/dist/commands/diff.js +1 -1
  43. package/dist/commands/doctor.js +1 -1
  44. package/dist/commands/edit.js +23 -28
  45. package/dist/commands/edit.js.map +1 -1
  46. package/dist/commands/eject.js +1 -1
  47. package/dist/commands/import/skill.js +1 -1
  48. package/dist/commands/info.js +1 -1
  49. package/dist/commands/init.js +19 -19
  50. package/dist/commands/list.js +1 -1
  51. package/dist/commands/new/agent.js +2 -2
  52. package/dist/commands/new/marketplace.js +2 -2
  53. package/dist/commands/new/skill.js +2 -2
  54. package/dist/commands/outdated.js +1 -1
  55. package/dist/commands/search.js +1 -1
  56. package/dist/commands/uninstall.js +1 -1
  57. package/dist/commands/update.js +2 -2
  58. package/dist/commands/validate.js +1 -1
  59. package/dist/components/wizard/category-grid.js +2 -2
  60. package/dist/components/wizard/category-grid.test.js +78 -77
  61. package/dist/components/wizard/category-grid.test.js.map +1 -1
  62. package/dist/components/wizard/checkbox-grid.js +2 -2
  63. package/dist/components/wizard/checkbox-grid.test.js +2 -2
  64. package/dist/components/wizard/domain-selection.js +5 -5
  65. package/dist/components/wizard/help-modal.js +1 -1
  66. package/dist/components/wizard/source-grid.js +2 -2
  67. package/dist/components/wizard/source-grid.test.js +5 -5
  68. package/dist/components/wizard/source-grid.test.js.map +1 -1
  69. package/dist/components/wizard/stack-selection.js +3 -3
  70. package/dist/components/wizard/step-agents.js +4 -4
  71. package/dist/components/wizard/step-agents.test.js +4 -4
  72. package/dist/components/wizard/step-build.js +6 -6
  73. package/dist/components/wizard/step-build.test.js +16 -18
  74. package/dist/components/wizard/step-build.test.js.map +1 -1
  75. package/dist/components/wizard/step-confirm.js +2 -2
  76. package/dist/components/wizard/step-confirm.test.js +4 -4
  77. package/dist/components/wizard/step-refine.js +2 -2
  78. package/dist/components/wizard/step-refine.test.js +2 -2
  79. package/dist/components/wizard/step-settings.js +3 -3
  80. package/dist/components/wizard/step-settings.test.js +6 -6
  81. package/dist/components/wizard/step-sources.js +6 -6
  82. package/dist/components/wizard/step-sources.test.js +6 -6
  83. package/dist/components/wizard/step-stack.js +7 -7
  84. package/dist/components/wizard/step-stack.test.js +12 -12
  85. package/dist/components/wizard/step-stack.test.js.map +1 -1
  86. package/dist/components/wizard/view-title.js +1 -1
  87. package/dist/components/wizard/wizard-layout.js +4 -4
  88. package/dist/components/wizard/wizard.js +18 -18
  89. package/dist/hooks/init.js +19 -19
  90. package/dist/{source-loader-WBDPZJEW.js → source-loader-42GVUFZA.js} +2 -4
  91. package/dist/{source-manager-RRGK4SBP.js → source-manager-WRZBOTEH.js} +2 -2
  92. package/dist/stores/wizard-store.js +2 -2
  93. package/dist/stores/wizard-store.test.js +2 -2
  94. package/package.json +1 -1
  95. package/dist/chunk-2EXAK22V.js.map +0 -1
  96. package/dist/chunk-AQYAVLZK.js +0 -20
  97. package/dist/chunk-AQYAVLZK.js.map +0 -1
  98. package/dist/chunk-C6YLN4AW.js.map +0 -1
  99. package/dist/chunk-FW5C245M.js.map +0 -1
  100. package/dist/chunk-NA6I5P5P.js.map +0 -1
  101. package/dist/chunk-VILTRTBT.js.map +0 -1
  102. package/dist/chunk-X6LXHVA6.js.map +0 -1
  103. package/dist/chunk-YDBVG6RF.js.map +0 -1
  104. package/dist/chunk-YZUAXX7F.js.map +0 -1
  105. package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +0 -1
  106. package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +0 -13
  107. /package/dist/{chunk-OV5UJWS5.js.map → chunk-62FBXUNR.js.map} +0 -0
  108. /package/dist/{chunk-VYHRCFMD.js.map → chunk-6RGNXTTG.js.map} +0 -0
  109. /package/dist/{chunk-EWKUUWYY.js.map → chunk-AKW425U6.js.map} +0 -0
  110. /package/dist/{chunk-54AECXSH.js.map → chunk-ARGCINJC.js.map} +0 -0
  111. /package/dist/{chunk-M5IAGR5Z.js.map → chunk-DZUZVT5X.js.map} +0 -0
  112. /package/dist/{chunk-PUZLP4SL.js.map → chunk-EWGFIBBU.js.map} +0 -0
  113. /package/dist/{chunk-PN65K3LH.js.map → chunk-I7WXUAWA.js.map} +0 -0
  114. /package/dist/{chunk-NDKIFVR4.js.map → chunk-MZQKSK3J.js.map} +0 -0
  115. /package/dist/{chunk-IYA5PSXU.js.map → chunk-NO2XIAJC.js.map} +0 -0
  116. /package/dist/{chunk-OINQ6OWM.js.map → chunk-NPMGVQM4.js.map} +0 -0
  117. /package/dist/{chunk-TPXDHJDB.js.map → chunk-TDHEAHXD.js.map} +0 -0
  118. /package/dist/{chunk-XPRDNALD.js.map → chunk-W6NWOYMS.js.map} +0 -0
  119. /package/dist/{chunk-VIVOJASC.js.map → chunk-YUSLPHXO.js.map} +0 -0
  120. /package/dist/{source-loader-WBDPZJEW.js.map → source-loader-42GVUFZA.js.map} +0 -0
  121. /package/dist/{source-manager-RRGK4SBP.js.map → source-manager-WRZBOTEH.js.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  computeFileHash,
9
9
  fetchFromSource,
10
10
  getCurrentDate
11
- } from "../../chunk-2EXAK22V.js";
11
+ } from "../../chunk-6W4H2K3Z.js";
12
12
  import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-NG2GGK6P.js";
14
14
  import {
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  discoverLocalSkills,
7
7
  loadSkillsMatrixFromSource
8
- } from "../chunk-2EXAK22V.js";
8
+ } from "../chunk-6W4H2K3Z.js";
9
9
  import "../chunk-RRBWNEG3.js";
10
10
  import {
11
11
  matrix
@@ -4,40 +4,40 @@ import {
4
4
  formatDashboardText,
5
5
  getDashboardData,
6
6
  showDashboard
7
- } from "../chunk-YZUAXX7F.js";
8
- import "../chunk-YDBVG6RF.js";
9
- import "../chunk-FW5C245M.js";
7
+ } from "../chunk-DG2T7KYG.js";
8
+ import "../chunk-JBQRRJRY.js";
9
+ import "../chunk-2DKJM7RO.js";
10
10
  import "../chunk-SXGBPQY6.js";
11
- import "../chunk-M5IAGR5Z.js";
12
- import "../chunk-VYHRCFMD.js";
11
+ import "../chunk-DZUZVT5X.js";
12
+ import "../chunk-6RGNXTTG.js";
13
13
  import "../chunk-HGTC76BX.js";
14
- import "../chunk-VIVOJASC.js";
15
- import "../chunk-VILTRTBT.js";
16
- import "../chunk-NDKIFVR4.js";
17
- import "../chunk-C6YLN4AW.js";
14
+ import "../chunk-YUSLPHXO.js";
15
+ import "../chunk-2YFC7IJ6.js";
16
+ import "../chunk-MZQKSK3J.js";
17
+ import "../chunk-GJWHA6P4.js";
18
18
  import "../chunk-K77I4XGL.js";
19
- import "../chunk-PN65K3LH.js";
19
+ import "../chunk-I7WXUAWA.js";
20
20
  import "../chunk-MWGDG4QN.js";
21
- import "../chunk-TPXDHJDB.js";
21
+ import "../chunk-TDHEAHXD.js";
22
22
  import "../chunk-7SOPVGDV.js";
23
23
  import "../chunk-UFKDY45I.js";
24
- import "../chunk-X6LXHVA6.js";
25
- import "../chunk-GG4BSB6S.js";
26
- import "../chunk-IYA5PSXU.js";
24
+ import "../chunk-PJUC2WCA.js";
25
+ import "../chunk-P2FHS5IS.js";
26
+ import "../chunk-NO2XIAJC.js";
27
27
  import "../chunk-LVNNP7T4.js";
28
- import "../chunk-OV5UJWS5.js";
28
+ import "../chunk-62FBXUNR.js";
29
29
  import "../chunk-XMLCXRTS.js";
30
- import "../chunk-AQYAVLZK.js";
30
+ import "../chunk-7M4INWUR.js";
31
31
  import "../chunk-AUNBGZS4.js";
32
- import "../chunk-NA6I5P5P.js";
32
+ import "../chunk-2PZ7LBFT.js";
33
33
  import "../chunk-WF5PMBIR.js";
34
34
  import "../chunk-KUV24B5M.js";
35
- import "../chunk-PUZLP4SL.js";
35
+ import "../chunk-EWGFIBBU.js";
36
36
  import "../chunk-T5DJCIUP.js";
37
37
  import "../chunk-U3IGFMCY.js";
38
38
  import "../chunk-CBYRFAUN.js";
39
39
  import "../chunk-CXRVM7BA.js";
40
- import "../chunk-2EXAK22V.js";
40
+ import "../chunk-6W4H2K3Z.js";
41
41
  import "../chunk-RRBWNEG3.js";
42
42
  import "../chunk-NG2GGK6P.js";
43
43
  import "../chunk-IJLAVOKZ.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  formatInstallationDisplay,
4
4
  getInstallationInfo
5
- } from "../chunk-2EXAK22V.js";
5
+ } from "../chunk-6W4H2K3Z.js";
6
6
  import "../chunk-RRBWNEG3.js";
7
7
  import "../chunk-NG2GGK6P.js";
8
8
  import {
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getAgentDefinitions
4
- } from "../../chunk-OINQ6OWM.js";
4
+ } from "../../chunk-NPMGVQM4.js";
5
5
  import {
6
6
  isClaudeCLIAvailable,
7
7
  loadConfigTypesDataInBackground,
8
8
  regenerateConfigTypes,
9
9
  resolveSource
10
- } from "../../chunk-2EXAK22V.js";
10
+ } from "../../chunk-6W4H2K3Z.js";
11
11
  import "../../chunk-RRBWNEG3.js";
12
12
  import "../../chunk-NG2GGK6P.js";
13
13
  import {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  generateSkillCategoriesTs,
4
4
  generateSkillRulesTs
5
- } from "../../chunk-54AECXSH.js";
5
+ } from "../../chunk-ARGCINJC.js";
6
6
  import {
7
7
  generateMarketplace,
8
8
  writeMarketplace
@@ -13,7 +13,7 @@ import {
13
13
  generateConfigSource,
14
14
  loadConfigTypesDataInBackground,
15
15
  regenerateConfigTypes
16
- } from "../../chunk-2EXAK22V.js";
16
+ } from "../../chunk-6W4H2K3Z.js";
17
17
  import "../../chunk-RRBWNEG3.js";
18
18
  import "../../chunk-NG2GGK6P.js";
19
19
  import {
@@ -7,8 +7,8 @@ import {
7
7
  generateSkillRulesTs,
8
8
  toTitleCase,
9
9
  validateSkillName
10
- } from "../../chunk-54AECXSH.js";
11
- import "../../chunk-2EXAK22V.js";
10
+ } from "../../chunk-ARGCINJC.js";
11
+ import "../../chunk-6W4H2K3Z.js";
12
12
  import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-NG2GGK6P.js";
14
14
  import "../../chunk-IJLAVOKZ.js";
@@ -3,7 +3,7 @@ import {
3
3
  compareLocalSkillsWithSource,
4
4
  detectInstallation,
5
5
  loadSkillsMatrixFromSource
6
- } from "../chunk-2EXAK22V.js";
6
+ } from "../chunk-6W4H2K3Z.js";
7
7
  import "../chunk-RRBWNEG3.js";
8
8
  import {
9
9
  typedEntries
@@ -14,7 +14,7 @@ import {
14
14
  fetchFromSource,
15
15
  loadSkillsMatrixFromSource,
16
16
  resolveAllSources
17
- } from "../chunk-2EXAK22V.js";
17
+ } from "../chunk-6W4H2K3Z.js";
18
18
  import {
19
19
  parseFrontmatter
20
20
  } from "../chunk-RRBWNEG3.js";
@@ -13,7 +13,7 @@ import {
13
13
  listPluginNames,
14
14
  loadProjectSourceConfig,
15
15
  readForkedFromMetadata
16
- } from "../chunk-2EXAK22V.js";
16
+ } from "../chunk-6W4H2K3Z.js";
17
17
  import "../chunk-RRBWNEG3.js";
18
18
  import "../chunk-NG2GGK6P.js";
19
19
  import {
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-N6S7ZRIL.js";
5
5
  import {
6
6
  recompileAgents
7
- } from "../chunk-OINQ6OWM.js";
7
+ } from "../chunk-NPMGVQM4.js";
8
8
  import {
9
9
  ERROR_MESSAGES,
10
10
  INFO_MESSAGES,
@@ -15,7 +15,7 @@ import {
15
15
  compareLocalSkillsWithSource,
16
16
  injectForkedFromMetadata,
17
17
  loadSkillsMatrixFromSource
18
- } from "../chunk-2EXAK22V.js";
18
+ } from "../chunk-6W4H2K3Z.js";
19
19
  import "../chunk-RRBWNEG3.js";
20
20
  import {
21
21
  matrix
@@ -11,7 +11,7 @@ import {
11
11
  validateAllPlugins,
12
12
  validateAllSchemas,
13
13
  validatePlugin
14
- } from "../chunk-2EXAK22V.js";
14
+ } from "../chunk-6W4H2K3Z.js";
15
15
  import {
16
16
  parseFrontmatter
17
17
  } from "../chunk-RRBWNEG3.js";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CategoryGrid
4
- } from "../../chunk-X6LXHVA6.js";
5
- import "../../chunk-GG4BSB6S.js";
4
+ } from "../../chunk-PJUC2WCA.js";
5
+ import "../../chunk-P2FHS5IS.js";
6
6
  import "../../chunk-AUNBGZS4.js";
7
7
  import "../../chunk-CBYRFAUN.js";
8
8
  import "../../chunk-NG2GGK6P.js";
@@ -27,12 +27,12 @@ import {
27
27
  } from "../../chunk-XY3XDVMI.js";
28
28
  import {
29
29
  CategoryGrid
30
- } from "../../chunk-X6LXHVA6.js";
31
- import "../../chunk-GG4BSB6S.js";
30
+ } from "../../chunk-PJUC2WCA.js";
31
+ import "../../chunk-P2FHS5IS.js";
32
32
  import "../../chunk-AUNBGZS4.js";
33
- import "../../chunk-PUZLP4SL.js";
33
+ import "../../chunk-EWGFIBBU.js";
34
34
  import "../../chunk-CBYRFAUN.js";
35
- import "../../chunk-2EXAK22V.js";
35
+ import "../../chunk-6W4H2K3Z.js";
36
36
  import "../../chunk-RRBWNEG3.js";
37
37
  import {
38
38
  BUILT_IN_MATRIX,
@@ -51,7 +51,7 @@ init_esm_shims();
51
51
  import { jsx } from "react/jsx-runtime";
52
52
  var createOption = (id, overrides = {}) => ({
53
53
  id,
54
- state: "normal",
54
+ state: { status: "normal" },
55
55
  selected: false,
56
56
  ...overrides
57
57
  });
@@ -69,8 +69,7 @@ var defaultCategories = [
69
69
  "Framework",
70
70
  [
71
71
  createOption("web-framework-react", {
72
- state: "recommended",
73
- stateReason: "Popular choice"
72
+ state: { status: "recommended", reason: "Popular choice" }
74
73
  }),
75
74
  createOption("web-framework-vue-composition-api"),
76
75
  createOption("web-framework-angular-standalone"),
@@ -83,18 +82,21 @@ var defaultCategories = [
83
82
  "Styling",
84
83
  [
85
84
  createOption("web-styling-scss-modules", { selected: true }),
86
- createOption("web-styling-tailwind", { state: "recommended" }),
85
+ createOption("web-styling-tailwind", {
86
+ state: { status: "recommended", reason: "Modern utility-first CSS" }
87
+ }),
87
88
  createOption("web-styling-cva"),
88
89
  createOption("web-framework-nuxt")
89
90
  ],
90
91
  { required: true }
91
92
  ),
92
93
  createCategory("web-client-state", "Client State", [
93
- createOption("web-state-zustand", { state: "recommended" }),
94
+ createOption("web-state-zustand", {
95
+ state: { status: "recommended", reason: "Simple and performant" }
96
+ }),
94
97
  createOption("web-state-jotai"),
95
98
  createOption("web-state-redux-toolkit", {
96
- state: "discouraged",
97
- stateReason: "Complex for most apps"
99
+ state: { status: "discouraged", reason: "Complex for most apps" }
98
100
  }),
99
101
  createOption("web-state-mobx")
100
102
  ]),
@@ -111,8 +113,7 @@ var categoriesWithFramework = [
111
113
  "Framework",
112
114
  [
113
115
  createOption("web-framework-react", {
114
- state: "recommended",
115
- stateReason: "Popular choice",
116
+ state: { status: "recommended", reason: "Popular choice" },
116
117
  selected: true
117
118
  // Framework selected
118
119
  }),
@@ -127,16 +128,22 @@ var categoriesWithFramework = [
127
128
  "Styling",
128
129
  [
129
130
  createOption("web-styling-scss-modules"),
130
- createOption("web-styling-tailwind", { state: "recommended" }),
131
+ createOption("web-styling-tailwind", {
132
+ state: { status: "recommended", reason: "Modern utility-first CSS" }
133
+ }),
131
134
  createOption("web-styling-cva"),
132
135
  createOption("web-framework-nuxt")
133
136
  ],
134
137
  { required: true }
135
138
  ),
136
139
  createCategory("web-client-state", "Client State", [
137
- createOption("web-state-zustand", { state: "recommended" }),
140
+ createOption("web-state-zustand", {
141
+ state: { status: "recommended", reason: "Simple and performant" }
142
+ }),
138
143
  createOption("web-state-jotai"),
139
- createOption("web-state-redux-toolkit", { state: "discouraged" }),
144
+ createOption("web-state-redux-toolkit", {
145
+ state: { status: "discouraged", reason: "Complex for most apps" }
146
+ }),
140
147
  createOption("web-state-mobx")
141
148
  ])
142
149
  ];
@@ -290,7 +297,9 @@ describe("CategoryGrid component", () => {
290
297
  const categories = [
291
298
  createCategory("web-testing", "Test", [
292
299
  createOption("web-forms-react-hook-form"),
293
- createOption("web-forms-vee-validate", { state: "discouraged" })
300
+ createOption("web-forms-vee-validate", {
301
+ state: { status: "discouraged", reason: "Not recommended" }
302
+ })
294
303
  ])
295
304
  ];
296
305
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -313,7 +322,7 @@ describe("CategoryGrid component", () => {
313
322
  const categories = [
314
323
  createCategory("web-forms", "Forms", [
315
324
  createOption("web-forms-react-hook-form", {
316
- state: "normal",
325
+ state: { status: "normal" },
317
326
  selected: false
318
327
  })
319
328
  ])
@@ -326,7 +335,9 @@ describe("CategoryGrid component", () => {
326
335
  it("should render discouraged skills with display name", () => {
327
336
  const categories = [
328
337
  createCategory("web-forms", "Forms", [
329
- createOption("web-forms-react-hook-form", { state: "discouraged" })
338
+ createOption("web-forms-react-hook-form", {
339
+ state: { status: "discouraged", reason: "Not recommended" }
340
+ })
330
341
  ])
331
342
  ];
332
343
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -338,11 +349,11 @@ describe("CategoryGrid component", () => {
338
349
  const categories = [
339
350
  createCategory("web-forms", "Forms", [
340
351
  createOption("web-forms-react-hook-form", {
341
- state: "discouraged",
352
+ state: { status: "discouraged", reason: "Not recommended" },
342
353
  selected: true
343
354
  }),
344
355
  createOption("web-forms-vee-validate", {
345
- state: "discouraged",
356
+ state: { status: "discouraged", reason: "Not recommended" },
346
357
  selected: false
347
358
  })
348
359
  ])
@@ -356,7 +367,9 @@ describe("CategoryGrid component", () => {
356
367
  it("should render discouraged skills with display name from store", () => {
357
368
  const categories = [
358
369
  createCategory("web-forms", "Forms", [
359
- createOption("web-forms-react-hook-form", { state: "discouraged" })
370
+ createOption("web-forms-react-hook-form", {
371
+ state: { status: "discouraged", reason: "Not recommended" }
372
+ })
360
373
  ])
361
374
  ];
362
375
  const { lastFrame, unmount } = renderGrid({ categories });
@@ -670,8 +683,12 @@ describe("CategoryGrid component", () => {
670
683
  const onToggle = vi.fn();
671
684
  const categories = [
672
685
  createCategory("web-testing", "Test", [
673
- createOption("web-forms-react-hook-form", { state: "discouraged" }),
674
- createOption("web-forms-vee-validate", { state: "discouraged" })
686
+ createOption("web-forms-react-hook-form", {
687
+ state: { status: "discouraged", reason: "Not recommended" }
688
+ }),
689
+ createOption("web-forms-vee-validate", {
690
+ state: { status: "discouraged", reason: "Not recommended" }
691
+ })
675
692
  ])
676
693
  ];
677
694
  const { stdin, unmount } = renderGrid({
@@ -705,7 +722,9 @@ describe("CategoryGrid component", () => {
705
722
  const categories = [
706
723
  createCategory("web-testing", "Test", [
707
724
  createOption("web-forms-react-hook-form"),
708
- createOption("web-forms-vee-validate", { state: "discouraged" }),
725
+ createOption("web-forms-vee-validate", {
726
+ state: { status: "discouraged", reason: "Not recommended" }
727
+ }),
709
728
  createOption("web-forms-zod-validation")
710
729
  ])
711
730
  ];
@@ -726,7 +745,9 @@ describe("CategoryGrid component", () => {
726
745
  const categories = [
727
746
  createCategory("web-testing", "Test", [
728
747
  createOption("web-forms-react-hook-form"),
729
- createOption("web-forms-vee-validate", { state: "discouraged" }),
748
+ createOption("web-forms-vee-validate", {
749
+ state: { status: "discouraged", reason: "Not recommended" }
750
+ }),
730
751
  createOption("web-forms-zod-validation")
731
752
  ])
732
753
  ];
@@ -747,8 +768,12 @@ describe("CategoryGrid component", () => {
747
768
  const onFocusChange = vi.fn();
748
769
  const categories = [
749
770
  createCategory("web-testing", "Test", [
750
- createOption("web-forms-react-hook-form", { state: "discouraged" }),
751
- createOption("web-forms-vee-validate", { state: "discouraged" })
771
+ createOption("web-forms-react-hook-form", {
772
+ state: { status: "discouraged", reason: "Not recommended" }
773
+ }),
774
+ createOption("web-forms-vee-validate", {
775
+ state: { status: "discouraged", reason: "Not recommended" }
776
+ })
752
777
  ])
753
778
  ];
754
779
  const { stdin, unmount } = renderGrid({
@@ -819,16 +844,18 @@ describe("CategoryGrid component", () => {
819
844
  const output = lastFrame();
820
845
  globalExpect(output).toContain("(recommended)");
821
846
  });
822
- it("should show Selected label for selected skills when showLabels is true", () => {
847
+ it("should not show label for selected skills when showLabels is true", () => {
823
848
  const { lastFrame, unmount } = renderGrid({ showLabels: true });
824
849
  cleanup = unmount;
825
850
  const output = lastFrame();
826
- globalExpect(output).toContain("(selected)");
851
+ globalExpect(output).not.toContain("(selected)");
827
852
  });
828
- it("should show Discouraged label when showLabels is true", () => {
853
+ it("should show Discouraged label when showLabels is true and skill is focused", () => {
829
854
  const { lastFrame, unmount } = renderGrid({
830
855
  categories: categoriesWithFramework,
831
- showLabels: true
856
+ showLabels: true,
857
+ defaultFocusedRow: 2,
858
+ defaultFocusedCol: 2
832
859
  });
833
860
  cleanup = unmount;
834
861
  const output = lastFrame();
@@ -842,11 +869,13 @@ describe("CategoryGrid component", () => {
842
869
  globalExpect(output).not.toContain("(selected)");
843
870
  globalExpect(output).not.toContain("(discouraged)");
844
871
  });
845
- it("should show discouraged label for discouraged options when showLabels is true", () => {
872
+ it("should show discouraged label for focused discouraged option when showLabels is true", () => {
846
873
  const categories = [
847
874
  createCategory("web-testing", "Test", [
848
- createOption("web-forms-react-hook-form"),
849
- createOption("web-forms-vee-validate", { state: "discouraged" })
875
+ createOption("web-forms-vee-validate", {
876
+ state: { status: "discouraged", reason: "Not recommended" }
877
+ }),
878
+ createOption("web-forms-react-hook-form")
850
879
  ])
851
880
  ];
852
881
  const { lastFrame, unmount } = renderGrid({ categories, showLabels: true });
@@ -860,8 +889,12 @@ describe("CategoryGrid component", () => {
860
889
  const categories = [
861
890
  createCategory("web-client-state", "State", [
862
891
  createOption("web-state-jotai"),
863
- createOption("web-state-zustand", { state: "recommended" }),
864
- createOption("web-state-redux-toolkit", { state: "discouraged" }),
892
+ createOption("web-state-zustand", {
893
+ state: { status: "recommended", reason: "Recommended choice" }
894
+ }),
895
+ createOption("web-state-redux-toolkit", {
896
+ state: { status: "discouraged", reason: "Not recommended" }
897
+ }),
865
898
  createOption("web-state-mobx")
866
899
  ])
867
900
  ];
@@ -917,7 +950,9 @@ describe("CategoryGrid component", () => {
917
950
  const categoriesAfter = [
918
951
  createCategory("web-client-state", "State", [
919
952
  createOption("web-state-jotai"),
920
- createOption("web-state-zustand", { state: "discouraged" }),
953
+ createOption("web-state-zustand", {
954
+ state: { status: "discouraged", reason: "Not recommended" }
955
+ }),
921
956
  createOption("web-state-redux-toolkit")
922
957
  ])
923
958
  ];
@@ -1158,7 +1193,7 @@ describe("CategoryGrid component", () => {
1158
1193
  const output = lastFrame();
1159
1194
  globalExpect(output).toContain("(1 of 1)");
1160
1195
  });
1161
- it("should show 'X selected' for non-exclusive categories", () => {
1196
+ it("should not show counter for non-exclusive categories", () => {
1162
1197
  const categories = [
1163
1198
  createCategory(
1164
1199
  "web-testing",
@@ -1174,44 +1209,10 @@ describe("CategoryGrid component", () => {
1174
1209
  const { lastFrame, unmount } = renderGrid({ categories });
1175
1210
  cleanup = unmount;
1176
1211
  const output = lastFrame();
1177
- globalExpect(output).toContain("(2 selected)");
1178
- });
1179
- it("should show '0 selected' for non-exclusive categories with no selection", () => {
1180
- const categories = [
1181
- createCategory(
1182
- "web-testing",
1183
- "Testing",
1184
- [createOption("web-testing-vitest"), createOption("web-testing-playwright-e2e")],
1185
- { exclusive: false }
1186
- )
1187
- ];
1188
- const { lastFrame, unmount } = renderGrid({ categories });
1189
- cleanup = unmount;
1190
- const output = lastFrame();
1191
- globalExpect(output).toContain("(0 selected)");
1192
- });
1193
- it("should always show selection counter", () => {
1194
- const categories = [
1195
- createCategory(
1196
- "web-framework",
1197
- "Framework",
1198
- [createOption("web-framework-react", { selected: true })],
1199
- { exclusive: true }
1200
- ),
1201
- createCategory(
1202
- "web-testing",
1203
- "Testing",
1204
- [createOption("web-testing-vitest", { selected: true })],
1205
- { exclusive: false }
1206
- )
1207
- ];
1208
- const { lastFrame, unmount } = renderGrid({ categories });
1209
- cleanup = unmount;
1210
- const output = lastFrame();
1211
- globalExpect(output).toContain("1 of 1");
1212
- globalExpect(output).toContain("1 selected");
1212
+ globalExpect(output).not.toContain("selected)");
1213
+ globalExpect(output).not.toContain("of 1)");
1213
1214
  });
1214
- it("should show correct counts for mixed exclusive and non-exclusive categories", () => {
1215
+ it("should only show counter for exclusive categories in mixed layout", () => {
1215
1216
  const categories = [
1216
1217
  createCategory(
1217
1218
  "web-framework",
@@ -1237,7 +1238,7 @@ describe("CategoryGrid component", () => {
1237
1238
  cleanup = unmount;
1238
1239
  const output = lastFrame();
1239
1240
  globalExpect(output).toContain("(1 of 1)");
1240
- globalExpect(output).toContain("(2 selected)");
1241
+ globalExpect(output).not.toContain("selected)");
1241
1242
  });
1242
1243
  });
1243
1244
  });