@agents-inc/cli 0.65.0 → 0.71.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 (132) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/dist/chunk-2MHSOPIU.js +84 -0
  3. package/dist/chunk-2MHSOPIU.js.map +1 -0
  4. package/dist/{chunk-BGPGQF35.js → chunk-2VT2DMD7.js} +6 -6
  5. package/dist/{chunk-FGLUQSVU.js → chunk-6BXKF5GP.js} +2 -2
  6. package/dist/{chunk-KFDTVSIC.js → chunk-6YMW4HMX.js} +2 -2
  7. package/dist/{chunk-6DEK3TDF.js → chunk-AX6MMYAZ.js} +4 -4
  8. package/dist/{chunk-53URJ5XK.js → chunk-CADG5WWP.js} +32 -30
  9. package/dist/chunk-CADG5WWP.js.map +1 -0
  10. package/dist/chunk-DA3WIZ4C.js +253 -0
  11. package/dist/chunk-DA3WIZ4C.js.map +1 -0
  12. package/dist/chunk-DHBRWGRZ.js +58 -0
  13. package/dist/chunk-DHBRWGRZ.js.map +1 -0
  14. package/dist/{chunk-EE5EPS32.js → chunk-FCF4WQEI.js} +2 -2
  15. package/dist/{chunk-J4POGAJF.js → chunk-HWVRHPXR.js} +2 -2
  16. package/dist/{chunk-N4D43IOO.js → chunk-J2D6OBIX.js} +26 -2
  17. package/dist/chunk-J2D6OBIX.js.map +1 -0
  18. package/dist/{chunk-O2HK3NTG.js → chunk-KANNRFY7.js} +2 -2
  19. package/dist/{chunk-YEGPTBX5.js → chunk-KSAGOKWT.js} +3 -3
  20. package/dist/{chunk-EC3UJRKZ.js → chunk-KWB3B2HS.js} +92 -163
  21. package/dist/chunk-KWB3B2HS.js.map +1 -0
  22. package/dist/{chunk-7DI3HGKL.js → chunk-KYULKBFC.js} +2 -2
  23. package/dist/chunk-KYULKBFC.js.map +1 -0
  24. package/dist/{chunk-F3REOP7N.js → chunk-L6MTIQ2U.js} +2 -2
  25. package/dist/{chunk-4C7CSZC5.js → chunk-QOJAZI72.js} +3 -3
  26. package/dist/{chunk-LMZXL5RQ.js → chunk-R3AR4VLZ.js} +11 -11
  27. package/dist/chunk-R3AR4VLZ.js.map +1 -0
  28. package/dist/{chunk-OORWBS6F.js → chunk-UDAHHJIM.js} +16 -10
  29. package/dist/chunk-UDAHHJIM.js.map +1 -0
  30. package/dist/{chunk-ZFY5EMDV.js → chunk-UQM5YPPJ.js} +4 -4
  31. package/dist/{chunk-WSMQ5GAP.js → chunk-V5L532ZH.js} +6 -6
  32. package/dist/{chunk-4KVBH2X4.js → chunk-VUUGWE6G.js} +3 -3
  33. package/dist/chunk-WF5PMBIR.js +54 -0
  34. package/dist/chunk-WF5PMBIR.js.map +1 -0
  35. package/dist/{chunk-R46CB36B.js → chunk-X4RIMJNY.js} +4 -4
  36. package/dist/{chunk-RG3KDXMR.js → chunk-XB3TYSPL.js} +3 -3
  37. package/dist/{chunk-EZ35IPXZ.js → chunk-XMZNHLV3.js} +2 -2
  38. package/dist/{chunk-3YNT3NX3.js → chunk-XYRVAEI6.js} +76 -113
  39. package/dist/chunk-XYRVAEI6.js.map +1 -0
  40. package/dist/commands/build/marketplace.js +3 -3
  41. package/dist/commands/build/plugins.js +6 -6
  42. package/dist/commands/build/stack.js +6 -6
  43. package/dist/commands/compile.js +6 -6
  44. package/dist/commands/config/index.js +6 -6
  45. package/dist/commands/config/path.js +5 -5
  46. package/dist/commands/config/show.js +6 -6
  47. package/dist/commands/diff.js +5 -5
  48. package/dist/commands/doctor.js +5 -5
  49. package/dist/commands/edit.js +45 -24
  50. package/dist/commands/edit.js.map +1 -1
  51. package/dist/commands/eject.js +5 -5
  52. package/dist/commands/import/skill.js +5 -5
  53. package/dist/commands/info.js +5 -5
  54. package/dist/commands/init.js +22 -21
  55. package/dist/commands/list.js +5 -5
  56. package/dist/commands/new/agent.js +6 -6
  57. package/dist/commands/new/marketplace.js +7 -7
  58. package/dist/commands/new/skill.js +6 -6
  59. package/dist/commands/outdated.js +5 -5
  60. package/dist/commands/search.js +5 -5
  61. package/dist/commands/uninstall.js +5 -5
  62. package/dist/commands/update.js +6 -6
  63. package/dist/commands/validate.js +5 -5
  64. package/dist/components/common/select-list.js +11 -0
  65. package/dist/components/wizard/category-grid.test.js +6 -6
  66. package/dist/components/wizard/domain-selection.js +6 -6
  67. package/dist/components/wizard/help-modal.js +1 -1
  68. package/dist/components/wizard/search-modal.js +2 -1
  69. package/dist/components/wizard/search-modal.test.js +3 -2
  70. package/dist/components/wizard/search-modal.test.js.map +1 -1
  71. package/dist/components/wizard/source-grid.js +3 -2
  72. package/dist/components/wizard/source-grid.test.js +14 -10
  73. package/dist/components/wizard/source-grid.test.js.map +1 -1
  74. package/dist/components/wizard/stack-selection.js +6 -6
  75. package/dist/components/wizard/step-agents.js +6 -6
  76. package/dist/components/wizard/step-agents.test.js +10 -9
  77. package/dist/components/wizard/step-agents.test.js.map +1 -1
  78. package/dist/components/wizard/step-build.js +7 -7
  79. package/dist/components/wizard/step-build.test.js +17 -52
  80. package/dist/components/wizard/step-build.test.js.map +1 -1
  81. package/dist/components/wizard/step-confirm.test.js +6 -6
  82. package/dist/components/wizard/step-settings.js +5 -5
  83. package/dist/components/wizard/step-settings.test.js +8 -8
  84. package/dist/components/wizard/step-sources.js +10 -9
  85. package/dist/components/wizard/step-sources.test.js +15 -13
  86. package/dist/components/wizard/step-sources.test.js.map +1 -1
  87. package/dist/components/wizard/step-stack.js +9 -9
  88. package/dist/components/wizard/step-stack.test.js +10 -10
  89. package/dist/components/wizard/wizard-layout.js +7 -7
  90. package/dist/components/wizard/wizard.js +20 -19
  91. package/dist/config-exports.js +1 -1
  92. package/dist/hooks/init.js +22 -21
  93. package/dist/hooks/init.js.map +1 -1
  94. package/dist/{loader-4YOZCFIP.js → loader-CMSC3RAO.js} +3 -3
  95. package/dist/{source-loader-O5RMYUBW.js → source-loader-3MZ2MBOF.js} +5 -5
  96. package/dist/{source-manager-NKLL6HCL.js → source-manager-NEH6QXE5.js} +5 -5
  97. package/dist/source-manager-NEH6QXE5.js.map +1 -0
  98. package/dist/stores/matrix-store.test.js +17 -13
  99. package/dist/stores/matrix-store.test.js.map +1 -1
  100. package/dist/stores/wizard-store.js +5 -5
  101. package/dist/stores/wizard-store.test.js +31 -106
  102. package/dist/stores/wizard-store.test.js.map +1 -1
  103. package/package.json +1 -1
  104. package/src/schemas/metadata.schema.json +1 -1
  105. package/dist/chunk-3YNT3NX3.js.map +0 -1
  106. package/dist/chunk-53URJ5XK.js.map +0 -1
  107. package/dist/chunk-6IK2TCK7.js +0 -97
  108. package/dist/chunk-6IK2TCK7.js.map +0 -1
  109. package/dist/chunk-7DI3HGKL.js.map +0 -1
  110. package/dist/chunk-EC3UJRKZ.js.map +0 -1
  111. package/dist/chunk-LMZXL5RQ.js.map +0 -1
  112. package/dist/chunk-N4D43IOO.js.map +0 -1
  113. package/dist/chunk-OORWBS6F.js.map +0 -1
  114. /package/dist/{chunk-BGPGQF35.js.map → chunk-2VT2DMD7.js.map} +0 -0
  115. /package/dist/{chunk-FGLUQSVU.js.map → chunk-6BXKF5GP.js.map} +0 -0
  116. /package/dist/{chunk-KFDTVSIC.js.map → chunk-6YMW4HMX.js.map} +0 -0
  117. /package/dist/{chunk-6DEK3TDF.js.map → chunk-AX6MMYAZ.js.map} +0 -0
  118. /package/dist/{chunk-EE5EPS32.js.map → chunk-FCF4WQEI.js.map} +0 -0
  119. /package/dist/{chunk-J4POGAJF.js.map → chunk-HWVRHPXR.js.map} +0 -0
  120. /package/dist/{chunk-O2HK3NTG.js.map → chunk-KANNRFY7.js.map} +0 -0
  121. /package/dist/{chunk-YEGPTBX5.js.map → chunk-KSAGOKWT.js.map} +0 -0
  122. /package/dist/{chunk-F3REOP7N.js.map → chunk-L6MTIQ2U.js.map} +0 -0
  123. /package/dist/{chunk-4C7CSZC5.js.map → chunk-QOJAZI72.js.map} +0 -0
  124. /package/dist/{chunk-ZFY5EMDV.js.map → chunk-UQM5YPPJ.js.map} +0 -0
  125. /package/dist/{chunk-WSMQ5GAP.js.map → chunk-V5L532ZH.js.map} +0 -0
  126. /package/dist/{chunk-4KVBH2X4.js.map → chunk-VUUGWE6G.js.map} +0 -0
  127. /package/dist/{chunk-R46CB36B.js.map → chunk-X4RIMJNY.js.map} +0 -0
  128. /package/dist/{chunk-RG3KDXMR.js.map → chunk-XB3TYSPL.js.map} +0 -0
  129. /package/dist/{chunk-EZ35IPXZ.js.map → chunk-XMZNHLV3.js.map} +0 -0
  130. /package/dist/{loader-4YOZCFIP.js.map → components/common/select-list.js.map} +0 -0
  131. /package/dist/{source-loader-O5RMYUBW.js.map → loader-CMSC3RAO.js.map} +0 -0
  132. /package/dist/{source-manager-NKLL6HCL.js.map → source-loader-3MZ2MBOF.js.map} +0 -0
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "./chunk-4KVBH2X4.js";
4
+ } from "./chunk-VUUGWE6G.js";
5
5
  import {
6
6
  StepSettings
7
- } from "./chunk-RG3KDXMR.js";
7
+ } from "./chunk-XB3TYSPL.js";
8
8
  import {
9
9
  StepSources
10
- } from "./chunk-WSMQ5GAP.js";
10
+ } from "./chunk-V5L532ZH.js";
11
11
  import {
12
12
  StepStack
13
- } from "./chunk-6DEK3TDF.js";
13
+ } from "./chunk-AX6MMYAZ.js";
14
14
  import {
15
15
  StepAgents
16
- } from "./chunk-J4POGAJF.js";
16
+ } from "./chunk-HWVRHPXR.js";
17
17
  import {
18
18
  StepBuild
19
- } from "./chunk-BGPGQF35.js";
19
+ } from "./chunk-2VT2DMD7.js";
20
20
  import {
21
21
  StepConfirm
22
22
  } from "./chunk-52THXN5G.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-ZYUASJUN.js";
