@agents-inc/cli 0.78.0 → 0.80.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 +23 -0
- package/README.md +2 -2
- package/dist/{chunk-XA7WF3BI.js → chunk-3C6AXGR7.js} +3 -3
- package/dist/{chunk-VDVLM3KB.js → chunk-3HWFTE3S.js} +8 -4
- package/dist/chunk-3HWFTE3S.js.map +1 -0
- package/dist/{chunk-7JQIMEUX.js → chunk-3SCIYMRK.js} +3 -3
- package/dist/{chunk-OOWNDQCG.js → chunk-3WDZKBCE.js} +6 -4
- package/dist/chunk-3WDZKBCE.js.map +1 -0
- package/dist/{chunk-FSK4TQX7.js → chunk-4R6I6A3U.js} +3225 -134
- package/dist/chunk-4R6I6A3U.js.map +1 -0
- package/dist/{chunk-MUCQ27HV.js → chunk-4R72372U.js} +2 -2
- package/dist/{chunk-Q755X6QF.js → chunk-4VFBRV76.js} +4 -4
- package/dist/{chunk-F4IZ3UAS.js → chunk-55AZIEK6.js} +4 -4
- package/dist/{chunk-XYPAOBBV.js → chunk-633YIZOU.js} +2 -2
- package/dist/{chunk-N2XGUAJU.js → chunk-6YJXWQCI.js} +2 -12
- package/dist/chunk-6YJXWQCI.js.map +1 -0
- package/dist/{chunk-32HX6UYI.js → chunk-BN73X3JN.js} +59 -2
- package/dist/chunk-BN73X3JN.js.map +1 -0
- package/dist/{chunk-B4C2S5LP.js → chunk-BORVYGIX.js} +17 -15
- package/dist/chunk-BORVYGIX.js.map +1 -0
- package/dist/{chunk-YFHVP3VA.js → chunk-F4VG5XWZ.js} +3 -3
- package/dist/{chunk-NKLNT7N7.js → chunk-H3NQGJMB.js} +2 -2
- package/dist/{chunk-QD3GQ2CH.js → chunk-II3ISVCE.js} +6 -5
- package/dist/chunk-II3ISVCE.js.map +1 -0
- package/dist/{chunk-FUWUCKES.js → chunk-LO4X32JC.js} +2 -2
- package/dist/{chunk-D4T3HHE7.js → chunk-MNJAF4K2.js} +2 -2
- package/dist/{chunk-KVRR4PEJ.js → chunk-NJCU7OC2.js} +5 -5
- package/dist/{chunk-U2KFFRRX.js → chunk-NZAJTLEK.js} +2 -2
- package/dist/{chunk-HANGA633.js → chunk-OBTC2FD7.js} +5 -5
- package/dist/chunk-OBTC2FD7.js.map +1 -0
- package/dist/{chunk-EO6KJI5D.js → chunk-PPBUSAKG.js} +913 -33
- package/dist/chunk-PPBUSAKG.js.map +1 -0
- package/dist/{chunk-OTMIGYBB.js → chunk-RTHAMTDE.js} +6 -6
- package/dist/{chunk-KQDGLEBF.js → chunk-TJXBRYM4.js} +10 -10
- package/dist/chunk-TJXBRYM4.js.map +1 -0
- package/dist/{chunk-7LBYURQR.js → chunk-TQ363UUH.js} +2 -2
- package/dist/{chunk-N34D3ROY.js → chunk-TXFQBYOX.js} +8 -5
- package/dist/chunk-TXFQBYOX.js.map +1 -0
- package/dist/{chunk-IFCASC6R.js → chunk-TZY7WNWO.js} +2 -2
- package/dist/{chunk-SJNUTUSJ.js → chunk-W6PIVGMH.js} +5 -5
- package/dist/{chunk-W46L2PXK.js → chunk-WZGROC5L.js} +2 -2
- package/dist/{chunk-OIHZ2YH3.js → chunk-XFL7EIM7.js} +7 -7
- package/dist/{chunk-7HGMFJ4Y.js → chunk-YDB5KXMG.js} +3 -3
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +8 -8
- package/dist/commands/build/stack.js +8 -8
- package/dist/commands/compile.js +8 -8
- package/dist/commands/config/index.js +8 -8
- package/dist/commands/config/path.js +7 -7
- package/dist/commands/config/show.js +8 -8
- package/dist/commands/diff.js +7 -7
- package/dist/commands/doctor.js +7 -7
- package/dist/commands/edit.js +23 -23
- package/dist/commands/eject.js +7 -7
- package/dist/commands/import/skill.js +7 -7
- package/dist/commands/info.js +7 -7
- package/dist/commands/init.js +23 -23
- package/dist/commands/list.js +7 -7
- package/dist/commands/new/agent.js +8 -8
- package/dist/commands/new/marketplace.js +9 -9
- package/dist/commands/new/skill.js +8 -8
- package/dist/commands/outdated.js +7 -7
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +7 -7
- package/dist/commands/update.js +8 -8
- package/dist/commands/validate.js +7 -7
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +11 -11
- package/dist/components/wizard/domain-selection.js +9 -9
- package/dist/components/wizard/source-grid.js +2 -2
- package/dist/components/wizard/source-grid.test.js +11 -11
- package/dist/components/wizard/stack-selection.js +8 -8
- package/dist/components/wizard/step-agents.js +9 -9
- package/dist/components/wizard/step-agents.test.js +13 -13
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +9 -9
- package/dist/components/wizard/step-build.test.js +12 -12
- package/dist/components/wizard/step-confirm.js +4 -4
- package/dist/components/wizard/step-confirm.test.js +10 -10
- package/dist/components/wizard/step-settings.js +7 -7
- package/dist/components/wizard/step-settings.test.js +10 -10
- package/dist/components/wizard/step-sources.js +9 -9
- package/dist/components/wizard/step-sources.test.js +12 -12
- package/dist/components/wizard/step-stack.js +9 -12
- package/dist/components/wizard/step-stack.test.js +19 -111
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/wizard-layout.js +10 -10
- package/dist/components/wizard/wizard-tabs.js +1 -1
- package/dist/components/wizard/wizard-tabs.test.js +12 -23
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +21 -21
- package/dist/config-exports.js +1 -1
- package/dist/hooks/init.js +23 -23
- package/dist/{loader-JMOO2A7C.js → loader-LI3EM4VG.js} +4 -4
- package/dist/{source-loader-D3VIG3GM.js → source-loader-TPUCZELX.js} +7 -7
- package/dist/source-manager-PJ5APXX2.js +19 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +10 -10
- package/dist/src/agents/meta/convention-keeper/critical-reminders.md +17 -0
- package/dist/src/agents/meta/convention-keeper/critical-requirements.md +15 -0
- package/dist/src/agents/meta/convention-keeper/examples.md +71 -0
- package/dist/src/agents/meta/convention-keeper/intro.md +11 -0
- package/dist/src/agents/meta/convention-keeper/metadata.yaml +12 -0
- package/dist/src/agents/meta/convention-keeper/output-format.md +134 -0
- package/dist/src/agents/meta/convention-keeper/workflow.md +258 -0
- package/dist/src/agents/meta/{documentor → scribe}/metadata.yaml +2 -2
- package/{src/agents/meta/documentor → dist/src/agents/meta/scribe}/workflow.md +1 -1
- package/dist/src/agents/planning/web-pm/workflow.md +1 -1
- package/dist/stores/wizard-store.js +7 -7
- package/dist/stores/wizard-store.test.js +19 -13
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/meta/agent-summoner/workflow.md +10 -10
- package/src/agents/meta/convention-keeper/critical-reminders.md +17 -0
- package/src/agents/meta/convention-keeper/critical-requirements.md +15 -0
- package/src/agents/meta/convention-keeper/examples.md +71 -0
- package/src/agents/meta/convention-keeper/intro.md +11 -0
- package/src/agents/meta/convention-keeper/metadata.yaml +12 -0
- package/src/agents/meta/convention-keeper/output-format.md +134 -0
- package/src/agents/meta/convention-keeper/workflow.md +258 -0
- package/src/agents/meta/{documentor → scribe}/metadata.yaml +2 -2
- package/{dist/src/agents/meta/documentor → src/agents/meta/scribe}/workflow.md +1 -1
- package/src/agents/planning/web-pm/workflow.md +1 -1
- package/dist/chunk-32HX6UYI.js.map +0 -1
- package/dist/chunk-B4C2S5LP.js.map +0 -1
- package/dist/chunk-EO6KJI5D.js.map +0 -1
- package/dist/chunk-FSK4TQX7.js.map +0 -1
- package/dist/chunk-HANGA633.js.map +0 -1
- package/dist/chunk-KQDGLEBF.js.map +0 -1
- package/dist/chunk-N2XGUAJU.js.map +0 -1
- package/dist/chunk-N34D3ROY.js.map +0 -1
- package/dist/chunk-OOWNDQCG.js.map +0 -1
- package/dist/chunk-QD3GQ2CH.js.map +0 -1
- package/dist/chunk-VDVLM3KB.js.map +0 -1
- package/dist/source-manager-FPYFJRR7.js +0 -19
- /package/dist/{chunk-XA7WF3BI.js.map → chunk-3C6AXGR7.js.map} +0 -0
- /package/dist/{chunk-7JQIMEUX.js.map → chunk-3SCIYMRK.js.map} +0 -0
- /package/dist/{chunk-MUCQ27HV.js.map → chunk-4R72372U.js.map} +0 -0
- /package/dist/{chunk-Q755X6QF.js.map → chunk-4VFBRV76.js.map} +0 -0
- /package/dist/{chunk-F4IZ3UAS.js.map → chunk-55AZIEK6.js.map} +0 -0
- /package/dist/{chunk-XYPAOBBV.js.map → chunk-633YIZOU.js.map} +0 -0
- /package/dist/{chunk-YFHVP3VA.js.map → chunk-F4VG5XWZ.js.map} +0 -0
- /package/dist/{chunk-NKLNT7N7.js.map → chunk-H3NQGJMB.js.map} +0 -0
- /package/dist/{chunk-FUWUCKES.js.map → chunk-LO4X32JC.js.map} +0 -0
- /package/dist/{chunk-D4T3HHE7.js.map → chunk-MNJAF4K2.js.map} +0 -0
- /package/dist/{chunk-KVRR4PEJ.js.map → chunk-NJCU7OC2.js.map} +0 -0
- /package/dist/{chunk-U2KFFRRX.js.map → chunk-NZAJTLEK.js.map} +0 -0
- /package/dist/{chunk-OTMIGYBB.js.map → chunk-RTHAMTDE.js.map} +0 -0
- /package/dist/{chunk-7LBYURQR.js.map → chunk-TQ363UUH.js.map} +0 -0
- /package/dist/{chunk-IFCASC6R.js.map → chunk-TZY7WNWO.js.map} +0 -0
- /package/dist/{chunk-SJNUTUSJ.js.map → chunk-W6PIVGMH.js.map} +0 -0
- /package/dist/{chunk-W46L2PXK.js.map → chunk-WZGROC5L.js.map} +0 -0
- /package/dist/{chunk-OIHZ2YH3.js.map → chunk-XFL7EIM7.js.map} +0 -0
- /package/dist/{chunk-7HGMFJ4Y.js.map → chunk-YDB5KXMG.js.map} +0 -0
- /package/dist/{loader-JMOO2A7C.js.map → loader-LI3EM4VG.js.map} +0 -0
- /package/dist/{source-loader-D3VIG3GM.js.map → source-loader-TPUCZELX.js.map} +0 -0
- /package/dist/{source-manager-FPYFJRR7.js.map → source-manager-PJ5APXX2.js.map} +0 -0
- /package/dist/src/agents/meta/{documentor → scribe}/critical-reminders.md +0 -0
- /package/dist/src/agents/meta/{documentor → scribe}/critical-requirements.md +0 -0
- /package/dist/src/agents/meta/{documentor → scribe}/examples.md +0 -0
- /package/dist/src/agents/meta/{documentor → scribe}/intro.md +0 -0
- /package/dist/src/agents/meta/{documentor → scribe}/output-format.md +0 -0
- /package/src/agents/meta/{documentor → scribe}/critical-reminders.md +0 -0
- /package/src/agents/meta/{documentor → scribe}/critical-requirements.md +0 -0
- /package/src/agents/meta/{documentor → scribe}/examples.md +0 -0
- /package/src/agents/meta/{documentor → scribe}/intro.md +0 -0
- /package/src/agents/meta/{documentor → scribe}/output-format.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,29 @@ Each release has detailed notes in its own file under [`changelogs/`](./changelo
|
|
|
7
7
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
8
8
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
9
9
|
|
|
10
|
+
## [0.80.0] - 2026-03-21
|
|
11
|
+
|
|
12
|
+
**E2E test framework overhaul — POM framework, DRY migration, 142 new tests**
|
|
13
|
+
|
|
14
|
+
- Page Object Model framework with declarative test patterns (D-134)
|
|
15
|
+
- 142 new tests covering command flags, error paths, and pure functions (D-136)
|
|
16
|
+
- DRY migration: 265 raw exit codes → constants, centralized helpers, split slow files
|
|
17
|
+
|
|
18
|
+
See [changelogs/0.80.0.md](./changelogs/0.80.0.md) for full details.
|
|
19
|
+
|
|
20
|
+
## [Unreleased]
|
|
21
|
+
|
|
22
|
+
## [0.79.0] - 2026-03-21
|
|
23
|
+
|
|
24
|
+
**Scope-aware path resolution across all commands**
|
|
25
|
+
|
|
26
|
+
- Fix all commands to route global-scoped skills/agents to `~/` and project-scoped to project dir
|
|
27
|
+
- Always merge global and project local skills instead of fallback pattern
|
|
28
|
+
- Scope-aware config generation, installation, compilation, and mode migration
|
|
29
|
+
- 6 new E2E test suites for scope-aware behavior
|
|
30
|
+
|
|
31
|
+
See [changelogs/0.79.0.md](./changelogs/0.79.0.md) for full details.
|
|
32
|
+
|
|
10
33
|
## [0.78.0] - 2026-03-20
|
|
11
34
|
|
|
12
35
|
**Wizard tab navigation, stats panel, e2e cleanup**
|
package/README.md
CHANGED
|
@@ -83,8 +83,8 @@ Browse the full catalog on the [Plugin Marketplace](https://github.com/agents-in
|
|
|
83
83
|
| Researchers | `web-researcher` `api-researcher` |
|
|
84
84
|
| Planning | `web-pm` |
|
|
85
85
|
| Pattern Analysis | `pattern-scout` `web-pattern-critique` |
|
|
86
|
-
| Documentation | `
|
|
87
|
-
| Meta | `skill-summoner` `agent-summoner`
|
|
86
|
+
| Documentation | `scribe` |
|
|
87
|
+
| Meta | `skill-summoner` `agent-summoner` `convention-keeper` |
|
|
88
88
|
|
|
89
89
|
Each subagent is composed from modular partials (role, workflow, output format) plus its assigned skills. Everything is ejectable.
|
|
90
90
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
FRAMEWORK_CATEGORY
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4R72372U.js";
|
|
5
5
|
import {
|
|
6
6
|
SKILLS,
|
|
7
7
|
TEST_CATEGORIES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
createTestSkill,
|
|
16
16
|
renderSkillMd,
|
|
17
17
|
testSkillToResolvedSkill
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-LO4X32JC.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esm_shims
|
|
21
21
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -725,4 +725,4 @@ export {
|
|
|
725
725
|
ALL_SKILLS_MULTI_DOMAIN_MATRIX,
|
|
726
726
|
REACT_HONO_FRAMEWORK_API_MATRIX
|
|
727
727
|
};
|
|
728
|
-
//# sourceMappingURL=chunk-
|
|
728
|
+
//# sourceMappingURL=chunk-3C6AXGR7.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
WIZARD_STEPS,
|
|
4
4
|
WizardTabs
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TJXBRYM4.js";
|
|
6
6
|
import {
|
|
7
7
|
FEATURE_FLAGS
|
|
8
8
|
} from "./chunk-V36FRPAU.js";
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
getDomainDisplayName,
|
|
11
11
|
getStackName,
|
|
12
12
|
orderDomains
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3SCIYMRK.js";
|
|
14
14
|
import {
|
|
15
15
|
HelpModal
|
|
16
16
|
} from "./chunk-C22ACAL2.js";
|
|
17
17
|
import {
|
|
18
18
|
useWizardStore
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-TXFQBYOX.js";
|
|
20
20
|
import {
|
|
21
21
|
HOTKEY_FILTER_INCOMPATIBLE,
|
|
22
22
|
HOTKEY_HELP,
|
|
@@ -147,6 +147,10 @@ var WizardLayout = ({
|
|
|
147
147
|
const label = "Choose a stack";
|
|
148
148
|
dropdowns.stack = { items: [{ id: label, label }] };
|
|
149
149
|
}
|
|
150
|
+
if (store.step === "domains") {
|
|
151
|
+
const label = "Select domains";
|
|
152
|
+
dropdowns.domains = { items: [{ id: label, label }] };
|
|
153
|
+
}
|
|
150
154
|
if (store.step === "sources") {
|
|
151
155
|
const label = "Customize skill sources";
|
|
152
156
|
dropdowns.sources = { items: [{ id: label, label }] };
|
|
@@ -247,4 +251,4 @@ var WizardLayout = ({
|
|
|
247
251
|
export {
|
|
248
252
|
WizardLayout
|
|
249
253
|
};
|
|
250
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-3HWFTE3S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx","../src/cli/components/hooks/use-terminal-dimensions.ts"],"sourcesContent":["import { Box, Static, Text } from \"ink\";\nimport React, { Fragment } from \"react\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { FEATURE_FLAGS } from \"../../lib/feature-flags.js\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { useTerminalDimensions } from \"../hooks/use-terminal-dimensions.js\";\nimport { HelpModal } from \"./help-modal.js\";\nimport {\n HOTKEY_HELP,\n HOTKEY_SCOPE,\n HOTKEY_SET_ALL_LOCAL,\n HOTKEY_SET_ALL_PLUGIN,\n HOTKEY_SETTINGS,\n HOTKEY_FILTER_INCOMPATIBLE,\n HOTKEY_TOGGLE_LABELS,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n KEY_LABEL_SPACE,\n} from \"./hotkeys.js\";\nimport {\n WIZARD_STEPS,\n WizardTabs,\n type DomainNavProps,\n type TabDropdownProps,\n} from \"./wizard-tabs.js\";\nimport { getDomainDisplayName, getStackName, orderDomains } from \"./utils.js\";\nimport type { Domain } from \"../../types/index.js\";\n\ntype KeyHintProps = {\n isVisible?: boolean;\n isActive?: boolean;\n label: string;\n values: string[];\n};\n\nconst DefinitionItem: React.FC<KeyHintProps> = ({\n isVisible = true,\n isActive = false,\n label,\n values,\n}) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text\n backgroundColor=\"black\"\n color={isActive ? CLI_COLORS.PRIMARY : CLI_COLORS.UNFOCUSED}\n >\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text color={isActive ? CLI_COLORS.PRIMARY : undefined}>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS: { label: string; values: string[] }[] = [\n { label: \"select\", values: [KEY_LABEL_SPACE] },\n { label: \"continue\", values: [KEY_LABEL_ENTER] },\n { label: \"back\", values: [KEY_LABEL_ESC] },\n];\n\nconst WizardFooter = () => {\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ntype WizardLayoutProps = {\n version?: string;\n logo?: string;\n startupMessages?: StartupMessage[];\n children: React.ReactNode;\n};\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({\n version,\n logo,\n startupMessages,\n children,\n}) => {\n const store = useWizardStore();\n const { completedSteps, skippedSteps } = store.getStepProgress();\n const { rows: terminalHeight } = useTerminalDimensions();\n\n const handleSelectDomain = (domain: Domain) => {\n const index = store.selectedDomains.indexOf(domain);\n if (index !== -1) {\n useWizardStore.getState().setCurrentDomainIndex(index);\n }\n };\n\n const domainNav: DomainNavProps | undefined =\n store.step === \"build\" && store.selectedDomains.length > 0\n ? {\n domains: orderDomains(store.selectedDomains),\n activeDomain: (store.getCurrentDomain() || store.selectedDomains[0] || \"web\") as Domain,\n getDomainLabel: getDomainDisplayName,\n onSelectDomain: handleSelectDomain,\n }\n : undefined;\n\n // TODO: dropdowns should be in a map\n const dropdowns: Partial<Record<WizardStep, TabDropdownProps>> = {};\n\n if (store.step === \"stack\") {\n const label = \"Choose a stack\";\n dropdowns.stack = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"domains\") {\n const label = \"Select domains\";\n dropdowns.domains = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"sources\") {\n const label = \"Customize skill sources\";\n dropdowns.sources = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"agents\") {\n const label = \"Select agents\";\n dropdowns.agents = { items: [{ id: label, label }] };\n }\n\n if (store.step === \"confirm\") {\n const stackName = getStackName(store.selectedStackId);\n const domainsText = store.selectedDomains.map(getDomainDisplayName).join(\" + \");\n const label = stackName\n ? `Ready to install ${stackName}`\n : `Ready to install your custom stack${domainsText ? ` (${domainsText})` : \"\"}`;\n dropdowns.confirm = { items: [{ id: label, label }] };\n }\n\n return (\n <>\n {startupMessages && startupMessages.length > 0 && (\n <Static items={startupMessages}>\n {(msg, index) => (\n <Box key={index}>\n <Text\n color={msg.level === \"warn\" ? \"yellow\" : msg.level === \"error\" ? \"red\" : undefined}\n >\n {msg.level === \"warn\" ? ` Warning: ${msg.text}` : msg.text}\n </Text>\n </Box>\n )}\n </Static>\n )}\n <Box flexDirection=\"column\" paddingX={1} height={terminalHeight}>\n {logo && store.step === \"stack\" && (\n <Box flexDirection=\"row\" marginTop={1} columnGap={1}>\n <Text>{logo}</Text>\n </Box>\n )}\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n domainNav={domainNav}\n dropdowns={dropdowns}\n />\n {store.showHelp ? (\n <HelpModal currentStep={store.step} />\n ) : (\n <>\n <Box flexDirection=\"column\" flexGrow={1} flexBasis={0} marginTop={1}>\n {children}\n </Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem\n label=\"Labels\"\n values={[HOTKEY_TOGGLE_LABELS.label]}\n isVisible={store.step === \"build\"}\n />\n <DefinitionItem\n label=\"Filter incompatible\"\n values={[HOTKEY_FILTER_INCOMPATIBLE.label]}\n isVisible={store.step === \"build\"}\n isActive={store.filterIncompatible}\n />\n <DefinitionItem\n label=\"Scope\"\n values={[HOTKEY_SCOPE.label]}\n isVisible={store.step === \"build\" || store.step === \"agents\"}\n />\n <DefinitionItem\n label=\"Set all local\"\n values={[HOTKEY_SET_ALL_LOCAL.label]}\n isVisible={store.step === \"sources\"}\n />\n <DefinitionItem\n label=\"Set all plugin\"\n values={[HOTKEY_SET_ALL_PLUGIN.label]}\n isVisible={store.step === \"sources\"}\n />\n <DefinitionItem\n label=\"Settings\"\n values={[HOTKEY_SETTINGS.label]}\n isVisible={store.step === \"sources\" && FEATURE_FLAGS.SOURCE_SEARCH}\n isActive={store.showSettings}\n />\n <DefinitionItem label=\"Help\" values={[HOTKEY_HELP.label]} />\n </Box>\n <WizardFooter />\n </>\n )}\n </Box>\n </>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport { useStdout } from \"ink\";\n\nconst DEFAULT_COLUMNS = 80;\nconst DEFAULT_ROWS = 24;\n\nexport type TerminalDimensions = {\n /** Terminal width in columns */\n columns: number;\n /** Terminal height in rows */\n rows: number;\n};\n\n/**\n * Tracks terminal dimensions reactively. Re-renders on resize.\n *\n * Falls back to DEFAULT_COLUMNS x DEFAULT_ROWS when stdout is not a TTY\n * (e.g., piped output, CI environments, tests).\n */\nexport function useTerminalDimensions(): TerminalDimensions {\n const { stdout } = useStdout();\n\n const [dimensions, setDimensions] = useState<TerminalDimensions>(() => ({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n setDimensions({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n });\n };\n\n stdout.on(\"resize\", handleResize);\n return () => {\n stdout.off(\"resize\", handleResize);\n };\n }, [stdout]);\n\n return dimensions;\n}\n"],"mappings":"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","names":["Fragment"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
findStack
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4R6I6A3U.js";
|
|
5
5
|
import {
|
|
6
6
|
AGENT_NAMES,
|
|
7
7
|
DOMAINS
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BN73X3JN.js";
|
|
9
9
|
import {
|
|
10
10
|
BUILT_IN_DOMAIN_ORDER
|
|
11
11
|
} from "./chunk-FMYAYX6W.js";
|
|
@@ -51,4 +51,4 @@ export {
|
|
|
51
51
|
getStackName,
|
|
52
52
|
orderDomains
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-3SCIYMRK.js.map
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-SQ7WINEU.js";
|
|
8
8
|
import {
|
|
9
9
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TXFQBYOX.js";
|
|
11
11
|
import {
|
|
12
12
|
matrix
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-4R6I6A3U.js";
|
|
14
14
|
import {
|
|
15
15
|
CLI_COLORS,
|
|
16
16
|
DEFAULT_SCRATCH_DOMAINS,
|
|
@@ -74,7 +74,7 @@ var StackSection = ({ title, items, focusedId }) => /* @__PURE__ */ jsxs(Box, {
|
|
|
74
74
|
})
|
|
75
75
|
] });
|
|
76
76
|
var StackSelection = ({ onCancel }) => {
|
|
77
|
-
const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain } = useWizardStore();
|
|
77
|
+
const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain, setStep } = useWizardStore();
|
|
78
78
|
const stacks = matrix.suggestedStacks;
|
|
79
79
|
const groups = useMemo(() => groupStacks(stacks), [stacks]);
|
|
80
80
|
const focusableIds = useMemo(() => buildFocusableIds(groups), [groups]);
|
|
@@ -130,6 +130,7 @@ var StackSelection = ({ onCancel }) => {
|
|
|
130
130
|
for (const domain of DEFAULT_SCRATCH_DOMAINS) {
|
|
131
131
|
toggleDomain(domain);
|
|
132
132
|
}
|
|
133
|
+
setStep("domains");
|
|
133
134
|
return;
|
|
134
135
|
}
|
|
135
136
|
const focusedStack = stacks.find((s) => s.id === focusedId);
|
|
@@ -138,6 +139,7 @@ var StackSelection = ({ onCancel }) => {
|
|
|
138
139
|
setStackAction("customize");
|
|
139
140
|
populateFromSkillIds(focusedStack.allSkillIds);
|
|
140
141
|
setApproach("stack");
|
|
142
|
+
setStep("domains");
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
});
|
|
@@ -189,4 +191,4 @@ var StackSelection = ({ onCancel }) => {
|
|
|
189
191
|
export {
|
|
190
192
|
StackSelection
|
|
191
193
|
};
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
194
|
+
//# sourceMappingURL=chunk-3WDZKBCE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/stack-selection.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport { CLI_COLORS, DEFAULT_SCRATCH_DOMAINS, UI_SYMBOLS } from \"../../consts.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { useRowScroll } from \"../hooks/use-row-scroll.js\";\n\nimport type { SkillId } from \"../../types/index.js\";\n\ntype StackItem = { id: string; name: string; description: string };\ntype StackGroup = { label: string; items: StackItem[] };\ntype FocusId = string | \"scratch\";\n\nconst REACT_FRAMEWORK_ID = \"web-framework-react\";\nconst SCRATCH_LABEL = \"Start from scratch\";\nconst SCRATCH_DESCRIPTION = \"Select domains and skills manually\";\n\nfunction groupStacks(\n stacks: { id: string; name: string; description: string; allSkillIds: SkillId[] }[],\n): StackGroup[] {\n const reactItems: StackItem[] = [];\n const otherItems: StackItem[] = [];\n\n for (const stack of stacks) {\n const isReact = stack.allSkillIds.some((id) => id.startsWith(REACT_FRAMEWORK_ID));\n const item: StackItem = { id: stack.id, name: stack.name, description: stack.description };\n if (isReact) {\n reactItems.push(item);\n } else {\n otherItems.push(item);\n }\n }\n\n const groups: StackGroup[] = [];\n if (reactItems.length > 0) {\n groups.push({ label: \"React\", items: reactItems });\n }\n if (otherItems.length > 0) {\n groups.push({ label: \"Other Frameworks\", items: otherItems });\n }\n return groups;\n}\n\nfunction buildFocusableIds(groups: StackGroup[]): FocusId[] {\n return [...groups.flatMap((g) => g.items.map((i) => i.id)), \"scratch\"];\n}\n\n/** Renders a section header + stack items. Focus state is managed by the parent. */\nconst StackSection: React.FC<{\n title: string;\n items: StackItem[];\n focusedId: FocusId;\n}> = ({ title, items, focusedId }) => (\n <Box flexDirection=\"column\">\n <Box flexShrink={0}>\n <Text dimColor bold>\n {\" \"}\n {title}\n </Text>\n </Box>\n {items.map((item) => {\n const isFocused = item.id === focusedId;\n const pointer = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n return (\n <Box key={item.id} flexShrink={0}>\n <Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>{pointer}</Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined} bold={isFocused}>\n {\" \"}\n {item.name}\n </Text>\n <Text dimColor>\n {\" \"}\n {item.description}\n </Text>\n </Text>\n </Box>\n );\n })}\n </Box>\n);\n\nexport type StackSelectionProps = {\n /** Available height in terminal lines for the scrollable viewport. 0 = no constraint. */\n availableHeight?: number;\n onCancel?: () => void;\n};\n\nexport const StackSelection: React.FC<StackSelectionProps> = ({ onCancel }) => {\n const { selectStack, setApproach, setStackAction, populateFromSkillIds, toggleDomain, setStep } =\n useWizardStore();\n\n const stacks = matrix.suggestedStacks;\n const groups = useMemo(() => groupStacks(stacks), [stacks]);\n const focusableIds = useMemo(() => buildFocusableIds(groups), [groups]);\n\n const [focusedId, setFocusedId] = useState<FocusId>(focusableIds[0] ?? \"scratch\");\n const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();\n\n // Compute visual row counts for scroll: header + items per group, spacers between groups, spacer + scratch row\n const totalRowCount = useMemo(() => {\n const groupRows = groups.reduce(\n (sum, g, i) =>\n sum + 1 /* header */ + g.items.length + (i > 0 ? 1 : 0) /* spacer between groups */,\n 0,\n );\n return groupRows + 1 /* spacer before scratch */ + 1 /* scratch row */;\n }, [groups]);\n\n // Map focusedId to a visual row index for scrolling\n const focusedVisualRow = useMemo(() => {\n let row = 0;\n for (let gi = 0; gi < groups.length; gi++) {\n if (gi > 0) row++; // spacer between groups\n row++; // header\n for (const item of groups[gi].items) {\n if (item.id === focusedId) return row;\n row++;\n }\n }\n row++; // spacer before scratch\n return row; // scratch row\n }, [groups, focusedId]);\n\n const { scrollEnabled, scrollTop } = useRowScroll({\n focusedIndex: focusedVisualRow,\n itemCount: totalRowCount,\n availableHeight: listHeight,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n if (onCancel) {\n onCancel();\n }\n return;\n }\n\n const currentIdx = focusableIds.indexOf(focusedId);\n\n if (key.upArrow || input === \"k\") {\n const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n if (key.downArrow || input === \"j\") {\n const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.return) {\n if (focusedId === \"scratch\") {\n selectStack(null);\n setApproach(\"scratch\");\n for (const domain of DEFAULT_SCRATCH_DOMAINS) {\n toggleDomain(domain);\n }\n setStep(\"domains\");\n return;\n }\n const focusedStack = stacks.find((s) => s.id === focusedId);\n if (focusedStack) {\n selectStack(focusedStack.id);\n setStackAction(\"customize\");\n populateFromSkillIds(focusedStack.allSkillIds);\n setApproach(\"stack\");\n setStep(\"domains\");\n }\n }\n });\n\n const isScratchFocused = focusedId === \"scratch\";\n const scratchPointer = isScratchFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n\n return (\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n {...(scrollEnabled && { overflow: \"hidden\" as const })}\n >\n <Box\n flexDirection=\"column\"\n marginTop={scrollTop > 0 ? -scrollTop : 0}\n {...(scrollEnabled && { flexShrink: 0 })}\n >\n {groups.map((group, gi) => (\n <React.Fragment key={group.label}>\n {gi > 0 && (\n <Box flexShrink={0}>\n <Text> </Text>\n </Box>\n )}\n <StackSection title={group.label} items={group.items} focusedId={focusedId} />\n </React.Fragment>\n ))}\n\n <Box key=\"scratch-spacer\" flexShrink={0}>\n <Text> </Text>\n </Box>\n <Box key=\"scratch\" flexShrink={0}>\n <Text>\n <Text color={isScratchFocused ? CLI_COLORS.PRIMARY : undefined}>\n {scratchPointer}\n </Text>\n <Text\n color={isScratchFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isScratchFocused}\n >\n {\" \"}\n {SCRATCH_LABEL}\n </Text>\n <Text dimColor>\n {\" \"}\n {SCRATCH_DESCRIPTION}\n </Text>\n </Text>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|