@agents-inc/cli 0.76.0 → 0.77.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 +13 -0
- package/dist/{chunk-Q4PJSAMP.js → chunk-32HX6UYI.js} +2 -1
- package/dist/chunk-32HX6UYI.js.map +1 -0
- package/dist/{chunk-CBJTSEI2.js → chunk-5DDHCCEB.js} +14 -4
- package/dist/chunk-5DDHCCEB.js.map +1 -0
- package/dist/{chunk-UBNHVBSV.js → chunk-7JQIMEUX.js} +3 -3
- package/dist/{chunk-XYZ7B5BY.js → chunk-7LBYURQR.js} +2 -2
- package/dist/{chunk-NWW3OJH5.js → chunk-A5JSBU65.js} +2 -2
- package/dist/{chunk-LO5QGAP2.js → chunk-A6XMJT2Q.js} +4 -4
- package/dist/{chunk-36YW5E7G.js → chunk-AQ5KP4YW.js} +4 -4
- package/dist/{chunk-I2SUTL7S.js → chunk-B66E255O.js} +3 -3
- package/dist/{chunk-IDN2OZJY.js → chunk-C22ACAL2.js} +2 -2
- package/dist/{chunk-7NACNRFG.js → chunk-CTZ4GEAD.js} +16 -16
- package/dist/chunk-CTZ4GEAD.js.map +1 -0
- package/dist/{chunk-PRG7PKZM.js → chunk-CY23HPDE.js} +6 -4
- package/dist/chunk-CY23HPDE.js.map +1 -0
- package/dist/{chunk-WS3TL2AO.js → chunk-CZLXZ75E.js} +67 -35
- package/dist/chunk-CZLXZ75E.js.map +1 -0
- package/dist/{chunk-7XUKTYVD.js → chunk-EO6KJI5D.js} +1038 -270
- package/dist/chunk-EO6KJI5D.js.map +1 -0
- package/dist/{chunk-JWMYAJHD.js → chunk-FSK4TQX7.js} +1236 -354
- package/dist/chunk-FSK4TQX7.js.map +1 -0
- package/dist/{chunk-WMMU5FOO.js → chunk-FUWUCKES.js} +2 -2
- package/dist/{chunk-WMMU5FOO.js.map → chunk-FUWUCKES.js.map} +1 -1
- package/dist/{chunk-AE2QHAFO.js → chunk-G3YSDQJ2.js} +40 -41
- package/dist/chunk-G3YSDQJ2.js.map +1 -0
- package/dist/{chunk-CBYRFAUN.js → chunk-HK53FRMU.js} +3 -1
- package/dist/chunk-HK53FRMU.js.map +1 -0
- package/dist/{chunk-I534EWJQ.js → chunk-IFCASC6R.js} +2 -2
- package/dist/{chunk-R7F5YQMI.js → chunk-J5OOAKB5.js} +2 -2
- package/dist/{chunk-7PZFDI46.js → chunk-KB57OPUL.js} +4 -4
- package/dist/{chunk-WZ5S4LGX.js → chunk-KMLJCO5H.js} +5 -5
- package/dist/{chunk-CCSU4R65.js → chunk-MG55NDVG.js} +2 -2
- package/dist/{chunk-M4ZDKHJV.js → chunk-MUCQ27HV.js} +2 -2
- package/dist/{chunk-O5CPXIC4.js → chunk-N4KD5PBX.js} +4 -4
- package/dist/{chunk-7PMFIL5L.js → chunk-PDYKGJGR.js} +3 -3
- package/dist/{chunk-ODVQXXEO.js → chunk-R6QNVMN5.js} +16 -42
- package/dist/{chunk-ODVQXXEO.js.map → chunk-R6QNVMN5.js.map} +1 -1
- package/dist/chunk-SGKNE6EJ.js +192 -0
- package/dist/chunk-SGKNE6EJ.js.map +1 -0
- package/dist/{chunk-KPRCP3MZ.js → chunk-U2KFFRRX.js} +2 -2
- package/dist/{chunk-VQV3DSHD.js → chunk-UZHD4DBD.js} +5 -5
- package/dist/{chunk-EEZSCHS2.js → chunk-WMTYOK4E.js} +7 -7
- package/dist/{chunk-6F3CZLD6.js → chunk-XA7WF3BI.js} +3 -3
- package/dist/{chunk-S6DKM6MJ.js → chunk-XU6N3OIS.js} +4 -4
- package/dist/{chunk-WN2TUP4M.js → chunk-XYPAOBBV.js} +2 -2
- package/dist/{chunk-CKU7FJNV.js → chunk-ZIZFTSQY.js} +3 -3
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +8 -8
- package/dist/commands/build/stack.js +8 -8
- package/dist/commands/compile.js +8 -8
- package/dist/commands/config/index.js +8 -8
- package/dist/commands/config/path.js +7 -7
- package/dist/commands/config/show.js +8 -8
- package/dist/commands/diff.js +7 -7
- package/dist/commands/doctor.js +7 -7
- package/dist/commands/edit.js +25 -25
- package/dist/commands/eject.js +7 -7
- package/dist/commands/import/skill.js +7 -7
- package/dist/commands/info.js +7 -7
- package/dist/commands/init.js +25 -25
- package/dist/commands/list.js +7 -7
- package/dist/commands/new/agent.js +8 -8
- package/dist/commands/new/marketplace.js +9 -9
- package/dist/commands/new/skill.js +8 -8
- package/dist/commands/outdated.js +7 -7
- package/dist/commands/search.js +9 -9
- package/dist/commands/uninstall.js +7 -7
- package/dist/commands/update.js +8 -8
- package/dist/commands/validate.js +7 -7
- package/dist/components/skill-search/skill-search.js +2 -2
- package/dist/components/wizard/category-grid.js +3 -3
- package/dist/components/wizard/category-grid.test.js +18 -19
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +9 -9
- package/dist/components/wizard/help-modal.js +2 -2
- 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 +4 -4
- package/dist/components/wizard/source-grid.test.js +13 -13
- package/dist/components/wizard/stack-selection.js +10 -9
- package/dist/components/wizard/step-agents.js +9 -9
- package/dist/components/wizard/step-agents.test.js +12 -12
- package/dist/components/wizard/step-build.js +11 -11
- package/dist/components/wizard/step-build.test.js +15 -13
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +5 -5
- package/dist/components/wizard/step-confirm.test.js +11 -11
- 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 +8 -8
- package/dist/components/wizard/step-settings.test.js +11 -11
- package/dist/components/wizard/step-sources.js +11 -11
- package/dist/components/wizard/step-sources.test.js +14 -14
- package/dist/components/wizard/step-stack.js +11 -12
- package/dist/components/wizard/step-stack.test.js +15 -15
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/wizard-layout.js +10 -10
- package/dist/components/wizard/wizard.js +23 -23
- package/dist/config-exports.js +1 -1
- package/dist/hooks/init.js +25 -25
- package/dist/{loader-7RQ4G4TH.js → loader-JMOO2A7C.js} +4 -4
- package/dist/{source-loader-CXCIDGWV.js → source-loader-H3QLG5AE.js} +7 -7
- package/dist/source-manager-ZDBUHGIR.js +19 -0
- package/dist/stores/wizard-store.js +7 -7
- package/dist/stores/wizard-store.test.js +10 -10
- package/package.json +1 -1
- package/dist/chunk-7NACNRFG.js.map +0 -1
- package/dist/chunk-7XUKTYVD.js.map +0 -1
- package/dist/chunk-AE2QHAFO.js.map +0 -1
- package/dist/chunk-CBJTSEI2.js.map +0 -1
- package/dist/chunk-CBYRFAUN.js.map +0 -1
- package/dist/chunk-EWBNSS5Y.js +0 -113
- package/dist/chunk-EWBNSS5Y.js.map +0 -1
- package/dist/chunk-JWMYAJHD.js.map +0 -1
- package/dist/chunk-PRG7PKZM.js.map +0 -1
- package/dist/chunk-Q4PJSAMP.js.map +0 -1
- package/dist/chunk-WS3TL2AO.js.map +0 -1
- package/dist/source-manager-TPLO2DVS.js +0 -19
- /package/dist/{chunk-UBNHVBSV.js.map → chunk-7JQIMEUX.js.map} +0 -0
- /package/dist/{chunk-XYZ7B5BY.js.map → chunk-7LBYURQR.js.map} +0 -0
- /package/dist/{chunk-NWW3OJH5.js.map → chunk-A5JSBU65.js.map} +0 -0
- /package/dist/{chunk-LO5QGAP2.js.map → chunk-A6XMJT2Q.js.map} +0 -0
- /package/dist/{chunk-36YW5E7G.js.map → chunk-AQ5KP4YW.js.map} +0 -0
- /package/dist/{chunk-I2SUTL7S.js.map → chunk-B66E255O.js.map} +0 -0
- /package/dist/{chunk-IDN2OZJY.js.map → chunk-C22ACAL2.js.map} +0 -0
- /package/dist/{chunk-I534EWJQ.js.map → chunk-IFCASC6R.js.map} +0 -0
- /package/dist/{chunk-R7F5YQMI.js.map → chunk-J5OOAKB5.js.map} +0 -0
- /package/dist/{chunk-7PZFDI46.js.map → chunk-KB57OPUL.js.map} +0 -0
- /package/dist/{chunk-WZ5S4LGX.js.map → chunk-KMLJCO5H.js.map} +0 -0
- /package/dist/{chunk-CCSU4R65.js.map → chunk-MG55NDVG.js.map} +0 -0
- /package/dist/{chunk-M4ZDKHJV.js.map → chunk-MUCQ27HV.js.map} +0 -0
- /package/dist/{chunk-O5CPXIC4.js.map → chunk-N4KD5PBX.js.map} +0 -0
- /package/dist/{chunk-7PMFIL5L.js.map → chunk-PDYKGJGR.js.map} +0 -0
- /package/dist/{chunk-KPRCP3MZ.js.map → chunk-U2KFFRRX.js.map} +0 -0
- /package/dist/{chunk-VQV3DSHD.js.map → chunk-UZHD4DBD.js.map} +0 -0
- /package/dist/{chunk-EEZSCHS2.js.map → chunk-WMTYOK4E.js.map} +0 -0
- /package/dist/{chunk-6F3CZLD6.js.map → chunk-XA7WF3BI.js.map} +0 -0
- /package/dist/{chunk-S6DKM6MJ.js.map → chunk-XU6N3OIS.js.map} +0 -0
- /package/dist/{chunk-WN2TUP4M.js.map → chunk-XYPAOBBV.js.map} +0 -0
- /package/dist/{chunk-CKU7FJNV.js.map → chunk-ZIZFTSQY.js.map} +0 -0
- /package/dist/{loader-7RQ4G4TH.js.map → loader-JMOO2A7C.js.map} +0 -0
- /package/dist/{source-loader-CXCIDGWV.js.map → source-loader-H3QLG5AE.js.map} +0 -0
- /package/dist/{source-manager-TPLO2DVS.js.map → source-manager-ZDBUHGIR.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
TEST_CATEGORIES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FUWUCKES.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -73,4 +73,4 @@ export {
|
|
|
73
73
|
CLI_FRAMEWORK_CATEGORY,
|
|
74
74
|
FRAMEWORK_CATEGORY
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-MUCQ27HV.js.map
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
loadConfigTypesDataInBackground,
|
|
8
8
|
regenerateConfigTypes,
|
|
9
9
|
resolveAuthor
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CZLXZ75E.js";
|
|
11
11
|
import {
|
|
12
12
|
BaseCommand,
|
|
13
13
|
EXIT_CODES
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7LBYURQR.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-
|
|
22
|
+
} from "./chunk-XYPAOBBV.js";
|
|
23
23
|
import {
|
|
24
24
|
CLI_BIN_NAME,
|
|
25
25
|
DEFAULT_VERSION,
|
|
@@ -337,4 +337,4 @@ export {
|
|
|
337
337
|
generateSkillRulesTs,
|
|
338
338
|
NewSkill
|
|
339
339
|
};
|
|
340
|
-
//# sourceMappingURL=chunk-
|
|
340
|
+
//# sourceMappingURL=chunk-N4KD5PBX.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getDomainDisplayName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-7JQIMEUX.js";
|
|
5
5
|
import {
|
|
6
6
|
ViewTitle
|
|
7
7
|
} from "./chunk-JNQKCZA3.js";
|
|
8
8
|
import {
|
|
9
9
|
KEY_LABEL_ENTER,
|
|
10
10
|
KEY_LABEL_ESC
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HK53FRMU.js";
|
|
12
12
|
import {
|
|
13
13
|
CLI_COLORS
|
|
14
14
|
} from "./chunk-FMYAYX6W.js";
|
|
@@ -123,4 +123,4 @@ var StepConfirm = ({
|
|
|
123
123
|
export {
|
|
124
124
|
StepConfirm
|
|
125
125
|
};
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
126
|
+
//# sourceMappingURL=chunk-PDYKGJGR.js.map
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
WizardLayout
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5DDHCCEB.js";
|
|
5
5
|
import {
|
|
6
6
|
StepSettings
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-A6XMJT2Q.js";
|
|
8
8
|
import {
|
|
9
9
|
StepSources
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KMLJCO5H.js";
|
|
11
11
|
import {
|
|
12
12
|
StepStack
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KB57OPUL.js";
|
|
14
14
|
import {
|
|
15
15
|
StepAgents
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XU6N3OIS.js";
|
|
17
17
|
import {
|
|
18
18
|
StepBuild
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-G3YSDQJ2.js";
|
|
20
20
|
import {
|
|
21
21
|
StepConfirm
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-PDYKGJGR.js";
|
|
23
23
|
import {
|
|
24
24
|
getStackName
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-7JQIMEUX.js";
|
|
26
26
|
import {
|
|
27
27
|
useWizardStore
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-CY23HPDE.js";
|
|
29
29
|
import {
|
|
30
30
|
cliTheme
|
|
31
31
|
} from "./chunk-3REKTRAN.js";
|
|
@@ -35,16 +35,15 @@ import {
|
|
|
35
35
|
HOTKEY_SCOPE,
|
|
36
36
|
HOTKEY_SETTINGS,
|
|
37
37
|
isHotkey
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-HK53FRMU.js";
|
|
39
39
|
import {
|
|
40
|
-
getDependentSkills,
|
|
41
40
|
resolveAlias,
|
|
42
41
|
validateSelection
|
|
43
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-CZLXZ75E.js";
|
|
44
43
|
import {
|
|
45
44
|
findStack,
|
|
46
45
|
matrix
|
|
47
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-FSK4TQX7.js";
|
|
48
47
|
import {
|
|
49
48
|
CLI_COLORS
|
|
50
49
|
} from "./chunk-FMYAYX6W.js";
|
|
@@ -115,36 +114,9 @@ function useBuildStepProps({
|
|
|
115
114
|
const domain = store.getCurrentDomain() || "web";
|
|
116
115
|
const cat = matrix.categories[categoryId];
|
|
117
116
|
const exclusive = cat?.exclusive ?? true;
|
|
118
|
-
const currentCategorySelections = store.domainSelections[domain]?.[categoryId] || [];
|
|
119
|
-
const isDeselecting = currentCategorySelections.includes(techId);
|
|
120
|
-
if (isDeselecting) {
|
|
121
|
-
const dependents = getDependentSkills(techId, allSelections);
|
|
122
|
-
if (dependents.length > 0) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
117
|
store.toggleTechnology(domain, categoryId, techId, exclusive);
|
|
127
|
-
if (!isDeselecting) {
|
|
128
|
-
const skill = matrix.skills[techId];
|
|
129
|
-
if (skill) {
|
|
130
|
-
for (const req of skill.requires) {
|
|
131
|
-
if (req.needsAny) continue;
|
|
132
|
-
for (const reqId of req.skillIds) {
|
|
133
|
-
const reqSkill = matrix.skills[reqId];
|
|
134
|
-
if (!reqSkill) continue;
|
|
135
|
-
if (!allSelections.includes(reqId)) {
|
|
136
|
-
const reqCategoryId = reqSkill.category;
|
|
137
|
-
const reqCat = matrix.categories[reqCategoryId];
|
|
138
|
-
if (!reqCat) continue;
|
|
139
|
-
const reqDomain = reqCat.domain;
|
|
140
|
-
store.toggleTechnology(reqDomain, reqCategoryId, reqId, reqCat.exclusive ?? true);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
118
|
},
|
|
147
|
-
[store
|
|
119
|
+
[store]
|
|
148
120
|
);
|
|
149
121
|
const onContinue = useCallback(() => {
|
|
150
122
|
if (!store.nextDomain()) {
|
|
@@ -162,9 +134,11 @@ function useBuildStepProps({
|
|
|
162
134
|
selections: store.domainSelections[activeDomain] || {},
|
|
163
135
|
allSelections,
|
|
164
136
|
showLabels: store.showLabels,
|
|
137
|
+
filterIncompatible: store.filterIncompatible,
|
|
165
138
|
installedSkillIds,
|
|
166
139
|
onToggle,
|
|
167
140
|
onToggleLabels: store.toggleShowLabels,
|
|
141
|
+
onToggleFilterIncompatible: store.toggleFilterIncompatible,
|
|
168
142
|
onContinue,
|
|
169
143
|
onBack
|
|
170
144
|
};
|
|
@@ -358,4 +332,4 @@ var Wizard = ({
|
|
|
358
332
|
export {
|
|
359
333
|
Wizard
|
|
360
334
|
};
|
|
361
|
-
//# sourceMappingURL=chunk-
|
|
335
|
+
//# sourceMappingURL=chunk-R6QNVMN5.js.map
|
|
@@ -1 +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 { matrix, findStack } from \"../../lib/matrix/matrix-provider.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 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 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 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 = 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 \"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 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 { Category, Domain, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport { getDependentSkills } from \"../../lib/matrix/matrix-resolver.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\n // Check if this is a deselection\n const currentCategorySelections = store.domainSelections[domain]?.[categoryId] || [];\n const isDeselecting = currentCategorySelections.includes(techId);\n\n if (isDeselecting) {\n // Block deselection if other selected skills depend on this one\n const dependents = getDependentSkills(techId, allSelections);\n if (dependents.length > 0) {\n return; // Blocked — skill is required by dependents\n }\n }\n\n // Perform the toggle\n store.toggleTechnology(domain, categoryId, techId, exclusive);\n\n // After selecting: auto-select required skills that aren't yet selected\n if (!isDeselecting) {\n const skill = matrix.skills[techId];\n if (skill) {\n for (const req of skill.requires) {\n if (req.needsAny) continue; // Can't auto-select when there's a choice\n for (const reqId of req.skillIds) {\n const reqSkill = matrix.skills[reqId];\n if (!reqSkill) continue;\n // Check if already selected (across all domains)\n if (!allSelections.includes(reqId)) {\n // Boundary cast: CategoryPath includes \"local\" but matrix.categories only has Category keys\n const reqCategoryId = reqSkill.category as Category;\n const reqCat = matrix.categories[reqCategoryId];\n if (!reqCat) continue;\n const reqDomain = reqCat.domain as Domain;\n store.toggleTechnology(reqDomain, reqCategoryId, reqId, reqCat.exclusive ?? true);\n }\n }\n }\n }\n }\n },\n [store, allSelections],\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"]}
|
|
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 { matrix, findStack } from \"../../lib/matrix/matrix-provider.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 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 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 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 = 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 \"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 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 { 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,192 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
useMeasuredHeight
|
|
4
|
+
} from "./chunk-K77I4XGL.js";
|
|
5
|
+
import {
|
|
6
|
+
useRowScroll
|
|
7
|
+
} from "./chunk-SQ7WINEU.js";
|
|
8
|
+
import {
|
|
9
|
+
useWizardStore
|
|
10
|
+
} from "./chunk-CY23HPDE.js";
|
|
11
|
+
import {
|
|
12
|
+
matrix
|
|
13
|
+
} from "./chunk-FSK4TQX7.js";
|
|
14
|
+
import {
|
|
15
|
+
CLI_COLORS,
|
|
16
|
+
DEFAULT_SCRATCH_DOMAINS,
|
|
17
|
+
UI_SYMBOLS
|
|
18
|
+
} from "./chunk-FMYAYX6W.js";
|
|
19
|
+
import {
|
|
20
|
+
init_esm_shims
|
|
21
|
+
} from "./chunk-DHET7RCE.js";
|
|
22
|
+
|
|
23
|
+
// src/cli/components/wizard/stack-selection.tsx
|
|
24
|
+
init_esm_shims();
|
|
25
|
+
import { Box, Text, useInput } from "ink";
|
|
26
|
+
import React, { useMemo, useState } from "react";
|
|
27
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
28
|
+
var REACT_FRAMEWORK_ID = "web-framework-react";
|
|
29
|
+
var SCRATCH_LABEL = "Start from scratch";
|
|
30
|
+
var SCRATCH_DESCRIPTION = "Select domains and skills manually";
|
|
31
|
+
function groupStacks(stacks) {
|
|
32
|
+
const reactItems = [];
|
|
33
|
+
const otherItems = [];
|
|
34
|
+
for (const stack of stacks) {
|
|
35
|
+
const isReact = stack.allSkillIds.some((id) => id.startsWith(REACT_FRAMEWORK_ID));
|
|
36
|
+
const item = { id: stack.id, name: stack.name, description: stack.description };
|
|
37
|
+
if (isReact) {
|
|
38
|
+
reactItems.push(item);
|
|
39
|
+
} else {
|
|
40
|
+
otherItems.push(item);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const groups = [];
|
|
44
|
+
if (reactItems.length > 0) {
|
|
45
|
+
groups.push({ label: "React", items: reactItems });
|
|
46
|
+
}
|
|
47
|
+
if (otherItems.length > 0) {
|
|
48
|
+
groups.push({ label: "Other Frameworks", items: otherItems });
|
|
49
|
+
}
|
|
50
|
+
return groups;
|
|
51
|
+
}
|
|
52
|
+
function buildFocusableIds(groups) {
|
|
53
|
+
return [...groups.flatMap((g) => g.items.map((i) => i.id)), "scratch"];
|
|
54
|
+
}
|
|
55
|
+
var StackSection = ({ title, items, focusedId }) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
56
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, bold: true, children: [
|
|
57
|
+
" ",
|
|
58
|
+
title
|
|
59
|
+
] }) }),
|
|
60
|
+
items.map((item) => {
|
|
61
|
+
const isFocused = item.id === focusedId;
|
|
62
|
+
const pointer = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;
|
|
63
|
+
return /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsxs(Text, { children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: pointer }),
|
|
65
|
+
/* @__PURE__ */ jsxs(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, bold: isFocused, children: [
|
|
66
|
+
" ",
|
|
67
|
+
item.name
|
|
68
|
+
] }),
|
|
69
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
70
|
+
" ",
|
|
71
|
+
item.description
|
|
72
|
+
] })
|
|
73
|
+
] }) }, item.id);
|
|
74
|
+
})
|
|
75
|
+
] });
|
|
76
|
+
var StackSelection = ({ onCancel }) => {
|
|
77
|
+
const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain } = useWizardStore();
|
|
78
|
+
const stacks = matrix.suggestedStacks;
|
|
79
|
+
const groups = useMemo(() => groupStacks(stacks), [stacks]);
|
|
80
|
+
const focusableIds = useMemo(() => buildFocusableIds(groups), [groups]);
|
|
81
|
+
const [focusedId, setFocusedId] = useState(focusableIds[0] ?? "scratch");
|
|
82
|
+
const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();
|
|
83
|
+
const totalRowCount = useMemo(() => {
|
|
84
|
+
const groupRows = groups.reduce(
|
|
85
|
+
(sum, g, i) => sum + 1 + g.items.length + (i > 0 ? 1 : 0),
|
|
86
|
+
0
|
|
87
|
+
);
|
|
88
|
+
return groupRows + 1 + 1;
|
|
89
|
+
}, [groups]);
|
|
90
|
+
const focusedVisualRow = useMemo(() => {
|
|
91
|
+
let row = 0;
|
|
92
|
+
for (let gi = 0; gi < groups.length; gi++) {
|
|
93
|
+
if (gi > 0) row++;
|
|
94
|
+
row++;
|
|
95
|
+
for (const item of groups[gi].items) {
|
|
96
|
+
if (item.id === focusedId) return row;
|
|
97
|
+
row++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
row++;
|
|
101
|
+
return row;
|
|
102
|
+
}, [groups, focusedId]);
|
|
103
|
+
const { scrollEnabled, scrollTop } = useRowScroll({
|
|
104
|
+
focusedIndex: focusedVisualRow,
|
|
105
|
+
itemCount: totalRowCount,
|
|
106
|
+
availableHeight: listHeight
|
|
107
|
+
});
|
|
108
|
+
useInput((input, key) => {
|
|
109
|
+
if (key.escape) {
|
|
110
|
+
if (onCancel) {
|
|
111
|
+
onCancel();
|
|
112
|
+
}
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const currentIdx = focusableIds.indexOf(focusedId);
|
|
116
|
+
if (key.upArrow || input === "k") {
|
|
117
|
+
const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;
|
|
118
|
+
setFocusedId(focusableIds[nextIdx]);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (key.downArrow || input === "j") {
|
|
122
|
+
const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;
|
|
123
|
+
setFocusedId(focusableIds[nextIdx]);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (key.return) {
|
|
127
|
+
if (focusedId === "scratch") {
|
|
128
|
+
selectStack(null);
|
|
129
|
+
setApproach("scratch");
|
|
130
|
+
for (const domain of DEFAULT_SCRATCH_DOMAINS) {
|
|
131
|
+
toggleDomain(domain);
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const focusedStack = stacks.find((s) => s.id === focusedId);
|
|
136
|
+
if (focusedStack) {
|
|
137
|
+
selectStack(focusedStack.id);
|
|
138
|
+
setStackAction("customize");
|
|
139
|
+
populateFromSkillIds(focusedStack.allSkillIds);
|
|
140
|
+
setApproach("stack");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
const isScratchFocused = focusedId === "scratch";
|
|
145
|
+
const scratchPointer = isScratchFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;
|
|
146
|
+
return /* @__PURE__ */ jsx(Box, { ref: listRef, flexDirection: "column", flexGrow: 1, flexBasis: 0, children: /* @__PURE__ */ jsx(
|
|
147
|
+
Box,
|
|
148
|
+
{
|
|
149
|
+
flexDirection: "column",
|
|
150
|
+
flexGrow: 1,
|
|
151
|
+
...scrollEnabled && { overflow: "hidden" },
|
|
152
|
+
children: /* @__PURE__ */ jsxs(
|
|
153
|
+
Box,
|
|
154
|
+
{
|
|
155
|
+
flexDirection: "column",
|
|
156
|
+
marginTop: scrollTop > 0 ? -scrollTop : 0,
|
|
157
|
+
...scrollEnabled && { flexShrink: 0 },
|
|
158
|
+
children: [
|
|
159
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
160
|
+
gi > 0 && /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { children: " " }) }),
|
|
161
|
+
/* @__PURE__ */ jsx(StackSection, { title: group.label, items: group.items, focusedId })
|
|
162
|
+
] }, group.label)),
|
|
163
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsx(Text, { children: " " }) }, "scratch-spacer"),
|
|
164
|
+
/* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsxs(Text, { children: [
|
|
165
|
+
/* @__PURE__ */ jsx(Text, { color: isScratchFocused ? CLI_COLORS.PRIMARY : void 0, children: scratchPointer }),
|
|
166
|
+
/* @__PURE__ */ jsxs(
|
|
167
|
+
Text,
|
|
168
|
+
{
|
|
169
|
+
color: isScratchFocused ? CLI_COLORS.PRIMARY : void 0,
|
|
170
|
+
bold: isScratchFocused,
|
|
171
|
+
children: [
|
|
172
|
+
" ",
|
|
173
|
+
SCRATCH_LABEL
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
178
|
+
" ",
|
|
179
|
+
SCRATCH_DESCRIPTION
|
|
180
|
+
] })
|
|
181
|
+
] }) }, "scratch")
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
) });
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export {
|
|
190
|
+
StackSelection
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=chunk-SGKNE6EJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/stack-selection.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport { CLI_COLORS, DEFAULT_SCRATCH_DOMAINS, UI_SYMBOLS } from \"../../consts.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { useRowScroll } from \"../hooks/use-row-scroll.js\";\n\nimport type { SkillId } from \"../../types/index.js\";\n\ntype StackItem = { id: string; name: string; description: string };\ntype StackGroup = { label: string; items: StackItem[] };\ntype FocusId = string | \"scratch\";\n\nconst REACT_FRAMEWORK_ID = \"web-framework-react\";\nconst SCRATCH_LABEL = \"Start from scratch\";\nconst SCRATCH_DESCRIPTION = \"Select domains and skills manually\";\n\nfunction groupStacks(\n stacks: { id: string; name: string; description: string; allSkillIds: SkillId[] }[],\n): StackGroup[] {\n const reactItems: StackItem[] = [];\n const otherItems: StackItem[] = [];\n\n for (const stack of stacks) {\n const isReact = stack.allSkillIds.some((id) => id.startsWith(REACT_FRAMEWORK_ID));\n const item: StackItem = { id: stack.id, name: stack.name, description: stack.description };\n if (isReact) {\n reactItems.push(item);\n } else {\n otherItems.push(item);\n }\n }\n\n const groups: StackGroup[] = [];\n if (reactItems.length > 0) {\n groups.push({ label: \"React\", items: reactItems });\n }\n if (otherItems.length > 0) {\n groups.push({ label: \"Other Frameworks\", items: otherItems });\n }\n return groups;\n}\n\nfunction buildFocusableIds(groups: StackGroup[]): FocusId[] {\n return [...groups.flatMap((g) => g.items.map((i) => i.id)), \"scratch\"];\n}\n\n/** Renders a section header + stack items. Focus state is managed by the parent. */\nconst StackSection: React.FC<{\n title: string;\n items: StackItem[];\n focusedId: FocusId;\n}> = ({ title, items, focusedId }) => (\n <Box flexDirection=\"column\">\n <Box flexShrink={0}>\n <Text dimColor bold>\n {\" \"}\n {title}\n </Text>\n </Box>\n {items.map((item) => {\n const isFocused = item.id === focusedId;\n const pointer = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n return (\n <Box key={item.id} flexShrink={0}>\n <Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>{pointer}</Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined} bold={isFocused}>\n {\" \"}\n {item.name}\n </Text>\n <Text dimColor>\n {\" \"}\n {item.description}\n </Text>\n </Text>\n </Box>\n );\n })}\n </Box>\n);\n\nexport type StackSelectionProps = {\n /** Available height in terminal lines for the scrollable viewport. 0 = no constraint. */\n availableHeight?: number;\n onCancel?: () => void;\n};\n\nexport const StackSelection: React.FC<StackSelectionProps> = ({ onCancel }) => {\n const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain } =\n useWizardStore();\n\n const stacks = matrix.suggestedStacks;\n const groups = useMemo(() => groupStacks(stacks), [stacks]);\n const focusableIds = useMemo(() => buildFocusableIds(groups), [groups]);\n\n const [focusedId, setFocusedId] = useState<FocusId>(focusableIds[0] ?? \"scratch\");\n const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();\n\n // Compute visual row counts for scroll: header + items per group, spacers between groups, spacer + scratch row\n const totalRowCount = useMemo(() => {\n const groupRows = groups.reduce(\n (sum, g, i) =>\n sum + 1 /* header */ + g.items.length + (i > 0 ? 1 : 0) /* spacer between groups */,\n 0,\n );\n return groupRows + 1 /* spacer before scratch */ + 1 /* scratch row */;\n }, [groups]);\n\n // Map focusedId to a visual row index for scrolling\n const focusedVisualRow = useMemo(() => {\n let row = 0;\n for (let gi = 0; gi < groups.length; gi++) {\n if (gi > 0) row++; // spacer between groups\n row++; // header\n for (const item of groups[gi].items) {\n if (item.id === focusedId) return row;\n row++;\n }\n }\n row++; // spacer before scratch\n return row; // scratch row\n }, [groups, focusedId]);\n\n const { scrollEnabled, scrollTop } = useRowScroll({\n focusedIndex: focusedVisualRow,\n itemCount: totalRowCount,\n availableHeight: listHeight,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n if (onCancel) {\n onCancel();\n }\n return;\n }\n\n const currentIdx = focusableIds.indexOf(focusedId);\n\n if (key.upArrow || input === \"k\") {\n const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n if (key.downArrow || input === \"j\") {\n const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.return) {\n if (focusedId === \"scratch\") {\n selectStack(null);\n setApproach(\"scratch\");\n for (const domain of DEFAULT_SCRATCH_DOMAINS) {\n toggleDomain(domain);\n }\n return;\n }\n const focusedStack = stacks.find((s) => s.id === focusedId);\n if (focusedStack) {\n selectStack(focusedStack.id);\n setStackAction(\"customize\");\n populateFromSkillIds(focusedStack.allSkillIds);\n setApproach(\"stack\");\n }\n }\n });\n\n const isScratchFocused = focusedId === \"scratch\";\n const scratchPointer = isScratchFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n\n return (\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n {...(scrollEnabled && { overflow: \"hidden\" as const })}\n >\n <Box\n flexDirection=\"column\"\n marginTop={scrollTop > 0 ? -scrollTop : 0}\n {...(scrollEnabled && { flexShrink: 0 })}\n >\n {groups.map((group, gi) => (\n <React.Fragment key={group.label}>\n {gi > 0 && (\n <Box flexShrink={0}>\n <Text> </Text>\n </Box>\n )}\n <StackSection title={group.label} items={group.items} focusedId={focusedId} />\n </React.Fragment>\n ))}\n\n <Box key=\"scratch-spacer\" flexShrink={0}>\n <Text> </Text>\n </Box>\n <Box key=\"scratch\" flexShrink={0}>\n <Text>\n <Text color={isScratchFocused ? CLI_COLORS.PRIMARY : undefined}>\n {scratchPointer}\n </Text>\n <Text\n color={isScratchFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isScratchFocused}\n >\n {\" \"}\n {SCRATCH_LABEL}\n </Text>\n <Text dimColor>\n {\" \"}\n {SCRATCH_DESCRIPTION}\n </Text>\n </Text>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,KAAK,MAAM,gBAAgB;AACpC,OAAO,SAAS,SAAS,gBAAgB;AAsDrC,cACE,YADF;AAzCJ,IAAM,qBAAqB;AAC3B,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AAE5B,SAAS,YACP,QACc;AACd,QAAM,aAA0B,CAAC;AACjC,QAAM,aAA0B,CAAC;AAEjC,aAAW,SAAS,QAAQ;AAC1B,UAAM,UAAU,MAAM,YAAY,KAAK,CAAC,OAAO,GAAG,WAAW,kBAAkB,CAAC;AAChF,UAAM,OAAkB,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,MAAM,aAAa,MAAM,YAAY;AACzF,QAAI,SAAS;AACX,iBAAW,KAAK,IAAI;AAAA,IACtB,OAAO;AACL,iBAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,SAAuB,CAAC;AAC9B,MAAI,WAAW,SAAS,GAAG;AACzB,WAAO,KAAK,EAAE,OAAO,SAAS,OAAO,WAAW,CAAC;AAAA,EACnD;AACA,MAAI,WAAW,SAAS,GAAG;AACzB,WAAO,KAAK,EAAE,OAAO,oBAAoB,OAAO,WAAW,CAAC;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAiC;AAC1D,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,SAAS;AACvE;AAGA,IAAM,eAID,CAAC,EAAE,OAAO,OAAO,UAAU,MAC9B,qBAAC,OAAI,eAAc,UACjB;AAAA,sBAAC,OAAI,YAAY,GACf,+BAAC,QAAK,UAAQ,MAAC,MAAI,MAChB;AAAA;AAAA,IACA;AAAA,KACH,GACF;AAAA,EACC,MAAM,IAAI,CAAC,SAAS;AACnB,UAAM,YAAY,KAAK,OAAO;AAC9B,UAAM,UAAU,YAAY,WAAW,UAAU,WAAW;AAC5D,WACE,oBAAC,OAAkB,YAAY,GAC7B,+BAAC,QACC;AAAA,0BAAC,QAAK,OAAO,YAAY,WAAW,UAAU,QAAY,mBAAQ;AAAA,MAClE,qBAAC,QAAK,OAAO,YAAY,WAAW,UAAU,QAAW,MAAM,WAC5D;AAAA;AAAA,QACA,KAAK;AAAA,SACR;AAAA,MACA,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,QACA,KAAK;AAAA,SACR;AAAA,OACF,KAXQ,KAAK,EAYf;AAAA,EAEJ,CAAC;AAAA,GACH;AASK,IAAM,iBAAgD,CAAC,EAAE,SAAS,MAAM;AAC7E,QAAM,EAAE,aAAa,aAAa,gBAAgB,sBAAsB,aAAa,IACnF,eAAe;AAEjB,QAAM,SAAS,OAAO;AACtB,QAAM,SAAS,QAAQ,MAAM,YAAY,MAAM,GAAG,CAAC,MAAM,CAAC;AAC1D,QAAM,eAAe,QAAQ,MAAM,kBAAkB,MAAM,GAAG,CAAC,MAAM,CAAC;AAEtE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAkB,aAAa,CAAC,KAAK,SAAS;AAChF,QAAM,EAAE,KAAK,SAAS,gBAAgB,WAAW,IAAI,kBAAkB;AAGvE,QAAM,gBAAgB,QAAQ,MAAM;AAClC,UAAM,YAAY,OAAO;AAAA,MACvB,CAAC,KAAK,GAAG,MACP,MAAM,IAAiB,EAAE,MAAM,UAAU,IAAI,IAAI,IAAI;AAAA,MACvD;AAAA,IACF;AACA,WAAO,YAAY,IAAgC;AAAA,EACrD,GAAG,CAAC,MAAM,CAAC;AAGX,QAAM,mBAAmB,QAAQ,MAAM;AACrC,QAAI,MAAM;AACV,aAAS,KAAK,GAAG,KAAK,OAAO,QAAQ,MAAM;AACzC,UAAI,KAAK,EAAG;AACZ;AACA,iBAAW,QAAQ,OAAO,EAAE,EAAE,OAAO;AACnC,YAAI,KAAK,OAAO,UAAW,QAAO;AAClC;AAAA,MACF;AAAA,IACF;AACA;AACA,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,QAAM,EAAE,eAAe,UAAU,IAAI,aAAa;AAAA,IAChD,cAAc;AAAA,IACd,WAAW;AAAA,IACX,iBAAiB;AAAA,EACnB,CAAC;AAED,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,QAAQ;AACd,UAAI,UAAU;AACZ,iBAAS;AAAA,MACX;AACA;AAAA,IACF;AAEA,UAAM,aAAa,aAAa,QAAQ,SAAS;AAEjD,QAAI,IAAI,WAAW,UAAU,KAAK;AAChC,YAAM,UAAU,cAAc,IAAI,aAAa,SAAS,IAAI,aAAa;AACzE,mBAAa,aAAa,OAAO,CAAE;AACnC;AAAA,IACF;AACA,QAAI,IAAI,aAAa,UAAU,KAAK;AAClC,YAAM,UAAU,cAAc,aAAa,SAAS,IAAI,IAAI,aAAa;AACzE,mBAAa,aAAa,OAAO,CAAE;AACnC;AAAA,IACF;AAEA,QAAI,IAAI,QAAQ;AACd,UAAI,cAAc,WAAW;AAC3B,oBAAY,IAAI;AAChB,oBAAY,SAAS;AACrB,mBAAW,UAAU,yBAAyB;AAC5C,uBAAa,MAAM;AAAA,QACrB;AACA;AAAA,MACF;AACA,YAAM,eAAe,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS;AAC1D,UAAI,cAAc;AAChB,oBAAY,aAAa,EAAE;AAC3B,uBAAe,WAAW;AAC1B,6BAAqB,aAAa,WAAW;AAC7C,oBAAY,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB,cAAc;AACvC,QAAM,iBAAiB,mBAAmB,WAAW,UAAU,WAAW;AAE1E,SACE,oBAAC,OAAI,KAAK,SAAS,eAAc,UAAS,UAAU,GAAG,WAAW,GAChE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,UAAU;AAAA,MACT,GAAI,iBAAiB,EAAE,UAAU,SAAkB;AAAA,MAEpD;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,WAAW,YAAY,IAAI,CAAC,YAAY;AAAA,UACvC,GAAI,iBAAiB,EAAE,YAAY,EAAE;AAAA,UAErC;AAAA,mBAAO,IAAI,CAAC,OAAO,OAClB,qBAAC,MAAM,UAAN,EACE;AAAA,mBAAK,KACJ,oBAAC,OAAI,YAAY,GACf,8BAAC,QAAK,eAAC,GACT;AAAA,cAEF,oBAAC,gBAAa,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,WAAsB;AAAA,iBANzD,MAAM,KAO3B,CACD;AAAA,YAED,oBAAC,OAAyB,YAAY,GACpC,8BAAC,QAAK,eAAC,KADA,gBAET;AAAA,YACA,oBAAC,OAAkB,YAAY,GAC7B,+BAAC,QACC;AAAA,kCAAC,QAAK,OAAO,mBAAmB,WAAW,UAAU,QAClD,0BACH;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO,mBAAmB,WAAW,UAAU;AAAA,kBAC/C,MAAM;AAAA,kBAEL;AAAA;AAAA,oBACA;AAAA;AAAA;AAAA,cACH;AAAA,cACA,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,gBACA;AAAA,iBACH;AAAA,eACF,KAhBO,SAiBT;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
verbose,
|
|
9
9
|
warn,
|
|
10
10
|
writeFile
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XYPAOBBV.js";
|
|
12
12
|
import {
|
|
13
13
|
MAX_PLUGIN_FILE_SIZE
|
|
14
14
|
} from "./chunk-FMYAYX6W.js";
|
|
@@ -129,4 +129,4 @@ export {
|
|
|
129
129
|
writeMarketplace,
|
|
130
130
|
getMarketplaceStats
|
|
131
131
|
};
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
132
|
+
//# sourceMappingURL=chunk-U2KFFRRX.js.map
|
|
@@ -17,15 +17,15 @@ import {
|
|
|
17
17
|
resolveAgents,
|
|
18
18
|
writeContentHash,
|
|
19
19
|
writePluginManifest
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-CZLXZ75E.js";
|
|
21
21
|
import {
|
|
22
22
|
loadAllAgents,
|
|
23
23
|
loadProjectAgents
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-IFCASC6R.js";
|
|
25
25
|
import {
|
|
26
26
|
typedEntries,
|
|
27
27
|
typedKeys
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-FSK4TQX7.js";
|
|
29
29
|
import {
|
|
30
30
|
agentFrontmatterValidationSchema,
|
|
31
31
|
copy,
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
verbose,
|
|
40
40
|
warn,
|
|
41
41
|
writeFile
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-XYPAOBBV.js";
|
|
43
43
|
import {
|
|
44
44
|
CLAUDE_DIR,
|
|
45
45
|
DIRS,
|
|
@@ -325,4 +325,4 @@ export {
|
|
|
325
325
|
compileAllAgentPlugins,
|
|
326
326
|
printAgentCompilationSummary
|
|
327
327
|
};
|
|
328
|
-
//# sourceMappingURL=chunk-
|
|
328
|
+
//# sourceMappingURL=chunk-UZHD4DBD.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
Wizard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-R6QNVMN5.js";
|
|
5
5
|
import {
|
|
6
6
|
SelectList
|
|
7
7
|
} from "./chunk-MLXAZODL.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
KEY_LABEL_ARROWS_VERT,
|
|
10
10
|
KEY_LABEL_ENTER,
|
|
11
11
|
KEY_LABEL_ESC
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HK53FRMU.js";
|
|
13
13
|
import {
|
|
14
14
|
STATUS_MESSAGES,
|
|
15
15
|
SUCCESS_MESSAGES
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
installPluginConfig,
|
|
28
28
|
loadProjectConfig,
|
|
29
29
|
loadSkillsMatrixFromSource
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-CZLXZ75E.js";
|
|
31
31
|
import {
|
|
32
32
|
getSkillById
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-FSK4TQX7.js";
|
|
34
34
|
import {
|
|
35
35
|
BaseCommand,
|
|
36
36
|
EXIT_CODES
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-7LBYURQR.js";
|
|
38
38
|
import {
|
|
39
39
|
disableBuffering,
|
|
40
40
|
drainBuffer,
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
settingsFileSchema,
|
|
46
46
|
warn,
|
|
47
47
|
warnUnknownFields
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-XYPAOBBV.js";
|
|
49
49
|
import {
|
|
50
50
|
ASCII_LOGO,
|
|
51
51
|
CLAUDE_DIR,
|
|
@@ -473,4 +473,4 @@ export {
|
|
|
473
473
|
showDashboard,
|
|
474
474
|
Init
|
|
475
475
|
};
|
|
476
|
-
//# sourceMappingURL=chunk-
|
|
476
|
+
//# sourceMappingURL=chunk-WMTYOK4E.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
FRAMEWORK_CATEGORY
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MUCQ27HV.js";
|
|
5
5
|
import {
|
|
6
6
|
SKILLS,
|
|
7
7
|
TEST_CATEGORIES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
createTestSkill,
|
|
16
16
|
renderSkillMd,
|
|
17
17
|
testSkillToResolvedSkill
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-FUWUCKES.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esm_shims
|
|
21
21
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -725,4 +725,4 @@ export {
|
|
|
725
725
|
ALL_SKILLS_MULTI_DOMAIN_MATRIX,
|
|
726
726
|
REACT_HONO_FRAMEWORK_API_MATRIX
|
|
727
727
|
};
|
|
728
|
-
//# sourceMappingURL=chunk-
|
|
728
|
+
//# sourceMappingURL=chunk-XA7WF3BI.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
getDomainDisplayName,
|
|
7
7
|
isAgentName
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-7JQIMEUX.js";
|
|
9
9
|
import {
|
|
10
10
|
useRowScroll
|
|
11
11
|
} from "./chunk-SQ7WINEU.js";
|
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
} from "./chunk-JNQKCZA3.js";
|
|
15
15
|
import {
|
|
16
16
|
useWizardStore
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-CY23HPDE.js";
|
|
18
18
|
import {
|
|
19
19
|
matrix,
|
|
20
20
|
typedKeys
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-FSK4TQX7.js";
|
|
22
22
|
import {
|
|
23
23
|
CLI_COLORS,
|
|
24
24
|
UI_SYMBOLS
|
|
@@ -275,4 +275,4 @@ var StepAgents = () => {
|
|
|
275
275
|
export {
|
|
276
276
|
StepAgents
|
|
277
277
|
};
|
|
278
|
-
//# sourceMappingURL=chunk-
|
|
278
|
+
//# sourceMappingURL=chunk-XU6N3OIS.js.map
|