@agents-inc/cli 0.90.0 → 0.92.0

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 (179) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/{chunk-OWPIGGPP.js → chunk-2RXDM5HN.js} +2 -2
  3. package/dist/{chunk-JI44SVMW.js → chunk-35WALWDD.js} +2 -2
  4. package/dist/{chunk-D254XO7K.js → chunk-3O57Z6Q3.js} +2 -2
  5. package/dist/{chunk-TWOHWCKS.js → chunk-3STOCHK4.js} +2 -2
  6. package/dist/{chunk-BO4JY7BT.js → chunk-5IR4QU7G.js} +24 -19
  7. package/dist/chunk-5IR4QU7G.js.map +1 -0
  8. package/dist/chunk-7QWCPF6F.js +135 -0
  9. package/dist/chunk-7QWCPF6F.js.map +1 -0
  10. package/dist/{chunk-VJBCOPMG.js → chunk-AWB6DO24.js} +16 -9
  11. package/dist/chunk-AWB6DO24.js.map +1 -0
  12. package/dist/{chunk-SB2R5KHJ.js → chunk-BGICSUQK.js} +2 -2
  13. package/dist/{chunk-HK53FRMU.js → chunk-DVBA6PGR.js} +3 -7
  14. package/dist/{chunk-HK53FRMU.js.map → chunk-DVBA6PGR.js.map} +1 -1
  15. package/dist/{chunk-I5AZKNNL.js → chunk-FEKVKYCN.js} +2 -2
  16. package/dist/{chunk-7AUGC7PK.js → chunk-G3VPBEBC.js} +2 -2
  17. package/dist/chunk-M6J5YQ3P.js +100 -0
  18. package/dist/chunk-M6J5YQ3P.js.map +1 -0
  19. package/dist/{chunk-3T5XT2VU.js → chunk-MBEXASMU.js} +3 -3
  20. package/dist/{chunk-TEA5KBIA.js → chunk-NESVWSI7.js} +2 -2
  21. package/dist/{chunk-V36FRPAU.js → chunk-ORTNQZLF.js} +4 -2
  22. package/dist/{chunk-V36FRPAU.js.map → chunk-ORTNQZLF.js.map} +1 -1
  23. package/dist/{chunk-TP6BX5M2.js → chunk-RDQBXB3Y.js} +5 -5
  24. package/dist/{chunk-VYLF4IIK.js → chunk-TJHCK4OS.js} +2 -2
  25. package/dist/{chunk-Z5FXZFX2.js → chunk-UK572773.js} +2 -2
  26. package/dist/{chunk-4ITKYWVG.js → chunk-V75HVZTB.js} +3 -3
  27. package/dist/chunk-V75HVZTB.js.map +1 -0
  28. package/dist/commands/build/marketplace.js +58 -40
  29. package/dist/commands/build/marketplace.js.map +1 -1
  30. package/dist/commands/build/plugins.js +38 -29
  31. package/dist/commands/build/plugins.js.map +1 -1
  32. package/dist/commands/build/stack.js +35 -27
  33. package/dist/commands/build/stack.js.map +1 -1
  34. package/dist/commands/compile.js +35 -32
  35. package/dist/commands/compile.js.map +1 -1
  36. package/dist/commands/diff.js +4 -3
  37. package/dist/commands/diff.js.map +1 -1
  38. package/dist/commands/doctor.js +8 -31
  39. package/dist/commands/doctor.js.map +1 -1
  40. package/dist/commands/edit.js +52 -59
  41. package/dist/commands/edit.js.map +1 -1
  42. package/dist/commands/import/skill.js +53 -43
  43. package/dist/commands/import/skill.js.map +1 -1
  44. package/dist/commands/init.js +17 -18
  45. package/dist/commands/new/marketplace.js +90 -75
  46. package/dist/commands/new/marketplace.js.map +1 -1
  47. package/dist/commands/outdated.js +82 -91
  48. package/dist/commands/outdated.js.map +1 -1
  49. package/dist/commands/search.js +2 -2
  50. package/dist/commands/uninstall.js +33 -24
  51. package/dist/commands/uninstall.js.map +1 -1
  52. package/dist/components/skill-search/skill-search.js +2 -2
  53. package/dist/components/wizard/category-grid.js +2 -2
  54. package/dist/components/wizard/category-grid.test.js +3 -3
  55. package/dist/components/wizard/domain-selection.js +2 -2
  56. package/dist/components/wizard/{help-modal.js → info-panel.js} +6 -6
  57. package/dist/components/wizard/search-modal.js +2 -2
  58. package/dist/components/wizard/search-modal.test.js +2 -2
  59. package/dist/components/wizard/source-grid.js +3 -3
  60. package/dist/components/wizard/source-grid.test.js +4 -4
  61. package/dist/components/wizard/stack-selection.js +2 -2
  62. package/dist/components/wizard/stats-panel.js +106 -5
  63. package/dist/components/wizard/stats-panel.js.map +1 -1
  64. package/dist/components/wizard/step-agents.js +2 -2
  65. package/dist/components/wizard/step-agents.test.js +2 -2
  66. package/dist/components/wizard/step-build.js +4 -5
  67. package/dist/components/wizard/step-build.test.js +4 -5
  68. package/dist/components/wizard/step-build.test.js.map +1 -1
  69. package/dist/components/wizard/step-confirm.test.js +1 -1
  70. package/dist/components/wizard/step-refine.js +2 -2
  71. package/dist/components/wizard/step-refine.test.js +2 -2
  72. package/dist/components/wizard/step-settings.js +2 -2
  73. package/dist/components/wizard/step-settings.test.js +2 -2
  74. package/dist/components/wizard/step-sources.js +6 -6
  75. package/dist/components/wizard/step-sources.test.js +6 -6
  76. package/dist/components/wizard/step-stack.js +3 -3
  77. package/dist/components/wizard/step-stack.test.js +3 -3
  78. package/dist/components/wizard/wizard-layout.js +5 -5
  79. package/dist/components/wizard/wizard.js +16 -17
  80. package/dist/hooks/init.js +17 -18
  81. package/dist/hooks/init.js.map +1 -1
  82. package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +1 -0
  83. package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +13 -0
  84. package/dist/src/agents/developer/ai-developer/critical-reminders.md +31 -0
  85. package/dist/src/agents/developer/ai-developer/critical-requirements.md +17 -0
  86. package/dist/src/agents/developer/ai-developer/examples.md +137 -0
  87. package/dist/src/agents/developer/ai-developer/intro.md +23 -0
  88. package/dist/src/agents/developer/ai-developer/metadata.yaml +12 -0
  89. package/dist/src/agents/developer/ai-developer/output-format.md +228 -0
  90. package/dist/src/agents/developer/ai-developer/workflow.md +464 -0
  91. package/dist/src/agents/planning/api-pm/critical-reminders.md +32 -0
  92. package/dist/src/agents/planning/api-pm/critical-requirements.md +21 -0
  93. package/dist/src/agents/planning/api-pm/examples.md +157 -0
  94. package/dist/src/agents/planning/api-pm/intro.md +14 -0
  95. package/dist/src/agents/planning/api-pm/metadata.yaml +12 -0
  96. package/dist/src/agents/planning/api-pm/output-format.md +317 -0
  97. package/dist/src/agents/planning/api-pm/workflow.md +214 -0
  98. package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +23 -0
  99. package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +19 -0
  100. package/dist/src/agents/reviewer/ai-reviewer/examples.md +131 -0
  101. package/dist/src/agents/reviewer/ai-reviewer/intro.md +23 -0
  102. package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  103. package/dist/src/agents/reviewer/ai-reviewer/output-format.md +263 -0
  104. package/dist/src/agents/reviewer/ai-reviewer/workflow.md +177 -0
  105. package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +21 -0
  106. package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +19 -0
  107. package/dist/src/agents/reviewer/infra-reviewer/examples.md +123 -0
  108. package/dist/src/agents/reviewer/infra-reviewer/intro.md +25 -0
  109. package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  110. package/dist/src/agents/reviewer/infra-reviewer/output-format.md +240 -0
  111. package/dist/src/agents/reviewer/infra-reviewer/workflow.md +250 -0
  112. package/dist/src/agents/tester/api-tester/critical-reminders.md +23 -0
  113. package/dist/src/agents/tester/api-tester/critical-requirements.md +19 -0
  114. package/dist/src/agents/tester/api-tester/examples.md +74 -0
  115. package/dist/src/agents/tester/api-tester/intro.md +21 -0
  116. package/dist/src/agents/tester/api-tester/metadata.yaml +12 -0
  117. package/dist/src/agents/tester/api-tester/output-format.md +209 -0
  118. package/dist/src/agents/tester/api-tester/workflow.md +364 -0
  119. package/dist/stores/wizard-store.js +1 -1
  120. package/dist/stores/wizard-store.test.js +17 -17
  121. package/dist/stores/wizard-store.test.js.map +1 -1
  122. package/package.json +1 -1
  123. package/src/agents/developer/ai-developer/critical-reminders.md +31 -0
  124. package/src/agents/developer/ai-developer/critical-requirements.md +17 -0
  125. package/src/agents/developer/ai-developer/examples.md +137 -0
  126. package/src/agents/developer/ai-developer/intro.md +23 -0
  127. package/src/agents/developer/ai-developer/metadata.yaml +12 -0
  128. package/src/agents/developer/ai-developer/output-format.md +228 -0
  129. package/src/agents/developer/ai-developer/workflow.md +464 -0
  130. package/src/agents/planning/api-pm/critical-reminders.md +32 -0
  131. package/src/agents/planning/api-pm/critical-requirements.md +21 -0
  132. package/src/agents/planning/api-pm/examples.md +157 -0
  133. package/src/agents/planning/api-pm/intro.md +14 -0
  134. package/src/agents/planning/api-pm/metadata.yaml +12 -0
  135. package/src/agents/planning/api-pm/output-format.md +317 -0
  136. package/src/agents/planning/api-pm/workflow.md +214 -0
  137. package/src/agents/reviewer/ai-reviewer/critical-reminders.md +23 -0
  138. package/src/agents/reviewer/ai-reviewer/critical-requirements.md +19 -0
  139. package/src/agents/reviewer/ai-reviewer/examples.md +131 -0
  140. package/src/agents/reviewer/ai-reviewer/intro.md +23 -0
  141. package/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  142. package/src/agents/reviewer/ai-reviewer/output-format.md +263 -0
  143. package/src/agents/reviewer/ai-reviewer/workflow.md +177 -0
  144. package/src/agents/reviewer/infra-reviewer/critical-reminders.md +21 -0
  145. package/src/agents/reviewer/infra-reviewer/critical-requirements.md +19 -0
  146. package/src/agents/reviewer/infra-reviewer/examples.md +123 -0
  147. package/src/agents/reviewer/infra-reviewer/intro.md +25 -0
  148. package/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  149. package/src/agents/reviewer/infra-reviewer/output-format.md +240 -0
  150. package/src/agents/reviewer/infra-reviewer/workflow.md +250 -0
  151. package/src/agents/tester/api-tester/critical-reminders.md +23 -0
  152. package/src/agents/tester/api-tester/critical-requirements.md +19 -0
  153. package/src/agents/tester/api-tester/examples.md +74 -0
  154. package/src/agents/tester/api-tester/intro.md +21 -0
  155. package/src/agents/tester/api-tester/metadata.yaml +12 -0
  156. package/src/agents/tester/api-tester/output-format.md +209 -0
  157. package/src/agents/tester/api-tester/workflow.md +364 -0
  158. package/dist/chunk-4ITKYWVG.js.map +0 -1
  159. package/dist/chunk-BO4JY7BT.js.map +0 -1
  160. package/dist/chunk-FGVCQBXH.js +0 -143
  161. package/dist/chunk-FGVCQBXH.js.map +0 -1
  162. package/dist/chunk-FQTYF3OU.js +0 -114
  163. package/dist/chunk-FQTYF3OU.js.map +0 -1
  164. package/dist/chunk-O423DMUE.js +0 -111
  165. package/dist/chunk-O423DMUE.js.map +0 -1
  166. package/dist/chunk-VJBCOPMG.js.map +0 -1
  167. /package/dist/{chunk-OWPIGGPP.js.map → chunk-2RXDM5HN.js.map} +0 -0
  168. /package/dist/{chunk-JI44SVMW.js.map → chunk-35WALWDD.js.map} +0 -0
  169. /package/dist/{chunk-D254XO7K.js.map → chunk-3O57Z6Q3.js.map} +0 -0
  170. /package/dist/{chunk-TWOHWCKS.js.map → chunk-3STOCHK4.js.map} +0 -0
  171. /package/dist/{chunk-SB2R5KHJ.js.map → chunk-BGICSUQK.js.map} +0 -0
  172. /package/dist/{chunk-I5AZKNNL.js.map → chunk-FEKVKYCN.js.map} +0 -0
  173. /package/dist/{chunk-7AUGC7PK.js.map → chunk-G3VPBEBC.js.map} +0 -0
  174. /package/dist/{chunk-3T5XT2VU.js.map → chunk-MBEXASMU.js.map} +0 -0
  175. /package/dist/{chunk-TEA5KBIA.js.map → chunk-NESVWSI7.js.map} +0 -0
  176. /package/dist/{chunk-TP6BX5M2.js.map → chunk-RDQBXB3Y.js.map} +0 -0
  177. /package/dist/{chunk-VYLF4IIK.js.map → chunk-TJHCK4OS.js.map} +0 -0
  178. /package/dist/{chunk-Z5FXZFX2.js.map → chunk-UK572773.js.map} +0 -0
  179. /package/dist/components/wizard/{help-modal.js.map → info-panel.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ Each release has detailed notes in its own file under [`changelogs/`](./changelo
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [0.92.0] - 2026-03-27
11
+
12
+ **Info panel feature flag, help modal removal, task tracking cleanup**
13
+
14
+ - Help modal replaced with feature-flagged info panel (`I` key, disabled by default)
15
+ - Stats panel removed from build step
16
+ - Task tracking updated with completed items and agent gap analysis progress
17
+
18
+ See [changelogs/0.92.0.md](./changelogs/0.92.0.md) for full details.
19
+
20
+ ## [0.91.0] - 2026-03-27
21
+
22
+ **Command refactors — extract private methods from 11 command run() bodies**
23
+
24
+ - All command `run()` methods decomposed into focused private methods and pure helper functions
25
+ - Added remeda `countBy`, `difference`, `indexBy` usage in doctor, edit, outdated commands
26
+
27
+ See [changelogs/0.91.0.md](./changelogs/0.91.0.md) for full details.
28
+
10
29
  ## [0.90.0] - 2026-03-27
11
30
 
12
31
  **Dynamic marketplace display name, macOS symlink fix**
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-HSKKGAOW.js";
9
9
  import {
10
10
  useWizardStore
11
- } from "./chunk-4ITKYWVG.js";
11
+ } from "./chunk-V75HVZTB.js";
12
12
  import {
13
13
  matrix,
14
14
  typedEntries
@@ -67,4 +67,4 @@ var DomainSelection = () => {
67
67
  export {
68
68
  DomainSelection
69
69
  };
70
- //# sourceMappingURL=chunk-OWPIGGPP.js.map
70
+ //# sourceMappingURL=chunk-2RXDM5HN.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-7SOPVGDV.js";
5
5
  import {
6
6
  SearchModal
7
- } from "./chunk-SB2R5KHJ.js";
7
+ } from "./chunk-BGICSUQK.js";
8
8
  import {
9
9
  useFocusedListItem
10
10
  } from "./chunk-P2FHS5IS.js";
@@ -260,4 +260,4 @@ var SourceGrid = ({
260
260
  export {
261
261
  SourceGrid
262
262
  };
263
- //# sourceMappingURL=chunk-JI44SVMW.js.map
263
+ //# sourceMappingURL=chunk-35WALWDD.js.map
@@ -9,7 +9,7 @@ import {
9
9
  HOTKEY_FILTER_INCOMPATIBLE,
10
10
  HOTKEY_TOGGLE_LABELS,
11
11
  isHotkey
12
- } from "./chunk-HK53FRMU.js";
12
+ } from "./chunk-DVBA6PGR.js";
13
13
  import {
14
14
  getSkillById
15
15
  } from "./chunk-47HMJ4BY.js";
@@ -371,4 +371,4 @@ var CategoryGrid = ({
371
371
  export {
372
372
  CategoryGrid
373
373
  };
374
- //# sourceMappingURL=chunk-D254XO7K.js.map
374
+ //# sourceMappingURL=chunk-3O57Z6Q3.js.map
@@ -18,7 +18,7 @@ import {
18
18
  KEY_LABEL_ENTER,
19
19
  KEY_LABEL_ESC,
20
20
  isHotkey
21
- } from "./chunk-HK53FRMU.js";
21
+ } from "./chunk-DVBA6PGR.js";
22
22
  import {
23
23
  DEFAULT_SOURCE,
24
24
  addSource,
@@ -263,4 +263,4 @@ var StepSettings = ({
263
263
  export {
264
264
  StepSettings
265
265
  };
266
- //# sourceMappingURL=chunk-TWOHWCKS.js.map
266
+ //# sourceMappingURL=chunk-3STOCHK4.js.map
@@ -1,47 +1,50 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "./chunk-VJBCOPMG.js";
4
+ } from "./chunk-AWB6DO24.js";
5
5
  import {
6
6
  WIZARD_STEPS
7
7
  } from "./chunk-YVFGISUO.js";
8
8
  import {
9
9
  StepSettings
10
- } from "./chunk-TWOHWCKS.js";
10
+ } from "./chunk-3STOCHK4.js";
11
11
  import {
12
12
  StepSources
13
- } from "./chunk-TP6BX5M2.js";
13
+ } from "./chunk-RDQBXB3Y.js";
14
+ import {
15
+ FEATURE_FLAGS
16
+ } from "./chunk-ORTNQZLF.js";
14
17
  import {
15
18
  StepStack
16
- } from "./chunk-7AUGC7PK.js";
19
+ } from "./chunk-G3VPBEBC.js";
17
20
  import {
18
21
  StepAgents
19
- } from "./chunk-VYLF4IIK.js";
22
+ } from "./chunk-TJHCK4OS.js";
20
23
  import {
21
24
  StepBuild
22
- } from "./chunk-FGVCQBXH.js";
25
+ } from "./chunk-M6J5YQ3P.js";
23
26
  import {
24
27
  StepConfirm
25
28
  } from "./chunk-OVY7IV3C.js";
26
29
  import {
27
30
  DomainSelection
28
- } from "./chunk-OWPIGGPP.js";
31
+ } from "./chunk-2RXDM5HN.js";
29
32
  import {
30
33
  getStackName
31
34
  } from "./chunk-UHARXISZ.js";