26
26
  import {
27
27
  useWizardStore
28
- } from "./chunk-4C7CSZC5.js";
28
+ } from "./chunk-QOJAZI72.js";
29
29
  import {
30
30
  cliTheme
31
31
  } from "./chunk-T5DJCIUP.js";
@@ -39,13 +39,13 @@ import {
39
39
  import {
40
40
  resolveAlias,
41
41
  validateSelection
42
- } from "./chunk-53URJ5XK.js";
42
+ } from "./chunk-CADG5WWP.js";
43
43
  import {
44
44
  getMatrix
45
45
  } from "./chunk-BKL3DF2Q.js";
46
46
  import {
47
47
  warn
48
- } from "./chunk-LMZXL5RQ.js";
48
+ } from "./chunk-R3AR4VLZ.js";
49
49
  import {
50
50
  CLI_COLORS
51
51
  } from "./chunk-EGMQ3SXN.js";
@@ -68,6 +68,7 @@ function useWizardInitialization({
68
68
  initialAgents,
69
69
  installedSkillIds,
70
70
  installedSkillConfigs,
71
+ installedAgentConfigs,
71
72
  lockedSkillIds,
72
73
  lockedAgentNames
73
74
  }) {
@@ -86,6 +87,9 @@ function useWizardInitialization({
86
87
  if (initialAgents?.length) {
87
88
  useWizardStore.setState({ selectedAgents: initialAgents });
88
89
  }
90
+ if (initialAgents?.length && installedAgentConfigs?.length) {
91
+ useWizardStore.setState({ agentConfigs: installedAgentConfigs });
92
+ }
89
93
  if (lockedSkillIds?.length || lockedAgentNames?.length) {
90
94
  useWizardStore.setState({
91
95
  ...lockedSkillIds?.length && { lockedSkillIds },
@@ -154,6 +158,7 @@ var Wizard = ({
154
158
  initialAgents,
155
159
  installedSkillIds,
156
160
  installedSkillConfigs,
161
+ installedAgentConfigs,
157
162
  lockedSkillIds,
158
163
  lockedAgentNames,
159
164
  projectDir,
@@ -172,6 +177,7 @@ var Wizard = ({
172
177
  initialAgents,
173
178
  installedSkillIds,
174
179
  installedSkillConfigs,
180
+ installedAgentConfigs,
175
181
  lockedSkillIds,
176
182
  lockedAgentNames
177
183
  });
@@ -335,4 +341,4 @@ var Wizard = ({
335
341
  export {
336
342
  Wizard
337
343
  };
338
- //# sourceMappingURL=chunk-OORWBS6F.js.map
344
+ //# sourceMappingURL=chunk-UDAHHJIM.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 { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport { getMatrix } from \"../../stores/matrix-store.js\";\nimport {\n HOTKEY_ACCEPT_DEFAULTS,\n HOTKEY_HELP,\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 { warn, type StartupMessage } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.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 marketplaceLabel?: 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 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 marketplaceLabel,\n logo,\n initialStep,\n initialDomains,\n initialAgents,\n installedSkillIds,\n installedSkillConfigs,\n installedAgentConfigs,\n lockedSkillIds,\n lockedAgentNames,\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 });\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 (store.showHelp) {\n if (key.escape || isHotkey(input, HOTKEY_HELP)) {\n store.toggleHelp();\n }\n return;\n }\n\n if (isHotkey(input, HOTKEY_HELP)) {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n // At the initial stack/scratch selection (approach not yet set), ESC cancels the wizard.\n // StackSelection handles its own ESC via the onCancel prop.\n // Other steps that don't have their own escape handler use goBack.\n if (\n store.step !== \"build\" &&\n store.step !== \"confirm\" &&\n store.step !== \"sources\" &&\n store.step !== \"agents\" &&\n store.step !== \"stack\"\n ) {\n store.goBack();\n }\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 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 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 = getMatrix().suggestedStacks.find((s) => s.id === store.selectedStackId);\n if (!stack) {\n warn(`Stack not found in matrix: '${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 \"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\n version={version}\n marketplaceLabel={marketplaceLabel}\n logo={logo}\n startupMessages={startupMessages}\n >\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.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};\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}: 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 useWizardStore.setState({ step: initialStep, approach: \"scratch\" });\n }\n // Restore saved domains from config, overriding the domains\n // derived by populateFromSkillIds\n if (initialDomains?.length) {\n useWizardStore.setState({ selectedDomains: initialDomains });\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 }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport { getMatrix } from \"../../stores/matrix-store.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 = getMatrix().categories[categoryId];\n store.toggleTechnology(domain, categoryId, techId, cat?.exclusive ?? true);\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 installedSkillIds,\n onToggle,\n onToggleLabels: store.toggleShowLabels,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -17,11 +17,11 @@ import {
17
17
  resolveAgents,
18
18
  writeContentHash,
19
19
  writePluginManifest
20
- } from "./chunk-53URJ5XK.js";
20
+ } from "./chunk-CADG5WWP.js";
21
21
  import {
22
22
  loadAllAgents,
23
23
  loadProjectAgents
24
- } from "./chunk-F3REOP7N.js";
24
+ } from "./chunk-L6MTIQ2U.js";
25
25
  import {
26
26
  typedEntries,
27
27
  typedKeys
@@ -39,7 +39,7 @@ import {
39
39
  verbose,
40
40
  warn,
41
41
  writeFile
42
- } from "./chunk-LMZXL5RQ.js";
42
+ } from "./chunk-R3AR4VLZ.js";
43
43
  import {
44
44
  CLAUDE_DIR,
45
45
  DIRS,
@@ -319,4 +319,4 @@ export {
319
319
  compileAllAgentPlugins,
320
320
  printAgentCompilationSummary
321
321
  };
322
- //# sourceMappingURL=chunk-ZFY5EMDV.js.map
322
+ //# sourceMappingURL=chunk-UQM5YPPJ.js.map
@@ -2,21 +2,21 @@
2
2
  import {
3
3
  FEATURE_FLAGS
4
4
  } from "./chunk-HGTC76BX.js";
5
+ import {
6
+ SourceGrid
7
+ } from "./chunk-6YMW4HMX.js";
5
8
  import {
6
9
  useMeasuredHeight
7
10
  } from "./chunk-K77I4XGL.js";
8
11
  import {
9
12
  SelectionCard
10
13
  } from "./chunk-MWGDG4QN.js";
11
- import {
12
- SourceGrid
13
- } from "./chunk-KFDTVSIC.js";
14
14
  import {
15
15
  ViewTitle
16
16
  } from "./chunk-AQYAVLZK.js";
17
17
  import {
18
18
  useWizardStore
19
- } from "./chunk-4C7CSZC5.js";
19
+ } from "./chunk-QOJAZI72.js";
20
20
  import {
21
21
  HOTKEY_SET_ALL_LOCAL,
22
22
  HOTKEY_SET_ALL_PLUGIN,
@@ -27,7 +27,7 @@ import {
27
27
  import {
28
28
  resolveAllSources,
29
29
  searchExtraSources
30
- } from "./chunk-53URJ5XK.js";
30
+ } from "./chunk-CADG5WWP.js";
31
31
  import {
32
32
  CLI_COLORS,
33
33
  DEFAULT_BRANDING
@@ -181,4 +181,4 @@ var StepSources = ({ projectDir, onContinue, onBack }) => {
181
181
  export {
182
182
  StepSources
183
183
  };
184
- //# sourceMappingURL=chunk-WSMQ5GAP.js.map
184
+ //# sourceMappingURL=chunk-V5L532ZH.js.map
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-HGTC76BX.js";
9
9
  import {
10
10
  HelpModal
11
- } from "./chunk-7DI3HGKL.js";
11
+ } from "./chunk-KYULKBFC.js";
12
12
  import {
13
13
  useWizardStore
14
- } from "./chunk-4C7CSZC5.js";
14
+ } from "./chunk-QOJAZI72.js";
15
15
  import {
16
16
  HOTKEY_ACCEPT_DEFAULTS,
17
17
  HOTKEY_HELP,
@@ -203,4 +203,4 @@ var WizardLayout = ({
203
203
  export {
204
204
  WizardLayout
205
205
  };
206
- //# sourceMappingURL=chunk-4KVBH2X4.js.map
206
+ //# sourceMappingURL=chunk-VUUGWE6G.js.map
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ useKeyboardNavigation
4
+ } from "./chunk-KUV24B5M.js";
5
+ import {
6
+ CLI_COLORS,
7
+ UI_SYMBOLS
8
+ } from "./chunk-EGMQ3SXN.js";
9
+ import {
10
+ init_esm_shims
11
+ } from "./chunk-DHET7RCE.js";
12
+
13
+ // src/cli/components/common/select-list.tsx
14
+ init_esm_shims();
15
+ import { useCallback } from "react";
16
+ import { Box, Text } from "ink";
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ function SelectList({
19
+ items,
20
+ onSelect,
21
+ onCancel,
22
+ renderItem,
23
+ active
24
+ }) {
25
+ const handleEnter = useCallback(
26
+ (index) => {
27
+ if (items.length > 0 && items[index]) {
28
+ onSelect(items[index].value);
29
+ }
30
+ },
31
+ [items, onSelect]
32
+ );
33
+ const { focusedIndex } = useKeyboardNavigation(
34
+ items.length,
35
+ { onEnter: handleEnter, onEscape: onCancel },
36
+ { vimKeys: false, active }
37
+ );
38
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: items.map((item, index) => {
39
+ const isFocused = index === focusedIndex;
40
+ const marker = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;
41
+ return /* @__PURE__ */ jsxs(Box, { children: [
42
+ /* @__PURE__ */ jsxs(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: [
43
+ marker,
44
+ " "
45
+ ] }),
46
+ renderItem ? renderItem(item, isFocused) : /* @__PURE__ */ jsx(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: item.label })
47
+ ] }, index);
48
+ }) });
49
+ }
50
+
51
+ export {
52
+ SelectList
53
+ };
54
+ //# sourceMappingURL=chunk-WF5PMBIR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/common/select-list.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\nimport { useKeyboardNavigation } from \"../hooks/use-keyboard-navigation.js\";\n\nexport type SelectListItem<T> = {\n value: T;\n label: string;\n};\n\nexport type SelectListProps<T> = {\n items: SelectListItem<T>[];\n onSelect: (value: T) => void;\n onCancel?: () => void;\n renderItem?: (item: SelectListItem<T>, isFocused: boolean) => React.ReactNode;\n active?: boolean;\n};\n\nexport function SelectList<T>({\n items,\n onSelect,\n onCancel,\n renderItem,\n active,\n}: SelectListProps<T>): React.ReactElement {\n const handleEnter = useCallback(\n (index: number) => {\n if (items.length > 0 && items[index]) {\n onSelect(items[index].value);\n }\n },\n [items, onSelect],\n );\n\n const { focusedIndex } = useKeyboardNavigation(\n items.length,\n { onEnter: handleEnter, onEscape: onCancel },\n { vimKeys: false, active },\n );\n\n return (\n <Box flexDirection=\"column\">\n {items.map((item, index) => {\n const isFocused = index === focusedIndex;\n const marker = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n\n return (\n <Box key={index}>\n <Text bold={isFocused} color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {marker}{\" \"}\n </Text>\n {renderItem ? (\n renderItem(item, isFocused)\n ) : (\n <Text bold={isFocused} color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {item.label}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA,SAAgB,mBAAmB;AACnC,SAAS,KAAK,YAAY;AA+Cd,SAME,KANF;AA9BL,SAAS,WAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,QAAM,cAAc;AAAA,IAClB,CAAC,UAAkB;AACjB,UAAI,MAAM,SAAS,KAAK,MAAM,KAAK,GAAG;AACpC,iBAAS,MAAM,KAAK,EAAE,KAAK;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,EAClB;AAEA,QAAM,EAAE,aAAa,IAAI;AAAA,IACvB,MAAM;AAAA,IACN,EAAE,SAAS,aAAa,UAAU,SAAS;AAAA,IAC3C,EAAE,SAAS,OAAO,OAAO;AAAA,EAC3B;AAEA,SACE,oBAAC,OAAI,eAAc,UAChB,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,YAAY,UAAU;AAC5B,UAAM,SAAS,YAAY,WAAW,UAAU,WAAW;AAE3D,WACE,qBAAC,OACC;AAAA,2BAAC,QAAK,MAAM,WAAW,OAAO,YAAY,WAAW,UAAU,QAC5D;AAAA;AAAA,QAAQ;AAAA,SACX;AAAA,MACC,aACC,WAAW,MAAM,SAAS,IAE1B,oBAAC,QAAK,MAAM,WAAW,OAAO,YAAY,WAAW,UAAU,QAC5D,eAAK,OACR;AAAA,SATM,KAWV;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -7,11 +7,11 @@ import {
7
7
  loadConfigTypesDataInBackground,
8
8
  regenerateConfigTypes,
9
9
  resolveAuthor
10
- } from "./chunk-53URJ5XK.js";
10
+ } from "./chunk-CADG5WWP.js";
11
11
  import {
12
12
  BaseCommand,
13
13
  EXIT_CODES
14
- } from "./chunk-EE5EPS32.js";
14
+ } from "./chunk-FCF4WQEI.js";
15
15
  import {
16
16
  directoryExists,
17
17
  ensureDir,
@@ -19,7 +19,7 @@ import {
19
19
  getErrorMessage,
20
20
  verbose,
21
21
  writeFile
22
- } from "./chunk-LMZXL5RQ.js";
22
+ } from "./chunk-R3AR4VLZ.js";
23
23
  import {
24
24
  CLI_BIN_NAME,
25
25
  DEFAULT_VERSION,
@@ -339,4 +339,4 @@ export {
339
339
  generateSkillRulesTs,
340
340
  NewSkill
341
341
  };
342
- //# sourceMappingURL=chunk-R46CB36B.js.map
342
+ //# sourceMappingURL=chunk-X4RIMJNY.js.map
@@ -27,11 +27,11 @@ import {
27
27
  addSource,
28
28
  getSourceSummary,
29
29
  removeSource
30
- } from "./chunk-53URJ5XK.js";
30
+ } from "./chunk-CADG5WWP.js";
31
31
  import {
32
32
  getErrorMessage,
33
33
  verbose
34
- } from "./chunk-LMZXL5RQ.js";
34
+ } from "./chunk-R3AR4VLZ.js";
35
35
  import {
36
36
  CLI_COLORS
37
37
  } from "./chunk-EGMQ3SXN.js";
@@ -270,4 +270,4 @@ var StepSettings = ({
270
270
  export {
271
271
  StepSettings
272
272
  };
273
- //# sourceMappingURL=chunk-RG3KDXMR.js.map
273
+ //# sourceMappingURL=chunk-XB3TYSPL.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-AUNBGZS4.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "./chunk-4C7CSZC5.js";
10
+ } from "./chunk-QOJAZI72.js";
11
11
  import {
12
12
  useMatrixStore
13
13
  } from "./chunk-BKL3DF2Q.js";
@@ -111,4 +111,4 @@ var StackSelection = ({
111
111
  export {
112
112
  StackSelection
113
113
  };
114
- //# sourceMappingURL=chunk-EZ35IPXZ.js.map
114
+ //# sourceMappingURL=chunk-XMZNHLV3.js.map
@@ -1,7 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "./chunk-OORWBS6F.js";
4
+ } from "./chunk-UDAHHJIM.js";
5
+ import {
6
+ SelectList
7
+ } from "./chunk-WF5PMBIR.js";
8
+ import {
9
+ KEY_LABEL_ARROWS_VERT,
10
+ KEY_LABEL_ENTER,
11
+ KEY_LABEL_ESC
12
+ } from "./chunk-6VIOO74O.js";
5
13
  import {
6
14
  STATUS_MESSAGES,
7
15
  SUCCESS_MESSAGES
@@ -21,7 +29,7 @@ import {
21
29
  installPluginConfig,
22
30
  loadProjectConfig,
23
31
  loadSkillsMatrixFromSource
24
- } from "./chunk-53URJ5XK.js";
32
+ } from "./chunk-CADG5WWP.js";
25
33
  import {
26
34
  getSkill,
27
35
  useMatrixStore
@@ -29,7 +37,7 @@ import {
29
37
  import {
30
38
  BaseCommand,
31
39
  EXIT_CODES
32
- } from "./chunk-EE5EPS32.js";
40
+ } from "./chunk-FCF4WQEI.js";
33
41
  import {
34
42
  disableBuffering,
35
43
  drainBuffer,
@@ -40,7 +48,7 @@ import {
40
48
  settingsFileSchema,
41
49
  warn,
42
50
  warnUnknownFields
43
- } from "./chunk-LMZXL5RQ.js";
51
+ } from "./chunk-R3AR4VLZ.js";
44
52
  import {
45
53
  ASCII_LOGO,
46
54
  CLAUDE_DIR,
@@ -57,9 +65,8 @@ import {
57
65
 
58
66
  // src/cli/commands/init.tsx
59
67
  init_esm_shims();
60
- import { useState } from "react";
61
68
  import { Flags } from "@oclif/core";
62
- import { render, Box as Box2, Text as Text2, useApp, useInput } from "ink";
69
+ import { render, Box as Box2, Text as Text2, useApp } from "ink";
63
70
  import os from "os";
64
71
  import path2 from "path";
65
72
 
@@ -138,83 +145,51 @@ async function checkPermissions(projectRoot) {
138
145
 
139
146
  // src/cli/commands/init.tsx
140
147
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
148
+ function clearTerminalOutput() {
149
+ process.stdout.write("\x1B[2J\x1B[H");
150
+ }
141
151
  var DASHBOARD_OPTIONS = [
142
- { label: "Edit", command: "edit" },
143
- { label: "Compile", command: "compile" },
144
- { label: "Doctor", command: "doctor" },
145
- { label: "List", command: "list" }
152
+ { label: "Edit", value: "edit" },
153
+ { label: "Compile", value: "compile" },
154
+ { label: "Doctor", value: "doctor" },
155
+ { label: "List", value: "list" }
146
156
  ];
147
- var Dashboard = ({
148
- skillCount,
149
- agentCount,
150
- source,
151
- mode,
152
- onSelect,
153
- onCancel
154
- }) => {
157
+ var Dashboard = ({ onSelect, onCancel }) => {
155
158
  const { exit } = useApp();
156
- const [focusIndex, setFocusIndex] = useState(0);
157
- useInput((_input, key) => {
158
- if (key.escape) {
159
- onCancel();
160
- exit();
161
- return;
162
- }
163
- if (key.return) {
164
- onSelect(DASHBOARD_OPTIONS[focusIndex].command);
165
- exit();
166
- return;
167
- }
168
- if (key.leftArrow) {
169
- setFocusIndex((i) => i > 0 ? i - 1 : DASHBOARD_OPTIONS.length - 1);
170
- }
171
- if (key.rightArrow) {
172
- setFocusIndex((i) => i < DASHBOARD_OPTIONS.length - 1 ? i + 1 : 0);
173
- }
174
- });
175
159
  return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
176
160
  /* @__PURE__ */ jsx2(Text2, { bold: true, children: DEFAULT_BRANDING.NAME }),
177
161
  /* @__PURE__ */ jsx2(Text2, { children: " " }),
178
- /* @__PURE__ */ jsxs2(Text2, { children: [
179
- " Skills: ",
180
- skillCount,
181
- " installed"
182
- ] }),
183
- /* @__PURE__ */ jsxs2(Text2, { children: [
184
- " Agents: ",
185
- agentCount,
186
- " compiled"
187
- ] }),
188
- /* @__PURE__ */ jsxs2(Text2, { children: [
189
- " Mode: ",
190
- mode === "plugin" ? "Plugin" : "Local"
191
- ] }),
192
- source && /* @__PURE__ */ jsxs2(Text2, { children: [
193
- " Source: ",
194
- source
195
- ] }),
196
- /* @__PURE__ */ jsx2(Text2, { children: " " }),
197
- /* @__PURE__ */ jsxs2(Box2, { children: [
198
- /* @__PURE__ */ jsx2(Text2, { children: " " }),
199
- DASHBOARD_OPTIONS.map((option, index) => /* @__PURE__ */ jsx2(Box2, { marginRight: 1, children: /* @__PURE__ */ jsxs2(
200
- Text2,
201
- {
202
- color: index === focusIndex ? CLI_COLORS.FOCUS : void 0,
203
- bold: index === focusIndex,
204
- children: [
205
- "[",
206
- option.label,
207
- "]"
208
- ]
162
+ /* @__PURE__ */ jsx2(
163
+ SelectList,
164
+ {
165
+ items: DASHBOARD_OPTIONS,
166
+ onSelect: (command) => {
167
+ onSelect(command);
168
+ exit();
169
+ },
170
+ onCancel: () => {
171
+ onCancel();
172
+ exit();
209
173
  }
210
- ) }, option.command))
211
- ] }),
212
- /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: " Use arrow keys to select, Enter to confirm, Esc to exit" })
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
177
+ /* @__PURE__ */ jsxs2(Text2, { dimColor: true, children: [
178
+ " ",
179
+ KEY_LABEL_ARROWS_VERT,
180
+ " Navigate ",
181
+ " ",
182
+ KEY_LABEL_ENTER,
183
+ " Confirm ",
184
+ " ",
185
+ KEY_LABEL_ESC,
186
+ " Exit"
187
+ ] })
213
188
  ] });
214
189
  };
215
190
  var GLOBAL_CONFIG_OPTIONS = [
216
- { label: "Edit global installation", choice: "edit-global" },
217
- { label: "Create new project installation", choice: "create-project" }
191
+ { label: "Edit global installation", value: "edit-global" },
192
+ { label: "Create new project installation", value: "create-project" }
218
193
  ];
219
194
  var GlobalConfigPrompt = ({
220
195
  globalConfigDir,
@@ -222,48 +197,38 @@ var GlobalConfigPrompt = ({
222
197
  onCancel
223
198
  }) => {
224
199
  const { exit } = useApp();
225
- const [focusIndex, setFocusIndex] = useState(0);
226
- useInput((_input, key) => {
227
- if (key.escape) {
228
- onCancel();
229
- exit();
230
- return;
231
- }
232
- if (key.return) {
233
- onSelect(GLOBAL_CONFIG_OPTIONS[focusIndex].choice);
234
- exit();
235
- return;
236
- }
237
- if (key.leftArrow) {
238
- setFocusIndex((i) => i > 0 ? i - 1 : GLOBAL_CONFIG_OPTIONS.length - 1);
239
- }
240
- if (key.rightArrow) {
241
- setFocusIndex((i) => i < GLOBAL_CONFIG_OPTIONS.length - 1 ? i + 1 : 0);
242
- }
243
- });
244
200
  return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
245
201
  /* @__PURE__ */ jsxs2(Text2, { children: [
246
202
  "A global installation was found at ",
247
203
  globalConfigDir
248
204
  ] }),
249
- /* @__PURE__ */ jsx2(Text2, { children: "What would you like to do?" }),
250
205
  /* @__PURE__ */ jsx2(Text2, { children: " " }),
251
- /* @__PURE__ */ jsxs2(Box2, { children: [
252
- /* @__PURE__ */ jsx2(Text2, { children: " " }),
253
- GLOBAL_CONFIG_OPTIONS.map((option, index) => /* @__PURE__ */ jsx2(Box2, { marginRight: 1, children: /* @__PURE__ */ jsxs2(
254
- Text2,
255
- {
256
- color: index === focusIndex ? CLI_COLORS.FOCUS : void 0,
257
- bold: index === focusIndex,
258
- children: [
259
- "[",
260
- option.label,
261
- "]"
262
- ]
206
+ /* @__PURE__ */ jsx2(
207
+ SelectList,
208
+ {
209
+ items: GLOBAL_CONFIG_OPTIONS,
210
+ onSelect: (choice) => {
211
+ onSelect(choice);
212
+ exit();
213
+ },
214
+ onCancel: () => {
215
+ onCancel();
216
+ exit();
263
217
  }
264
- ) }, option.choice))
265
- ] }),
266
- /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: " Use arrow keys to select, Enter to confirm, Esc to exit" })
218
+ }
219
+ ),
220
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
221
+ /* @__PURE__ */ jsxs2(Text2, { dimColor: true, children: [
222
+ " ",
223
+ KEY_LABEL_ARROWS_VERT,
224
+ " Navigate ",
225
+ " ",
226
+ KEY_LABEL_ENTER,
227
+ " Confirm ",
228
+ " ",
229
+ KEY_LABEL_ESC,
230
+ " Exit"
231
+ ] })
267
232
  ] });
268
233
  };
269
234
  async function getDashboardData(projectDir) {
@@ -302,10 +267,6 @@ async function showDashboard(projectDir, log) {
302
267
  /* @__PURE__ */ jsx2(
303
268
  Dashboard,
304
269
  {
305
- skillCount: data.skillCount,
306
- agentCount: data.agentCount,
307
- source: data.source,
308
- mode: data.mode,
309
270
  onSelect: (command) => {
310
271
  selectedCommand = command;
311
272
  },
@@ -316,6 +277,7 @@ async function showDashboard(projectDir, log) {
316
277
  )
317
278
  );
318
279
  await waitUntilExit();
280
+ clearTerminalOutput();
319
281
  return selectedCommand;
320
282
  }
321
283
  var Init = class _Init extends BaseCommand {
@@ -374,6 +336,7 @@ var Init = class _Init extends BaseCommand {
374
336
  )
375
337
  );
376
338
  await waitForPrompt();
339
+ clearTerminalOutput();
377
340
  if (globalChoice === "edit-global") {
378
341
  const selectedCommand = await showDashboard(os.homedir(), (msg) => this.log(msg));
379
342
  if (selectedCommand) {
@@ -592,4 +555,4 @@ export {
592
555
  showDashboard,
593
556
  Init
594
557
  };
595
- //# sourceMappingURL=chunk-3YNT3NX3.js.map
558
+ //# sourceMappingURL=chunk-XYRVAEI6.js.map