@agents-inc/cli 0.38.0 → 0.41.2
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 +77 -0
- package/README.md +1 -1
- package/config/skills-matrix.yaml +115 -123
- package/config/stacks.yaml +687 -687
- package/dist/{chunk-YHQNTBBN.js → chunk-2D6LKRHW.js} +2 -2
- package/dist/{chunk-CYFU3ARY.js → chunk-342YB6TQ.js} +15 -17
- package/dist/chunk-342YB6TQ.js.map +1 -0
- package/dist/{chunk-HRMQ2RGY.js → chunk-423MJ6DT.js} +31 -56
- package/dist/chunk-423MJ6DT.js.map +1 -0
- package/dist/{chunk-NFV4SKH5.js → chunk-4LT6RXMY.js} +4 -4
- package/dist/{chunk-IVIK776Y.js → chunk-4SYXPG7L.js} +2 -2
- package/dist/{chunk-DUQFF45G.js → chunk-4UTPJXUX.js} +8 -8
- package/dist/{chunk-3E2V5YL3.js → chunk-5TMB53BV.js} +3 -3
- package/dist/{chunk-NI2RSNWB.js → chunk-7FBM7V3E.js} +10 -22
- package/dist/chunk-7FBM7V3E.js.map +1 -0
- package/dist/chunk-ACVJVYMC.js +111 -0
- package/dist/chunk-ACVJVYMC.js.map +1 -0
- package/dist/{chunk-FWQK3HWB.js → chunk-AH7XHAKN.js} +11 -11
- package/dist/chunk-AH7XHAKN.js.map +1 -0
- package/dist/{chunk-VAHVSQIG.js → chunk-AVVYFEMF.js} +2 -2
- package/dist/{chunk-EISBUEBL.js → chunk-BFISETQG.js} +3 -3
- package/dist/{chunk-ZBJQXDQN.js → chunk-BK7TANUV.js} +4 -2
- package/dist/chunk-BK7TANUV.js.map +1 -0
- package/dist/{chunk-VAK5PX72.js → chunk-DV4ALU5I.js} +6 -6
- package/dist/{chunk-OEX5JDQD.js → chunk-FHBICUXB.js} +4 -4
- package/dist/{chunk-TA6IIQI4.js → chunk-GEDWVX6Y.js} +3 -3
- package/dist/chunk-GEDWVX6Y.js.map +1 -0
- package/dist/{chunk-M6PGIZNS.js → chunk-H6H3COI5.js} +5 -5
- package/dist/{chunk-54ZZCWN4.js → chunk-KC2SIUIA.js} +3 -8
- package/dist/chunk-KC2SIUIA.js.map +1 -0
- package/dist/{chunk-2XX4TMCI.js → chunk-KXM7KOPE.js} +2 -2
- package/dist/{chunk-HKDE4LJW.js → chunk-LJRP4SWY.js} +6 -5
- package/dist/chunk-LJRP4SWY.js.map +1 -0
- package/dist/{chunk-TBDIR6LY.js → chunk-MNPPGIZQ.js} +5 -5
- package/dist/{chunk-3NQJOJZL.js → chunk-NYP5SB2V.js} +2 -2
- package/dist/{chunk-UOMMQ5M6.js → chunk-NZYKDVRL.js} +2 -2
- package/dist/{chunk-UV6JUGIY.js → chunk-PURJZ72D.js} +2 -2
- package/dist/{chunk-ATLRUR3B.js → chunk-R52N7DBG.js} +2 -2
- package/dist/{chunk-WSGGJKD5.js → chunk-SILUTTV7.js} +6 -6
- package/dist/chunk-SILUTTV7.js.map +1 -0
- package/dist/{chunk-IZRVFC2Z.js → chunk-TJAZ7QCF.js} +4 -4
- package/dist/{chunk-U5OB5ADP.js → chunk-TTXV55NQ.js} +57 -16
- package/dist/chunk-TTXV55NQ.js.map +1 -0
- package/dist/{chunk-TY5GELDB.js → chunk-UKTYDNWJ.js} +2 -2
- package/dist/{chunk-HRW7BIDE.js → chunk-WS6OQIEN.js} +2 -2
- package/dist/{chunk-YJIJTBSX.js → chunk-XJXJZ2MJ.js} +42 -54
- package/dist/chunk-XJXJZ2MJ.js.map +1 -0
- package/dist/chunk-YLJYAQSG.js +210 -0
- package/dist/chunk-YLJYAQSG.js.map +1 -0
- package/dist/{chunk-MZB3GGOH.js → chunk-YRVTXSXP.js} +1 -2
- package/dist/chunk-YRVTXSXP.js.map +1 -0
- package/dist/{chunk-TNFACSWF.js → chunk-ZLHGJSRK.js} +3 -3
- package/dist/cli/defaults/agent-mappings.yaml +14 -70
- 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 +8 -7
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +4 -4
- package/dist/commands/config/index.js +5 -5
- package/dist/commands/config/path.js +4 -4
- package/dist/commands/config/set-project.js +4 -4
- package/dist/commands/config/show.js +5 -5
- package/dist/commands/config/unset-project.js +4 -4
- package/dist/commands/diff.js +8 -5
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +8 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +33 -30
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +4 -4
- package/dist/commands/import/skill.js +5 -5
- package/dist/commands/info.js +7 -6
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +40 -32
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +6 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +5 -5
- package/dist/commands/new/skill.js +8 -5
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +8 -5
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +19 -7
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +8 -7
- package/dist/commands/update.js.map +1 -1
- 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 +2 -2
- package/dist/components/wizard/category-grid.test.js +40 -40
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +2 -2
- package/dist/components/wizard/checkbox-grid.test.js +16 -6
- package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +7 -7
- 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 +3 -3
- package/dist/components/wizard/source-grid.test.js +3 -3
- package/dist/components/wizard/stack-selection.js +9 -9
- package/dist/components/wizard/step-agents.js +7 -7
- package/dist/components/wizard/step-agents.test.js +24 -19
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +8 -8
- package/dist/components/wizard/step-build.test.js +40 -39
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -3
- package/dist/components/wizard/step-confirm.test.js +19 -13
- 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 +9 -9
- package/dist/components/wizard/step-sources.test.js +13 -13
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +12 -12
- package/dist/components/wizard/step-stack.test.js +19 -21
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +8 -8
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +2 -2
- package/dist/components/wizard/wizard.js +25 -25
- package/dist/config/skills-matrix.yaml +115 -123
- package/dist/config/stacks.yaml +687 -687
- package/dist/hooks/init.js +3 -3
- package/dist/{source-manager-FEGVYDFZ.js → source-manager-PPABS6BC.js} +4 -4
- package/dist/stores/wizard-store.js +5 -5
- package/dist/stores/wizard-store.test.js +115 -187
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/metadata.schema.json +41 -1
- package/src/schemas/project-config.schema.json +34 -35
- package/src/schemas/skills-matrix.schema.json +100 -101
- package/src/schemas/stacks.schema.json +34 -35
- package/dist/chunk-54ZZCWN4.js.map +0 -1
- package/dist/chunk-CYFU3ARY.js.map +0 -1
- package/dist/chunk-EXFVAEPY.js +0 -80
- package/dist/chunk-EXFVAEPY.js.map +0 -1
- package/dist/chunk-FWQK3HWB.js.map +0 -1
- package/dist/chunk-HKDE4LJW.js.map +0 -1
- package/dist/chunk-HRMQ2RGY.js.map +0 -1
- package/dist/chunk-IWNPFIGY.js +0 -110
- package/dist/chunk-IWNPFIGY.js.map +0 -1
- package/dist/chunk-MZB3GGOH.js.map +0 -1
- package/dist/chunk-NI2RSNWB.js.map +0 -1
- package/dist/chunk-TA6IIQI4.js.map +0 -1
- package/dist/chunk-U5OB5ADP.js.map +0 -1
- package/dist/chunk-WSGGJKD5.js.map +0 -1
- package/dist/chunk-YJIJTBSX.js.map +0 -1
- package/dist/chunk-ZBJQXDQN.js.map +0 -1
- /package/dist/{chunk-YHQNTBBN.js.map → chunk-2D6LKRHW.js.map} +0 -0
- /package/dist/{chunk-NFV4SKH5.js.map → chunk-4LT6RXMY.js.map} +0 -0
- /package/dist/{chunk-IVIK776Y.js.map → chunk-4SYXPG7L.js.map} +0 -0
- /package/dist/{chunk-DUQFF45G.js.map → chunk-4UTPJXUX.js.map} +0 -0
- /package/dist/{chunk-3E2V5YL3.js.map → chunk-5TMB53BV.js.map} +0 -0
- /package/dist/{chunk-VAHVSQIG.js.map → chunk-AVVYFEMF.js.map} +0 -0
- /package/dist/{chunk-EISBUEBL.js.map → chunk-BFISETQG.js.map} +0 -0
- /package/dist/{chunk-VAK5PX72.js.map → chunk-DV4ALU5I.js.map} +0 -0
- /package/dist/{chunk-OEX5JDQD.js.map → chunk-FHBICUXB.js.map} +0 -0
- /package/dist/{chunk-M6PGIZNS.js.map → chunk-H6H3COI5.js.map} +0 -0
- /package/dist/{chunk-2XX4TMCI.js.map → chunk-KXM7KOPE.js.map} +0 -0
- /package/dist/{chunk-TBDIR6LY.js.map → chunk-MNPPGIZQ.js.map} +0 -0
- /package/dist/{chunk-3NQJOJZL.js.map → chunk-NYP5SB2V.js.map} +0 -0
- /package/dist/{chunk-UOMMQ5M6.js.map → chunk-NZYKDVRL.js.map} +0 -0
- /package/dist/{chunk-UV6JUGIY.js.map → chunk-PURJZ72D.js.map} +0 -0
- /package/dist/{chunk-ATLRUR3B.js.map → chunk-R52N7DBG.js.map} +0 -0
- /package/dist/{chunk-IZRVFC2Z.js.map → chunk-TJAZ7QCF.js.map} +0 -0
- /package/dist/{chunk-TY5GELDB.js.map → chunk-UKTYDNWJ.js.map} +0 -0
- /package/dist/{chunk-HRW7BIDE.js.map → chunk-WS6OQIEN.js.map} +0 -0
- /package/dist/{chunk-TNFACSWF.js.map → chunk-ZLHGJSRK.js.map} +0 -0
- /package/dist/{source-manager-FEGVYDFZ.js.map → source-manager-PPABS6BC.js.map} +0 -0
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
} from "../../chunk-XY3XDVMI.js";
|
|
22
22
|
import {
|
|
23
23
|
CheckboxGrid
|
|
24
|
-
} from "../../chunk-
|
|
25
|
-
import "../../chunk-
|
|
24
|
+
} from "../../chunk-ACVJVYMC.js";
|
|
25
|
+
import "../../chunk-BK7TANUV.js";
|
|
26
26
|
import {
|
|
27
27
|
init_esm_shims
|
|
28
28
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -100,6 +100,14 @@ describe("CheckboxGrid component", () => {
|
|
|
100
100
|
const output = lastFrame();
|
|
101
101
|
globalExpect(output).toContain("Select at least one");
|
|
102
102
|
});
|
|
103
|
+
it("should show empty message as dimmed informational text", () => {
|
|
104
|
+
const { lastFrame, unmount } = renderCheckboxGrid({
|
|
105
|
+
emptyMessage: "No items selected"
|
|
106
|
+
});
|
|
107
|
+
cleanup = unmount;
|
|
108
|
+
const output = lastFrame();
|
|
109
|
+
globalExpect(output).toContain("No items selected");
|
|
110
|
+
});
|
|
103
111
|
it("should show selected summary when items are selected", () => {
|
|
104
112
|
const { lastFrame, unmount } = renderCheckboxGrid({
|
|
105
113
|
selectedIds: ["alpha", "beta"]
|
|
@@ -118,11 +126,11 @@ describe("CheckboxGrid component", () => {
|
|
|
118
126
|
const output = lastFrame();
|
|
119
127
|
globalExpect(output).toContain("Continue with 1 item(s)");
|
|
120
128
|
});
|
|
121
|
-
it("should
|
|
129
|
+
it("should always show continue option even when nothing selected", () => {
|
|
122
130
|
const { lastFrame, unmount } = renderCheckboxGrid();
|
|
123
131
|
cleanup = unmount;
|
|
124
132
|
const output = lastFrame();
|
|
125
|
-
globalExpect(output).
|
|
133
|
+
globalExpect(output).toContain("Continue with 0 item(s)");
|
|
126
134
|
});
|
|
127
135
|
it("should show navigation hints", () => {
|
|
128
136
|
const { lastFrame, unmount } = renderCheckboxGrid();
|
|
@@ -200,7 +208,7 @@ describe("CheckboxGrid component", () => {
|
|
|
200
208
|
await delay(INPUT_DELAY_MS);
|
|
201
209
|
globalExpect(onContinue).toHaveBeenCalled();
|
|
202
210
|
});
|
|
203
|
-
it("should
|
|
211
|
+
it("should call onContinue with ENTER even when nothing selected", async () => {
|
|
204
212
|
const onContinue = vi.fn();
|
|
205
213
|
const { stdin, unmount } = renderCheckboxGrid({
|
|
206
214
|
onContinue,
|
|
@@ -210,7 +218,7 @@ describe("CheckboxGrid component", () => {
|
|
|
210
218
|
await delay(RENDER_DELAY_MS);
|
|
211
219
|
stdin.write(ENTER);
|
|
212
220
|
await delay(INPUT_DELAY_MS);
|
|
213
|
-
globalExpect(onContinue).
|
|
221
|
+
globalExpect(onContinue).toHaveBeenCalled();
|
|
214
222
|
});
|
|
215
223
|
it("should call onBack with ESC", async () => {
|
|
216
224
|
const onBack = vi.fn();
|
|
@@ -232,6 +240,8 @@ describe("CheckboxGrid component", () => {
|
|
|
232
240
|
await delay(INPUT_DELAY_MS);
|
|
233
241
|
stdin.write(ARROW_DOWN);
|
|
234
242
|
await delay(INPUT_DELAY_MS);
|
|
243
|
+
stdin.write(ARROW_DOWN);
|
|
244
|
+
await delay(INPUT_DELAY_MS);
|
|
235
245
|
stdin.write(SPACE);
|
|
236
246
|
await delay(INPUT_DELAY_MS);
|
|
237
247
|
globalExpect(onToggle).toHaveBeenCalledWith("alpha");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/components/wizard/checkbox-grid.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { CheckboxGrid, type CheckboxGridProps } from \"./checkbox-grid\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n SPACE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\ntype TestItem = \"alpha\" | \"beta\" | \"gamma\";\n\nconst TEST_ITEMS: CheckboxGridProps<TestItem>[\"items\"] = [\n { id: \"alpha\", label: \"Alpha\", description: \"First item\" },\n { id: \"beta\", label: \"Beta\", description: \"Second item\" },\n { id: \"gamma\", label: \"Gamma\", description: \"Third item\" },\n];\n\nconst defaultProps: CheckboxGridProps<TestItem> = {\n title: \"Test title\",\n subtitle: \"Test subtitle\",\n items: TEST_ITEMS,\n selectedIds: [],\n onToggle: vi.fn(),\n onContinue: vi.fn(),\n onBack: vi.fn(),\n continueLabel: (count) => `Continue with ${count} item(s)`,\n emptyMessage: \"Select at least one\",\n};\n\nconst renderCheckboxGrid = (props: Partial<CheckboxGridProps<TestItem>> = {}) => {\n return render(<CheckboxGrid {...defaultProps} {...props} />);\n};\n\ndescribe(\"CheckboxGrid component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render title and subtitle\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Test title\");\n expect(output).toContain(\"Test subtitle\");\n });\n\n it(\"should render all items with correct labels\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Alpha\");\n expect(output).toContain(\"Beta\");\n expect(output).toContain(\"Gamma\");\n });\n\n it(\"should render item descriptions\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"First item\");\n expect(output).toContain(\"Second item\");\n expect(output).toContain(\"Third item\");\n });\n\n it(\"should show unchecked checkboxes when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"[ ]\");\n expect(output).not.toContain(\"[\\u2713]\");\n });\n\n it(\"should show checked checkboxes for selected items\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"gamma\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"[\\u2713]\");\n });\n\n it(\"should show empty message when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select at least one\");\n });\n\n it(\"should show selected summary when items are selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"beta\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"alpha\");\n expect(output).toContain(\"beta\");\n });\n\n it(\"should show continue option when items are selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue with 1 item(s)\");\n });\n\n it(\"should not show continue option when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).not.toContain(\"Continue with\");\n });\n\n it(\"should show navigation hints\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"navigate\");\n expect(output).toContain(\"SPACE\");\n expect(output).toContain(\"ENTER\");\n expect(output).toContain(\"ESC\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should move focus down with arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First item focused by default (has focus indicator)\n let output = lastFrame();\n expect(output).toBeDefined();\n\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should move focus up with arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n // Should wrap to last item\n const output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should move focus with j/k vim keys\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(\"j\");\n await delay(INPUT_DELAY_MS);\n\n let output = lastFrame();\n expect(output).toBeDefined();\n\n stdin.write(\"k\");\n await delay(INPUT_DELAY_MS);\n\n output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should toggle selection with SPACE\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n // First item is focused by default, so toggling should call with \"alpha\"\n expect(onToggle).toHaveBeenCalledWith(\"alpha\");\n });\n\n it(\"should toggle correct item after navigation\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n expect(onToggle).toHaveBeenCalledWith(\"beta\");\n });\n\n it(\"should call onContinue with ENTER when items selected\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({\n onContinue,\n selectedIds: [\"alpha\"],\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalled();\n });\n\n it(\"should not call onContinue with ENTER when nothing selected\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({\n onContinue,\n selectedIds: [],\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).not.toHaveBeenCalled();\n });\n\n it(\"should call onBack with ESC\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalled();\n });\n\n it(\"should wrap focus from last to first item\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // Navigate down past all 3 items (no continue since nothing selected)\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n // Should wrap to first item\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n expect(onToggle).toHaveBeenCalledWith(\"alpha\");\n });\n });\n\n describe(\"custom props\", () => {\n it(\"should use custom continueLabel\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"beta\"],\n continueLabel: (count) => `Proceed with ${count} selected`,\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Proceed with 2 selected\");\n });\n\n it(\"should use custom emptyMessage\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n emptyMessage: \"Pick something!\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Pick something!\");\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/wizard/checkbox-grid.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\nimport { CheckboxGrid, type CheckboxGridProps } from \"./checkbox-grid\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n SPACE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\ntype TestItem = \"alpha\" | \"beta\" | \"gamma\";\n\nconst TEST_ITEMS: CheckboxGridProps<TestItem>[\"items\"] = [\n { id: \"alpha\", label: \"Alpha\", description: \"First item\" },\n { id: \"beta\", label: \"Beta\", description: \"Second item\" },\n { id: \"gamma\", label: \"Gamma\", description: \"Third item\" },\n];\n\nconst defaultProps: CheckboxGridProps<TestItem> = {\n title: \"Test title\",\n subtitle: \"Test subtitle\",\n items: TEST_ITEMS,\n selectedIds: [],\n onToggle: vi.fn(),\n onContinue: vi.fn(),\n onBack: vi.fn(),\n continueLabel: (count) => `Continue with ${count} item(s)`,\n emptyMessage: \"Select at least one\",\n};\n\nconst renderCheckboxGrid = (props: Partial<CheckboxGridProps<TestItem>> = {}) => {\n return render(<CheckboxGrid {...defaultProps} {...props} />);\n};\n\ndescribe(\"CheckboxGrid component\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render title and subtitle\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Test title\");\n expect(output).toContain(\"Test subtitle\");\n });\n\n it(\"should render all items with correct labels\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Alpha\");\n expect(output).toContain(\"Beta\");\n expect(output).toContain(\"Gamma\");\n });\n\n it(\"should render item descriptions\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"First item\");\n expect(output).toContain(\"Second item\");\n expect(output).toContain(\"Third item\");\n });\n\n it(\"should show unchecked checkboxes when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"[ ]\");\n expect(output).not.toContain(\"[\\u2713]\");\n });\n\n it(\"should show checked checkboxes for selected items\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"gamma\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"[\\u2713]\");\n });\n\n it(\"should show empty message when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select at least one\");\n });\n\n it(\"should show empty message as dimmed informational text\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n emptyMessage: \"No items selected\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"No items selected\");\n });\n\n it(\"should show selected summary when items are selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"beta\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"alpha\");\n expect(output).toContain(\"beta\");\n });\n\n it(\"should show continue option when items are selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\"],\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue with 1 item(s)\");\n });\n\n it(\"should always show continue option even when nothing selected\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue with 0 item(s)\");\n });\n\n it(\"should show navigation hints\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"navigate\");\n expect(output).toContain(\"SPACE\");\n expect(output).toContain(\"ENTER\");\n expect(output).toContain(\"ESC\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should move focus down with arrow down\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First item focused by default (has focus indicator)\n let output = lastFrame();\n expect(output).toBeDefined();\n\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should move focus up with arrow up\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n // Should wrap to last item\n const output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should move focus with j/k vim keys\", async () => {\n const { stdin, lastFrame, unmount } = renderCheckboxGrid();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(\"j\");\n await delay(INPUT_DELAY_MS);\n\n let output = lastFrame();\n expect(output).toBeDefined();\n\n stdin.write(\"k\");\n await delay(INPUT_DELAY_MS);\n\n output = lastFrame();\n expect(output).toBeDefined();\n });\n\n it(\"should toggle selection with SPACE\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n // First item is focused by default, so toggling should call with \"alpha\"\n expect(onToggle).toHaveBeenCalledWith(\"alpha\");\n });\n\n it(\"should toggle correct item after navigation\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n expect(onToggle).toHaveBeenCalledWith(\"beta\");\n });\n\n it(\"should call onContinue with ENTER when items selected\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({\n onContinue,\n selectedIds: [\"alpha\"],\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalled();\n });\n\n it(\"should call onContinue with ENTER even when nothing selected\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({\n onContinue,\n selectedIds: [],\n });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalled();\n });\n\n it(\"should call onBack with ESC\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalled();\n });\n\n it(\"should wrap focus from last to first item\", async () => {\n const onToggle = vi.fn();\n const { stdin, unmount } = renderCheckboxGrid({ onToggle });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // Navigate down past all 3 items + continue item (always present)\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n // Should wrap to first item\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n expect(onToggle).toHaveBeenCalledWith(\"alpha\");\n });\n });\n\n describe(\"custom props\", () => {\n it(\"should use custom continueLabel\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n selectedIds: [\"alpha\", \"beta\"],\n continueLabel: (count) => `Proceed with ${count} selected`,\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Proceed with 2 selected\");\n });\n\n it(\"should use custom emptyMessage\", () => {\n const { lastFrame, unmount } = renderCheckboxGrid({\n emptyMessage: \"Pick something!\",\n });\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Pick something!\");\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DomainSelection
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
7
|
-
import "../../chunk-
|
|
8
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-KC2SIUIA.js";
|
|
5
|
+
import "../../chunk-ACVJVYMC.js";
|
|
6
|
+
import "../../chunk-423MJ6DT.js";
|
|
7
|
+
import "../../chunk-SILUTTV7.js";
|
|
8
|
+
import "../../chunk-TTXV55NQ.js";
|
|
9
9
|
import "../../chunk-T4EXUIBY.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-XJXJZ2MJ.js";
|
|
11
|
+
import "../../chunk-BK7TANUV.js";
|
|
12
12
|
import "../../chunk-DHET7RCE.js";
|
|
13
13
|
export {
|
|
14
14
|
DomainSelection
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SearchModal
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-NYP5SB2V.js";
|
|
5
5
|
import "../../chunk-KUV24B5M.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-BK7TANUV.js";
|
|
7
7
|
import "../../chunk-DHET7RCE.js";
|
|
8
8
|
export {
|
|
9
9
|
SearchModal
|
|
@@ -20,9 +20,9 @@ import {
|
|
|
20
20
|
} from "../../chunk-XY3XDVMI.js";
|
|
21
21
|
import {
|
|
22
22
|
SearchModal
|
|
23
|
-
} from "../../chunk-
|
|
23
|
+
} from "../../chunk-NYP5SB2V.js";
|
|
24
24
|
import "../../chunk-KUV24B5M.js";
|
|
25
|
-
import "../../chunk-
|
|
25
|
+
import "../../chunk-BK7TANUV.js";
|
|
26
26
|
import {
|
|
27
27
|
init_esm_shims
|
|
28
28
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SectionProgress
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-NZYKDVRL.js";
|
|
5
5
|
import {
|
|
6
6
|
render
|
|
7
7
|
} from "../../chunk-66UDJBF6.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
globalExpect,
|
|
12
12
|
it
|
|
13
13
|
} from "../../chunk-XY3XDVMI.js";
|
|
14
|
-
import "../../chunk-
|
|
14
|
+
import "../../chunk-BK7TANUV.js";
|
|
15
15
|
import {
|
|
16
16
|
init_esm_shims
|
|
17
17
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SourceGrid
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-BFISETQG.js";
|
|
5
5
|
import "../../chunk-7SOPVGDV.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-NYP5SB2V.js";
|
|
7
7
|
import "../../chunk-KUV24B5M.js";
|
|
8
8
|
import "../../chunk-GG4BSB6S.js";
|
|
9
|
-
import "../../chunk-
|
|
9
|
+
import "../../chunk-BK7TANUV.js";
|
|
10
10
|
import "../../chunk-DHET7RCE.js";
|
|
11
11
|
export {
|
|
12
12
|
SourceGrid
|
|
@@ -23,12 +23,12 @@ import {
|
|
|
23
23
|
} from "../../chunk-XY3XDVMI.js";
|
|
24
24
|
import {
|
|
25
25
|
SourceGrid
|
|
26
|
-
} from "../../chunk-
|
|
26
|
+
} from "../../chunk-BFISETQG.js";
|
|
27
27
|
import "../../chunk-7SOPVGDV.js";
|
|
28
|
-
import "../../chunk-
|
|
28
|
+
import "../../chunk-NYP5SB2V.js";
|
|
29
29
|
import "../../chunk-KUV24B5M.js";
|
|
30
30
|
import "../../chunk-GG4BSB6S.js";
|
|
31
|
-
import "../../chunk-
|
|
31
|
+
import "../../chunk-BK7TANUV.js";
|
|
32
32
|
import {
|
|
33
33
|
init_esm_shims
|
|
34
34
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StackSelection
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
7
|
-
import "../../chunk-
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
10
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-DV4ALU5I.js";
|
|
5
|
+
import "../../chunk-YRVTXSXP.js";
|
|
6
|
+
import "../../chunk-KXM7KOPE.js";
|
|
7
|
+
import "../../chunk-WS6OQIEN.js";
|
|
8
|
+
import "../../chunk-423MJ6DT.js";
|
|
9
|
+
import "../../chunk-SILUTTV7.js";
|
|
10
|
+
import "../../chunk-TTXV55NQ.js";
|
|
11
11
|
import "../../chunk-T4EXUIBY.js";
|
|
12
|
-
import "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
import "../../chunk-XJXJZ2MJ.js";
|
|
13
|
+
import "../../chunk-BK7TANUV.js";
|
|
14
14
|
import "../../chunk-DHET7RCE.js";
|
|
15
15
|
export {
|
|
16
16
|
StackSelection
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StepAgents
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
7
|
-
import "../../chunk-
|
|
8
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-YLJYAQSG.js";
|
|
5
|
+
import "../../chunk-K77I4XGL.js";
|
|
6
|
+
import "../../chunk-423MJ6DT.js";
|
|
7
|
+
import "../../chunk-SILUTTV7.js";
|
|
8
|
+
import "../../chunk-TTXV55NQ.js";
|
|
9
9
|
import "../../chunk-T4EXUIBY.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-XJXJZ2MJ.js";
|
|
11
|
+
import "../../chunk-BK7TANUV.js";
|
|
12
12
|
import "../../chunk-DHET7RCE.js";
|
|
13
13
|
export {
|
|
14
14
|
StepAgents
|
|
@@ -20,16 +20,16 @@ import {
|
|
|
20
20
|
} from "../../chunk-XY3XDVMI.js";
|
|
21
21
|
import {
|
|
22
22
|
StepAgents
|
|
23
|
-
} from "../../chunk-
|
|
24
|
-
import "../../chunk-
|
|
23
|
+
} from "../../chunk-YLJYAQSG.js";
|
|
24
|
+
import "../../chunk-K77I4XGL.js";
|
|
25
25
|
import {
|
|
26
26
|
useWizardStore
|
|
27
|
-
} from "../../chunk-
|
|
28
|
-
import "../../chunk-
|
|
29
|
-
import "../../chunk-
|
|
27
|
+
} from "../../chunk-423MJ6DT.js";
|
|
28
|
+
import "../../chunk-SILUTTV7.js";
|
|
29
|
+
import "../../chunk-TTXV55NQ.js";
|
|
30
30
|
import "../../chunk-T4EXUIBY.js";
|
|
31
|
-
import "../../chunk-
|
|
32
|
-
import "../../chunk-
|
|
31
|
+
import "../../chunk-XJXJZ2MJ.js";
|
|
32
|
+
import "../../chunk-BK7TANUV.js";
|
|
33
33
|
import {
|
|
34
34
|
init_esm_shims
|
|
35
35
|
} from "../../chunk-DHET7RCE.js";
|
|
@@ -85,22 +85,21 @@ describe("StepAgents component", () => {
|
|
|
85
85
|
globalExpect(output).toContain("Backend routes, database, middleware");
|
|
86
86
|
globalExpect(output).toContain("CLI commands, interactive prompts");
|
|
87
87
|
});
|
|
88
|
-
it("should
|
|
88
|
+
it("should render group headers", () => {
|
|
89
89
|
const { lastFrame, unmount } = render(/* @__PURE__ */ jsx(StepAgents, {}));
|
|
90
90
|
cleanup = unmount;
|
|
91
91
|
const output = lastFrame();
|
|
92
|
-
globalExpect(output).toContain("
|
|
92
|
+
globalExpect(output).toContain("Web");
|
|
93
|
+
globalExpect(output).toContain("API");
|
|
94
|
+
globalExpect(output).toContain("CLI");
|
|
95
|
+
globalExpect(output).toContain("Meta");
|
|
93
96
|
});
|
|
94
|
-
it("should show
|
|
95
|
-
const store = useWizardStore.getState();
|
|
96
|
-
store.toggleAgent("web-developer");
|
|
97
|
-
store.toggleAgent("api-developer");
|
|
97
|
+
it("should show continue arrow", () => {
|
|
98
98
|
const { lastFrame, unmount } = render(/* @__PURE__ */ jsx(StepAgents, {}));
|
|
99
99
|
cleanup = unmount;
|
|
100
100
|
const output = lastFrame();
|
|
101
|
-
globalExpect(output).toContain("
|
|
102
|
-
globalExpect(output).toContain("
|
|
103
|
-
globalExpect(output).toContain("api-developer");
|
|
101
|
+
globalExpect(output).toContain("\u2192");
|
|
102
|
+
globalExpect(output).toContain("Continue");
|
|
104
103
|
});
|
|
105
104
|
it("should show continue option with agent count when agents selected", () => {
|
|
106
105
|
const store = useWizardStore.getState();
|
|
@@ -112,6 +111,12 @@ describe("StepAgents component", () => {
|
|
|
112
111
|
const output = lastFrame();
|
|
113
112
|
globalExpect(output).toContain("Continue with 3 agent(s)");
|
|
114
113
|
});
|
|
114
|
+
it("should show 'Continue without agents' when no agents selected", () => {
|
|
115
|
+
const { lastFrame, unmount } = render(/* @__PURE__ */ jsx(StepAgents, {}));
|
|
116
|
+
cleanup = unmount;
|
|
117
|
+
const output = lastFrame();
|
|
118
|
+
globalExpect(output).toContain("Continue without agents");
|
|
119
|
+
});
|
|
115
120
|
});
|
|
116
121
|
describe("keyboard interaction", () => {
|
|
117
122
|
it("should toggle agent on SPACE", async () => {
|
|
@@ -132,7 +137,7 @@ describe("StepAgents component", () => {
|
|
|
132
137
|
stdin.write(SPACE);
|
|
133
138
|
await delay(INPUT_DELAY_MS);
|
|
134
139
|
const store = useWizardStore.getState();
|
|
135
|
-
globalExpect(store.selectedAgents).toContain("
|
|
140
|
+
globalExpect(store.selectedAgents).toContain("web-reviewer");
|
|
136
141
|
});
|
|
137
142
|
it("should navigate to confirm on ENTER when agents selected", async () => {
|
|
138
143
|
const store = useWizardStore.getState();
|
|
@@ -146,7 +151,7 @@ describe("StepAgents component", () => {
|
|
|
146
151
|
const updatedStore = useWizardStore.getState();
|
|
147
152
|
globalExpect(updatedStore.step).toBe("confirm");
|
|
148
153
|
});
|
|
149
|
-
it("should
|
|
154
|
+
it("should navigate to confirm on ENTER even with no agents selected", async () => {
|
|
150
155
|
const store = useWizardStore.getState();
|
|
151
156
|
store.setStep("agents");
|
|
152
157
|
const { stdin, unmount } = render(/* @__PURE__ */ jsx(StepAgents, {}));
|
|
@@ -155,7 +160,7 @@ describe("StepAgents component", () => {
|
|
|
155
160
|
stdin.write(ENTER);
|
|
156
161
|
await delay(INPUT_DELAY_MS);
|
|
157
162
|
const updatedStore = useWizardStore.getState();
|
|
158
|
-
globalExpect(updatedStore.step).toBe("
|
|
163
|
+
globalExpect(updatedStore.step).toBe("confirm");
|
|
159
164
|
});
|
|
160
165
|
it("should go back on ESC", async () => {
|
|
161
166
|
const store = useWizardStore.getState();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/components/wizard/step-agents.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\nimport { StepAgents } from \"./step-agents\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport {\n ARROW_DOWN,\n ENTER,\n ESCAPE,\n SPACE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst EXPECTED_AGENT_COUNT = 18;\n\ndescribe(\"StepAgents component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n useWizardStore.getState().reset();\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render title and subtitle\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select agents to compile:\");\n expect(output).toContain(\"Toggle agents on/off, then continue\");\n });\n\n it(\"should render all agents\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web Developer\");\n expect(output).toContain(\"API Developer\");\n expect(output).toContain(\"CLI Developer\");\n expect(output).toContain(\"Web Architecture\");\n expect(output).toContain(\"Web Reviewer\");\n expect(output).toContain(\"API Reviewer\");\n expect(output).toContain(\"CLI Reviewer\");\n expect(output).toContain(\"Web Researcher\");\n expect(output).toContain(\"API Researcher\");\n expect(output).toContain(\"Web Tester\");\n expect(output).toContain(\"CLI Tester\");\n expect(output).toContain(\"Web PM\");\n expect(output).toContain(\"Pattern Scout\");\n expect(output).toContain(\"Pattern Critique\");\n expect(output).toContain(\"Agent Summoner\");\n expect(output).toContain(\"Skill Summoner\");\n expect(output).toContain(\"Documentor\");\n expect(output).toContain(\"CLI Migrator\");\n });\n\n it(\"should render agent descriptions\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Frontend features, components, TypeScript\");\n expect(output).toContain(\"Backend routes, database, middleware\");\n expect(output).toContain(\"CLI commands, interactive prompts\");\n });\n\n it(\"should show empty message when no agents selected\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Please select at least one agent\");\n });\n\n it(\"should show selected agents when preselected\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"api-developer\");\n\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"web-developer\");\n expect(output).toContain(\"api-developer\");\n });\n\n it(\"should show continue option with agent count when agents selected\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"api-developer\");\n store.toggleAgent(\"web-reviewer\");\n\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue with 3 agent(s)\");\n });\n });\n\n describe(\"keyboard interaction\", () => {\n it(\"should toggle agent on SPACE\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const store = useWizardStore.getState();\n expect(store.selectedAgents).toContain(\"web-developer\");\n });\n\n it(\"should toggle correct agent after navigation\", async () => {\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const store = useWizardStore.getState();\n expect(store.selectedAgents).toContain(\"api-developer\");\n });\n\n it(\"should navigate to confirm on ENTER when agents selected\", async () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n // Set step to agents so setStep(\"confirm\") actually navigates\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"confirm\");\n });\n\n it(\"should not navigate on ENTER when no agents selected\", async () => {\n const store = useWizardStore.getState();\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"agents\");\n });\n\n it(\"should go back on ESC\", async () => {\n const store = useWizardStore.getState();\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"sources\");\n });\n\n it(\"should toggle agent off when already selected\", async () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // First item is web-developer, toggle it off\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.selectedAgents).not.toContain(\"web-developer\");\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/wizard/step-agents.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\nimport { StepAgents } from \"./step-agents\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport {\n ARROW_DOWN,\n ENTER,\n ESCAPE,\n SPACE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst EXPECTED_AGENT_COUNT = 18;\n\ndescribe(\"StepAgents component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n useWizardStore.getState().reset();\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render title and subtitle\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select agents to compile:\");\n expect(output).toContain(\"Toggle agents on/off, then continue\");\n });\n\n it(\"should render all agents\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web Developer\");\n expect(output).toContain(\"API Developer\");\n expect(output).toContain(\"CLI Developer\");\n expect(output).toContain(\"Web Architecture\");\n expect(output).toContain(\"Web Reviewer\");\n expect(output).toContain(\"API Reviewer\");\n expect(output).toContain(\"CLI Reviewer\");\n expect(output).toContain(\"Web Researcher\");\n expect(output).toContain(\"API Researcher\");\n expect(output).toContain(\"Web Tester\");\n expect(output).toContain(\"CLI Tester\");\n expect(output).toContain(\"Web PM\");\n expect(output).toContain(\"Pattern Scout\");\n expect(output).toContain(\"Pattern Critique\");\n expect(output).toContain(\"Agent Summoner\");\n expect(output).toContain(\"Skill Summoner\");\n expect(output).toContain(\"Documentor\");\n expect(output).toContain(\"CLI Migrator\");\n });\n\n it(\"should render agent descriptions\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Frontend features, components, TypeScript\");\n expect(output).toContain(\"Backend routes, database, middleware\");\n expect(output).toContain(\"CLI commands, interactive prompts\");\n });\n\n it(\"should render group headers\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web\");\n expect(output).toContain(\"API\");\n expect(output).toContain(\"CLI\");\n expect(output).toContain(\"Meta\");\n });\n\n it(\"should show continue arrow\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"\\u2192\");\n expect(output).toContain(\"Continue\");\n });\n\n it(\"should show continue option with agent count when agents selected\", () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n store.toggleAgent(\"api-developer\");\n store.toggleAgent(\"web-reviewer\");\n\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue with 3 agent(s)\");\n });\n\n it(\"should show 'Continue without agents' when no agents selected\", () => {\n const { lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Continue without agents\");\n });\n });\n\n describe(\"keyboard interaction\", () => {\n it(\"should toggle agent on SPACE\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const store = useWizardStore.getState();\n expect(store.selectedAgents).toContain(\"web-developer\");\n });\n\n it(\"should toggle correct agent after navigation\", async () => {\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const store = useWizardStore.getState();\n expect(store.selectedAgents).toContain(\"web-reviewer\");\n });\n\n it(\"should navigate to confirm on ENTER when agents selected\", async () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n // Set step to agents so setStep(\"confirm\") actually navigates\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"confirm\");\n });\n\n it(\"should navigate to confirm on ENTER even with no agents selected\", async () => {\n const store = useWizardStore.getState();\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"confirm\");\n });\n\n it(\"should go back on ESC\", async () => {\n const store = useWizardStore.getState();\n store.setStep(\"sources\");\n store.setStep(\"agents\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.step).toBe(\"sources\");\n });\n\n it(\"should toggle agent off when already selected\", async () => {\n const store = useWizardStore.getState();\n store.toggleAgent(\"web-developer\");\n\n const { stdin, unmount } = render(<StepAgents />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n // First item is web-developer, toggle it off\n stdin.write(SPACE);\n await delay(INPUT_DELAY_MS);\n\n const updatedStore = useWizardStore.getState();\n expect(updatedStore.selectedAgents).not.toContain(\"web-developer\");\n });\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA8B4C;AAd5C,SAAS,wBAAwB,MAAM;AACrC,MAAI;AAEJ,aAAW,MAAM;AACf,mBAAe,SAAS,EAAE,MAAM;AAAA,EAClC,CAAC;AAED,YAAU,MAAM;AACd,cAAU;AACV,cAAU;AAAA,EACZ,CAAC;AAED,WAAS,aAAa,MAAM;AAC1B,OAAG,oCAAoC,MAAM;AAC3C,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,2BAA2B;AACpD,mBAAO,MAAM,EAAE,UAAU,qCAAqC;AAAA,IAChE,CAAC;AAED,OAAG,4BAA4B,MAAM;AACnC,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,eAAe;AACxC,mBAAO,MAAM,EAAE,UAAU,eAAe;AACxC,mBAAO,MAAM,EAAE,UAAU,eAAe;AACxC,mBAAO,MAAM,EAAE,UAAU,kBAAkB;AAC3C,mBAAO,MAAM,EAAE,UAAU,cAAc;AACvC,mBAAO,MAAM,EAAE,UAAU,cAAc;AACvC,mBAAO,MAAM,EAAE,UAAU,cAAc;AACvC,mBAAO,MAAM,EAAE,UAAU,gBAAgB;AACzC,mBAAO,MAAM,EAAE,UAAU,gBAAgB;AACzC,mBAAO,MAAM,EAAE,UAAU,YAAY;AACrC,mBAAO,MAAM,EAAE,UAAU,YAAY;AACrC,mBAAO,MAAM,EAAE,UAAU,QAAQ;AACjC,mBAAO,MAAM,EAAE,UAAU,eAAe;AACxC,mBAAO,MAAM,EAAE,UAAU,kBAAkB;AAC3C,mBAAO,MAAM,EAAE,UAAU,gBAAgB;AACzC,mBAAO,MAAM,EAAE,UAAU,gBAAgB;AACzC,mBAAO,MAAM,EAAE,UAAU,YAAY;AACrC,mBAAO,MAAM,EAAE,UAAU,cAAc;AAAA,IACzC,CAAC;AAED,OAAG,oCAAoC,MAAM;AAC3C,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,2CAA2C;AACpE,mBAAO,MAAM,EAAE,UAAU,sCAAsC;AAC/D,mBAAO,MAAM,EAAE,UAAU,mCAAmC;AAAA,IAC9D,CAAC;AAED,OAAG,+BAA+B,MAAM;AACtC,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,KAAK;AAC9B,mBAAO,MAAM,EAAE,UAAU,KAAK;AAC9B,mBAAO,MAAM,EAAE,UAAU,KAAK;AAC9B,mBAAO,MAAM,EAAE,UAAU,MAAM;AAAA,IACjC,CAAC;AAED,OAAG,8BAA8B,MAAM;AACrC,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,QAAQ;AACjC,mBAAO,MAAM,EAAE,UAAU,UAAU;AAAA,IACrC,CAAC;AAED,OAAG,qEAAqE,MAAM;AAC5E,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,YAAY,eAAe;AACjC,YAAM,YAAY,eAAe;AACjC,YAAM,YAAY,cAAc;AAEhC,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,0BAA0B;AAAA,IACrD,CAAC;AAED,OAAG,iEAAiE,MAAM;AACxE,YAAM,EAAE,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AACpD,gBAAU;AAEV,YAAM,SAAS,UAAU;AACzB,mBAAO,MAAM,EAAE,UAAU,yBAAyB;AAAA,IACpD,CAAC;AAAA,EACH,CAAC;AAED,WAAS,wBAAwB,MAAM;AACrC,OAAG,gCAAgC,YAAY;AAC7C,YAAM,EAAE,OAAO,WAAW,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAC3D,gBAAU;AAEV,YAAM,MAAM,eAAe;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,cAAc;AAE1B,YAAM,QAAQ,eAAe,SAAS;AACtC,mBAAO,MAAM,cAAc,EAAE,UAAU,eAAe;AAAA,IACxD,CAAC;AAED,OAAG,gDAAgD,YAAY;AAC7D,YAAM,EAAE,OAAO,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAChD,gBAAU;AAEV,YAAM,MAAM,eAAe;AAC3B,YAAM,MAAM,UAAU;AACtB,YAAM,MAAM,cAAc;AAC1B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,cAAc;AAE1B,YAAM,QAAQ,eAAe,SAAS;AACtC,mBAAO,MAAM,cAAc,EAAE,UAAU,cAAc;AAAA,IACvD,CAAC;AAED,OAAG,4DAA4D,YAAY;AACzE,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,YAAY,eAAe;AAEjC,YAAM,QAAQ,QAAQ;AAEtB,YAAM,EAAE,OAAO,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAChD,gBAAU;AAEV,YAAM,MAAM,eAAe;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,cAAc;AAE1B,YAAM,eAAe,eAAe,SAAS;AAC7C,mBAAO,aAAa,IAAI,EAAE,KAAK,SAAS;AAAA,IAC1C,CAAC;AAED,OAAG,oEAAoE,YAAY;AACjF,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,QAAQ,QAAQ;AAEtB,YAAM,EAAE,OAAO,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAChD,gBAAU;AAEV,YAAM,MAAM,eAAe;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,cAAc;AAE1B,YAAM,eAAe,eAAe,SAAS;AAC7C,mBAAO,aAAa,IAAI,EAAE,KAAK,SAAS;AAAA,IAC1C,CAAC;AAED,OAAG,yBAAyB,YAAY;AACtC,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,QAAQ,SAAS;AACvB,YAAM,QAAQ,QAAQ;AAEtB,YAAM,EAAE,OAAO,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAChD,gBAAU;AAEV,YAAM,MAAM,eAAe;AAC3B,YAAM,MAAM,MAAM;AAClB,YAAM,MAAM,cAAc;AAE1B,YAAM,eAAe,eAAe,SAAS;AAC7C,mBAAO,aAAa,IAAI,EAAE,KAAK,SAAS;AAAA,IAC1C,CAAC;AAED,OAAG,iDAAiD,YAAY;AAC9D,YAAM,QAAQ,eAAe,SAAS;AACtC,YAAM,YAAY,eAAe;AAEjC,YAAM,EAAE,OAAO,QAAQ,IAAI,OAAO,oBAAC,cAAW,CAAE;AAChD,gBAAU;AAEV,YAAM,MAAM,eAAe;AAE3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,cAAc;AAE1B,YAAM,eAAe,eAAe,SAAS;AAC7C,mBAAO,aAAa,cAAc,EAAE,IAAI,UAAU,eAAe;AAAA,IACnE,CAAC;AAAA,EACH,CAAC;AACH,CAAC;","names":[]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StepBuild
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-7FBM7V3E.js";
|
|
5
|
+
import "../../chunk-YRVTXSXP.js";
|
|
6
|
+
import "../../chunk-KXM7KOPE.js";
|
|
5
7
|
import "../../chunk-K77I4XGL.js";
|
|
6
|
-
import "../../chunk-
|
|
7
|
-
import "../../chunk-2XX4TMCI.js";
|
|
8
|
-
import "../../chunk-TA6IIQI4.js";
|
|
8
|
+
import "../../chunk-GEDWVX6Y.js";
|
|
9
9
|
import "../../chunk-GG4BSB6S.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-SILUTTV7.js";
|
|
11
|
+
import "../../chunk-TTXV55NQ.js";
|
|
12
12
|
import "../../chunk-T4EXUIBY.js";
|
|
13
|
-
import "../../chunk-
|
|
14
|
-
import "../../chunk-
|
|
13
|
+
import "../../chunk-XJXJZ2MJ.js";
|
|
14
|
+
import "../../chunk-BK7TANUV.js";
|
|
15
15
|
import "../../chunk-DHET7RCE.js";
|
|
16
16
|
export {
|
|
17
17
|
StepBuild
|