32
35
  import {
33
36
  useWizardStore
34
- } from "./chunk-4ITKYWVG.js";
37
+ } from "./chunk-V75HVZTB.js";
35
38
  import {
36
39
  cliTheme
37
40
  } from "./chunk-HEQVUIHQ.js";
38
41
  import {
39
42
  HOTKEY_ACCEPT_DEFAULTS,
40
- HOTKEY_HELP,
43
+ HOTKEY_INFO,
41
44
  HOTKEY_SCOPE,
42
45
  HOTKEY_SETTINGS,
43
46
  isHotkey
44
- } from "./chunk-HK53FRMU.js";
47
+ } from "./chunk-DVBA6PGR.js";
45
48
  import {
46
49
  resolveAlias,
47
50
  validateSelection
@@ -206,15 +209,17 @@ var Wizard = ({
206
209
  }
207
210
  return;
208
211
  }
209
- if (store.showHelp) {
210
- if (key.escape || isHotkey(input, HOTKEY_HELP)) {
211
- store.toggleHelp();
212
+ if (FEATURE_FLAGS.INFO_PANEL) {
213
+ if (store.showInfo) {
214
+ if (key.escape || isHotkey(input, HOTKEY_INFO)) {
215
+ store.toggleInfo();
216
+ }
217
+ return;
218
+ }
219
+ if (isHotkey(input, HOTKEY_INFO)) {
220
+ store.toggleInfo();
221
+ return;
212
222
  }
213
- return;
214
- }
215
- if (isHotkey(input, HOTKEY_HELP)) {
216
- store.toggleHelp();
217
- return;
218
223
  }
219
224
  if (key.escape) {
220
225
  return;
@@ -350,4 +355,4 @@ var Wizard = ({
350
355
  export {
351
356
  Wizard
352
357
  };
353
- //# sourceMappingURL=chunk-BO4JY7BT.js.map
358
+ //# sourceMappingURL=chunk-5IR4QU7G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/hooks/use-wizard-initialization.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { StepAgents } from \"./step-agents.js\";\nimport { DomainSelection } from \"./domain-selection.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport { matrix, findStack } from \"../../lib/matrix/matrix-provider.js\";\nimport {\n HOTKEY_ACCEPT_DEFAULTS,\n HOTKEY_INFO,\n HOTKEY_SCOPE,\n HOTKEY_SETTINGS,\n isHotkey,\n} from \"./hotkeys.js\";\nimport type { AgentName, Domain, DomainSelections, SkillId } from \"../../types/index.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport { getStackName } from \"./utils.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\nimport { FEATURE_FLAGS } from \"../../lib/feature-flags.js\";\n\nexport type WizardResultV2 = {\n skills: SkillConfig[];\n selectedAgents: AgentName[];\n agentConfigs: AgentScopeConfig[];\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n selectedDomains: Domain[];\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n};\n\ntype WizardProps = {\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version?: string;\n logo?: string;\n initialStep?: WizardStep;\n initialDomains?: Domain[];\n initialAgents?: AgentName[];\n installedSkillIds?: SkillId[];\n installedSkillConfigs?: SkillConfig[];\n installedAgentConfigs?: AgentScopeConfig[];\n lockedSkillIds?: SkillId[];\n lockedAgentNames?: AgentName[];\n isEditingFromGlobalScope?: boolean;\n projectDir?: string;\n startupMessages?: StartupMessage[];\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\nconst MIN_TERMINAL_HEIGHT = 15;\n\nexport const Wizard: React.FC<WizardProps> = ({\n onComplete,\n onCancel,\n version,\n logo,\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n isEditingFromGlobalScope,\n projectDir,\n startupMessages,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;\n\n useWizardInitialization({\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n isEditingFromGlobalScope,\n });\n\n const buildStepProps = useBuildStepProps({ store, installedSkillIds });\n\n useInput((input, key) => {\n // ESC is handled by step-settings.tsx's own useKeyboardNavigation hook\n if (store.showSettings) {\n if (isHotkey(input, HOTKEY_SETTINGS)) {\n store.toggleSettings();\n }\n return;\n }\n\n if (FEATURE_FLAGS.INFO_PANEL) {\n if (store.showInfo) {\n if (key.escape || isHotkey(input, HOTKEY_INFO)) {\n store.toggleInfo();\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_INFO)) {\n store.toggleInfo();\n return;\n }\n }\n\n if (key.escape) {\n // Steps with their own ESC handling (via useInput in child components):\n // - \"stack\": StackSelection handles ESC via onCancel prop\n // - \"domains\": DomainSelection handles ESC via CheckboxGrid onBack\n // - \"build\": StepBuild handles ESC via its own useInput\n // - \"sources\": StepSources handles ESC via onBack prop\n // - \"confirm\": StepConfirm handles ESC via onBack prop\n // - \"agents\": StepAgents handles ESC via its own useInput\n // All steps handle their own ESC, so this is a no-op.\n return;\n }\n\n if (\n isHotkey(input, HOTKEY_ACCEPT_DEFAULTS) &&\n store.step === \"build\" &&\n store.selectedStackId\n ) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"build\") {\n if (store.isEditingFromGlobalScope) return;\n const focused = store.focusedSkillId;\n if (focused) {\n store.toggleSkillScope(focused);\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_SCOPE) && store.step === \"agents\") {\n if (store.isEditingFromGlobalScope) return;\n const focused = store.focusedAgentId;\n if (focused) {\n store.toggleAgentScope(focused);\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_SETTINGS) && store.step === \"sources\") {\n store.toggleSettings();\n return;\n }\n });\n\n const handleComplete = useCallback(() => {\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = findStack(store.selectedStackId);\n if (!stack) {\n throw new Error(`Stack not found: ${store.selectedStackId}`);\n }\n allSkills = [...stack.allSkillIds];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => resolveAlias(tech));\n }\n\n const skillConfigs: SkillConfig[] = allSkills.map((id) => {\n const existing = store.skillConfigs.find((sc) => sc.id === id);\n return existing ?? { id, scope: \"global\" as const, source: \"local\" };\n });\n\n const validation = validateSelection(allSkills);\n\n const result: WizardResultV2 = {\n skills: skillConfigs,\n selectedAgents: store.selectedAgents,\n agentConfigs: store.agentConfigs,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n selectedDomains: store.selectedDomains,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, onComplete, exit]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n exit();\n }, [onCancel, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"stack\":\n return <StepStack onCancel={handleCancel} />;\n\n case \"domains\":\n return <DomainSelection />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n projectDir={projectDir}\n onContinue={() => {\n if (!initialAgents?.length) {\n store.preselectAgentsFromDomains();\n }\n store.setStep(\"agents\");\n }}\n onBack={store.goBack}\n />\n );\n }\n\n case \"agents\":\n return <StepAgents />;\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId);\n const selectedSkills = store.getAllSelectedTechnologies();\n return (\n <StepConfirm\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={selectedSkills.length}\n skillCount={selectedSkills.length}\n agentCount={store.selectedAgents.length}\n skillConfigs={store.skillConfigs}\n agentConfigs={store.agentConfigs}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal || isShortTerminal) {\n const issue = isNarrowTerminal\n ? `too narrow (${terminalWidth} columns, need ${MIN_TERMINAL_WIDTH})`\n : `too short (${terminalHeight} rows, need ${MIN_TERMINAL_HEIGHT})`;\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>Terminal {issue}. Please resize your terminal.</Text>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} logo={logo} startupMessages={startupMessages}>\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { WIZARD_STEPS } from \"../wizard/wizard-tabs.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport type { AgentName, Domain, SkillId } from \"../../types/index.js\";\n\ntype UseWizardInitializationOptions = {\n initialStep?: WizardStep;\n initialDomains?: Domain[];\n initialAgents?: AgentName[];\n installedSkillIds?: SkillId[];\n installedSkillConfigs?: SkillConfig[];\n installedAgentConfigs?: AgentScopeConfig[];\n lockedSkillIds?: SkillId[];\n lockedAgentNames?: AgentName[];\n isEditingFromGlobalScope?: boolean;\n};\n\n/**\n * Runs one-time wizard store initialization before the first render.\n * Populates step, approach, and skill selections from props.\n */\nexport function useWizardInitialization({\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\n isEditingFromGlobalScope,\n}: UseWizardInitializationOptions): void {\n const initialized = useRef(false);\n\n if (!initialized.current) {\n initialized.current = true;\n\n if (initialStep) {\n if (installedSkillIds?.length) {\n useWizardStore.getState().populateFromSkillIds(installedSkillIds, installedSkillConfigs);\n }\n // Walk through steps via setStep() so history builds naturally.\n // E.g. initialStep=\"build\" → setStep(\"domains\") then setStep(\"build\")\n // → history=[\"stack\", \"domains\"], step=\"build\".\n useWizardStore.setState({ approach: \"scratch\" });\n const stepIds = WIZARD_STEPS.map((s) => s.id);\n const targetIndex = stepIds.indexOf(initialStep);\n for (let i = 1; i <= targetIndex; i++) {\n useWizardStore.getState().setStep(stepIds[i]!);\n }\n }\n // Restore saved domains from config, overriding the domains\n // derived by populateFromSkillIds\n if (initialDomains?.length) {\n useWizardStore.setState({ selectedDomains: initialDomains, currentDomainIndex: 0 });\n }\n // Restore saved agents from config, overriding the default empty array\n if (initialAgents?.length) {\n useWizardStore.setState({ selectedAgents: initialAgents });\n }\n // Restore saved agent scope configs (project vs global)\n if (initialAgents?.length && installedAgentConfigs?.length) {\n useWizardStore.setState({ agentConfigs: installedAgentConfigs });\n }\n // Set locked IDs (D9: global items read-only in project context)\n if (lockedSkillIds?.length || lockedAgentNames?.length) {\n useWizardStore.setState({\n ...(lockedSkillIds?.length && { lockedSkillIds }),\n ...(lockedAgentNames?.length && { lockedAgentNames }),\n });\n }\n if (isEditingFromGlobalScope) {\n useWizardStore.setState({ isEditingFromGlobalScope });\n }\n }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [\"web\"];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || \"web\";\n\n const onToggle = useCallback(\n (categoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[categoryId];\n const exclusive = cat?.exclusive ?? true;\n store.toggleTechnology(domain, categoryId, techId, exclusive);\n },\n [store],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showLabels: store.showLabels,\n filterIncompatible: store.filterIncompatible,\n installedSkillIds,\n onToggle,\n onToggleLabels: store.toggleShowLabels,\n onToggleFilterIncompatible: store.toggleFilterIncompatible,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ useWizardStore
4
+ } from "./chunk-V75HVZTB.js";
5
+ import {
6
+ HOTKEY_INFO
7
+ } from "./chunk-DVBA6PGR.js";
8
+ import {
9
+ matrix
10
+ } from "./chunk-47HMJ4BY.js";
11
+ import {
12
+ CLI_COLORS
13
+ } from "./chunk-6PGL2XMY.js";
14
+ import {
15
+ init_esm_shims
16
+ } from "./chunk-DHET7RCE.js";
17
+
18
+ // src/cli/components/wizard/info-panel.tsx
19
+ init_esm_shims();
20
+ import { Box, Text } from "ink";
21
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
22
+ var SCOPE_COLOR_PROJECT = "#eee";
23
+ var LABEL_WIDTH = 10;
24
+ var ITEM_WIDTH = 20;
25
+ function getSkillDisplayName(config) {
26
+ return matrix.skills[config.id]?.slug ?? config.id;
27
+ }
28
+ function isLocalSource(config) {
29
+ return config.source === "local";
30
+ }
31
+ function groupSkillsByBucket(configs) {
32
+ const buckets = {
33
+ globalPlugin: [],
34
+ globalLocal: [],
35
+ projectPlugin: [],
36
+ projectLocal: []
37
+ };
38
+ for (const config of configs) {
39
+ const name = getSkillDisplayName(config);
40
+ if (config.scope === "global") {
41
+ if (isLocalSource(config)) buckets.globalLocal.push(name);
42
+ else buckets.globalPlugin.push(name);
43
+ } else {
44
+ if (isLocalSource(config)) buckets.projectLocal.push(name);
45
+ else buckets.projectPlugin.push(name);
46
+ }
47
+ }
48
+ return buckets;
49
+ }
50
+ function groupAgentsByScope(configs) {
51
+ const buckets = { global: [], project: [] };
52
+ for (const config of configs) {
53
+ if (config.scope === "global") buckets.global.push(config.name);
54
+ else buckets.project.push(config.name);
55
+ }
56
+ return buckets;
57
+ }
58
+ var ItemPairs = ({ items }) => {
59
+ const rows = [];
60
+ for (let i = 0; i < items.length; i += 2) {
61
+ rows.push(
62
+ /* @__PURE__ */ jsxs(Box, { children: [
63
+ /* @__PURE__ */ jsx(Box, { width: ITEM_WIDTH, children: /* @__PURE__ */ jsx(Text, { children: items[i] }) }),
64
+ items[i + 1] && /* @__PURE__ */ jsx(Box, { width: ITEM_WIDTH, children: /* @__PURE__ */ jsx(Text, { children: items[i + 1] }) })
65
+ ] }, i)
66
+ );
67
+ }
68
+ return /* @__PURE__ */ jsx(Fragment, { children: rows });
69
+ };
70
+ var ScopeColumns = ({ globalItems, projectItems }) => /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
71
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ jsx(ItemPairs, { items: globalItems }) }),
72
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", flexGrow: 1, children: /* @__PURE__ */ jsx(ItemPairs, { items: projectItems }) })
73
+ ] });
74
+ var InfoPanel = () => {
75
+ const skillConfigs = useWizardStore((s) => s.skillConfigs);
76
+ const agentConfigs = useWizardStore((s) => s.agentConfigs);
77
+ const skills = groupSkillsByBucket(skillConfigs);
78
+ const agents = groupAgentsByScope(agentConfigs);
79
+ const hasLocalSkills = skills.globalLocal.length > 0 || skills.projectLocal.length > 0;
80
+ return /* @__PURE__ */ jsxs(
81
+ Box,
82
+ {
83
+ flexDirection: "column",
84
+ borderStyle: "single",
85
+ borderColor: CLI_COLORS.PRIMARY,
86
+ paddingX: 2,
87
+ paddingY: 1,
88
+ marginTop: 1,
89
+ children: [
90
+ /* @__PURE__ */ jsx(Text, { bold: true, color: CLI_COLORS.PRIMARY, children: "Info" }),
91
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { bold: true, children: [
92
+ "SKILLS (",
93
+ skillConfigs.length,
94
+ ")"
95
+ ] }) }),
96
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "row", marginTop: 0, children: [
97
+ /* @__PURE__ */ jsx(Box, { width: LABEL_WIDTH }),
98
+ /* @__PURE__ */ jsx(Box, { flexGrow: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, color: CLI_COLORS.WARNING, children: "Global" }) }),
99
+ /* @__PURE__ */ jsx(Box, { flexGrow: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, color: SCOPE_COLOR_PROJECT, children: "Project" }) })
100
+ ] }),
101
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
102
+ /* @__PURE__ */ jsx(Box, { width: LABEL_WIDTH, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Plugin" }) }),
103
+ /* @__PURE__ */ jsx(ScopeColumns, { globalItems: skills.globalPlugin, projectItems: skills.projectPlugin })
104
+ ] }),
105
+ hasLocalSkills && /* @__PURE__ */ jsxs(Box, { flexDirection: "row", marginTop: 1, children: [
106
+ /* @__PURE__ */ jsx(Box, { width: LABEL_WIDTH, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Local" }) }),
107
+ /* @__PURE__ */ jsx(ScopeColumns, { globalItems: skills.globalLocal, projectItems: skills.projectLocal })
108
+ ] }),
109
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { bold: true, children: [
110
+ "AGENTS (",
111
+ agentConfigs.length,
112
+ ")"
113
+ ] }) }),
114
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "row", marginTop: 0, children: [
115
+ /* @__PURE__ */ jsx(Box, { width: LABEL_WIDTH }),
116
+ /* @__PURE__ */ jsx(Box, { flexGrow: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, color: CLI_COLORS.WARNING, children: "Global" }) }),
117
+ /* @__PURE__ */ jsx(Box, { flexGrow: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, color: SCOPE_COLOR_PROJECT, children: "Project" }) })
118
+ ] }),
119
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
120
+ /* @__PURE__ */ jsx(Box, { width: LABEL_WIDTH }),
121
+ /* @__PURE__ */ jsx(ScopeColumns, { globalItems: agents.global, projectItems: agents.project })
122
+ ] }),
123
+ /* @__PURE__ */ jsx(Box, { paddingY: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
124
+ HOTKEY_INFO.label,
125
+ " close"
126
+ ] }) })
127
+ ]
128
+ }
129
+ );
130
+ };
131
+
132
+ export {
133
+ InfoPanel
134
+ };
135
+ //# sourceMappingURL=chunk-7QWCPF6F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/info-panel.tsx"],"sourcesContent":["import { Box, Text } from \"ink\";\nimport React from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { AgentScopeConfig, SkillConfig } from \"../../types/config.js\";\nimport { HOTKEY_INFO } from \"./hotkeys.js\";\n\nconst SCOPE_COLOR_PROJECT = \"#eee\";\nconst LABEL_WIDTH = 10;\nconst ITEM_WIDTH = 20;\n\nfunction getSkillDisplayName(config: SkillConfig): string {\n return matrix.skills[config.id]?.slug ?? config.id;\n}\n\nfunction isLocalSource(config: SkillConfig): boolean {\n return config.source === \"local\";\n}\n\ntype SkillBuckets = {\n globalPlugin: string[];\n globalLocal: string[];\n projectPlugin: string[];\n projectLocal: string[];\n};\n\nfunction groupSkillsByBucket(configs: SkillConfig[]): SkillBuckets {\n const buckets: SkillBuckets = {\n globalPlugin: [],\n globalLocal: [],\n projectPlugin: [],\n projectLocal: [],\n };\n\n for (const config of configs) {\n const name = getSkillDisplayName(config);\n if (config.scope === \"global\") {\n if (isLocalSource(config)) buckets.globalLocal.push(name);\n else buckets.globalPlugin.push(name);\n } else {\n if (isLocalSource(config)) buckets.projectLocal.push(name);\n else buckets.projectPlugin.push(name);\n }\n }\n\n return buckets;\n}\n\ntype AgentBuckets = {\n global: string[];\n project: string[];\n};\n\nfunction groupAgentsByScope(configs: AgentScopeConfig[]): AgentBuckets {\n const buckets: AgentBuckets = { global: [], project: [] };\n\n for (const config of configs) {\n if (config.scope === \"global\") buckets.global.push(config.name);\n else buckets.project.push(config.name);\n }\n\n return buckets;\n}\n\nconst ItemPairs: React.FC<{ items: string[] }> = ({ items }) => {\n const rows: React.ReactNode[] = [];\n for (let i = 0; i < items.length; i += 2) {\n rows.push(\n <Box key={i}>\n <Box width={ITEM_WIDTH}>\n <Text>{items[i]}</Text>\n </Box>\n {items[i + 1] && (\n <Box width={ITEM_WIDTH}>\n <Text>{items[i + 1]}</Text>\n </Box>\n )}\n </Box>,\n );\n }\n return <>{rows}</>;\n};\n\ntype ScopeColumnsProps = {\n globalItems: string[];\n projectItems: string[];\n};\n\nconst ScopeColumns: React.FC<ScopeColumnsProps> = ({ globalItems, projectItems }) => (\n <Box flexDirection=\"row\">\n <Box flexDirection=\"column\" flexGrow={1}>\n <ItemPairs items={globalItems} />\n </Box>\n <Box flexDirection=\"column\" flexGrow={1}>\n <ItemPairs items={projectItems} />\n </Box>\n </Box>\n);\n\nexport const InfoPanel: React.FC = () => {\n const skillConfigs = useWizardStore((s) => s.skillConfigs);\n const agentConfigs = useWizardStore((s) => s.agentConfigs);\n\n const skills = groupSkillsByBucket(skillConfigs);\n const agents = groupAgentsByScope(agentConfigs);\n\n const hasLocalSkills = skills.globalLocal.length > 0 || skills.projectLocal.length > 0;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={CLI_COLORS.PRIMARY}\n paddingX={2}\n paddingY={1}\n marginTop={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Info\n </Text>\n\n <Box marginTop={1}>\n <Text bold>SKILLS ({skillConfigs.length})</Text>\n </Box>\n\n <Box flexDirection=\"row\" marginTop={0}>\n <Box width={LABEL_WIDTH} />\n <Box flexGrow={1}>\n <Text dimColor color={CLI_COLORS.WARNING}>\n Global\n </Text>\n </Box>\n <Box flexGrow={1}>\n <Text dimColor color={SCOPE_COLOR_PROJECT}>\n Project\n </Text>\n </Box>\n </Box>\n\n <Box flexDirection=\"row\">\n <Box width={LABEL_WIDTH}>\n <Text dimColor>Plugin</Text>\n </Box>\n <ScopeColumns globalItems={skills.globalPlugin} projectItems={skills.projectPlugin} />\n </Box>\n\n {hasLocalSkills && (\n <Box flexDirection=\"row\" marginTop={1}>\n <Box width={LABEL_WIDTH}>\n <Text dimColor>Local</Text>\n </Box>\n <ScopeColumns globalItems={skills.globalLocal} projectItems={skills.projectLocal} />\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text bold>AGENTS ({agentConfigs.length})</Text>\n </Box>\n\n <Box flexDirection=\"row\" marginTop={0}>\n <Box width={LABEL_WIDTH} />\n <Box flexGrow={1}>\n <Text dimColor color={CLI_COLORS.WARNING}>\n Global\n </Text>\n </Box>\n <Box flexGrow={1}>\n <Text dimColor color={SCOPE_COLOR_PROJECT}>\n Project\n </Text>\n </Box>\n </Box>\n\n <Box flexDirection=\"row\">\n <Box width={LABEL_WIDTH} />\n <ScopeColumns globalItems={agents.global} projectItems={agents.project} />\n </Box>\n\n <Box paddingY={1}>\n <Text dimColor>{HOTKEY_INFO.label} close</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -5,21 +5,21 @@ import {
5
5
  } from "./chunk-YVFGISUO.js";
