@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.
- package/CHANGELOG.md +19 -0
- package/dist/{chunk-OWPIGGPP.js → chunk-2RXDM5HN.js} +2 -2
- package/dist/{chunk-JI44SVMW.js → chunk-35WALWDD.js} +2 -2
- package/dist/{chunk-D254XO7K.js → chunk-3O57Z6Q3.js} +2 -2
- package/dist/{chunk-TWOHWCKS.js → chunk-3STOCHK4.js} +2 -2
- package/dist/{chunk-BO4JY7BT.js → chunk-5IR4QU7G.js} +24 -19
- package/dist/chunk-5IR4QU7G.js.map +1 -0
- package/dist/chunk-7QWCPF6F.js +135 -0
- package/dist/chunk-7QWCPF6F.js.map +1 -0
- package/dist/{chunk-VJBCOPMG.js → chunk-AWB6DO24.js} +16 -9
- package/dist/chunk-AWB6DO24.js.map +1 -0
- package/dist/{chunk-SB2R5KHJ.js → chunk-BGICSUQK.js} +2 -2
- package/dist/{chunk-HK53FRMU.js → chunk-DVBA6PGR.js} +3 -7
- package/dist/{chunk-HK53FRMU.js.map → chunk-DVBA6PGR.js.map} +1 -1
- package/dist/{chunk-I5AZKNNL.js → chunk-FEKVKYCN.js} +2 -2
- package/dist/{chunk-7AUGC7PK.js → chunk-G3VPBEBC.js} +2 -2
- package/dist/chunk-M6J5YQ3P.js +100 -0
- package/dist/chunk-M6J5YQ3P.js.map +1 -0
- package/dist/{chunk-3T5XT2VU.js → chunk-MBEXASMU.js} +3 -3
- package/dist/{chunk-TEA5KBIA.js → chunk-NESVWSI7.js} +2 -2
- package/dist/{chunk-V36FRPAU.js → chunk-ORTNQZLF.js} +4 -2
- package/dist/{chunk-V36FRPAU.js.map → chunk-ORTNQZLF.js.map} +1 -1
- package/dist/{chunk-TP6BX5M2.js → chunk-RDQBXB3Y.js} +5 -5
- package/dist/{chunk-VYLF4IIK.js → chunk-TJHCK4OS.js} +2 -2
- package/dist/{chunk-Z5FXZFX2.js → chunk-UK572773.js} +2 -2
- package/dist/{chunk-4ITKYWVG.js → chunk-V75HVZTB.js} +3 -3
- package/dist/chunk-V75HVZTB.js.map +1 -0
- package/dist/commands/build/marketplace.js +58 -40
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +38 -29
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +35 -27
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +35 -32
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/diff.js +4 -3
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +8 -31
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +52 -59
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/import/skill.js +53 -43
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/init.js +17 -18
- package/dist/commands/new/marketplace.js +90 -75
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/outdated.js +82 -91
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/uninstall.js +33 -24
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +2 -2
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +3 -3
- package/dist/components/wizard/domain-selection.js +2 -2
- package/dist/components/wizard/{help-modal.js → info-panel.js} +6 -6
- package/dist/components/wizard/search-modal.js +2 -2
- package/dist/components/wizard/search-modal.test.js +2 -2
- package/dist/components/wizard/source-grid.js +3 -3
- package/dist/components/wizard/source-grid.test.js +4 -4
- package/dist/components/wizard/stack-selection.js +2 -2
- package/dist/components/wizard/stats-panel.js +106 -5
- package/dist/components/wizard/stats-panel.js.map +1 -1
- package/dist/components/wizard/step-agents.js +2 -2
- package/dist/components/wizard/step-agents.test.js +2 -2
- package/dist/components/wizard/step-build.js +4 -5
- package/dist/components/wizard/step-build.test.js +4 -5
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.test.js +1 -1
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +2 -2
- package/dist/components/wizard/step-settings.js +2 -2
- package/dist/components/wizard/step-settings.test.js +2 -2
- package/dist/components/wizard/step-sources.js +6 -6
- package/dist/components/wizard/step-sources.test.js +6 -6
- package/dist/components/wizard/step-stack.js +3 -3
- package/dist/components/wizard/step-stack.test.js +3 -3
- package/dist/components/wizard/wizard-layout.js +5 -5
- package/dist/components/wizard/wizard.js +16 -17
- package/dist/hooks/init.js +17 -18
- package/dist/hooks/init.js.map +1 -1
- package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +1 -0
- package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +13 -0
- package/dist/src/agents/developer/ai-developer/critical-reminders.md +31 -0
- package/dist/src/agents/developer/ai-developer/critical-requirements.md +17 -0
- package/dist/src/agents/developer/ai-developer/examples.md +137 -0
- package/dist/src/agents/developer/ai-developer/intro.md +23 -0
- package/dist/src/agents/developer/ai-developer/metadata.yaml +12 -0
- package/dist/src/agents/developer/ai-developer/output-format.md +228 -0
- package/dist/src/agents/developer/ai-developer/workflow.md +464 -0
- package/dist/src/agents/planning/api-pm/critical-reminders.md +32 -0
- package/dist/src/agents/planning/api-pm/critical-requirements.md +21 -0
- package/dist/src/agents/planning/api-pm/examples.md +157 -0
- package/dist/src/agents/planning/api-pm/intro.md +14 -0
- package/dist/src/agents/planning/api-pm/metadata.yaml +12 -0
- package/dist/src/agents/planning/api-pm/output-format.md +317 -0
- package/dist/src/agents/planning/api-pm/workflow.md +214 -0
- package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +23 -0
- package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +19 -0
- package/dist/src/agents/reviewer/ai-reviewer/examples.md +131 -0
- package/dist/src/agents/reviewer/ai-reviewer/intro.md +23 -0
- package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
- package/dist/src/agents/reviewer/ai-reviewer/output-format.md +263 -0
- package/dist/src/agents/reviewer/ai-reviewer/workflow.md +177 -0
- package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +21 -0
- package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +19 -0
- package/dist/src/agents/reviewer/infra-reviewer/examples.md +123 -0
- package/dist/src/agents/reviewer/infra-reviewer/intro.md +25 -0
- package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
- package/dist/src/agents/reviewer/infra-reviewer/output-format.md +240 -0
- package/dist/src/agents/reviewer/infra-reviewer/workflow.md +250 -0
- package/dist/src/agents/tester/api-tester/critical-reminders.md +23 -0
- package/dist/src/agents/tester/api-tester/critical-requirements.md +19 -0
- package/dist/src/agents/tester/api-tester/examples.md +74 -0
- package/dist/src/agents/tester/api-tester/intro.md +21 -0
- package/dist/src/agents/tester/api-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/api-tester/output-format.md +209 -0
- package/dist/src/agents/tester/api-tester/workflow.md +364 -0
- package/dist/stores/wizard-store.js +1 -1
- package/dist/stores/wizard-store.test.js +17 -17
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/developer/ai-developer/critical-reminders.md +31 -0
- package/src/agents/developer/ai-developer/critical-requirements.md +17 -0
- package/src/agents/developer/ai-developer/examples.md +137 -0
- package/src/agents/developer/ai-developer/intro.md +23 -0
- package/src/agents/developer/ai-developer/metadata.yaml +12 -0
- package/src/agents/developer/ai-developer/output-format.md +228 -0
- package/src/agents/developer/ai-developer/workflow.md +464 -0
- package/src/agents/planning/api-pm/critical-reminders.md +32 -0
- package/src/agents/planning/api-pm/critical-requirements.md +21 -0
- package/src/agents/planning/api-pm/examples.md +157 -0
- package/src/agents/planning/api-pm/intro.md +14 -0
- package/src/agents/planning/api-pm/metadata.yaml +12 -0
- package/src/agents/planning/api-pm/output-format.md +317 -0
- package/src/agents/planning/api-pm/workflow.md +214 -0
- package/src/agents/reviewer/ai-reviewer/critical-reminders.md +23 -0
- package/src/agents/reviewer/ai-reviewer/critical-requirements.md +19 -0
- package/src/agents/reviewer/ai-reviewer/examples.md +131 -0
- package/src/agents/reviewer/ai-reviewer/intro.md +23 -0
- package/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
- package/src/agents/reviewer/ai-reviewer/output-format.md +263 -0
- package/src/agents/reviewer/ai-reviewer/workflow.md +177 -0
- package/src/agents/reviewer/infra-reviewer/critical-reminders.md +21 -0
- package/src/agents/reviewer/infra-reviewer/critical-requirements.md +19 -0
- package/src/agents/reviewer/infra-reviewer/examples.md +123 -0
- package/src/agents/reviewer/infra-reviewer/intro.md +25 -0
- package/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
- package/src/agents/reviewer/infra-reviewer/output-format.md +240 -0
- package/src/agents/reviewer/infra-reviewer/workflow.md +250 -0
- package/src/agents/tester/api-tester/critical-reminders.md +23 -0
- package/src/agents/tester/api-tester/critical-requirements.md +19 -0
- package/src/agents/tester/api-tester/examples.md +74 -0
- package/src/agents/tester/api-tester/intro.md +21 -0
- package/src/agents/tester/api-tester/metadata.yaml +12 -0
- package/src/agents/tester/api-tester/output-format.md +209 -0
- package/src/agents/tester/api-tester/workflow.md +364 -0
- package/dist/chunk-4ITKYWVG.js.map +0 -1
- package/dist/chunk-BO4JY7BT.js.map +0 -1
- package/dist/chunk-FGVCQBXH.js +0 -143
- package/dist/chunk-FGVCQBXH.js.map +0 -1
- package/dist/chunk-FQTYF3OU.js +0 -114
- package/dist/chunk-FQTYF3OU.js.map +0 -1
- package/dist/chunk-O423DMUE.js +0 -111
- package/dist/chunk-O423DMUE.js.map +0 -1
- package/dist/chunk-VJBCOPMG.js.map +0 -1
- /package/dist/{chunk-OWPIGGPP.js.map → chunk-2RXDM5HN.js.map} +0 -0
- /package/dist/{chunk-JI44SVMW.js.map → chunk-35WALWDD.js.map} +0 -0
- /package/dist/{chunk-D254XO7K.js.map → chunk-3O57Z6Q3.js.map} +0 -0
- /package/dist/{chunk-TWOHWCKS.js.map → chunk-3STOCHK4.js.map} +0 -0
- /package/dist/{chunk-SB2R5KHJ.js.map → chunk-BGICSUQK.js.map} +0 -0
- /package/dist/{chunk-I5AZKNNL.js.map → chunk-FEKVKYCN.js.map} +0 -0
- /package/dist/{chunk-7AUGC7PK.js.map → chunk-G3VPBEBC.js.map} +0 -0
- /package/dist/{chunk-3T5XT2VU.js.map → chunk-MBEXASMU.js.map} +0 -0
- /package/dist/{chunk-TEA5KBIA.js.map → chunk-NESVWSI7.js.map} +0 -0
- /package/dist/{chunk-TP6BX5M2.js.map → chunk-RDQBXB3Y.js.map} +0 -0
- /package/dist/{chunk-VYLF4IIK.js.map → chunk-TJHCK4OS.js.map} +0 -0
- /package/dist/{chunk-Z5FXZFX2.js.map → chunk-UK572773.js.map} +0 -0
- /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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
10
|
+
} from "./chunk-3STOCHK4.js";
|
|
11
11
|
import {
|
|
12
12
|
StepSources
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RDQBXB3Y.js";
|
|
14
|
+
import {
|
|
15
|
+
FEATURE_FLAGS
|
|
16
|
+
} from "./chunk-ORTNQZLF.js";
|
|
14
17
|
import {
|
|
15
18
|
StepStack
|
|
16
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-G3VPBEBC.js";
|
|
17
20
|
import {
|
|
18
21
|
StepAgents
|
|
19
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-TJHCK4OS.js";
|
|
20
23
|
import {
|
|
21
24
|
StepBuild
|
|
22
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
43
|
+
HOTKEY_INFO,
|
|
41
44
|
HOTKEY_SCOPE,
|
|
42
45
|
HOTKEY_SETTINGS,
|
|
43
46
|
isHotkey
|
|
44
|
-
} from "./chunk-
|
|
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 (
|
|
210
|
-
if (
|
|
211
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
16
|
-
} from "./chunk-
|
|
15
|
+
InfoPanel
|
|
16
|
+
} from "./chunk-7QWCPF6F.js";
|
|
17
17
|
import {
|
|
18
18
|
useWizardStore
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-V75HVZTB.js";
|
|
20
20
|
import {
|
|
21
21
|
HOTKEY_FILTER_INCOMPATIBLE,
|
|
22
|
-
|
|
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-
|
|
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.
|
|
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(
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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-
|
|
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 *
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
24
|
+
//# sourceMappingURL=chunk-G3VPBEBC.js.map
|