@agents-inc/cli 0.35.0 → 0.38.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 +37 -0
- package/config/skills-matrix.yaml +17 -17
- package/dist/{chunk-HTTPKSL6.js → chunk-2XX4TMCI.js} +2 -2
- package/dist/{chunk-CEWNZQMH.js → chunk-3E2V5YL3.js} +8 -2
- package/dist/chunk-3E2V5YL3.js.map +1 -0
- package/dist/{chunk-IG7CUREJ.js → chunk-3NQJOJZL.js} +2 -2
- package/dist/chunk-54ZZCWN4.js +51 -0
- package/dist/chunk-54ZZCWN4.js.map +1 -0
- package/dist/{chunk-VEZ2GZEK.js → chunk-ATLRUR3B.js} +2 -2
- package/dist/{chunk-KWF6D7ZP.js → chunk-CYFU3ARY.js} +26 -16
- package/dist/chunk-CYFU3ARY.js.map +1 -0
- package/dist/{chunk-CXWPUVA7.js → chunk-DUQFF45G.js} +7 -7
- package/dist/{chunk-U36YCEBK.js → chunk-EISBUEBL.js} +32 -23
- package/dist/chunk-EISBUEBL.js.map +1 -0
- package/dist/chunk-EXFVAEPY.js +80 -0
- package/dist/chunk-EXFVAEPY.js.map +1 -0
- package/dist/{chunk-YN35L5NE.js → chunk-FWQK3HWB.js} +4 -4
- package/dist/chunk-FWQK3HWB.js.map +1 -0
- package/dist/{chunk-DC5AK3LW.js → chunk-GG4BSB6S.js} +5 -11
- package/dist/chunk-GG4BSB6S.js.map +1 -0
- package/dist/{chunk-GGHH3KR2.js → chunk-HKDE4LJW.js} +2 -2
- package/dist/{chunk-OGXSTJP2.js → chunk-HRMQ2RGY.js} +81 -26
- package/dist/chunk-HRMQ2RGY.js.map +1 -0
- package/dist/{chunk-YPJKOM42.js → chunk-HRW7BIDE.js} +2 -2
- package/dist/{chunk-LFHZBF6N.js → chunk-IVIK776Y.js} +4 -3
- package/dist/chunk-IVIK776Y.js.map +1 -0
- package/dist/{chunk-NVQEHRJY.js → chunk-IWNPFIGY.js} +38 -48
- package/dist/chunk-IWNPFIGY.js.map +1 -0
- package/dist/{chunk-YIKBNGE3.js → chunk-IZRVFC2Z.js} +7 -7
- package/dist/chunk-IZRVFC2Z.js.map +1 -0
- package/dist/{chunk-AQQVSNUX.js → chunk-K77I4XGL.js} +20 -6
- package/dist/chunk-K77I4XGL.js.map +1 -0
- package/dist/{chunk-BPD4VUAU.js → chunk-M6PGIZNS.js} +5 -5
- package/dist/{chunk-5LPPIT6H.js → chunk-NFV4SKH5.js} +4 -4
- package/dist/chunk-NI2RSNWB.js +156 -0
- package/dist/chunk-NI2RSNWB.js.map +1 -0
- package/dist/{chunk-NJ775OJ4.js → chunk-OEX5JDQD.js} +7 -7
- package/dist/chunk-OEX5JDQD.js.map +1 -0
- package/dist/{chunk-OKILA27U.js → chunk-TA6IIQI4.js} +86 -99
- package/dist/chunk-TA6IIQI4.js.map +1 -0
- package/dist/{chunk-PKUIO2Z7.js → chunk-TBDIR6LY.js} +8 -8
- package/dist/chunk-TBDIR6LY.js.map +1 -0
- package/dist/{chunk-XYCN2GCV.js → chunk-TNFACSWF.js} +3 -3
- package/dist/{chunk-ZE355C6C.js → chunk-TY5GELDB.js} +9 -4
- package/dist/chunk-TY5GELDB.js.map +1 -0
- package/dist/{chunk-WMVGRAFB.js → chunk-U5OB5ADP.js} +186 -109
- package/dist/chunk-U5OB5ADP.js.map +1 -0
- package/dist/{chunk-JXMRTHDT.js → chunk-UOMMQ5M6.js} +2 -2
- package/dist/{chunk-XNQJBQ5X.js → chunk-UV6JUGIY.js} +2 -2
- package/dist/{chunk-5YNZJ5TP.js → chunk-VAHVSQIG.js} +2 -2
- package/dist/{chunk-OGJ7DFCL.js → chunk-VAK5PX72.js} +5 -5
- package/dist/chunk-WSGGJKD5.js +113 -0
- package/dist/chunk-WSGGJKD5.js.map +1 -0
- package/dist/{chunk-BLLXNFWP.js → chunk-YHQNTBBN.js} +2 -2
- package/dist/{chunk-OI4WBRC7.js → chunk-YJIJTBSX.js} +77 -102
- package/dist/chunk-YJIJTBSX.js.map +1 -0
- package/dist/{chunk-YCS7GF6Y.js → chunk-ZBJQXDQN.js} +3 -1
- package/dist/{chunk-YCS7GF6Y.js.map → chunk-ZBJQXDQN.js.map} +1 -1
- package/dist/cli/defaults/agent-mappings.yaml +4 -4
- package/dist/commands/build/marketplace.js +3 -3
- package/dist/commands/build/plugins.js +5 -5
- package/dist/commands/build/stack.js +5 -5
- package/dist/commands/compile.js +12 -17
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +8 -8
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +5 -5
- package/dist/commands/config/path.js +4 -4
- package/dist/commands/config/set-project.js +7 -7
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +5 -5
- package/dist/commands/config/unset-project.js +5 -5
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +8 -8
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/edit.js +30 -27
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +6 -6
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +16 -16
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +5 -5
- package/dist/commands/init.js +29 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +4 -4
- package/dist/commands/new/agent.js +5 -5
- package/dist/commands/new/skill.js +8 -8
- 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 +109 -102
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +6 -6
- package/dist/commands/validate.js +5 -5
- package/dist/commands/version/bump.js +4 -4
- package/dist/commands/version/index.js +4 -4
- package/dist/commands/version/set.js +4 -4
- package/dist/commands/version/show.js +4 -4
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +3 -3
- package/dist/components/wizard/category-grid.test.js +42 -21
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +10 -0
- package/dist/components/wizard/checkbox-grid.test.js +260 -0
- package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
- package/dist/components/wizard/domain-selection.js +7 -5
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.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/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/source-grid.js +4 -4
- package/dist/components/wizard/source-grid.test.js +4 -4
- package/dist/components/wizard/stack-selection.js +8 -7
- package/dist/components/wizard/step-agents.js +16 -0
- package/dist/components/wizard/step-agents.js.map +1 -0
- package/dist/components/wizard/step-agents.test.js +185 -0
- package/dist/components/wizard/step-agents.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -8
- package/dist/components/wizard/step-build.test.js +25 -23
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +2 -2
- package/dist/components/wizard/step-confirm.test.js +6 -5
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +2 -2
- package/dist/components/wizard/step-settings.js +5 -5
- package/dist/components/wizard/step-settings.test.js +8 -8
- package/dist/components/wizard/step-sources.js +11 -10
- package/dist/components/wizard/step-sources.test.js +13 -12
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +11 -9
- package/dist/components/wizard/step-stack.test.js +12 -10
- 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 -7
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +6 -4
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +26 -23
- package/dist/config/skills-matrix.yaml +17 -17
- package/dist/hooks/init.js +3 -3
- package/dist/{source-manager-PTK4P6BF.js → source-manager-FEGVYDFZ.js} +4 -4
- package/dist/source-manager-FEGVYDFZ.js.map +1 -0
- package/dist/stores/wizard-store.js +5 -4
- package/dist/stores/wizard-store.test.js +287 -15
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/agent.schema.json +3 -3
- package/src/schemas/metadata.schema.json +14 -14
- package/src/schemas/project-config.schema.json +43 -2
- package/src/schemas/project-source-config.schema.json +5 -5
- package/src/schemas/skills-matrix.schema.json +4 -4
- package/src/schemas/stack.schema.json +1 -1
- package/src/schemas/stacks.schema.json +42 -1
- package/dist/chunk-AQQVSNUX.js.map +0 -1
- package/dist/chunk-CEWNZQMH.js.map +0 -1
- package/dist/chunk-DC5AK3LW.js.map +0 -1
- package/dist/chunk-KWF6D7ZP.js.map +0 -1
- package/dist/chunk-LFHZBF6N.js.map +0 -1
- package/dist/chunk-NJ775OJ4.js.map +0 -1
- package/dist/chunk-NVQEHRJY.js.map +0 -1
- package/dist/chunk-OGXSTJP2.js.map +0 -1
- package/dist/chunk-OI4WBRC7.js.map +0 -1
- package/dist/chunk-OKILA27U.js.map +0 -1
- package/dist/chunk-PKUIO2Z7.js.map +0 -1
- package/dist/chunk-U36YCEBK.js.map +0 -1
- package/dist/chunk-UFUQUFV6.js +0 -256
- package/dist/chunk-UFUQUFV6.js.map +0 -1
- package/dist/chunk-WMVGRAFB.js.map +0 -1
- package/dist/chunk-YIKBNGE3.js.map +0 -1
- package/dist/chunk-YN35L5NE.js.map +0 -1
- package/dist/chunk-ZE355C6C.js.map +0 -1
- /package/dist/{chunk-HTTPKSL6.js.map → chunk-2XX4TMCI.js.map} +0 -0
- /package/dist/{chunk-IG7CUREJ.js.map → chunk-3NQJOJZL.js.map} +0 -0
- /package/dist/{chunk-VEZ2GZEK.js.map → chunk-ATLRUR3B.js.map} +0 -0
- /package/dist/{chunk-CXWPUVA7.js.map → chunk-DUQFF45G.js.map} +0 -0
- /package/dist/{chunk-GGHH3KR2.js.map → chunk-HKDE4LJW.js.map} +0 -0
- /package/dist/{chunk-YPJKOM42.js.map → chunk-HRW7BIDE.js.map} +0 -0
- /package/dist/{chunk-BPD4VUAU.js.map → chunk-M6PGIZNS.js.map} +0 -0
- /package/dist/{chunk-5LPPIT6H.js.map → chunk-NFV4SKH5.js.map} +0 -0
- /package/dist/{chunk-XYCN2GCV.js.map → chunk-TNFACSWF.js.map} +0 -0
- /package/dist/{chunk-JXMRTHDT.js.map → chunk-UOMMQ5M6.js.map} +0 -0
- /package/dist/{chunk-XNQJBQ5X.js.map → chunk-UV6JUGIY.js.map} +0 -0
- /package/dist/{chunk-5YNZJ5TP.js.map → chunk-VAHVSQIG.js.map} +0 -0
- /package/dist/{chunk-OGJ7DFCL.js.map → chunk-VAK5PX72.js.map} +0 -0
- /package/dist/{chunk-BLLXNFWP.js.map → chunk-YHQNTBBN.js.map} +0 -0
- /package/dist/{source-manager-PTK4P6BF.js.map → components/wizard/checkbox-grid.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
CLI_COLORS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZBJQXDQN.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -14,7 +14,8 @@ var WIZARD_STEPS = [
|
|
|
14
14
|
{ id: "stack", label: "Stack", number: 1 },
|
|
15
15
|
{ id: "build", label: "Build", number: 2 },
|
|
16
16
|
{ id: "sources", label: "Sources", number: 3 },
|
|
17
|
-
{ id: "
|
|
17
|
+
{ id: "agents", label: "Agents", number: 4 },
|
|
18
|
+
{ id: "confirm", label: "Confirm", number: 5 }
|
|
18
19
|
];
|
|
19
20
|
function formatStepLabel(stepId) {
|
|
20
21
|
const step = WIZARD_STEPS.find((s) => s.id === stepId);
|
|
@@ -75,4 +76,4 @@ export {
|
|
|
75
76
|
formatStepLabel,
|
|
76
77
|
WizardTabs
|
|
77
78
|
};
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-IVIK776Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/wizard-tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\ntype WizardTabStep = {\n id: WizardStep;\n label: string;\n number: number;\n};\n\nexport type WizardTabsProps = {\n steps: WizardTabStep[];\n currentStep: WizardStep;\n completedSteps: WizardStep[];\n skippedSteps?: WizardStep[];\n version?: string;\n};\n\nexport const WIZARD_STEPS: WizardTabStep[] = [\n { id: \"stack\", label: \"Stack\", number: 1 },\n { id: \"build\", label: \"Build\", number: 2 },\n { id: \"sources\", label: \"Sources\", number: 3 },\n { id: \"agents\", label: \"Agents\", number: 4 },\n { id: \"confirm\", label: \"Confirm\", number: 5 },\n];\n\ntype FormattedStepLabel = {\n /** The step number indicator, e.g. \"[1]\" */\n prefix: string;\n /** The step label text, e.g. \"Stack\" */\n label: string;\n /** The complete formatted string, e.g. \"[1] Stack\" */\n full: string;\n};\n\n/** Format a wizard step as its tab label parts and full string, e.g. \"[1] Stack\" */\nexport function formatStepLabel(stepId: WizardStep): FormattedStepLabel {\n const step = WIZARD_STEPS.find((s) => s.id === stepId);\n if (!step) return { prefix: \"\", label: stepId, full: stepId };\n const prefix = `[${step.number}]`;\n return { prefix, label: step.label, full: `${prefix} ${step.label}` };\n}\n\ntype StepState = \"completed\" | \"current\" | \"pending\" | \"skipped\";\n\nconst getStepState = (\n stepId: WizardStep,\n currentStep: WizardStep,\n completedSteps: WizardStep[],\n skippedSteps: WizardStep[],\n): StepState => {\n if (completedSteps.includes(stepId)) return \"completed\";\n if (stepId === currentStep) return \"current\";\n if (skippedSteps.includes(stepId)) return \"skipped\";\n return \"pending\";\n};\n\ntype TabProps = {\n step: WizardTabStep;\n state: StepState;\n};\n\nconst Tab: React.FC<TabProps> = ({ step, state }) => {\n const label = `[${step.number}] ${step.label}`;\n\n switch (state) {\n case \"current\":\n return <Text color={CLI_COLORS.PRIMARY}>{label}</Text>;\n case \"completed\":\n return <Text>{label}</Text>;\n case \"skipped\":\n return <Text dimColor>{label}</Text>;\n case \"pending\":\n default:\n return <Text color={CLI_COLORS.UNFOCUSED}>{label}</Text>;\n }\n};\n\nexport const WizardTabs: React.FC<WizardTabsProps> = ({\n steps,\n currentStep,\n completedSteps,\n skippedSteps = [],\n version,\n}) => {\n return (\n <Box\n flexDirection=\"row\"\n columnGap={2}\n borderRight={false}\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingRight={1}\n >\n {steps.map((step) => {\n const state = getStepState(step.id, currentStep, completedSteps, skippedSteps);\n\n return <Tab key={step.id} step={step} state={state} />;\n })}\n <Box flexGrow={1} justifyContent=\"flex-end\">\n <Text dimColor>{`v${version}`}</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAmEb,cAmBT,YAnBS;AAjDN,IAAM,eAAgC;AAAA,EAC3C,EAAE,IAAI,SAAS,OAAO,SAAS,QAAQ,EAAE;AAAA,EACzC,EAAE,IAAI,SAAS,OAAO,SAAS,QAAQ,EAAE;AAAA,EACzC,EAAE,IAAI,WAAW,OAAO,WAAW,QAAQ,EAAE;AAAA,EAC7C,EAAE,IAAI,UAAU,OAAO,UAAU,QAAQ,EAAE;AAAA,EAC3C,EAAE,IAAI,WAAW,OAAO,WAAW,QAAQ,EAAE;AAC/C;AAYO,SAAS,gBAAgB,QAAwC;AACtE,QAAM,OAAO,aAAa,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM;AACrD,MAAI,CAAC,KAAM,QAAO,EAAE,QAAQ,IAAI,OAAO,QAAQ,MAAM,OAAO;AAC5D,QAAM,SAAS,IAAI,KAAK,MAAM;AAC9B,SAAO,EAAE,QAAQ,OAAO,KAAK,OAAO,MAAM,GAAG,MAAM,IAAI,KAAK,KAAK,GAAG;AACtE;AAIA,IAAM,eAAe,CACnB,QACA,aACA,gBACA,iBACc;AACd,MAAI,eAAe,SAAS,MAAM,EAAG,QAAO;AAC5C,MAAI,WAAW,YAAa,QAAO;AACnC,MAAI,aAAa,SAAS,MAAM,EAAG,QAAO;AAC1C,SAAO;AACT;AAOA,IAAM,MAA0B,CAAC,EAAE,MAAM,MAAM,MAAM;AACnD,QAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK;AAE5C,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,oBAAC,QAAK,OAAO,WAAW,SAAU,iBAAM;AAAA,IACjD,KAAK;AACH,aAAO,oBAAC,QAAM,iBAAM;AAAA,IACtB,KAAK;AACH,aAAO,oBAAC,QAAK,UAAQ,MAAE,iBAAM;AAAA,IAC/B,KAAK;AAAA,IACL;AACE,aAAO,oBAAC,QAAK,OAAO,WAAW,WAAY,iBAAM;AAAA,EACrD;AACF;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAAA,EAChB;AACF,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,WAAW;AAAA,MACX,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,cAAc;AAAA,MAEb;AAAA,cAAM,IAAI,CAAC,SAAS;AACnB,gBAAM,QAAQ,aAAa,KAAK,IAAI,aAAa,gBAAgB,YAAY;AAE7E,iBAAO,oBAAC,OAAkB,MAAY,SAArB,KAAK,EAA8B;AAAA,QACtD,CAAC;AAAA,QACD,oBAAC,OAAI,UAAU,GAAG,gBAAe,YAC/B,8BAAC,QAAK,UAAQ,MAAE,cAAI,OAAO,IAAG,GAChC;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,47 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
useWizardStore
|
|
4
|
-
} from "./chunk-OGXSTJP2.js";
|
|
5
2
|
import {
|
|
6
3
|
CLI_COLORS,
|
|
7
4
|
UI_SYMBOLS
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZBJQXDQN.js";
|
|
9
6
|
import {
|
|
10
7
|
init_esm_shims
|
|
11
8
|
} from "./chunk-DHET7RCE.js";
|
|
12
9
|
|
|
13
|
-
// src/cli/components/wizard/
|
|
10
|
+
// src/cli/components/wizard/checkbox-grid.tsx
|
|
14
11
|
init_esm_shims();
|
|
15
12
|
import { useState } from "react";
|
|
16
13
|
import { Box, Text, useInput } from "ink";
|
|
17
14
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
15
|
var CONTINUE_VALUE = "_continue";
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var DomainSelection = () => {
|
|
31
|
-
const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();
|
|
16
|
+
var CheckboxGrid = ({
|
|
17
|
+
title,
|
|
18
|
+
subtitle,
|
|
19
|
+
items,
|
|
20
|
+
selectedIds,
|
|
21
|
+
onToggle,
|
|
22
|
+
onContinue,
|
|
23
|
+
onBack,
|
|
24
|
+
continueLabel = (count) => `Continue with ${count} item(s)`,
|
|
25
|
+
emptyMessage = "Please select at least one item"
|
|
26
|
+
}) => {
|
|
32
27
|
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
};
|
|
37
|
-
const items = [
|
|
38
|
-
...AVAILABLE_DOMAINS.map((domain) => ({ type: "domain", domain })),
|
|
39
|
-
...selectedDomains.length > 0 ? [{ type: "continue" }] : []
|
|
28
|
+
const listItems = [
|
|
29
|
+
...items.map((item) => ({ type: "item", item })),
|
|
30
|
+
...selectedIds.length > 0 ? [{ type: "continue" }] : []
|
|
40
31
|
];
|
|
41
|
-
const totalItems =
|
|
32
|
+
const totalItems = listItems.length;
|
|
42
33
|
useInput((input, key) => {
|
|
43
34
|
if (key.escape) {
|
|
44
|
-
|
|
35
|
+
onBack();
|
|
45
36
|
return;
|
|
46
37
|
}
|
|
47
38
|
if (key.upArrow || input === "k") {
|
|
@@ -53,36 +44,35 @@ var DomainSelection = () => {
|
|
|
53
44
|
return;
|
|
54
45
|
}
|
|
55
46
|
if (key.return) {
|
|
56
|
-
if (
|
|
57
|
-
|
|
47
|
+
if (selectedIds.length > 0) {
|
|
48
|
+
onContinue();
|
|
58
49
|
}
|
|
59
50
|
return;
|
|
60
51
|
}
|
|
61
52
|
if (input === " ") {
|
|
62
|
-
const focusedItem =
|
|
53
|
+
const focusedItem = listItems[focusedIndex];
|
|
63
54
|
if (!focusedItem) return;
|
|
64
|
-
if (focusedItem.type === "
|
|
65
|
-
|
|
55
|
+
if (focusedItem.type === "item") {
|
|
56
|
+
onToggle(focusedItem.item.id);
|
|
66
57
|
}
|
|
67
58
|
}
|
|
68
59
|
});
|
|
69
60
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
70
|
-
/* @__PURE__ */ jsx(Text, { bold: true, children:
|
|
71
|
-
/* @__PURE__ */ jsx(Text, { dimColor: true, children:
|
|
72
|
-
/* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children:
|
|
61
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: title }),
|
|
62
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: subtitle }),
|
|
63
|
+
/* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: listItems.map((listItem, index) => {
|
|
73
64
|
const isFocused = index === focusedIndex;
|
|
74
|
-
if (
|
|
65
|
+
if (listItem.type === "continue") {
|
|
75
66
|
return /* @__PURE__ */ jsxs(Box, { columnGap: 1, children: [
|
|
76
67
|
/* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: isFocused ? UI_SYMBOLS.CURRENT : " " }),
|
|
77
68
|
/* @__PURE__ */ jsxs(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: [
|
|
78
69
|
"\u2192",
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
" domain(s)"
|
|
70
|
+
" ",
|
|
71
|
+
continueLabel(selectedIds.length)
|
|
82
72
|
] })
|
|
83
73
|
] }, CONTINUE_VALUE);
|
|
84
74
|
}
|
|
85
|
-
const isSelected =
|
|
75
|
+
const isSelected = selectedIds.includes(listItem.item.id);
|
|
86
76
|
const checkbox = isSelected ? "[\u2713]" : "[ ]";
|
|
87
77
|
return /* @__PURE__ */ jsxs(Box, { columnGap: 1, children: [
|
|
88
78
|
/* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: isFocused ? UI_SYMBOLS.CURRENT : " " }),
|
|
@@ -94,17 +84,17 @@ var DomainSelection = () => {
|
|
|
94
84
|
children: checkbox
|
|
95
85
|
}
|
|
96
86
|
),
|
|
97
|
-
/* @__PURE__ */ jsx(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: item.
|
|
87
|
+
/* @__PURE__ */ jsx(Text, { bold: isFocused, color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: listItem.item.label }),
|
|
98
88
|
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
99
89
|
"- ",
|
|
100
|
-
item.
|
|
90
|
+
listItem.item.description
|
|
101
91
|
] })
|
|
102
|
-
] }, item.
|
|
92
|
+
] }, listItem.item.id);
|
|
103
93
|
}) }),
|
|
104
|
-
|
|
94
|
+
selectedIds.length > 0 ? /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { children: [
|
|
105
95
|
"Selected: ",
|
|
106
|
-
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, children:
|
|
107
|
-
] }) }) : /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, children:
|
|
96
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, children: selectedIds.join(", ") })
|
|
97
|
+
] }) }) : /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, children: emptyMessage }) }),
|
|
108
98
|
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
109
99
|
"\u2191",
|
|
110
100
|
"/",
|
|
@@ -115,6 +105,6 @@ var DomainSelection = () => {
|
|
|
115
105
|
};
|
|
116
106
|
|
|
117
107
|
export {
|
|
118
|
-
|
|
108
|
+
CheckboxGrid
|
|
119
109
|
};
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-IWNPFIGY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/checkbox-grid.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\n\nexport type CheckboxItem<T extends string = string> = {\n id: T;\n label: string;\n description: string;\n};\n\nexport type CheckboxGridProps<T extends string = string> = {\n title: string;\n subtitle: string;\n items: CheckboxItem<T>[];\n selectedIds: T[];\n onToggle: (id: T) => void;\n onContinue: () => void;\n onBack: () => void;\n /** Label for the continue button, e.g. \"Continue with 3 domain(s)\" */\n continueLabel?: (count: number) => string;\n /** Message shown when nothing is selected */\n emptyMessage?: string;\n};\n\nconst CONTINUE_VALUE = \"_continue\";\n\ntype ListItem<T extends string> = { type: \"item\"; item: CheckboxItem<T> } | { type: \"continue\" };\n\nexport const CheckboxGrid = <T extends string = string>({\n title,\n subtitle,\n items,\n selectedIds,\n onToggle,\n onContinue,\n onBack,\n continueLabel = (count) => `Continue with ${count} item(s)`,\n emptyMessage = \"Please select at least one item\",\n}: CheckboxGridProps<T>): React.ReactElement => {\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const listItems: ListItem<T>[] = [\n ...items.map((item) => ({ type: \"item\" as const, item })),\n ...(selectedIds.length > 0 ? [{ type: \"continue\" as const }] : []),\n ];\n\n const totalItems = listItems.length;\n\n useInput((input, key) => {\n if (key.escape) {\n onBack();\n return;\n }\n\n if (key.upArrow || input === \"k\") {\n setFocusedIndex((prev) => (prev <= 0 ? totalItems - 1 : prev - 1));\n return;\n }\n\n if (key.downArrow || input === \"j\") {\n setFocusedIndex((prev) => (prev >= totalItems - 1 ? 0 : prev + 1));\n return;\n }\n\n if (key.return) {\n if (selectedIds.length > 0) {\n onContinue();\n }\n return;\n }\n\n if (input === \" \") {\n const focusedItem = listItems[focusedIndex];\n if (!focusedItem) return;\n\n if (focusedItem.type === \"item\") {\n onToggle(focusedItem.item.id);\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{title}</Text>\n <Text dimColor>{subtitle}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {listItems.map((listItem, index) => {\n const isFocused = index === focusedIndex;\n\n if (listItem.type === \"continue\") {\n return (\n <Box key={CONTINUE_VALUE} columnGap={1}>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {isFocused ? UI_SYMBOLS.CURRENT : \" \"}\n </Text>\n <Text bold={isFocused} color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {\"\\u2192\"} {continueLabel(selectedIds.length)}\n </Text>\n </Box>\n );\n }\n\n const isSelected = selectedIds.includes(listItem.item.id);\n const checkbox = isSelected ? \"[\\u2713]\" : \"[ ]\";\n\n return (\n <Box key={listItem.item.id} columnGap={1}>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {isFocused ? UI_SYMBOLS.CURRENT : \" \"}\n </Text>\n <Text\n bold={isFocused}\n color={isSelected || isFocused ? CLI_COLORS.PRIMARY : undefined}\n >\n {checkbox}\n </Text>\n <Text bold={isFocused} color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {listItem.item.label}\n </Text>\n <Text dimColor>- {listItem.item.description}</Text>\n </Box>\n );\n })}\n </Box>\n {selectedIds.length > 0 ? (\n <Box marginTop={1}>\n <Text>\n Selected: <Text color={CLI_COLORS.PRIMARY}>{selectedIds.join(\", \")}</Text>\n </Text>\n </Box>\n ) : (\n <Box marginTop={1}>\n <Text color={CLI_COLORS.WARNING}>{emptyMessage}</Text>\n </Box>\n )}\n <Box marginTop={1}>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate SPACE toggle ENTER continue ESC back\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
resolveAgents,
|
|
19
19
|
writeContentHash,
|
|
20
20
|
writePluginManifest
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-U5OB5ADP.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-YJIJTBSX.js";
|
|
40
40
|
import {
|
|
41
41
|
CLAUDE_DIR,
|
|
42
42
|
DIRS,
|
|
43
43
|
PROJECT_ROOT
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-ZBJQXDQN.js";
|
|
45
45
|
import {
|
|
46
46
|
init_esm_shims
|
|
47
47
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -90,9 +90,9 @@ async function fetchAgentDefinitionsFromRemote(source, options = {}) {
|
|
|
90
90
|
let agentsDirRelPath = options.agentsDir;
|
|
91
91
|
if (!agentsDirRelPath) {
|
|
92
92
|
const sourceProjectConfig = await loadProjectSourceConfig(result.path);
|
|
93
|
-
agentsDirRelPath = sourceProjectConfig?.
|
|
94
|
-
if (sourceProjectConfig?.
|
|
95
|
-
verbose(`Using
|
|
93
|
+
agentsDirRelPath = sourceProjectConfig?.agentsDir ?? DIRS.agents;
|
|
94
|
+
if (sourceProjectConfig?.agentsDir) {
|
|
95
|
+
verbose(`Using agentsDir from source config: ${sourceProjectConfig.agentsDir}`);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
const agentsDir = path.join(result.path, agentsDirRelPath);
|
|
@@ -315,4 +315,4 @@ export {
|
|
|
315
315
|
compileAllAgentPlugins,
|
|
316
316
|
printAgentCompilationSummary
|
|
317
317
|
};
|
|
318
|
-
//# sourceMappingURL=chunk-
|
|
318
|
+
//# sourceMappingURL=chunk-IZRVFC2Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/agents/agent-fetcher.ts","../src/cli/lib/agents/agent-recompiler.ts","../src/cli/lib/agents/agent-plugin-compiler.ts","../src/cli/lib/agents/index.ts"],"sourcesContent":["import path from \"path\";\nimport { directoryExists } from \"../../utils/fs\";\nimport { verbose } from \"../../utils/logger\";\nimport { PROJECT_ROOT, DIRS, CLAUDE_DIR } from \"../../consts\";\nimport { fetchFromSource, type FetchOptions } from \"../loading\";\nimport { loadProjectSourceConfig } from \"../configuration\";\nimport type { AgentSourcePaths } from \"../../types\";\n\nexport type AgentDefinitionOptions = FetchOptions & {\n projectDir?: string;\n};\n\nexport async function getAgentDefinitions(\n remoteSource?: string,\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n if (remoteSource) {\n return fetchAgentDefinitionsFromRemote(remoteSource, options);\n }\n return getLocalAgentDefinitions(options);\n}\n\nexport async function getLocalAgentDefinitions(\n options: AgentDefinitionOptions = {},\n): Promise<AgentSourcePaths> {\n const agentsDir = path.join(PROJECT_ROOT, DIRS.agents);\n let templatesDir = path.join(PROJECT_ROOT, DIRS.templates);\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(\n `Agent partials not found at '${agentsDir}'. Ensure the CLI is properly installed.`,\n );\n }\n\n if (options.projectDir) {\n const localTemplatesDir = path.join(options.projectDir, CLAUDE_DIR, \"templates\");\n if (await directoryExists(localTemplatesDir)) {\n verbose(`Using local templates from: ${localTemplatesDir}`);\n templatesDir = localTemplatesDir;\n }\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials loaded from CLI: ${agentsDir}`);\n verbose(`Templates directory: ${templatesDir}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: PROJECT_ROOT,\n };\n}\n\nexport async function fetchAgentDefinitionsFromRemote(\n source: string,\n options: FetchOptions & { agentsDir?: string } = {},\n): Promise<AgentSourcePaths> {\n verbose(`Fetching agent partials from remote: ${source}`);\n\n const result = await fetchFromSource(source, {\n forceRefresh: options.forceRefresh,\n subdir: \"\",\n });\n\n let agentsDirRelPath = options.agentsDir;\n if (!agentsDirRelPath) {\n const sourceProjectConfig = await loadProjectSourceConfig(result.path);\n agentsDirRelPath = sourceProjectConfig?.agentsDir ?? DIRS.agents;\n if (sourceProjectConfig?.agentsDir) {\n verbose(`Using agentsDir from source config: ${sourceProjectConfig.agentsDir}`);\n }\n }\n\n const agentsDir = path.join(result.path, agentsDirRelPath);\n const templatesDir = path.join(agentsDir, \"_templates\");\n\n if (!(await directoryExists(agentsDir))) {\n throw new Error(`Agent partials not found at '${agentsDir}'`);\n }\n\n if (!(await directoryExists(templatesDir))) {\n verbose(`Templates directory not found: ${templatesDir}`);\n }\n\n verbose(`Agent partials fetched from: ${result.path}`);\n\n return {\n agentsDir,\n templatesDir,\n sourcePath: result.path,\n };\n}\n","import type { Liquid } from \"liquidjs\";\nimport path from \"path\";\n\nimport { getErrorMessage } from \"../../utils/errors\";\nimport type {\n AgentConfig,\n AgentDefinition,\n AgentName,\n CompileAgentConfig,\n CompileConfig,\n ProjectConfig,\n SkillDefinition,\n SkillId,\n} from \"../../types\";\nimport { glob, writeFile, ensureDir } from \"../../utils/fs\";\nimport { verbose } from \"../../utils/logger\";\nimport { typedEntries, typedKeys } from \"../../utils/typed-object\";\nimport { createLiquidEngine } from \"../compiler\";\nimport { loadProjectConfig } from \"../configuration\";\nimport { loadAllAgents, loadProjectAgents } from \"../loading\";\nimport { getPluginAgentsDir } from \"../plugins\";\nimport { discoverAllPluginSkills } from \"../plugins/plugin-discovery\";\nimport { resolveAgents, buildSkillRefsFromConfig } from \"../resolver\";\nimport { compileAgentForPlugin } from \"../stacks\";\n\nexport type RecompileAgentsOptions = {\n pluginDir: string;\n sourcePath: string;\n agents?: AgentName[];\n skills?: Partial<Record<SkillId, SkillDefinition>>;\n projectDir?: string;\n outputDir?: string;\n};\n\nexport type RecompileAgentsResult = {\n compiled: AgentName[];\n failed: AgentName[];\n warnings: string[];\n};\n\nasync function getExistingAgentNames(pluginDir: string): Promise<AgentName[]> {\n const agentsDir = getPluginAgentsDir(pluginDir);\n const files = await glob(\"*.md\", agentsDir);\n // Boundary cast: directory names from filesystem are agent names by convention\n return files.map((f) => path.basename(f, \".md\") as AgentName);\n}\n\ntype ResolveAgentNamesParams = {\n specifiedAgents?: AgentName[];\n projectConfig: ProjectConfig | null;\n allAgents: Record<AgentName, AgentDefinition>;\n outputDir?: string;\n pluginDir: string;\n};\n\nasync function resolveAgentNames(params: ResolveAgentNamesParams): Promise<AgentName[]> {\n const { specifiedAgents, projectConfig, allAgents, outputDir, pluginDir } = params;\n\n if (specifiedAgents) {\n return specifiedAgents;\n }\n\n if (projectConfig?.agents) {\n verbose(`Using agents from config.yaml: ${projectConfig.agents.join(\", \")}`);\n return projectConfig.agents;\n }\n\n if (outputDir) {\n const names = typedKeys<AgentName>(allAgents);\n verbose(`Using all available agents from source: ${names.join(\", \")}`);\n return names;\n }\n\n return getExistingAgentNames(pluginDir);\n}\n\ntype BuildCompileConfigParams = {\n agentNames: AgentName[];\n allAgents: Record<AgentName, AgentDefinition>;\n projectConfig: ProjectConfig | null;\n pluginDir: string;\n};\n\ntype BuildCompileConfigResult = {\n compileConfig: CompileConfig;\n warnings: string[];\n};\n\nfunction buildCompileConfig(params: BuildCompileConfigParams): BuildCompileConfigResult {\n const { agentNames, allAgents, projectConfig, pluginDir } = params;\n const warnings: string[] = [];\n\n // Store initialization: accumulator filled below for each agent in agentNames\n const compileAgents = {} as Record<AgentName, CompileAgentConfig>;\n for (const agentName of agentNames) {\n if (allAgents[agentName]) {\n const agentStack = projectConfig?.stack?.[agentName];\n compileAgents[agentName] = agentStack ? { skills: buildSkillRefsFromConfig(agentStack) } : {};\n } else {\n warnings.push(`Agent \"${agentName}\" not found in source definitions`);\n }\n }\n\n const compileConfig: CompileConfig = {\n name: projectConfig?.name || path.basename(pluginDir),\n description: projectConfig?.description || \"Recompiled plugin\",\n agents: compileAgents,\n };\n\n return { compileConfig, warnings };\n}\n\ntype CompileAndWriteParams = {\n resolvedAgents: Record<AgentName, AgentConfig>;\n agentsDir: string;\n sourcePath: string;\n engine: Liquid;\n installMode: ProjectConfig[\"installMode\"];\n};\n\nasync function compileAndWriteAgents(\n params: CompileAndWriteParams,\n result: RecompileAgentsResult,\n): Promise<void> {\n const { resolvedAgents, agentsDir, sourcePath, engine, installMode } = params;\n\n for (const [agentName, agent] of typedEntries<AgentName, AgentConfig>(resolvedAgents)) {\n try {\n const output = await compileAgentForPlugin(agentName, agent, sourcePath, engine, installMode);\n await writeFile(path.join(agentsDir, `${agentName}.md`), output);\n result.compiled.push(agentName);\n verbose(` Recompiled: ${agentName}`);\n } catch (error) {\n result.failed.push(agentName);\n result.warnings.push(`Failed to compile ${agentName}: ${getErrorMessage(error)}`);\n }\n }\n}\n\nexport async function recompileAgents(\n options: RecompileAgentsOptions,\n): Promise<RecompileAgentsResult> {\n const { pluginDir, sourcePath, skills: providedSkills, projectDir, outputDir } = options;\n\n const result: RecompileAgentsResult = {\n compiled: [],\n failed: [],\n warnings: [],\n };\n\n const configDir = projectDir ?? pluginDir;\n const loadedConfig = await loadProjectConfig(configDir);\n const projectConfig = loadedConfig?.config ?? null;\n\n const builtinAgents = await loadAllAgents(sourcePath);\n const projectAgents = projectDir ? await loadProjectAgents(projectDir) : {};\n\n // Boundary cast: loadAllAgents returns Record<string, AgentDefinition>, agent dirs are AgentName by convention\n // Priority: project agents > built-in agents\n const allAgents = {\n ...builtinAgents,\n ...projectAgents,\n } as Record<AgentName, AgentDefinition>;\n\n const agentNames = await resolveAgentNames({\n specifiedAgents: options.agents,\n projectConfig,\n allAgents,\n outputDir,\n pluginDir,\n });\n\n if (agentNames.length === 0) {\n result.warnings.push(\"No agents found to recompile\");\n return result;\n }\n\n verbose(`Recompiling ${agentNames.length} agents in ${outputDir ?? pluginDir}`);\n\n // When skills are not provided, discover from all plugin directories.\n let pluginSkills: Partial<Record<SkillId, SkillDefinition>>;\n if (providedSkills) {\n pluginSkills = providedSkills;\n } else {\n pluginSkills = await discoverAllPluginSkills(projectDir ?? pluginDir);\n }\n\n const { compileConfig, warnings } = buildCompileConfig({\n agentNames,\n allAgents,\n projectConfig,\n pluginDir,\n });\n result.warnings.push(...warnings);\n\n const engine = await createLiquidEngine(projectDir);\n const resolvedAgents = await resolveAgents(allAgents, pluginSkills, compileConfig, sourcePath);\n\n const agentsDir = outputDir ?? getPluginAgentsDir(pluginDir);\n await ensureDir(agentsDir);\n\n await compileAndWriteAgents(\n {\n resolvedAgents,\n agentsDir,\n sourcePath,\n engine,\n installMode: projectConfig?.installMode,\n },\n result,\n );\n\n return result;\n}\n","import path from \"path\";\nimport { getErrorMessage } from \"../../utils/errors\";\nimport { readFile, ensureDir, glob, copy } from \"../../utils/fs\";\nimport { log, verbose, warn } from \"../../utils/logger\";\nimport {\n generateAgentPluginManifest,\n writePluginManifest,\n getPluginManifestPath,\n} from \"../plugins\";\nimport { computeStringHash, determinePluginVersion, writeContentHash } from \"../versioning\";\nimport { extractFrontmatter } from \"../../utils/frontmatter\";\nimport type { PluginManifest } from \"../../types\";\nimport { agentFrontmatterValidationSchema, formatZodErrors } from \"../schemas\";\n\nexport type AgentPluginOptions = {\n agentPath: string;\n outputDir: string;\n};\n\nexport type CompiledAgentPlugin = {\n pluginPath: string;\n manifest: PluginManifest;\n agentName: string;\n};\n\nfunction parseAgentFrontmatter(\n content: string,\n filePath: string,\n): { name: string; description: string } | null {\n const raw = extractFrontmatter(content);\n if (!raw) {\n return null;\n }\n\n const result = agentFrontmatterValidationSchema.safeParse(raw);\n if (!result.success) {\n warn(`Invalid agent frontmatter in ${filePath}: ${formatZodErrors(result.error.issues)}`);\n return null;\n }\n\n return { name: result.data.name, description: result.data.description };\n}\n\nexport async function compileAgentPlugin(\n options: AgentPluginOptions,\n): Promise<CompiledAgentPlugin> {\n const { agentPath, outputDir } = options;\n const fileName = path.basename(agentPath);\n\n const content = await readFile(agentPath);\n const frontmatter = parseAgentFrontmatter(content, agentPath);\n\n if (!frontmatter) {\n throw new Error(\n `Agent '${fileName}' has invalid or missing YAML frontmatter. ` +\n `Required fields: 'name' and 'description'. File: ${agentPath}`,\n );\n }\n\n const agentName = frontmatter.name;\n\n verbose(`Compiling agent plugin: ${agentName} from ${agentPath}`);\n\n const pluginDir = path.join(outputDir, `agent-${agentName}`);\n const agentsDir = path.join(pluginDir, \"agents\");\n\n await ensureDir(pluginDir);\n await ensureDir(agentsDir);\n\n const newHash = computeStringHash(content);\n const { version, contentHash } = await determinePluginVersion(\n newHash,\n pluginDir,\n getPluginManifestPath,\n );\n\n const manifest = generateAgentPluginManifest({\n agentName,\n description: frontmatter.description,\n version,\n });\n\n await writePluginManifest(pluginDir, manifest);\n\n await writeContentHash(pluginDir, contentHash, getPluginManifestPath);\n\n verbose(` Wrote plugin.json for ${agentName} (v${version})`);\n\n await copy(agentPath, path.join(agentsDir, `${agentName}.md`));\n verbose(` Copied agent ${fileName} -> agents/${agentName}.md`);\n\n return {\n pluginPath: pluginDir,\n manifest,\n agentName,\n };\n}\n\nexport async function compileAllAgentPlugins(\n agentsDir: string,\n outputDir: string,\n): Promise<CompiledAgentPlugin[]> {\n const results: CompiledAgentPlugin[] = [];\n\n const agentMdFiles = await glob(\"*.md\", agentsDir);\n\n for (const agentFile of agentMdFiles) {\n const agentPath = path.join(agentsDir, agentFile);\n\n try {\n const result = await compileAgentPlugin({\n agentPath,\n outputDir,\n });\n results.push(result);\n log(` [OK] agent-${result.agentName}`);\n } catch (error) {\n const errorMessage = getErrorMessage(error);\n warn(`Failed to compile agent from '${agentFile}': ${errorMessage}`);\n }\n }\n\n return results;\n}\n\nexport function printAgentCompilationSummary(results: CompiledAgentPlugin[]): void {\n log(`\\nCompiled ${results.length} agent plugins:`);\n for (const result of results) {\n log(` - agent-${result.agentName} (v${result.manifest.version})`);\n }\n}\n","export {\n type AgentDefinitionOptions,\n getAgentDefinitions,\n getLocalAgentDefinitions,\n fetchAgentDefinitionsFromRemote,\n} from \"./agent-fetcher\";\n\nexport {\n type RecompileAgentsOptions,\n type RecompileAgentsResult,\n recompileAgents,\n} from \"./agent-recompiler\";\n\nexport {\n type AgentPluginOptions,\n type CompiledAgentPlugin,\n compileAgentPlugin,\n compileAllAgentPlugins,\n printAgentCompilationSummary,\n} from \"./agent-plugin-compiler\";\n"],"mappings":"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","names":["path","path","path","path"]}
|
|
@@ -11,14 +11,28 @@ function useMeasuredHeight() {
|
|
|
11
11
|
const ref = useRef(null);
|
|
12
12
|
const [measuredHeight, setMeasuredHeight] = useState(0);
|
|
13
13
|
const { stdout } = useStdout();
|
|
14
|
+
const measure = () => {
|
|
15
|
+
if (ref.current) {
|
|
16
|
+
const { height } = measureElement(ref.current);
|
|
17
|
+
setMeasuredHeight((prev) => prev !== height ? height : prev);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
14
20
|
useEffect(() => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
measure();
|
|
22
|
+
});
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const RETRY_DELAYS_MS = [0, 16, 50];
|
|
25
|
+
const timers = [];
|
|
26
|
+
for (const delay of RETRY_DELAYS_MS) {
|
|
27
|
+
timers.push(setTimeout(measure, delay));
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
for (const timer of timers) {
|
|
31
|
+
clearTimeout(timer);
|
|
19
32
|
}
|
|
20
33
|
};
|
|
21
|
-
|
|
34
|
+
}, []);
|
|
35
|
+
useEffect(() => {
|
|
22
36
|
stdout.on("resize", measure);
|
|
23
37
|
return () => {
|
|
24
38
|
stdout.off("resize", measure);
|
|
@@ -30,4 +44,4 @@ function useMeasuredHeight() {
|
|
|
30
44
|
export {
|
|
31
45
|
useMeasuredHeight
|
|
32
46
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-K77I4XGL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/hooks/use-measured-height.ts"],"sourcesContent":["import { useRef, useState, useEffect } from \"react\";\nimport { type DOMElement, measureElement, useStdout } from \"ink\";\n\n/**\n * Measures the computed height of a Box element using Ink's Yoga layout engine.\n *\n * Returns a ref to attach to a Box with `flexGrow={1}` and the measured height.\n * The Box must be inside a parent chain with a constrained height (e.g., an\n * explicit `height` prop on an ancestor) so Yoga can compute the remaining space.\n *\n * Returns 0 before the first layout pass. Re-measures on terminal resize.\n */\nexport function useMeasuredHeight(): {\n ref: React.Ref<DOMElement>;\n measuredHeight: number;\n} {\n const ref = useRef<DOMElement>(null);\n const [measuredHeight, setMeasuredHeight] = useState(0);\n const { stdout } = useStdout();\n\n const measure = () => {\n if (ref.current) {\n const { height } = measureElement(ref.current);\n setMeasuredHeight((prev) => (prev !== height ? height : prev));\n }\n };\n\n // Re-measure after every render so late-mounted refs (e.g., Sources\n // step switching from \"choice\" to \"customize\" view) get picked up.\n // The state setter avoids unnecessary updates when height is unchanged.\n useEffect(() => {\n measure();\n });\n\n // Yoga may not have computed the layout on the first render, so\n // measureElement() returns 0. Retry with increasing delays to give\n // Yoga time to resolve the full flex constraint chain.\n useEffect(() => {\n const RETRY_DELAYS_MS = [0, 16, 50];\n const timers: ReturnType<typeof setTimeout>[] = [];\n\n for (const delay of RETRY_DELAYS_MS) {\n timers.push(setTimeout(measure, delay));\n }\n\n return () => {\n for (const timer of timers) {\n clearTimeout(timer);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n stdout.on(\"resize\", measure);\n return () => {\n stdout.off(\"resize\", measure);\n };\n }, [stdout]);\n\n return { ref, measuredHeight };\n}\n"],"mappings":";;;;;;AAAA;AAAA,SAAS,QAAQ,UAAU,iBAAiB;AAC5C,SAA0B,gBAAgB,iBAAiB;AAWpD,SAAS,oBAGd;AACA,QAAM,MAAM,OAAmB,IAAI;AACnC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,CAAC;AACtD,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,QAAM,UAAU,MAAM;AACpB,QAAI,IAAI,SAAS;AACf,YAAM,EAAE,OAAO,IAAI,eAAe,IAAI,OAAO;AAC7C,wBAAkB,CAAC,SAAU,SAAS,SAAS,SAAS,IAAK;AAAA,IAC/D;AAAA,EACF;AAKA,YAAU,MAAM;AACd,YAAQ;AAAA,EACV,CAAC;AAKD,YAAU,MAAM;AACd,UAAM,kBAAkB,CAAC,GAAG,IAAI,EAAE;AAClC,UAAM,SAA0C,CAAC;AAEjD,eAAW,SAAS,iBAAiB;AACnC,aAAO,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,IACxC;AAEA,WAAO,MAAM;AACX,iBAAW,SAAS,QAAQ;AAC1B,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EAEF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,WAAO,GAAG,UAAU,OAAO;AAC3B,WAAO,MAAM;AACX,aAAO,IAAI,UAAU,OAAO;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO,EAAE,KAAK,eAAe;AAC/B;","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-7SOPVGDV.js";
|
|
5
5
|
import {
|
|
6
6
|
ViewTitle
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2XX4TMCI.js";
|
|
8
8
|
import {
|
|
9
9
|
useKeyboardNavigation
|
|
10
10
|
} from "./chunk-KUV24B5M.js";
|
|
@@ -16,14 +16,14 @@ import {
|
|
|
16
16
|
addSource,
|
|
17
17
|
getSourceSummary,
|
|
18
18
|
removeSource
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-U5OB5ADP.js";
|
|
20
20
|
import {
|
|
21
21
|
getErrorMessage,
|
|
22
22
|
verbose
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-YJIJTBSX.js";
|
|
24
24
|
import {
|
|
25
25
|
CLI_COLORS
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-ZBJQXDQN.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-M6PGIZNS.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StackSelection
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VAK5PX72.js";
|
|
5
5
|
import {
|
|
6
6
|
DomainSelection
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-54ZZCWN4.js";
|
|
8
8
|
import {
|
|
9
9
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HRMQ2RGY.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -26,4 +26,4 @@ var StepStack = ({ matrix, onCancel }) => {
|
|
|
26
26
|
export {
|
|
27
27
|
StepStack
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-NFV4SKH5.js.map
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
useMeasuredHeight
|
|
4
|
+
} from "./chunk-K77I4XGL.js";
|
|
5
|
+
import {
|
|
6
|
+
getDomainDisplayName
|
|
7
|
+
} from "./chunk-MZB3GGOH.js";
|
|
8
|
+
import {
|
|
9
|
+
ViewTitle
|
|
10
|
+
} from "./chunk-2XX4TMCI.js";
|
|
11
|
+
import {
|
|
12
|
+
CategoryGrid
|
|
13
|
+
} from "./chunk-TA6IIQI4.js";
|
|
14
|
+
import {
|
|
15
|
+
buildCategoriesForDomain,
|
|
16
|
+
validateBuildStep
|
|
17
|
+
} from "./chunk-WSGGJKD5.js";
|
|
18
|
+
import {
|
|
19
|
+
CLI_COLORS
|
|
20
|
+
} from "./chunk-ZBJQXDQN.js";
|
|
21
|
+
import {
|
|
22
|
+
init_esm_shims
|
|
23
|
+
} from "./chunk-DHET7RCE.js";
|
|
24
|
+
|
|
25
|
+
// src/cli/components/wizard/step-build.tsx
|
|
26
|
+
init_esm_shims();
|
|
27
|
+
import { useState } from "react";
|
|
28
|
+
import { Box, Text, useInput } from "ink";
|
|
29
|
+
|
|
30
|
+
// src/cli/lib/wizard/index.ts
|
|
31
|
+
init_esm_shims();
|
|
32
|
+
|
|
33
|
+
// src/cli/components/hooks/use-framework-filtering.ts
|
|
34
|
+
init_esm_shims();
|
|
35
|
+
import { useMemo } from "react";
|
|
36
|
+
function useFrameworkFiltering({
|
|
37
|
+
domain,
|
|
38
|
+
allSelections,
|
|
39
|
+
matrix,
|
|
40
|
+
expertMode,
|
|
41
|
+
selections,
|
|
42
|
+
parentDomainSelections,
|
|
43
|
+
installedSkillIds
|
|
44
|
+
}) {
|
|
45
|
+
return useMemo(
|
|
46
|
+
() => buildCategoriesForDomain(
|
|
47
|
+
domain,
|
|
48
|
+
allSelections,
|
|
49
|
+
matrix,
|
|
50
|
+
expertMode,
|
|
51
|
+
selections,
|
|
52
|
+
parentDomainSelections,
|
|
53
|
+
installedSkillIds
|
|
54
|
+
),
|
|
55
|
+
[
|
|
56
|
+
domain,
|
|
57
|
+
allSelections,
|
|
58
|
+
matrix,
|
|
59
|
+
expertMode,
|
|
60
|
+
selections,
|
|
61
|
+
parentDomainSelections,
|
|
62
|
+
installedSkillIds
|
|
63
|
+
]
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/cli/components/wizard/step-build.tsx
|
|
68
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
69
|
+
var Footer = ({ validationError }) => {
|
|
70
|
+
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: validationError && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
|
|
71
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.WARNING, children: validationError }),
|
|
72
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Press ESC to go back, or select a skill and press ENTER to continue." })
|
|
73
|
+
] }) });
|
|
74
|
+
};
|
|
75
|
+
var StepBuild = ({
|
|
76
|
+
matrix,
|
|
77
|
+
domain: activeDomain,
|
|
78
|
+
selectedDomains,
|
|
79
|
+
selections,
|
|
80
|
+
allSelections,
|
|
81
|
+
showLabels,
|
|
82
|
+
expertMode,
|
|
83
|
+
parentDomainSelections,
|
|
84
|
+
installedSkillIds,
|
|
85
|
+
onToggle,
|
|
86
|
+
onToggleLabels,
|
|
87
|
+
onContinue,
|
|
88
|
+
onBack
|
|
89
|
+
}) => {
|
|
90
|
+
const [validationError, setValidationError] = useState(void 0);
|
|
91
|
+
const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();
|
|
92
|
+
const categories = useFrameworkFiltering({
|
|
93
|
+
domain: activeDomain,
|
|
94
|
+
allSelections,
|
|
95
|
+
matrix,
|
|
96
|
+
expertMode,
|
|
97
|
+
selections,
|
|
98
|
+
parentDomainSelections,
|
|
99
|
+
installedSkillIds
|
|
100
|
+
});
|
|
101
|
+
useInput((_input, key) => {
|
|
102
|
+
if (key.return) {
|
|
103
|
+
const validation = validateBuildStep(categories, selections);
|
|
104
|
+
if (validation.valid) {
|
|
105
|
+
setValidationError(void 0);
|
|
106
|
+
onContinue();
|
|
107
|
+
} else {
|
|
108
|
+
setValidationError(validation.message);
|
|
109
|
+
}
|
|
110
|
+
} else if (key.escape) {
|
|
111
|
+
setValidationError(void 0);
|
|
112
|
+
onBack();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", width: "100%", flexGrow: 1, flexBasis: 0, children: [
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
Box,
|
|
118
|
+
{
|
|
119
|
+
columnGap: 2,
|
|
120
|
+
flexDirection: "row",
|
|
121
|
+
justifyContent: "space-between",
|
|
122
|
+
marginBottom: 1,
|
|
123
|
+
paddingRight: 1,
|
|
124
|
+
marginTop: -1,
|
|
125
|
+
borderTop: false,
|
|
126
|
+
borderRight: false,
|
|
127
|
+
borderLeft: false,
|
|
128
|
+
borderColor: CLI_COLORS.NEUTRAL,
|
|
129
|
+
borderStyle: "single",
|
|
130
|
+
children: /* @__PURE__ */ jsx(Box, { columnGap: 2, flexDirection: "row", children: selectedDomains.map((domain) => {
|
|
131
|
+
const isActive = domain === activeDomain;
|
|
132
|
+
return /* @__PURE__ */ jsx(Text, { color: isActive ? CLI_COLORS.PRIMARY : void 0, bold: isActive, children: getDomainDisplayName(domain) }, domain);
|
|
133
|
+
}) })
|
|
134
|
+
}
|
|
135
|
+
),
|
|
136
|
+
/* @__PURE__ */ jsx(ViewTitle, { children: `[2] Customize your ${getDomainDisplayName(activeDomain)} stack` }),
|
|
137
|
+
/* @__PURE__ */ jsx(Box, { ref: gridRef, flexGrow: 1, flexBasis: 0, children: /* @__PURE__ */ jsx(
|
|
138
|
+
CategoryGrid,
|
|
139
|
+
{
|
|
140
|
+
categories,
|
|
141
|
+
availableHeight: gridHeight,
|
|
142
|
+
expertMode,
|
|
143
|
+
showLabels,
|
|
144
|
+
onToggle,
|
|
145
|
+
onToggleLabels
|
|
146
|
+
},
|
|
147
|
+
activeDomain
|
|
148
|
+
) }),
|
|
149
|
+
/* @__PURE__ */ jsx(Footer, { validationError })
|
|
150
|
+
] });
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
StepBuild
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=chunk-NI2RSNWB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-build.tsx","../src/cli/lib/wizard/index.ts","../src/cli/components/hooks/use-framework-filtering.ts"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport type {\n Domain,\n MergedSkillsMatrix,\n SkillId,\n Subcategory,\n SubcategorySelections,\n} from \"../../types/index.js\";\nimport { validateBuildStep } from \"../../lib/wizard/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { useFrameworkFiltering } from \"../hooks/use-framework-filtering.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { CategoryGrid } from \"./category-grid.js\";\nimport { ViewTitle } from \"./view-title.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\n\nexport type StepBuildProps = {\n matrix: MergedSkillsMatrix;\n domain: Domain;\n selectedDomains: Domain[];\n selections: SubcategorySelections;\n allSelections: SkillId[];\n showLabels: boolean;\n expertMode: boolean;\n /** For framework-first filtering on sub-domains (e.g., web-extras inherits from web) */\n parentDomainSelections?: SubcategorySelections;\n /** Skill IDs already installed on disk, shown with a dimmed checkmark */\n installedSkillIds?: SkillId[];\n onToggle: (subcategoryId: Subcategory, technologyId: SkillId) => void;\n onToggleLabels: () => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype FooterProps = {\n validationError?: string;\n};\n\nconst Footer: React.FC<FooterProps> = ({ validationError }) => {\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {validationError && (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color={CLI_COLORS.WARNING}>{validationError}</Text>\n <Text dimColor>Press ESC to go back, or select a skill and press ENTER to continue.</Text>\n </Box>\n )}\n </Box>\n );\n};\n\nexport const StepBuild: React.FC<StepBuildProps> = ({\n matrix,\n domain: activeDomain,\n selectedDomains,\n selections,\n allSelections,\n showLabels,\n expertMode,\n parentDomainSelections,\n installedSkillIds,\n onToggle,\n onToggleLabels,\n onContinue,\n onBack,\n}) => {\n const [validationError, setValidationError] = useState<string | undefined>(undefined);\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n\n const categories = useFrameworkFiltering({\n domain: activeDomain,\n allSelections,\n matrix,\n expertMode,\n selections,\n parentDomainSelections,\n installedSkillIds,\n });\n\n useInput((_input, key) => {\n if (key.return) {\n const validation = validateBuildStep(categories, selections);\n if (validation.valid) {\n setValidationError(undefined);\n onContinue();\n } else {\n setValidationError(validation.message);\n }\n } else if (key.escape) {\n setValidationError(undefined);\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <Box\n columnGap={2}\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginBottom={1}\n paddingRight={1}\n marginTop={-1}\n borderTop={false}\n borderRight={false}\n borderLeft={false}\n borderColor={CLI_COLORS.NEUTRAL}\n borderStyle=\"single\"\n >\n <Box columnGap={2} flexDirection=\"row\">\n {selectedDomains.map((domain) => {\n const isActive = domain === activeDomain;\n return (\n <Text key={domain} color={isActive ? CLI_COLORS.PRIMARY : undefined} bold={isActive}>\n {getDomainDisplayName(domain)}\n </Text>\n );\n })}\n </Box>\n </Box>\n <ViewTitle>{`[2] Customize your ${getDomainDisplayName(activeDomain)} stack`}</ViewTitle>\n\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <CategoryGrid\n key={activeDomain}\n categories={categories}\n availableHeight={gridHeight}\n expertMode={expertMode}\n showLabels={showLabels}\n onToggle={onToggle}\n onToggleLabels={onToggleLabels}\n />\n </Box>\n\n <Footer validationError={validationError} />\n </Box>\n );\n};\n","export {\n type BuildStepValidation,\n validateBuildStep,\n computeOptionState,\n getSkillDisplayLabel,\n buildCategoriesForDomain,\n} from \"./build-step-logic\";\n","import { useMemo } from \"react\";\nimport type {\n Domain,\n MergedSkillsMatrix,\n SkillId,\n SubcategorySelections,\n} from \"../../types/index.js\";\nimport { buildCategoriesForDomain } from \"../../lib/wizard/index.js\";\nimport type { CategoryRow } from \"../wizard/category-grid.js\";\n\ntype UseFrameworkFilteringOptions = {\n domain: Domain;\n allSelections: SkillId[];\n matrix: MergedSkillsMatrix;\n expertMode: boolean;\n selections: SubcategorySelections;\n parentDomainSelections?: SubcategorySelections;\n installedSkillIds?: SkillId[];\n};\n\nexport function useFrameworkFiltering({\n domain,\n allSelections,\n matrix,\n expertMode,\n selections,\n parentDomainSelections,\n installedSkillIds,\n}: UseFrameworkFilteringOptions): CategoryRow[] {\n return useMemo(\n () =>\n buildCategoriesForDomain(\n domain,\n allSelections,\n matrix,\n expertMode,\n selections,\n parentDomainSelections,\n installedSkillIds,\n ),\n [\n domain,\n allSelections,\n matrix,\n expertMode,\n selections,\n parentDomainSelections,\n installedSkillIds,\n ],\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YHQNTBBN.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_SOURCE,
|
|
7
7
|
SOURCE_ENV_VAR,
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
loadProjectSourceConfig,
|
|
11
11
|
resolveAgentsSource,
|
|
12
12
|
resolveSource
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-U5OB5ADP.js";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_BRANDING
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ZBJQXDQN.js";
|
|
17
17
|
import {
|
|
18
18
|
init_esm_shims
|
|
19
19
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -66,15 +66,15 @@ ${DEFAULT_BRANDING.NAME} Configuration
|
|
|
66
66
|
const projectConfigPath = getProjectConfigPath(projectDir);
|
|
67
67
|
this.log(` 2. Project config:`);
|
|
68
68
|
this.log(` ${projectConfigPath}`);
|
|
69
|
-
if (projectConfig?.source || projectConfig?.marketplace || projectConfig?.
|
|
69
|
+
if (projectConfig?.source || projectConfig?.marketplace || projectConfig?.agentsSource) {
|
|
70
70
|
if (projectConfig?.source) {
|
|
71
71
|
this.log(` source: ${projectConfig.source}`);
|
|
72
72
|
}
|
|
73
73
|
if (projectConfig?.marketplace) {
|
|
74
74
|
this.log(` marketplace: ${projectConfig.marketplace}`);
|
|
75
75
|
}
|
|
76
|
-
if (projectConfig?.
|
|
77
|
-
this.log(`
|
|
76
|
+
if (projectConfig?.agentsSource) {
|
|
77
|
+
this.log(` agentsSource: ${projectConfig.agentsSource}`);
|
|
78
78
|
}
|
|
79
79
|
} else {
|
|
80
80
|
this.log(` (not configured)`);
|
|
@@ -90,4 +90,4 @@ ${DEFAULT_BRANDING.NAME} Configuration
|
|
|
90
90
|
export {
|
|
91
91
|
ConfigShow
|
|
92
92
|
};
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
93
|
+
//# sourceMappingURL=chunk-OEX5JDQD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/config/show.ts"],"sourcesContent":["import { BaseCommand } from \"../../base-command.js\";\nimport { DEFAULT_BRANDING } from \"../../consts.js\";\nimport {\n resolveSource,\n resolveAgentsSource,\n loadProjectSourceConfig,\n getProjectConfigPath,\n formatOrigin,\n DEFAULT_SOURCE,\n SOURCE_ENV_VAR,\n} from \"../../lib/configuration/index.js\";\n\nexport default class ConfigShow extends BaseCommand {\n static summary = \"Show current effective configuration\";\n static description =\n \"Display the current effective configuration with all layers (env, project, default)\";\n\n static flags = {\n ...BaseCommand.baseFlags,\n };\n\n async run(): Promise<void> {\n await this.parse(ConfigShow);\n\n const projectDir = process.cwd();\n\n this.log(`\\n${DEFAULT_BRANDING.NAME} Configuration\\n`);\n\n const resolved = await resolveSource(undefined, projectDir);\n\n this.log(\"Source:\");\n this.log(` ${resolved.source}`);\n this.log(` (from ${formatOrigin(\"source\", resolved.sourceOrigin)})`);\n this.log(\"\");\n\n this.log(\"Marketplace:\");\n if (resolved.marketplace) {\n this.log(` ${resolved.marketplace}`);\n } else {\n this.log(` (not configured)`);\n }\n this.log(\"\");\n\n const agentsResolved = await resolveAgentsSource(undefined, projectDir);\n this.log(\"Agents Source:\");\n if (agentsResolved.agentsSource) {\n this.log(` ${agentsResolved.agentsSource}`);\n this.log(` (from ${formatOrigin(\"agents\", agentsResolved.agentsSourceOrigin)})`);\n } else {\n this.log(` (not configured - using local CLI)`);\n }\n this.log(\"\");\n\n this.log(\"Configuration Layers:\");\n this.log(\"\");\n\n const envValue = process.env[SOURCE_ENV_VAR];\n this.log(` 1. Environment (${SOURCE_ENV_VAR}):`);\n if (envValue) {\n this.log(` ${envValue}`);\n } else {\n this.log(` (not set)`);\n }\n\n const projectConfig = await loadProjectSourceConfig(projectDir);\n const projectConfigPath = getProjectConfigPath(projectDir);\n this.log(` 2. Project config:`);\n this.log(` ${projectConfigPath}`);\n if (projectConfig?.source || projectConfig?.marketplace || projectConfig?.agentsSource) {\n if (projectConfig?.source) {\n this.log(` source: ${projectConfig.source}`);\n }\n if (projectConfig?.marketplace) {\n this.log(` marketplace: ${projectConfig.marketplace}`);\n }\n if (projectConfig?.agentsSource) {\n this.log(` agentsSource: ${projectConfig.agentsSource}`);\n }\n } else {\n this.log(` (not configured)`);\n }\n\n this.log(` 3. Default:`);\n this.log(` ${DEFAULT_SOURCE}`);\n\n this.log(\"\");\n this.log(\"Precedence: flag > env > project > default\");\n this.log(\"\");\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAYA,IAAqB,aAArB,MAAqB,oBAAmB,YAAY;AAAA,EAClD,OAAO,UAAU;AAAA,EACjB,OAAO,cACL;AAAA,EAEF,OAAO,QAAQ;AAAA,IACb,GAAG,YAAY;AAAA,EACjB;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,KAAK,MAAM,WAAU;AAE3B,UAAM,aAAa,QAAQ,IAAI;AAE/B,SAAK,IAAI;AAAA,EAAK,iBAAiB,IAAI;AAAA,CAAkB;AAErD,UAAM,WAAW,MAAM,cAAc,QAAW,UAAU;AAE1D,SAAK,IAAI,SAAS;AAClB,SAAK,IAAI,KAAK,SAAS,MAAM,EAAE;AAC/B,SAAK,IAAI,WAAW,aAAa,UAAU,SAAS,YAAY,CAAC,GAAG;AACpE,SAAK,IAAI,EAAE;AAEX,SAAK,IAAI,cAAc;AACvB,QAAI,SAAS,aAAa;AACxB,WAAK,IAAI,KAAK,SAAS,WAAW,EAAE;AAAA,IACtC,OAAO;AACL,WAAK,IAAI,oBAAoB;AAAA,IAC/B;AACA,SAAK,IAAI,EAAE;AAEX,UAAM,iBAAiB,MAAM,oBAAoB,QAAW,UAAU;AACtE,SAAK,IAAI,gBAAgB;AACzB,QAAI,eAAe,cAAc;AAC/B,WAAK,IAAI,KAAK,eAAe,YAAY,EAAE;AAC3C,WAAK,IAAI,WAAW,aAAa,UAAU,eAAe,kBAAkB,CAAC,GAAG;AAAA,IAClF,OAAO;AACL,WAAK,IAAI,sCAAsC;AAAA,IACjD;AACA,SAAK,IAAI,EAAE;AAEX,SAAK,IAAI,uBAAuB;AAChC,SAAK,IAAI,EAAE;AAEX,UAAM,WAAW,QAAQ,IAAI,cAAc;AAC3C,SAAK,IAAI,qBAAqB,cAAc,IAAI;AAChD,QAAI,UAAU;AACZ,WAAK,IAAI,QAAQ,QAAQ,EAAE;AAAA,IAC7B,OAAO;AACL,WAAK,IAAI,gBAAgB;AAAA,IAC3B;AAEA,UAAM,gBAAgB,MAAM,wBAAwB,UAAU;AAC9D,UAAM,oBAAoB,qBAAqB,UAAU;AACzD,SAAK,IAAI,sBAAsB;AAC/B,SAAK,IAAI,QAAQ,iBAAiB,EAAE;AACpC,QAAI,eAAe,UAAU,eAAe,eAAe,eAAe,cAAc;AACtF,UAAI,eAAe,QAAQ;AACzB,aAAK,IAAI,gBAAgB,cAAc,MAAM,EAAE;AAAA,MACjD;AACA,UAAI,eAAe,aAAa;AAC9B,aAAK,IAAI,qBAAqB,cAAc,WAAW,EAAE;AAAA,MAC3D;AACA,UAAI,eAAe,cAAc;AAC/B,aAAK,IAAI,sBAAsB,cAAc,YAAY,EAAE;AAAA,MAC7D;AAAA,IACF,OAAO;AACL,WAAK,IAAI,uBAAuB;AAAA,IAClC;AAEA,SAAK,IAAI,eAAe;AACxB,SAAK,IAAI,QAAQ,cAAc,EAAE;AAEjC,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,4CAA4C;AACrD,SAAK,IAAI,EAAE;AAAA,EACb;AACF;","names":[]}
|