@agents-inc/cli 0.45.0 → 0.47.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 +27 -0
- package/dist/{chunk-V43QDMYQ.js → chunk-2RQYJFKA.js} +2 -2
- package/dist/{chunk-ABE55TEU.js → chunk-3APMMQUA.js} +11 -3
- package/dist/chunk-3APMMQUA.js.map +1 -0
- package/dist/{chunk-KWWLPPHF.js → chunk-B4QYXVPZ.js} +2 -2
- package/dist/{chunk-473YHDYQ.js → chunk-C4QI54PN.js} +147 -52
- package/dist/chunk-C4QI54PN.js.map +1 -0
- package/dist/{chunk-CLHBKFHU.js → chunk-CJFWO46A.js} +2 -2
- package/dist/{chunk-M2XPTQDT.js → chunk-DC333ZDC.js} +4 -4
- package/dist/{chunk-M3AGB4TR.js → chunk-DVW6ASTO.js} +4 -4
- package/dist/{chunk-ARET3NYO.js → chunk-EZ46ZTAQ.js} +3 -3
- package/dist/{chunk-VTDEENSP.js → chunk-FMQ3A7W4.js} +5 -5
- package/dist/{chunk-VTDEENSP.js.map → chunk-FMQ3A7W4.js.map} +1 -1
- package/dist/{chunk-FVN5PFFY.js → chunk-FTD5Z6QD.js} +5 -1
- package/dist/chunk-FTD5Z6QD.js.map +1 -0
- package/dist/{chunk-YQFU2KZ5.js → chunk-FXQYEXLS.js} +3 -3
- package/dist/{chunk-ZECXM7LP.js → chunk-GFDGYQ6M.js} +3553 -3497
- package/dist/chunk-GFDGYQ6M.js.map +1 -0
- package/dist/chunk-HLTJK3XB.js +71 -0
- package/dist/chunk-HLTJK3XB.js.map +1 -0
- package/dist/{chunk-KVHLKPYB.js → chunk-HPJP3HFD.js} +7 -7
- package/dist/{chunk-KZNPPUQG.js → chunk-INKJBMPJ.js} +5 -3
- package/dist/chunk-INKJBMPJ.js.map +1 -0
- package/dist/{chunk-SBWMSNS2.js → chunk-IRJADQM7.js} +2 -2
- package/dist/{chunk-SYGEV3KV.js → chunk-JTTTXGHX.js} +4 -4
- package/dist/{chunk-ELRGSZHZ.js → chunk-JZHIF3K7.js} +5 -5
- package/dist/{chunk-OALQWRLG.js → chunk-KQ27IDYL.js} +2 -2
- package/dist/{chunk-OLZBZAW4.js → chunk-LJ5E4GXC.js} +2 -2
- package/dist/{chunk-SRFNNOLC.js → chunk-LNA6M2IE.js} +2 -2
- package/dist/{chunk-GUIRWCKI.js → chunk-M4P5YJ45.js} +3 -3
- package/dist/{chunk-3S4GIO4B.js → chunk-MVEYK55V.js} +2 -2
- package/dist/{chunk-HKRLWERR.js → chunk-N5OCAAXY.js} +2 -2
- package/dist/{chunk-YRVTXSXP.js → chunk-NRCKIHND.js} +9 -15
- package/dist/chunk-NRCKIHND.js.map +1 -0
- package/dist/{chunk-DAVOSI4M.js → chunk-OEJDFGAF.js} +5 -5
- package/dist/{chunk-ENWMWIHP.js → chunk-QR2TM4OY.js} +5 -12
- package/dist/chunk-QR2TM4OY.js.map +1 -0
- package/dist/{chunk-FYNMNY4P.js → chunk-SPSGZWTZ.js} +25 -12
- package/dist/chunk-SPSGZWTZ.js.map +1 -0
- package/dist/{chunk-3JRWNWBF.js → chunk-TBB3THSL.js} +38 -4
- package/dist/chunk-TBB3THSL.js.map +1 -0
- package/dist/chunk-TWDVLTU6.js +132 -0
- package/dist/chunk-TWDVLTU6.js.map +1 -0
- package/dist/{chunk-KCYNTAAF.js → chunk-VAQJLHUW.js} +12 -10
- package/dist/chunk-VAQJLHUW.js.map +1 -0
- package/dist/{chunk-F3O5YHSI.js → chunk-VSZ5GDET.js} +2 -2
- package/dist/{chunk-Q5BSIARS.js → chunk-XTRPYUWK.js} +15 -15
- package/dist/chunk-XTRPYUWK.js.map +1 -0
- package/dist/{chunk-WWSKP5SR.js → chunk-YTRFL3MR.js} +70 -24
- package/dist/chunk-YTRFL3MR.js.map +1 -0
- package/dist/{chunk-NTPHCNJO.js → chunk-ZWAL2ZY7.js} +2 -2
- package/dist/commands/build/marketplace.js +12 -126
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +5 -5
- package/dist/commands/build/stack.js +5 -5
- package/dist/commands/compile.js +6 -6
- package/dist/commands/config/get.js +4 -4
- package/dist/commands/config/index.js +5 -5
- package/dist/commands/config/path.js +4 -4
- package/dist/commands/config/set-project.js +4 -4
- package/dist/commands/config/show.js +5 -5
- package/dist/commands/config/unset-project.js +4 -4
- package/dist/commands/diff.js +4 -4
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/edit.js +29 -29
- package/dist/commands/eject.js +19 -23
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +5 -5
- package/dist/commands/info.js +5 -5
- package/dist/commands/init.js +30 -29
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +4 -4
- package/dist/commands/new/agent.js +52 -38
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +252 -0
- package/dist/commands/new/marketplace.js.map +1 -0
- package/dist/commands/new/skill.js +35 -16
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +4 -4
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +6 -6
- package/dist/commands/update.js +6 -6
- package/dist/commands/validate.js +229 -19
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +122 -2
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +3 -3
- package/dist/components/wizard/checkbox-grid.test.js +3 -3
- package/dist/components/wizard/domain-selection.js +9 -8
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.js +1 -1
- package/dist/components/wizard/search-modal.js +2 -2
- package/dist/components/wizard/search-modal.test.js +2 -2
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/selection-card.js +2 -2
- package/dist/components/wizard/source-grid.js +3 -3
- package/dist/components/wizard/source-grid.test.js +3 -3
- package/dist/components/wizard/stack-selection.js +8 -9
- package/dist/components/wizard/step-agents.js +8 -7
- package/dist/components/wizard/step-agents.test.js +25 -20
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +8 -8
- package/dist/components/wizard/step-build.test.js +78 -46
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +4 -4
- package/dist/components/wizard/step-confirm.test.js +8 -8
- 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 +5 -5
- package/dist/components/wizard/step-settings.test.js +8 -8
- package/dist/components/wizard/step-sources.js +10 -10
- package/dist/components/wizard/step-sources.test.js +11 -11
- package/dist/components/wizard/step-stack.js +12 -12
- package/dist/components/wizard/step-stack.test.js +27 -15
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +8 -8
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +2 -2
- package/dist/components/wizard/wizard.js +25 -25
- package/dist/hooks/init.js +3 -5
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-manager-HXFXBZJU.js → source-manager-Q34LTUVM.js} +4 -4
- package/dist/src/agents/meta/documentor/examples.md +35 -36
- package/dist/src/agents/meta/documentor/workflow.md +91 -105
- package/dist/stores/wizard-store.js +5 -5
- package/dist/stores/wizard-store.test.js +48 -6
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/meta/documentor/examples.md +35 -36
- package/src/agents/meta/documentor/workflow.md +91 -105
- package/src/schemas/agent.schema.json +6 -0
- package/src/schemas/metadata.schema.json +7 -41
- package/src/schemas/project-config.schema.json +8 -4
- package/src/schemas/skills-matrix.schema.json +11 -298
- package/src/schemas/stacks.schema.json +2 -4
- package/dist/chunk-3JRWNWBF.js.map +0 -1
- package/dist/chunk-473YHDYQ.js.map +0 -1
- package/dist/chunk-5BDYODWP.js +0 -45
- package/dist/chunk-5BDYODWP.js.map +0 -1
- package/dist/chunk-ABE55TEU.js.map +0 -1
- package/dist/chunk-ENWMWIHP.js.map +0 -1
- package/dist/chunk-FVN5PFFY.js.map +0 -1
- package/dist/chunk-FYNMNY4P.js.map +0 -1
- package/dist/chunk-KCYNTAAF.js.map +0 -1
- package/dist/chunk-KZNPPUQG.js.map +0 -1
- package/dist/chunk-Q5BSIARS.js.map +0 -1
- package/dist/chunk-WWSKP5SR.js.map +0 -1
- package/dist/chunk-YRVTXSXP.js.map +0 -1
- package/dist/chunk-ZECXM7LP.js.map +0 -1
- package/dist/cli/defaults/agent-mappings.yaml +0 -215
- /package/dist/{chunk-V43QDMYQ.js.map → chunk-2RQYJFKA.js.map} +0 -0
- /package/dist/{chunk-KWWLPPHF.js.map → chunk-B4QYXVPZ.js.map} +0 -0
- /package/dist/{chunk-CLHBKFHU.js.map → chunk-CJFWO46A.js.map} +0 -0
- /package/dist/{chunk-M2XPTQDT.js.map → chunk-DC333ZDC.js.map} +0 -0
- /package/dist/{chunk-M3AGB4TR.js.map → chunk-DVW6ASTO.js.map} +0 -0
- /package/dist/{chunk-ARET3NYO.js.map → chunk-EZ46ZTAQ.js.map} +0 -0
- /package/dist/{chunk-YQFU2KZ5.js.map → chunk-FXQYEXLS.js.map} +0 -0
- /package/dist/{chunk-KVHLKPYB.js.map → chunk-HPJP3HFD.js.map} +0 -0
- /package/dist/{chunk-SBWMSNS2.js.map → chunk-IRJADQM7.js.map} +0 -0
- /package/dist/{chunk-SYGEV3KV.js.map → chunk-JTTTXGHX.js.map} +0 -0
- /package/dist/{chunk-ELRGSZHZ.js.map → chunk-JZHIF3K7.js.map} +0 -0
- /package/dist/{chunk-OALQWRLG.js.map → chunk-KQ27IDYL.js.map} +0 -0
- /package/dist/{chunk-OLZBZAW4.js.map → chunk-LJ5E4GXC.js.map} +0 -0
- /package/dist/{chunk-SRFNNOLC.js.map → chunk-LNA6M2IE.js.map} +0 -0
- /package/dist/{chunk-GUIRWCKI.js.map → chunk-M4P5YJ45.js.map} +0 -0
- /package/dist/{chunk-3S4GIO4B.js.map → chunk-MVEYK55V.js.map} +0 -0
- /package/dist/{chunk-HKRLWERR.js.map → chunk-N5OCAAXY.js.map} +0 -0
- /package/dist/{chunk-DAVOSI4M.js.map → chunk-OEJDFGAF.js.map} +0 -0
- /package/dist/{chunk-F3O5YHSI.js.map → chunk-VSZ5GDET.js.map} +0 -0
- /package/dist/{chunk-NTPHCNJO.js.map → chunk-ZWAL2ZY7.js.map} +0 -0
- /package/dist/{source-manager-HXFXBZJU.js.map → source-manager-Q34LTUVM.js.map} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
getDomainDisplayName
|
|
4
|
+
} from "./chunk-NRCKIHND.js";
|
|
5
|
+
import {
|
|
6
|
+
CheckboxGrid
|
|
7
|
+
} from "./chunk-M4P5YJ45.js";
|
|
8
|
+
import {
|
|
9
|
+
useWizardStore
|
|
10
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
11
|
+
import {
|
|
12
|
+
typedEntries
|
|
13
|
+
} from "./chunk-T4EXUIBY.js";
|
|
14
|
+
import {
|
|
15
|
+
BUILT_IN_DOMAIN_ORDER
|
|
16
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
17
|
+
import {
|
|
18
|
+
init_esm_shims
|
|
19
|
+
} from "./chunk-DHET7RCE.js";
|
|
20
|
+
|
|
21
|
+
// src/cli/components/wizard/domain-selection.tsx
|
|
22
|
+
init_esm_shims();
|
|
23
|
+
import { useMemo } from "react";
|
|
24
|
+
import { unique } from "remeda";
|
|
25
|
+
import { jsx } from "react/jsx-runtime";
|
|
26
|
+
var BUILT_IN_DOMAIN_DESCRIPTIONS = {
|
|
27
|
+
web: "Frontend web applications",
|
|
28
|
+
api: "Backend APIs and services",
|
|
29
|
+
cli: "Command-line tools",
|
|
30
|
+
mobile: "Mobile applications",
|
|
31
|
+
shared: "Shared utilities and methodology"
|
|
32
|
+
};
|
|
33
|
+
var DomainSelection = ({ matrix }) => {
|
|
34
|
+
const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();
|
|
35
|
+
const availableDomains = useMemo(() => {
|
|
36
|
+
const matrixDomains = unique(
|
|
37
|
+
typedEntries(matrix.categories).map(([, cat]) => cat?.domain).filter((d) => d != null && d !== "shared")
|
|
38
|
+
);
|
|
39
|
+
const ordered = [
|
|
40
|
+
...BUILT_IN_DOMAIN_ORDER.filter((d) => matrixDomains.includes(d)),
|
|
41
|
+
...matrixDomains.filter((d) => !BUILT_IN_DOMAIN_ORDER.includes(d))
|
|
42
|
+
];
|
|
43
|
+
return ordered.map((domain) => ({
|
|
44
|
+
id: domain,
|
|
45
|
+
label: getDomainDisplayName(domain),
|
|
46
|
+
description: BUILT_IN_DOMAIN_DESCRIPTIONS[domain] ?? `${getDomainDisplayName(domain)} skills`
|
|
47
|
+
}));
|
|
48
|
+
}, [matrix]);
|
|
49
|
+
const handleBack = () => {
|
|
50
|
+
setApproach(null);
|
|
51
|
+
selectStack(null);
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
CheckboxGrid,
|
|
55
|
+
{
|
|
56
|
+
title: "Select domains to configure",
|
|
57
|
+
items: availableDomains,
|
|
58
|
+
selectedIds: selectedDomains,
|
|
59
|
+
onToggle: toggleDomain,
|
|
60
|
+
onContinue: () => setStep("build"),
|
|
61
|
+
onBack: handleBack,
|
|
62
|
+
continueLabel: (count) => `Continue with ${count} domain(s)`,
|
|
63
|
+
emptyMessage: "Please select at least one domain"
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
DomainSelection
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=chunk-HLTJK3XB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/domain-selection.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { unique } from \"remeda\";\nimport { BUILT_IN_DOMAIN_ORDER } from \"../../consts.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { Domain, MergedSkillsMatrix } from \"../../types/index.js\";\nimport { typedEntries } from \"../../utils/typed-object.js\";\nimport { CheckboxGrid, type CheckboxItem } from \"./checkbox-grid.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\n\nconst BUILT_IN_DOMAIN_DESCRIPTIONS: Record<Domain, string> = {\n web: \"Frontend web applications\",\n api: \"Backend APIs and services\",\n cli: \"Command-line tools\",\n mobile: \"Mobile applications\",\n shared: \"Shared utilities and methodology\",\n};\n\ntype DomainSelectionProps = {\n matrix: MergedSkillsMatrix;\n};\n\nexport const DomainSelection: React.FC<DomainSelectionProps> = ({ matrix }) => {\n const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();\n\n const availableDomains = useMemo((): CheckboxItem<Domain>[] => {\n const matrixDomains = unique(\n typedEntries(matrix.categories)\n .map(([, cat]) => cat?.domain)\n .filter((d): d is Domain => d != null && d !== \"shared\"),\n );\n\n const ordered: Domain[] = [\n ...BUILT_IN_DOMAIN_ORDER.filter((d) => matrixDomains.includes(d)),\n ...matrixDomains.filter((d) => !BUILT_IN_DOMAIN_ORDER.includes(d)),\n ];\n\n return ordered.map((domain) => ({\n id: domain,\n label: getDomainDisplayName(domain),\n description: BUILT_IN_DOMAIN_DESCRIPTIONS[domain] ?? `${getDomainDisplayName(domain)} skills`,\n }));\n }, [matrix]);\n\n const handleBack = () => {\n setApproach(null);\n selectStack(null);\n };\n\n return (\n <CheckboxGrid\n title=\"Select domains to configure\"\n // subtitle=\"Select one or more domains, then continue\"\n items={availableDomains}\n selectedIds={selectedDomains}\n onToggle={toggleDomain}\n onContinue={() => setStep(\"build\")}\n onBack={handleBack}\n continueLabel={(count) => `Continue with ${count} domain(s)`}\n emptyMessage=\"Please select at least one domain\"\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,eAAe;AAC/B,SAAS,cAAc;AAgDnB;AAxCJ,IAAM,+BAAuD;AAAA,EAC3D,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AACV;AAMO,IAAM,kBAAkD,CAAC,EAAE,OAAO,MAAM;AAC7E,QAAM,EAAE,iBAAiB,cAAc,SAAS,aAAa,YAAY,IAAI,eAAe;AAE5F,QAAM,mBAAmB,QAAQ,MAA8B;AAC7D,UAAM,gBAAgB;AAAA,MACpB,aAAa,OAAO,UAAU,EAC3B,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,KAAK,MAAM,EAC5B,OAAO,CAAC,MAAmB,KAAK,QAAQ,MAAM,QAAQ;AAAA,IAC3D;AAEA,UAAM,UAAoB;AAAA,MACxB,GAAG,sBAAsB,OAAO,CAAC,MAAM,cAAc,SAAS,CAAC,CAAC;AAAA,MAChE,GAAG,cAAc,OAAO,CAAC,MAAM,CAAC,sBAAsB,SAAS,CAAC,CAAC;AAAA,IACnE;AAEA,WAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9B,IAAI;AAAA,MACJ,OAAO,qBAAqB,MAAM;AAAA,MAClC,aAAa,6BAA6B,MAAM,KAAK,GAAG,qBAAqB,MAAM,CAAC;AAAA,IACtF,EAAE;AAAA,EACJ,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,MAAM;AACvB,gBAAY,IAAI;AAChB,gBAAY,IAAI;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MAEN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,MAAM,QAAQ,OAAO;AAAA,MACjC,QAAQ;AAAA,MACR,eAAe,CAAC,UAAU,iBAAiB,KAAK;AAAA,MAChD,cAAa;AAAA;AAAA,EACf;AAEJ;","names":[]}
|
|
@@ -4,24 +4,24 @@ import {
|
|
|
4
4
|
} from "./chunk-K77I4XGL.js";
|
|
5
5
|
import {
|
|
6
6
|
SelectionCard
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZWAL2ZY7.js";
|
|
8
8
|
import {
|
|
9
9
|
SourceGrid
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FXQYEXLS.js";
|
|
11
11
|
import {
|
|
12
12
|
ViewTitle
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
14
14
|
import {
|
|
15
15
|
useWizardStore
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
17
17
|
import {
|
|
18
18
|
resolveAllSources,
|
|
19
19
|
searchExtraSources
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
21
21
|
import {
|
|
22
22
|
CLI_COLORS,
|
|
23
23
|
DEFAULT_BRANDING
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
25
25
|
import {
|
|
26
26
|
init_esm_shims
|
|
27
27
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -159,4 +159,4 @@ var StepSources = ({
|
|
|
159
159
|
export {
|
|
160
160
|
StepSources
|
|
161
161
|
};
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-HPJP3HFD.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
getAvailableSkills,
|
|
4
4
|
resolveAlias
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esm_shims
|
|
8
8
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -74,7 +74,9 @@ function buildCategoriesForDomain(domain, allSelections, matrix, expertMode, sel
|
|
|
74
74
|
const frameworkSelected = isFrameworkSelected(frameworkSource);
|
|
75
75
|
const selectedFrameworkIds = frameworkSelected ? getSelectedFrameworks(frameworkSource, matrix) : [];
|
|
76
76
|
const subcategories = sortBy(
|
|
77
|
-
Object.values(matrix.categories).filter(
|
|
77
|
+
Object.values(matrix.categories).filter(
|
|
78
|
+
(cat) => cat.domain === domain
|
|
79
|
+
),
|
|
78
80
|
(cat) => cat.order ?? 0
|
|
79
81
|
);
|
|
80
82
|
const categoryRows = subcategories.map((cat) => {
|
|
@@ -110,4 +112,4 @@ export {
|
|
|
110
112
|
getSkillDisplayLabel,
|
|
111
113
|
buildCategoriesForDomain
|
|
112
114
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-INKJBMPJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/wizard/build-step-logic.ts"],"sourcesContent":["import { sortBy } from \"remeda\";\nimport type {\n CategoryDefinition,\n Domain,\n MergedSkillsMatrix,\n SkillId,\n SubcategorySelections,\n} from \"../../types/index.js\";\nimport { getAvailableSkills, resolveAlias } from \"../matrix/index.js\";\nimport type {\n CategoryRow,\n CategoryOption,\n OptionState,\n} from \"../../components/wizard/category-grid.js\";\n\nconst FRAMEWORK_SUBCATEGORY_ID = \"web-framework\";\nconst WEB_DOMAIN_ID = \"web\";\n\nexport type BuildStepValidation = {\n valid: boolean;\n message?: string;\n};\n\nexport function validateBuildStep(\n categories: CategoryRow[],\n selections: SubcategorySelections,\n): BuildStepValidation {\n for (const category of categories) {\n if (category.required) {\n const categorySelections = selections[category.id] || [];\n if (categorySelections.length === 0) {\n return {\n valid: false,\n message: `Select at least one skill from the ${category.displayName} category. Use arrow keys to navigate, then SPACE to select.`,\n };\n }\n }\n }\n return { valid: true };\n}\n\nexport function computeOptionState(skill: {\n disabled: boolean;\n discouraged: boolean;\n recommended: boolean;\n}): OptionState {\n if (skill.disabled) {\n return \"disabled\";\n }\n if (skill.discouraged) {\n return \"discouraged\";\n }\n if (skill.recommended) {\n return \"recommended\";\n }\n return \"normal\";\n}\n\nexport function getSkillDisplayLabel(skill: { displayName?: string; id: string }): string {\n return skill.displayName || skill.id;\n}\n\nfunction getStateReason(skill: {\n disabled: boolean;\n disabledReason?: string;\n discouraged: boolean;\n discouragedReason?: string;\n recommended: boolean;\n recommendedReason?: string;\n}): string | undefined {\n if (skill.disabled && skill.disabledReason) {\n return skill.disabledReason;\n }\n if (skill.discouraged && skill.discouragedReason) {\n return skill.discouragedReason;\n }\n if (skill.recommended && skill.recommendedReason) {\n return skill.recommendedReason;\n }\n return undefined;\n}\n\nfunction isFrameworkSelected(selections: SubcategorySelections): boolean {\n const frameworkSelections = selections[FRAMEWORK_SUBCATEGORY_ID] ?? [];\n return frameworkSelections.length > 0;\n}\n\nfunction getSelectedFrameworks(\n selections: SubcategorySelections,\n matrix: MergedSkillsMatrix,\n): SkillId[] {\n const frameworkSelections = selections[FRAMEWORK_SUBCATEGORY_ID] ?? [];\n return frameworkSelections.map((alias) => resolveAlias(alias, matrix));\n}\n\nfunction isCompatibleWithSelectedFrameworks(\n skillId: SkillId,\n selectedFrameworkIds: SkillId[],\n matrix: MergedSkillsMatrix,\n): boolean {\n const skill = matrix.skills[skillId];\n if (!skill) return false;\n\n // No compatibleWith = compatible with all (allows legacy skills to appear)\n if (skill.compatibleWith.length === 0) {\n return true;\n }\n\n return selectedFrameworkIds.some((frameworkId) => skill.compatibleWith.includes(frameworkId));\n}\n\n// Build CategoryRow[] from matrix for a domain, with framework-first filtering for web\nexport function buildCategoriesForDomain(\n domain: Domain,\n allSelections: SkillId[],\n matrix: MergedSkillsMatrix,\n expertMode: boolean,\n selections: SubcategorySelections,\n installedSkillIds?: SkillId[],\n): CategoryRow[] {\n const frameworkSource = selections;\n const frameworkSelected = isFrameworkSelected(frameworkSource);\n const selectedFrameworkIds = frameworkSelected\n ? getSelectedFrameworks(frameworkSource, matrix)\n : [];\n\n // Object.values() on a Partial record only yields values that exist — all are CategoryDefinition\n const subcategories = sortBy(\n (Object.values(matrix.categories) as CategoryDefinition[]).filter(\n (cat) => cat.domain === domain,\n ),\n (cat) => cat.order ?? 0,\n );\n\n const categoryRows: CategoryRow[] = subcategories.map((cat) => {\n const skillOptions = getAvailableSkills(cat.id, allSelections, matrix, {\n expertMode,\n });\n\n const useFrameworkFilter =\n domain === WEB_DOMAIN_ID && cat.id !== FRAMEWORK_SUBCATEGORY_ID && frameworkSelected;\n const filteredSkillOptions = useFrameworkFilter\n ? skillOptions.filter((skill) =>\n isCompatibleWithSelectedFrameworks(skill.id, selectedFrameworkIds, matrix),\n )\n : skillOptions;\n\n const options: CategoryOption[] = filteredSkillOptions.map((skill) => ({\n id: skill.id,\n label: getSkillDisplayLabel(skill),\n state: computeOptionState(skill),\n stateReason: getStateReason(skill),\n selected: skill.selected,\n local: matrix.skills[skill.id]?.local,\n installed: installedSkillIds?.includes(skill.id) || false,\n }));\n\n return {\n id: cat.id,\n displayName: cat.displayName,\n required: cat.required ?? false,\n exclusive: cat.exclusive ?? true,\n options,\n };\n });\n\n return categoryRows.filter((row) => row.options.length > 0);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -45,4 +45,4 @@ var SectionProgress = ({
|
|
|
45
45
|
export {
|
|
46
46
|
SectionProgress
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-IRJADQM7.js.map
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
resolveAgents,
|
|
19
19
|
writeContentHash,
|
|
20
20
|
writePluginManifest
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
22
22
|
import {
|
|
23
23
|
typedEntries,
|
|
24
24
|
typedKeys
|
|
@@ -36,12 +36,12 @@ import {
|
|
|
36
36
|
verbose,
|
|
37
37
|
warn,
|
|
38
38
|
writeFile
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-C4QI54PN.js";
|
|
40
40
|
import {
|
|
41
41
|
CLAUDE_DIR,
|
|
42
42
|
DIRS,
|
|
43
43
|
PROJECT_ROOT
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
45
45
|
import {
|
|
46
46
|
init_esm_shims
|
|
47
47
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -315,4 +315,4 @@ export {
|
|
|
315
315
|
compileAllAgentPlugins,
|
|
316
316
|
printAgentCompilationSummary
|
|
317
317
|
};
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
318
|
+
//# sourceMappingURL=chunk-JTTTXGHX.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-KUV24B5M.js";
|
|
8
8
|
import {
|
|
9
9
|
ViewTitle
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
11
11
|
import {
|
|
12
12
|
useTextInput
|
|
13
13
|
} from "./chunk-U3IGFMCY.js";
|
|
@@ -16,14 +16,14 @@ import {
|
|
|
16
16
|
addSource,
|
|
17
17
|
getSourceSummary,
|
|
18
18
|
removeSource
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
20
20
|
import {
|
|
21
21
|
getErrorMessage,
|
|
22
22
|
verbose
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-C4QI54PN.js";
|
|
24
24
|
import {
|
|
25
25
|
CLI_COLORS
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
27
27
|
import {
|
|
28
28
|
init_esm_shims
|
|
29
29
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -232,4 +232,4 @@ var StepSettings = ({ projectDir, onClose }) => {
|
|
|
232
232
|
export {
|
|
233
233
|
StepSettings
|
|
234
234
|
};
|
|
235
|
-
//# sourceMappingURL=chunk-
|
|
235
|
+
//# sourceMappingURL=chunk-JZHIF3K7.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -87,4 +87,4 @@ var HelpModal = ({ currentStep }) => {
|
|
|
87
87
|
export {
|
|
88
88
|
HelpModal
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-KQ27IDYL.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS,
|
|
4
4
|
DEFAULT_BRANDING
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esm_shims
|
|
8
8
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -108,4 +108,4 @@ var StepRefine = ({
|
|
|
108
108
|
export {
|
|
109
109
|
StepRefine
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-LJ5E4GXC.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getErrorMessage
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-C4QI54PN.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
EXIT_CODES,
|
|
54
54
|
BaseCommand
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-LNA6M2IE.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ViewTitle
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
5
5
|
import {
|
|
6
6
|
CLI_COLORS,
|
|
7
7
|
UI_SYMBOLS
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
9
9
|
import {
|
|
10
10
|
init_esm_shims
|
|
11
11
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -96,4 +96,4 @@ var CheckboxGrid = ({
|
|
|
96
96
|
export {
|
|
97
97
|
CheckboxGrid
|
|
98
98
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-M4P5YJ45.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -81,4 +81,4 @@ export {
|
|
|
81
81
|
formatStepLabel,
|
|
82
82
|
WizardTabs
|
|
83
83
|
};
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
84
|
+
//# sourceMappingURL=chunk-MVEYK55V.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -78,4 +78,4 @@ var cliTheme = extendTheme(defaultTheme, {
|
|
|
78
78
|
export {
|
|
79
79
|
cliTheme
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-N5OCAAXY.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
BUILT_IN_DOMAIN_ORDER
|
|
4
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -17,28 +17,22 @@ function getDomainDisplayName(domain) {
|
|
|
17
17
|
mobile: "Mobile",
|
|
18
18
|
shared: "Shared"
|
|
19
19
|
};
|
|
20
|
-
return displayNames[domain];
|
|
20
|
+
return (domain in displayNames ? displayNames[domain] : null) ?? domain.charAt(0).toUpperCase() + domain.slice(1);
|
|
21
21
|
}
|
|
22
22
|
function getStackName(stackId, matrix) {
|
|
23
23
|
if (!stackId) return void 0;
|
|
24
24
|
const stack = matrix.suggestedStacks.find((s) => s.id === stackId);
|
|
25
25
|
return stack?.name;
|
|
26
26
|
}
|
|
27
|
-
function
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return unique(
|
|
32
|
-
subcategories.flatMap((sub) => {
|
|
33
|
-
const d = categories[sub]?.domain;
|
|
34
|
-
return d ? [d] : [];
|
|
35
|
-
})
|
|
36
|
-
).sort();
|
|
27
|
+
function orderDomains(domains) {
|
|
28
|
+
const builtIn = BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d));
|
|
29
|
+
const custom = domains.filter((d) => !BUILT_IN_DOMAIN_ORDER.includes(d)).sort();
|
|
30
|
+
return [...custom, ...builtIn];
|
|
37
31
|
}
|
|
38
32
|
|
|
39
33
|
export {
|
|
40
34
|
getDomainDisplayName,
|
|
41
35
|
getStackName,
|
|
42
|
-
|
|
36
|
+
orderDomains
|
|
43
37
|
};
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-NRCKIHND.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/utils.ts"],"sourcesContent":["import { unique } from \"remeda\";\nimport { BUILT_IN_DOMAIN_ORDER } from \"../../consts.js\";\nimport type { CategoryMap, Domain, MergedSkillsMatrix, ResolvedStack } from \"../../types/index.js\";\nimport { typedKeys } from \"../../utils/typed-object.js\";\n\nexport function getDomainDisplayName(domain: string): string {\n const displayNames: Record<Domain, string> = {\n web: \"Web\",\n api: \"API\",\n cli: \"CLI\",\n mobile: \"Mobile\",\n shared: \"Shared\",\n };\n return (\n (domain in displayNames ? displayNames[domain as Domain] : null) ??\n domain.charAt(0).toUpperCase() + domain.slice(1)\n );\n}\n\nexport function getStackName(\n stackId: string | null,\n matrix: MergedSkillsMatrix,\n): string | undefined {\n if (!stackId) return undefined;\n const stack = matrix.suggestedStacks.find((s) => s.id === stackId);\n return stack?.name;\n}\n\n/** Sort domains into canonical display order: custom domains first (alphabetically), then built-in domains (per BUILT_IN_DOMAIN_ORDER). */\nexport function orderDomains(domains: Domain[]): Domain[] {\n const builtIn = BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d));\n const custom = domains.filter((d) => !BUILT_IN_DOMAIN_ORDER.includes(d)).sort();\n return [...custom, ...builtIn];\n}\n\n/** Extract unique domains from a stack's agent-to-skill mappings. */\nexport function getDomainsFromStack(stack: ResolvedStack, categories: CategoryMap): Domain[] {\n const subcategories = Object.values(stack.skills).flatMap((config) =>\n config ? typedKeys(config) : [],\n );\n return unique(\n subcategories.flatMap((sub) => {\n const d = categories[sub]?.domain;\n return d ? [d] : [];\n }),\n ).sort();\n}\n"],"mappings":";;;;;;;;;AAAA;AAAA,SAAS,cAAc;AAKhB,SAAS,qBAAqB,QAAwB;AAC3D,QAAM,eAAuC;AAAA,IAC3C,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,UACG,UAAU,eAAe,aAAa,MAAgB,IAAI,SAC3D,OAAO,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC;AAEnD;AAEO,SAAS,aACd,SACA,QACoB;AACpB,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,QAAQ,OAAO,gBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO;AACjE,SAAO,OAAO;AAChB;AAGO,SAAS,aAAa,SAA6B;AACxD,QAAM,UAAU,sBAAsB,OAAO,CAAC,MAAM,QAAQ,SAAS,CAAC,CAAC;AACvE,QAAM,SAAS,QAAQ,OAAO,CAAC,MAAM,CAAC,sBAAsB,SAAS,CAAC,CAAC,EAAE,KAAK;AAC9E,SAAO,CAAC,GAAG,QAAQ,GAAG,OAAO;AAC/B;","names":[]}
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
import {
|
|
3
3
|
WIZARD_STEPS,
|
|
4
4
|
WizardTabs
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-MVEYK55V.js";
|
|
6
6
|
import {
|
|
7
7
|
HelpModal
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KQ27IDYL.js";
|
|
9
9
|
import {
|
|
10
10
|
useWizardStore
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
12
12
|
import {
|
|
13
13
|
CLI_COLORS,
|
|
14
14
|
DEFAULT_PLUGIN_NAME
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
16
16
|
import {
|
|
17
17
|
init_esm_shims
|
|
18
18
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -179,4 +179,4 @@ var WizardLayout = ({
|
|
|
179
179
|
export {
|
|
180
180
|
WizardLayout
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-OEJDFGAF.js.map
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
getDomainsFromStack
|
|
4
|
-
} from "./chunk-YRVTXSXP.js";
|
|
5
2
|
import {
|
|
6
3
|
SelectionCard
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZWAL2ZY7.js";
|
|
8
5
|
import {
|
|
9
6
|
ViewTitle
|
|
10
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-B4QYXVPZ.js";
|
|
11
8
|
import {
|
|
12
9
|
useWizardStore
|
|
13
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SPSGZWTZ.js";
|
|
14
11
|
import {
|
|
15
12
|
DEFAULT_SCRATCH_DOMAINS
|
|
16
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
17
14
|
import {
|
|
18
15
|
init_esm_shims
|
|
19
16
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -55,10 +52,6 @@ var StackSelection = ({ matrix, onCancel }) => {
|
|
|
55
52
|
selectStack(focusedStack.id);
|
|
56
53
|
setStackAction("customize");
|
|
57
54
|
populateFromSkillIds(focusedStack.allSkillIds, matrix.skills, matrix.categories);
|
|
58
|
-
const stackDomains = getDomainsFromStack(focusedStack, matrix.categories);
|
|
59
|
-
for (const domain of stackDomains) {
|
|
60
|
-
toggleDomain(domain);
|
|
61
|
-
}
|
|
62
55
|
setApproach("stack");
|
|
63
56
|
}
|
|
64
57
|
return;
|
|
@@ -99,4 +92,4 @@ var StackSelection = ({ matrix, onCancel }) => {
|
|
|
99
92
|
export {
|
|
100
93
|
StackSelection
|
|
101
94
|
};
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-QR2TM4OY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/stack-selection.tsx"],"sourcesContent":["import { Box, useInput } from \"ink\";\nimport React, { useState } from \"react\";\nimport { DEFAULT_SCRATCH_DOMAINS } from \"../../consts.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { MergedSkillsMatrix } from \"../../types/index.js\";\nimport { SelectionCard } from \"./selection-card.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\nconst INITIAL_FOCUSED_INDEX = 0;\nconst SCRATCH_LABEL = \"Start from scratch\";\nconst SCRATCH_DESCRIPTION = \"Select domains and skills manually\";\n\n/** Number of extra items after the stack list (scratch option) */\nconst EXTRA_ITEMS_COUNT = 1;\n\nexport type StackSelectionProps = {\n matrix: MergedSkillsMatrix;\n onCancel?: () => void;\n};\n\nexport const StackSelection: React.FC<StackSelectionProps> = ({ matrix, onCancel }) => {\n const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain } =\n useWizardStore();\n\n const [focusedIndex, setFocusedIndex] = useState(INITIAL_FOCUSED_INDEX);\n\n const stacks = matrix.suggestedStacks;\n const stackCount = stacks.length;\n const scratchIndex = stackCount;\n const totalItems = stackCount + EXTRA_ITEMS_COUNT;\n\n useInput((input, key) => {\n if (key.escape) {\n if (onCancel) {\n onCancel();\n }\n return;\n }\n\n if (key.return) {\n if (focusedIndex === scratchIndex) {\n selectStack(null);\n setApproach(\"scratch\");\n\n for (const domain of DEFAULT_SCRATCH_DOMAINS) {\n toggleDomain(domain);\n }\n return;\n }\n\n const focusedStack = stacks[focusedIndex];\n if (focusedStack) {\n selectStack(focusedStack.id);\n setStackAction(\"customize\");\n populateFromSkillIds(focusedStack.allSkillIds, matrix.skills, matrix.categories);\n setApproach(\"stack\");\n }\n return;\n }\n\n if (key.upArrow || input === \"k\") {\n setFocusedIndex((prev) => Math.max(0, prev - 1));\n return;\n }\n if (key.downArrow || input === \"j\") {\n setFocusedIndex((prev) => Math.min(totalItems - 1, prev + 1));\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <ViewTitle>Choose a stack</ViewTitle>\n <Box flexDirection=\"column\">\n {stacks.map((stack, index) => (\n <SelectionCard\n key={stack.id}\n label={stack.name}\n description={stack.description}\n isFocused={index === focusedIndex}\n marginBottom={1}\n />\n ))}\n <SelectionCard\n label={SCRATCH_LABEL}\n description={SCRATCH_DESCRIPTION}\n isFocused={focusedIndex === scratchIndex}\n />\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAS,KAAK,gBAAgB;AAC9B,SAAgB,gBAAgB;AAsE1B,cACA,YADA;AA/DN,IAAM,wBAAwB;AAC9B,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AAG5B,IAAM,oBAAoB;AAOnB,IAAM,iBAAgD,CAAC,EAAE,QAAQ,SAAS,MAAM;AACrF,QAAM,EAAE,aAAa,aAAa,gBAAgB,sBAAsB,aAAa,IACnF,eAAe;AAEjB,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,qBAAqB;AAEtE,QAAM,SAAS,OAAO;AACtB,QAAM,aAAa,OAAO;AAC1B,QAAM,eAAe;AACrB,QAAM,aAAa,aAAa;AAEhC,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,QAAQ;AACd,UAAI,UAAU;AACZ,iBAAS;AAAA,MACX;AACA;AAAA,IACF;AAEA,QAAI,IAAI,QAAQ;AACd,UAAI,iBAAiB,cAAc;AACjC,oBAAY,IAAI;AAChB,oBAAY,SAAS;AAErB,mBAAW,UAAU,yBAAyB;AAC5C,uBAAa,MAAM;AAAA,QACrB;AACA;AAAA,MACF;AAEA,YAAM,eAAe,OAAO,YAAY;AACxC,UAAI,cAAc;AAChB,oBAAY,aAAa,EAAE;AAC3B,uBAAe,WAAW;AAC1B,6BAAqB,aAAa,aAAa,OAAO,QAAQ,OAAO,UAAU;AAC/E,oBAAY,OAAO;AAAA,MACrB;AACA;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,UAAU,KAAK;AAChC,sBAAgB,CAAC,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC;AAC/C;AAAA,IACF;AACA,QAAI,IAAI,aAAa,UAAU,KAAK;AAClC,sBAAgB,CAAC,SAAS,KAAK,IAAI,aAAa,GAAG,OAAO,CAAC,CAAC;AAAA,IAC9D;AAAA,EACF,CAAC;AAED,SACE,qBAAC,OAAI,eAAc,UACjB;AAAA,wBAAC,aAAU,4BAAc;AAAA,IACzB,qBAAC,OAAI,eAAc,UAChB;AAAA,aAAO,IAAI,CAAC,OAAO,UAClB;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,MAAM;AAAA,UACb,aAAa,MAAM;AAAA,UACnB,WAAW,UAAU;AAAA,UACrB,cAAc;AAAA;AAAA,QAJT,MAAM;AAAA,MAKb,CACD;AAAA,MACD;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,aAAa;AAAA,UACb,WAAW,iBAAiB;AAAA;AAAA,MAC9B;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getSkillDisplayLabel
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-INKJBMPJ.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveAlias
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GFDGYQ6M.js";
|
|
8
8
|
import {
|
|
9
9
|
typedEntries,
|
|
10
10
|
typedKeys
|
|
11
11
|
} from "./chunk-T4EXUIBY.js";
|
|
12
12
|
import {
|
|
13
13
|
warn
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-C4QI54PN.js";
|
|
15
15
|
import {
|
|
16
16
|
DEFAULT_PRESELECTED_SKILLS,
|
|
17
17
|
DEFAULT_PUBLIC_SOURCE_NAME
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-FTD5Z6QD.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esm_shims
|
|
21
21
|
} from "./chunk-DHET7RCE.js";
|
|
22
22
|
|
|
23
23
|
// src/cli/stores/wizard-store.ts
|
|
24
24
|
init_esm_shims();
|
|
25
|
+
import { unique } from "remeda";
|
|
25
26
|
import { create } from "zustand";
|
|
26
|
-
var
|
|
27
|
+
var BUILT_IN_DOMAINS = ["web", "api", "cli", "mobile", "shared"];
|
|
28
|
+
function getAllDomainsFromCategories(categories) {
|
|
29
|
+
const allDomains = unique(
|
|
30
|
+
Object.values(categories).map((cat) => cat?.domain).filter((d) => d != null)
|
|
31
|
+
);
|
|
32
|
+
return [...BUILT_IN_DOMAINS, ...allDomains.filter((d) => !BUILT_IN_DOMAINS.includes(d))];
|
|
33
|
+
}
|
|
27
34
|
var DOMAIN_AGENTS = {
|
|
28
35
|
web: [
|
|
29
36
|
"web-developer",
|
|
@@ -34,9 +41,7 @@ var DOMAIN_AGENTS = {
|
|
|
34
41
|
"web-architecture"
|
|
35
42
|
],
|
|
36
43
|
api: ["api-developer", "api-reviewer", "api-researcher"],
|
|
37
|
-
cli: ["cli-developer", "cli-tester", "cli-reviewer", "cli-migrator"]
|
|
38
|
-
mobile: [],
|
|
39
|
-
shared: []
|
|
44
|
+
cli: ["cli-developer", "cli-tester", "cli-reviewer", "cli-migrator"]
|
|
40
45
|
};
|
|
41
46
|
var SOURCE_SORT_TIER_LOCAL = 1;
|
|
42
47
|
var SOURCE_SORT_TIER_SCOPED = 2;
|
|
@@ -148,7 +153,7 @@ var useWizardStore = create((set, get) => ({
|
|
|
148
153
|
}
|
|
149
154
|
return {
|
|
150
155
|
domainSelections,
|
|
151
|
-
selectedDomains:
|
|
156
|
+
selectedDomains: getAllDomainsFromCategories(categories)
|
|
152
157
|
};
|
|
153
158
|
}),
|
|
154
159
|
populateFromSkillIds: (skillIds, skills, categories) => set(() => {
|
|
@@ -170,12 +175,20 @@ var useWizardStore = create((set, get) => ({
|
|
|
170
175
|
if (skippedCount > 0) {
|
|
171
176
|
warn(`${skippedCount} installed skill(s) could not be resolved and were skipped`);
|
|
172
177
|
}
|
|
173
|
-
|
|
178
|
+
const selectedDomains = typedKeys(domainSelections);
|
|
179
|
+
return { domainSelections, selectedDomains };
|
|
174
180
|
}),
|
|
175
181
|
toggleDomain: (domain) => set((state) => {
|
|
176
182
|
const isSelected = state.selectedDomains.includes(domain);
|
|
183
|
+
if (isSelected) {
|
|
184
|
+
const { [domain]: _removed, ...remainingSelections } = state.domainSelections;
|
|
185
|
+
return {
|
|
186
|
+
selectedDomains: state.selectedDomains.filter((d) => d !== domain),
|
|
187
|
+
domainSelections: remainingSelections
|
|
188
|
+
};
|
|
189
|
+
}
|
|
177
190
|
return {
|
|
178
|
-
selectedDomains:
|
|
191
|
+
selectedDomains: [...state.selectedDomains, domain]
|
|
179
192
|
};
|
|
180
193
|
}),
|
|
181
194
|
toggleTechnology: (domain, subcategory, technology, exclusive) => set((state) => {
|
|
@@ -390,4 +403,4 @@ var useWizardStore = create((set, get) => ({
|
|
|
390
403
|
export {
|
|
391
404
|
useWizardStore
|
|
392
405
|
};
|
|
393
|
-
//# sourceMappingURL=chunk-
|
|
406
|
+
//# sourceMappingURL=chunk-SPSGZWTZ.js.map
|