6
6
  import {
7
7
  FEATURE_FLAGS
8
- } from "./chunk-V36FRPAU.js";
8
+ } from "./chunk-ORTNQZLF.js";
9
9
  import {
10
10
  getDomainDisplayName,
11
11
  getStackName,
12
12
  orderDomains
13
13
  } from "./chunk-UHARXISZ.js";
14
14
  import {
15
- HelpModal
16
- } from "./chunk-O423DMUE.js";
15
+ InfoPanel
16
+ } from "./chunk-7QWCPF6F.js";
17
17
  import {
18
18
  useWizardStore
19
- } from "./chunk-4ITKYWVG.js";
19
+ } from "./chunk-V75HVZTB.js";
20
20
  import {
21
21
  HOTKEY_FILTER_INCOMPATIBLE,
22
- HOTKEY_HELP,
22
+ HOTKEY_INFO,
23
23
  HOTKEY_SCOPE,
24
24
  HOTKEY_SETTINGS,
25
25
  HOTKEY_SET_ALL_LOCAL,
@@ -28,7 +28,7 @@ import {
28
28
  KEY_LABEL_ENTER,
29
29
  KEY_LABEL_ESC,
30
30
  KEY_LABEL_SPACE
31
- } from "./chunk-HK53FRMU.js";
31
+ } from "./chunk-DVBA6PGR.js";
32
32
  import {
33
33
  CLI_COLORS
34
34
  } from "./chunk-6PGL2XMY.js";
@@ -186,7 +186,7 @@ var WizardLayout = ({
186
186
  dropdowns
187
187
  }
188
188
  ),
189
- store.showHelp ? /* @__PURE__ */ jsx(HelpModal, { currentStep: store.step }) : /* @__PURE__ */ jsxs(Fragment2, { children: [
189
+ FEATURE_FLAGS.INFO_PANEL && store.showInfo ? /* @__PURE__ */ jsx(InfoPanel, {}) : /* @__PURE__ */ jsxs(Fragment2, { children: [
190
190
  /* @__PURE__ */ jsx(Box, { flexDirection: "column", flexGrow: 1, flexBasis: 0, marginTop: 1, children }),
191
191
  /* @__PURE__ */ jsxs(Box, { paddingX: 1, columnGap: 2, marginTop: 2, children: [
192
192
  /* @__PURE__ */ jsx(
@@ -239,7 +239,14 @@ var WizardLayout = ({
239
239
  isActive: store.showSettings
240
240
  }
241
241
  ),
242
- /* @__PURE__ */ jsx(DefinitionItem, { label: "Help", values: [HOTKEY_HELP.label] })
242
+ /* @__PURE__ */ jsx(
243
+ DefinitionItem,
244
+ {
245
+ label: "Info",
246
+ values: [HOTKEY_INFO.label],
247
+ isVisible: FEATURE_FLAGS.INFO_PANEL
248
+ }
249
+ )
243
250
  ] }),
244
251
  /* @__PURE__ */ jsx(WizardFooter, {})
245
252
  ] })
@@ -250,4 +257,4 @@ var WizardLayout = ({
250
257
  export {
251
258
  WizardLayout
252
259
  };
253
- //# sourceMappingURL=chunk-VJBCOPMG.js.map
260
+ //# sourceMappingURL=chunk-AWB6DO24.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx","../src/cli/components/hooks/use-terminal-dimensions.ts"],"sourcesContent":["import { Box, Static, Text } from \"ink\";\nimport React, { Fragment } from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { FEATURE_FLAGS } from \"../../lib/feature-flags.js\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { useTerminalDimensions } from \"../hooks/use-terminal-dimensions.js\";\nimport { InfoPanel } from \"./info-panel.js\";\nimport {\n HOTKEY_INFO,\n HOTKEY_SCOPE,\n HOTKEY_SET_ALL_LOCAL,\n HOTKEY_SET_ALL_PLUGIN,\n HOTKEY_SETTINGS,\n HOTKEY_FILTER_INCOMPATIBLE,\n HOTKEY_TOGGLE_LABELS,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n KEY_LABEL_SPACE,\n} from \"./hotkeys.js\";\nimport {\n WIZARD_STEPS,\n WizardTabs,\n type DomainNavProps,\n type TabDropdownProps,\n} from \"./wizard-tabs.js\";\nimport { getDomainDisplayName, getStackName, orderDomains } from \"./utils.js\";\nimport type { Domain } from \"../../types/index.js\";\n\ntype KeyHintProps = {\n isVisible?: boolean;\n isActive?: boolean;\n label: string;\n values: string[];\n};\n\nconst DefinitionItem: React.FC<KeyHintProps> = ({\n isVisible = true,\n isActive = false,\n label,\n values,\n}) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text\n backgroundColor=\"black\"\n color={isActive ? CLI_COLORS.PRIMARY : CLI_COLORS.UNFOCUSED}\n >\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text color={isActive ? CLI_COLORS.PRIMARY : undefined}>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS: { label: string; values: string[] }[] = [\n { label: \"select\", values: [KEY_LABEL_SPACE] },\n { label: \"continue\", values: [KEY_LABEL_ENTER] },\n { label: \"back\", values: [KEY_LABEL_ESC] },\n];\n\nconst WizardFooter = () => {\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ntype WizardLayoutProps = {\n version?: string;\n logo?: string;\n startupMessages?: StartupMessage[];\n children: React.ReactNode;\n};\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({\n version,\n logo,\n startupMessages,\n children,\n}) => {\n const store = useWizardStore();\n const { completedSteps, skippedSteps } = store.getStepProgress();\n const { rows: terminalHeight } = useTerminalDimensions();\n\n const handleSelectDomain = (domain: Domain) => {\n const index = store.selectedDomains.indexOf(domain);\n if (index !== -1) {\n useWizardStore.getState().setCurrentDomainIndex(index);\n }\n };\n\n const domainNav: DomainNavProps | undefined =\n store.step === \"build\" && store.selectedDomains.length > 0\n ? {\n domains: orderDomains(store.selectedDomains),\n activeDomain: (store.getCurrentDomain() || store.selectedDomains[0] || \"web\") as Domain,\n getDomainLabel: getDomainDisplayName,\n onSelectDomain: handleSelectDomain,\n }\n : undefined;\n\n // TODO: dropdowns should be in a map\n const dropdowns: Partial<Record<WizardStep, TabDropdownProps>> = {};\n\n if (store.step === \"stack\") {\n const label = \"Choose a stack\";\n dropdowns.stack = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"domains\") {\n const label = \"Select domains\";\n dropdowns.domains = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"sources\") {\n const label = \"Customize skill sources\";\n dropdowns.sources = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"agents\") {\n const label = \"Select agents\";\n dropdowns.agents = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"confirm\") {\n const stackName = getStackName(store.selectedStackId);\n const label = stackName\n ? `Ready to install ${stackName}`\n : \"Ready to install your custom stack\";\n dropdowns.confirm = { items: [{ id: label, label }] };\n }\n\n return (\n <>\n {startupMessages && startupMessages.length > 0 && (\n <Static items={startupMessages}>\n {(msg, index) => (\n <Box key={index}>\n <Text\n color={msg.level === \"warn\" ? \"yellow\" : msg.level === \"error\" ? \"red\" : undefined}\n >\n {msg.level === \"warn\" ? ` Warning: ${msg.text}` : msg.text}\n </Text>\n </Box>\n )}\n </Static>\n )}\n <Box flexDirection=\"column\" paddingX={1} height={terminalHeight}>\n {logo && store.step === \"stack\" && (\n <Box flexDirection=\"row\" marginTop={1} columnGap={1}>\n <Text>{logo}</Text>\n </Box>\n )}\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n domainNav={domainNav}\n dropdowns={dropdowns}\n />\n {FEATURE_FLAGS.INFO_PANEL && store.showInfo ? (\n <InfoPanel />\n ) : (\n <>\n <Box flexDirection=\"column\" flexGrow={1} flexBasis={0} marginTop={1}>\n {children}\n </Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem\n label=\"Labels\"\n values={[HOTKEY_TOGGLE_LABELS.label]}\n isVisible={store.step === \"build\"}\n />\n <DefinitionItem\n label=\"Filter incompatible\"\n values={[HOTKEY_FILTER_INCOMPATIBLE.label]}\n isVisible={store.step === \"build\"}\n isActive={store.filterIncompatible}\n />\n <DefinitionItem\n label=\"Scope\"\n values={[HOTKEY_SCOPE.label]}\n isVisible={\n (store.step === \"build\" || store.step === \"agents\") &&\n !store.isEditingFromGlobalScope\n }\n />\n <DefinitionItem\n label=\"Set all local\"\n values={[HOTKEY_SET_ALL_LOCAL.label]}\n isVisible={store.step === \"sources\"}\n />\n <DefinitionItem\n label=\"Set all plugin\"\n values={[HOTKEY_SET_ALL_PLUGIN.label]}\n isVisible={store.step === \"sources\"}\n />\n <DefinitionItem\n label=\"Settings\"\n values={[HOTKEY_SETTINGS.label]}\n isVisible={store.step === \"sources\" && FEATURE_FLAGS.SOURCE_SEARCH}\n isActive={store.showSettings}\n />\n <DefinitionItem\n label=\"Info\"\n values={[HOTKEY_INFO.label]}\n isVisible={FEATURE_FLAGS.INFO_PANEL}\n />\n </Box>\n <WizardFooter />\n </>\n )}\n </Box>\n </>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport { useStdout } from \"ink\";\n\nconst DEFAULT_COLUMNS = 80;\nconst DEFAULT_ROWS = 24;\n\nexport type TerminalDimensions = {\n /** Terminal width in columns */\n columns: number;\n /** Terminal height in rows */\n rows: number;\n};\n\n/**\n * Tracks terminal dimensions reactively. Re-renders on resize.\n *\n * Falls back to DEFAULT_COLUMNS x DEFAULT_ROWS when stdout is not a TTY\n * (e.g., piped output, CI environments, tests).\n */\nexport function useTerminalDimensions(): TerminalDimensions {\n const { stdout } = useStdout();\n\n const [dimensions, setDimensions] = useState<TerminalDimensions>(() => ({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n setDimensions({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n });\n };\n\n stdout.on(\"resize\", handleResize);\n return () => {\n stdout.off(\"resize\", handleResize);\n };\n }, [stdout]);\n\n return dimensions;\n}\n"],"mappings":"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","names":["Fragment"]}
@@ -6,7 +6,7 @@ import {
6
6
  KEY_LABEL_ARROWS_VERT,
7
7
  KEY_LABEL_ENTER,
8
8
  KEY_LABEL_ESC
9
- } from "./chunk-HK53FRMU.js";
9
+ } from "./chunk-DVBA6PGR.js";
10
10
  import {
11
11
  CLI_COLORS
12
12
  } from "./chunk-6PGL2XMY.js";
@@ -81,4 +81,4 @@ var SearchModal = ({
81
81
  export {
82
82
  SearchModal
83
83
  };
84
- //# sourceMappingURL=chunk-SB2R5KHJ.js.map
84
+ //# sourceMappingURL=chunk-BGICSUQK.js.map
@@ -5,7 +5,7 @@ import {
5
5
 
6
6
  // src/cli/components/wizard/hotkeys.ts
7
7
  init_esm_shims();
8
- var HOTKEY_HELP = { key: "?", label: "?" };
8
+ var HOTKEY_INFO = { key: "i", label: "I" };
9
9
  var HOTKEY_ACCEPT_DEFAULTS = { key: "a", label: "A" };
10
10
  var HOTKEY_SCOPE = { key: "s", label: "S" };
11
11
  var HOTKEY_SETTINGS = { key: "s", label: "S" };
@@ -18,17 +18,15 @@ var HOTKEY_COPY_LINK = { key: "c", label: "C" };
18
18
  var KEY_LABEL_ENTER = "ENTER";
19
19
  var KEY_LABEL_ESC = "ESC";
20
20
  var KEY_LABEL_SPACE = "SPACE";
21
- var KEY_LABEL_TAB = "TAB";
22
21
  var KEY_LABEL_DEL = "DEL";
23
22
  var KEY_LABEL_ARROWS_VERT = "\u2191/\u2193";
24
- var KEY_LABEL_VIM = "h/j/k/l";
25
23
  var KEY_LABEL_VIM_VERT = "j/k";
26
24
  function isHotkey(input, hotkey) {
27
25
  return input.toLowerCase() === hotkey.key.toLowerCase();
28
26
  }
29
27
 
30
28
  export {
31
- HOTKEY_HELP,
29
+ HOTKEY_INFO,
32
30
  HOTKEY_ACCEPT_DEFAULTS,
33
31
  HOTKEY_SCOPE,
34
32
  HOTKEY_SETTINGS,
@@ -41,11 +39,9 @@ export {
41
39
  KEY_LABEL_ENTER,
42
40
  KEY_LABEL_ESC,
43
41
  KEY_LABEL_SPACE,
44
- KEY_LABEL_TAB,
45
42
  KEY_LABEL_DEL,
46
43
  KEY_LABEL_ARROWS_VERT,
47
- KEY_LABEL_VIM,
48
44
  KEY_LABEL_VIM_VERT,
49
45
  isHotkey
50
46
  };
51
- //# sourceMappingURL=chunk-HK53FRMU.js.map
47
+ //# sourceMappingURL=chunk-DVBA6PGR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/components/wizard/hotkeys.ts"],"sourcesContent":["/**\n * Centralized hotkey registry for wizard components.\n *\n * Every character-based hotkey and its display label lives here so that\n * changing a binding updates the key check, the footer hint, and the\n * help modal in one place.\n */\n\n// ---------------------------------------------------------------------------\n// Global hotkeys (active across multiple wizard steps)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_HELP = { key: \"?\", label: \"?\" } as const;\nexport const HOTKEY_ACCEPT_DEFAULTS = { key: \"a\", label: \"A\" } as const;\nexport const HOTKEY_SCOPE = { key: \"s\", label: \"S\" } as const;\nexport const HOTKEY_SETTINGS = { key: \"s\", label: \"S\" } as const;\n\n// ---------------------------------------------------------------------------\n// Build step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_TOGGLE_LABELS = { key: \"d\", label: \"D\" } as const;\nexport const HOTKEY_FILTER_INCOMPATIBLE = { key: \"f\", label: \"F\" } as const;\n\n// ---------------------------------------------------------------------------\n// Sources step hotkeys (customize view)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_SET_ALL_LOCAL = { key: \"l\", label: \"L\" } as const;\nexport const HOTKEY_SET_ALL_PLUGIN = { key: \"p\", label: \"P\" } as const;\n\n// ---------------------------------------------------------------------------\n// Settings step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_ADD_SOURCE = { key: \"a\", label: \"A\" } as const;\n\n// ---------------------------------------------------------------------------\n// Skill search hotkey\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_COPY_LINK = { key: \"c\", label: \"C\" } as const;\n\n// ---------------------------------------------------------------------------\n// Common key labels (for structural keys handled via Ink key objects)\n// ---------------------------------------------------------------------------\n\nexport const KEY_LABEL_ENTER = \"ENTER\" as const;\nexport const KEY_LABEL_ESC = \"ESC\" as const;\nexport const KEY_LABEL_SPACE = \"SPACE\" as const;\nexport const KEY_LABEL_TAB = \"TAB\" as const;\nexport const KEY_LABEL_DEL = \"DEL\" as const;\nexport const KEY_LABEL_ARROWS = \"\\u2190/\\u2192\" as const;\nexport const KEY_LABEL_ARROWS_VERT = \"\\u2191/\\u2193\" as const;\nexport const KEY_LABEL_VIM = \"h/j/k/l\" as const;\nexport const KEY_LABEL_VIM_VERT = \"j/k\" as const;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Case-insensitive check for a character hotkey. */\nexport function isHotkey(input: string, hotkey: { key: string }): boolean {\n return input.toLowerCase() === hotkey.key.toLowerCase();\n}\n"],"mappings":";;;;;;AAAA;AAYO,IAAM,cAAc,EAAE,KAAK,KAAK,OAAO,IAAI;AAC3C,IAAM,yBAAyB,EAAE,KAAK,KAAK,OAAO,IAAI;AACtD,IAAM,eAAe,EAAE,KAAK,KAAK,OAAO,IAAI;AAC5C,IAAM,kBAAkB,EAAE,KAAK,KAAK,OAAO,IAAI;AAM/C,IAAM,uBAAuB,EAAE,KAAK,KAAK,OAAO,IAAI;AACpD,IAAM,6BAA6B,EAAE,KAAK,KAAK,OAAO,IAAI;AAM1D,IAAM,uBAAuB,EAAE,KAAK,KAAK,OAAO,IAAI;AACpD,IAAM,wBAAwB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMrD,IAAM,oBAAoB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMjD,IAAM,mBAAmB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMhD,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAEtB,IAAM,wBAAwB;AAC9B,IAAM,gBAAgB;AACtB,IAAM,qBAAqB;AAO3B,SAAS,SAAS,OAAe,QAAkC;AACxE,SAAO,MAAM,YAAY,MAAM,OAAO,IAAI,YAAY;AACxD;","names":[]}
1
+ {"version":3,"sources":["../src/cli/components/wizard/hotkeys.ts"],"sourcesContent":["/**\n * Centralized hotkey registry for wizard components.\n *\n * Every character-based hotkey and its display label lives here so that\n * changing a binding updates the key check, the footer hint, and the\n * info panel in one place.\n */\n\n// ---------------------------------------------------------------------------\n// Global hotkeys (active across multiple wizard steps)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_INFO = { key: \"i\", label: \"I\" } as const;\nexport const HOTKEY_ACCEPT_DEFAULTS = { key: \"a\", label: \"A\" } as const;\nexport const HOTKEY_SCOPE = { key: \"s\", label: \"S\" } as const;\nexport const HOTKEY_SETTINGS = { key: \"s\", label: \"S\" } as const;\n\n// ---------------------------------------------------------------------------\n// Build step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_TOGGLE_LABELS = { key: \"d\", label: \"D\" } as const;\nexport const HOTKEY_FILTER_INCOMPATIBLE = { key: \"f\", label: \"F\" } as const;\n\n// ---------------------------------------------------------------------------\n// Sources step hotkeys (customize view)\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_SET_ALL_LOCAL = { key: \"l\", label: \"L\" } as const;\nexport const HOTKEY_SET_ALL_PLUGIN = { key: \"p\", label: \"P\" } as const;\n\n// ---------------------------------------------------------------------------\n// Settings step hotkeys\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_ADD_SOURCE = { key: \"a\", label: \"A\" } as const;\n\n// ---------------------------------------------------------------------------\n// Skill search hotkey\n// ---------------------------------------------------------------------------\n\nexport const HOTKEY_COPY_LINK = { key: \"c\", label: \"C\" } as const;\n\n// ---------------------------------------------------------------------------\n// Common key labels (for structural keys handled via Ink key objects)\n// ---------------------------------------------------------------------------\n\nexport const KEY_LABEL_ENTER = \"ENTER\" as const;\nexport const KEY_LABEL_ESC = \"ESC\" as const;\nexport const KEY_LABEL_SPACE = \"SPACE\" as const;\nexport const KEY_LABEL_TAB = \"TAB\" as const;\nexport const KEY_LABEL_DEL = \"DEL\" as const;\nexport const KEY_LABEL_ARROWS = \"\\u2190/\\u2192\" as const;\nexport const KEY_LABEL_ARROWS_VERT = \"\\u2191/\\u2193\" as const;\nexport const KEY_LABEL_VIM = \"h/j/k/l\" as const;\nexport const KEY_LABEL_VIM_VERT = \"j/k\" as const;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Case-insensitive check for a character hotkey. */\nexport function isHotkey(input: string, hotkey: { key: string }): boolean {\n return input.toLowerCase() === hotkey.key.toLowerCase();\n}\n"],"mappings":";;;;;;AAAA;AAYO,IAAM,cAAc,EAAE,KAAK,KAAK,OAAO,IAAI;AAC3C,IAAM,yBAAyB,EAAE,KAAK,KAAK,OAAO,IAAI;AACtD,IAAM,eAAe,EAAE,KAAK,KAAK,OAAO,IAAI;AAC5C,IAAM,kBAAkB,EAAE,KAAK,KAAK,OAAO,IAAI;AAM/C,IAAM,uBAAuB,EAAE,KAAK,KAAK,OAAO,IAAI;AACpD,IAAM,6BAA6B,EAAE,KAAK,KAAK,OAAO,IAAI;AAM1D,IAAM,uBAAuB,EAAE,KAAK,KAAK,OAAO,IAAI;AACpD,IAAM,wBAAwB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMrD,IAAM,oBAAoB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMjD,IAAM,mBAAmB,EAAE,KAAK,KAAK,OAAO,IAAI;AAMhD,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAExB,IAAM,gBAAgB;AAEtB,IAAM,wBAAwB;AAE9B,IAAM,qBAAqB;AAO3B,SAAS,SAAS,OAAe,QAAkC;AACxE,SAAO,MAAM,YAAY,MAAM,OAAO,IAAI,YAAY;AACxD;","names":[]}
@@ -12,7 +12,7 @@ import {
12
12
  KEY_LABEL_SPACE,
13
13
  KEY_LABEL_VIM_VERT,
14
14
  isHotkey
15
- } from "./chunk-HK53FRMU.js";
15
+ } from "./chunk-DVBA6PGR.js";
16
16
  import {
17
17
  truncateText
18
18
  } from "./chunk-N6A7A4RA.js";
@@ -350,4 +350,4 @@ var SkillSearch = ({
350
350
  export {
351
351
  SkillSearch
352
352
  };
353
- //# sourceMappingURL=chunk-I5AZKNNL.js.map
353
+ //# sourceMappingURL=chunk-FEKVKYCN.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "./chunk-Z5FXZFX2.js";
4
+ } from "./chunk-UK572773.js";
5
5
  import {
6
6
  useMeasuredHeight
7
7
  } from "./chunk-K77I4XGL.js";
@@ -21,4 +21,4 @@ var StepStack = ({ onCancel }) => {
21
21
  export {
22
22
  StepStack
23
23
  };
24
- //# sourceMappingURL=chunk-7AUGC7PK.js.map
24
+ //# sourceMappingURL=chunk-G3VPBEBC.js.map