@agents-inc/cli 0.42.1 → 0.46.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.
Files changed (186) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +128 -113
  3. package/assets/logo.png +0 -0
  4. package/assets/logo.svg +75 -0
  5. package/dist/{chunk-ZHJEZ7AU.js → chunk-3WKFSTG6.js} +2 -2
  6. package/dist/{chunk-IUYU2TP6.js → chunk-4C7PDDLY.js} +7 -7
  7. package/dist/{chunk-AQANPOLS.js → chunk-5M6JI76P.js} +2 -2
  8. package/dist/{chunk-UXNHU7Y7.js → chunk-5QRJUBK7.js} +133 -56
  9. package/dist/chunk-5QRJUBK7.js.map +1 -0
  10. package/dist/{chunk-33D24DAF.js → chunk-72GS6PIH.js} +10 -10
  11. package/dist/{chunk-PP7NDFFE.js → chunk-74HSA7C4.js} +10 -1
  12. package/dist/chunk-74HSA7C4.js.map +1 -0
  13. package/dist/chunk-7LDSHHKN.js +132 -0
  14. package/dist/chunk-7LDSHHKN.js.map +1 -0
  15. package/dist/{chunk-52SI5XJH.js → chunk-C7BO2ASM.js} +2 -7
  16. package/dist/chunk-C7BO2ASM.js.map +1 -0
  17. package/dist/{chunk-53K3URKF.js → chunk-CD64ZNYI.js} +5 -3
  18. package/dist/chunk-CD64ZNYI.js.map +1 -0
  19. package/dist/chunk-CDGHSTB6.js +69 -0
  20. package/dist/chunk-CDGHSTB6.js.map +1 -0
  21. package/dist/{chunk-FF4Z7MHY.js → chunk-CTQHZELA.js} +28 -20
  22. package/dist/chunk-CTQHZELA.js.map +1 -0
  23. package/dist/{chunk-44QCEK7E.js → chunk-D7JTL3DJ.js} +2 -2
  24. package/dist/{chunk-MMD26LKJ.js → chunk-DO5OZHSS.js} +2 -2
  25. package/dist/{chunk-ORJPGZVD.js → chunk-FKBCYT7B.js} +7 -7
  26. package/dist/chunk-FKBCYT7B.js.map +1 -0
  27. package/dist/{chunk-WMAALRQI.js → chunk-FUEZQ2H6.js} +5 -5
  28. package/dist/{chunk-WMAALRQI.js.map → chunk-FUEZQ2H6.js.map} +1 -1
  29. package/dist/{chunk-HMGWGWFT.js → chunk-G2WNOT3R.js} +2 -2
  30. package/dist/{chunk-BKW34TKI.js → chunk-GVLYNP2I.js} +4 -4
  31. package/dist/{chunk-VHGIQN5O.js → chunk-HM3DHMW7.js} +70 -24
  32. package/dist/chunk-HM3DHMW7.js.map +1 -0
  33. package/dist/{chunk-MI4NWOWD.js → chunk-I26YP2Q3.js} +5 -12
  34. package/dist/chunk-I26YP2Q3.js.map +1 -0
  35. package/dist/{chunk-FDY6SGSA.js → chunk-J64CA4V6.js} +5 -3
  36. package/dist/chunk-J64CA4V6.js.map +1 -0
  37. package/dist/{chunk-EFZN22TO.js → chunk-KWQ2BQXF.js} +3 -3
  38. package/dist/{chunk-ALWLM5MC.js → chunk-LFZXMQOH.js} +2 -2
  39. package/dist/{chunk-2TWELY5M.js → chunk-NMXNHRAK.js} +3 -3
  40. package/dist/{chunk-GCN7GGWE.js → chunk-ODQ2BKWU.js} +3 -3
  41. package/dist/{chunk-KA253GGY.js → chunk-PZLUO4OY.js} +4 -4
  42. package/dist/{chunk-X34RGEFX.js → chunk-QBUOZVNZ.js} +2 -2
  43. package/dist/{chunk-SYHRJG5G.js → chunk-RT6IBH37.js} +3498 -3592
  44. package/dist/chunk-RT6IBH37.js.map +1 -0
  45. package/dist/{chunk-YRVTXSXP.js → chunk-RWR56UVK.js} +3 -18
  46. package/dist/chunk-RWR56UVK.js.map +1 -0
  47. package/dist/{chunk-PEAPABFI.js → chunk-SGXUMZWL.js} +2 -2
  48. package/dist/{chunk-MHET2RG2.js → chunk-TOWP4T5L.js} +2 -2
  49. package/dist/{chunk-XRA4LHTJ.js → chunk-UK3AMBR7.js} +18 -14
  50. package/dist/chunk-UK3AMBR7.js.map +1 -0
  51. package/dist/{chunk-GIZ6DENW.js → chunk-VH3PI43B.js} +4 -4
  52. package/dist/{chunk-J73KIP6Z.js → chunk-XE6RTHUD.js} +66 -5
  53. package/dist/chunk-XE6RTHUD.js.map +1 -0
  54. package/dist/{chunk-EPJ2GJNJ.js → chunk-YT7UHV67.js} +10 -10
  55. package/dist/{chunk-UVVNWF43.js → chunk-YVMYQSED.js} +2 -2
  56. package/dist/commands/build/marketplace.js +12 -126
  57. package/dist/commands/build/marketplace.js.map +1 -1
  58. package/dist/commands/build/plugins.js +5 -5
  59. package/dist/commands/build/stack.js +5 -5
  60. package/dist/commands/compile.js +6 -6
  61. package/dist/commands/config/get.js +4 -4
  62. package/dist/commands/config/index.js +5 -5
  63. package/dist/commands/config/path.js +4 -4
  64. package/dist/commands/config/set-project.js +4 -4
  65. package/dist/commands/config/show.js +5 -5
  66. package/dist/commands/config/unset-project.js +4 -4
  67. package/dist/commands/diff.js +4 -4
  68. package/dist/commands/doctor.js +4 -4
  69. package/dist/commands/edit.js +33 -30
  70. package/dist/commands/edit.js.map +1 -1
  71. package/dist/commands/eject.js +54 -33
  72. package/dist/commands/eject.js.map +1 -1
  73. package/dist/commands/import/skill.js +5 -5
  74. package/dist/commands/info.js +5 -5
  75. package/dist/commands/init.js +33 -37
  76. package/dist/commands/init.js.map +1 -1
  77. package/dist/commands/list.js +4 -4
  78. package/dist/commands/new/agent.js +52 -38
  79. package/dist/commands/new/agent.js.map +1 -1
  80. package/dist/commands/new/marketplace.js +252 -0
  81. package/dist/commands/new/marketplace.js.map +1 -0
  82. package/dist/commands/new/skill.js +30 -15
  83. package/dist/commands/new/skill.js.map +1 -1
  84. package/dist/commands/outdated.js +4 -4
  85. package/dist/commands/search.js +7 -7
  86. package/dist/commands/uninstall.js +6 -6
  87. package/dist/commands/update.js +6 -6
  88. package/dist/commands/validate.js +5 -5
  89. package/dist/components/skill-search/skill-search.js +3 -3
  90. package/dist/components/wizard/category-grid.js +2 -2
  91. package/dist/components/wizard/category-grid.test.js +184 -98
  92. package/dist/components/wizard/category-grid.test.js.map +1 -1
  93. package/dist/components/wizard/checkbox-grid.js +3 -3
  94. package/dist/components/wizard/checkbox-grid.test.js +3 -3
  95. package/dist/components/wizard/domain-selection.js +9 -8
  96. package/dist/components/wizard/help-modal.js +2 -2
  97. package/dist/components/wizard/menu-item.js +1 -1
  98. package/dist/components/wizard/search-modal.js +2 -2
  99. package/dist/components/wizard/search-modal.test.js +2 -11
  100. package/dist/components/wizard/search-modal.test.js.map +1 -1
  101. package/dist/components/wizard/section-progress.js +2 -2
  102. package/dist/components/wizard/section-progress.test.js +2 -2
  103. package/dist/components/wizard/selection-card.js +2 -2
  104. package/dist/components/wizard/source-grid.js +3 -3
  105. package/dist/components/wizard/source-grid.test.js +5 -9
  106. package/dist/components/wizard/source-grid.test.js.map +1 -1
  107. package/dist/components/wizard/stack-selection.js +8 -9
  108. package/dist/components/wizard/step-agents.js +8 -7
  109. package/dist/components/wizard/step-agents.test.js +25 -20
  110. package/dist/components/wizard/step-agents.test.js.map +1 -1
  111. package/dist/components/wizard/step-build.js +8 -8
  112. package/dist/components/wizard/step-build.test.js +25 -40
  113. package/dist/components/wizard/step-build.test.js.map +1 -1
  114. package/dist/components/wizard/step-confirm.js +4 -4
  115. package/dist/components/wizard/step-confirm.test.js +8 -8
  116. package/dist/components/wizard/step-refine.js +2 -2
  117. package/dist/components/wizard/step-refine.test.js +2 -2
  118. package/dist/components/wizard/step-settings.js +5 -5
  119. package/dist/components/wizard/step-settings.test.js +8 -8
  120. package/dist/components/wizard/step-sources.js +11 -11
  121. package/dist/components/wizard/step-sources.test.js +14 -20
  122. package/dist/components/wizard/step-sources.test.js.map +1 -1
  123. package/dist/components/wizard/step-stack.js +12 -12
  124. package/dist/components/wizard/step-stack.test.js +32 -29
  125. package/dist/components/wizard/step-stack.test.js.map +1 -1
  126. package/dist/components/wizard/view-title.js +2 -2
  127. package/dist/components/wizard/wizard-layout.js +8 -8
  128. package/dist/components/wizard/wizard-tabs.js +2 -2
  129. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  130. package/dist/components/wizard/wizard.js +26 -26
  131. package/dist/hooks/init.js +3 -5
  132. package/dist/hooks/init.js.map +1 -1
  133. package/dist/{source-manager-ABK5COKX.js → source-manager-6QZ2GDUA.js} +4 -4
  134. package/dist/stores/wizard-store.js +5 -5
  135. package/dist/stores/wizard-store.test.js +29 -49
  136. package/dist/stores/wizard-store.test.js.map +1 -1
  137. package/package.json +3 -1
  138. package/src/schemas/agent.schema.json +3 -0
  139. package/src/schemas/metadata.schema.json +4 -46
  140. package/src/schemas/project-config.schema.json +8 -4
  141. package/src/schemas/skills-matrix.schema.json +11 -298
  142. package/src/schemas/stacks.schema.json +2 -4
  143. package/dist/chunk-52SI5XJH.js.map +0 -1
  144. package/dist/chunk-53K3URKF.js.map +0 -1
  145. package/dist/chunk-FDY6SGSA.js.map +0 -1
  146. package/dist/chunk-FF4Z7MHY.js.map +0 -1
  147. package/dist/chunk-GVRZY5KI.js +0 -45
  148. package/dist/chunk-GVRZY5KI.js.map +0 -1
  149. package/dist/chunk-J73KIP6Z.js.map +0 -1
  150. package/dist/chunk-MI4NWOWD.js.map +0 -1
  151. package/dist/chunk-ORJPGZVD.js.map +0 -1
  152. package/dist/chunk-PP7NDFFE.js.map +0 -1
  153. package/dist/chunk-SYHRJG5G.js.map +0 -1
  154. package/dist/chunk-UXNHU7Y7.js.map +0 -1
  155. package/dist/chunk-VHGIQN5O.js.map +0 -1
  156. package/dist/chunk-XRA4LHTJ.js.map +0 -1
  157. package/dist/chunk-YRVTXSXP.js.map +0 -1
  158. package/dist/cli/defaults/agent-mappings.yaml +0 -215
  159. package/dist/commands/version/bump.js +0 -79
  160. package/dist/commands/version/bump.js.map +0 -1
  161. package/dist/commands/version/index.js +0 -54
  162. package/dist/commands/version/index.js.map +0 -1
  163. package/dist/commands/version/set.js +0 -86
  164. package/dist/commands/version/set.js.map +0 -1
  165. package/dist/commands/version/show.js +0 -54
  166. package/dist/commands/version/show.js.map +0 -1
  167. /package/dist/{chunk-ZHJEZ7AU.js.map → chunk-3WKFSTG6.js.map} +0 -0
  168. /package/dist/{chunk-IUYU2TP6.js.map → chunk-4C7PDDLY.js.map} +0 -0
  169. /package/dist/{chunk-AQANPOLS.js.map → chunk-5M6JI76P.js.map} +0 -0
  170. /package/dist/{chunk-33D24DAF.js.map → chunk-72GS6PIH.js.map} +0 -0
  171. /package/dist/{chunk-44QCEK7E.js.map → chunk-D7JTL3DJ.js.map} +0 -0
  172. /package/dist/{chunk-MMD26LKJ.js.map → chunk-DO5OZHSS.js.map} +0 -0
  173. /package/dist/{chunk-HMGWGWFT.js.map → chunk-G2WNOT3R.js.map} +0 -0
  174. /package/dist/{chunk-BKW34TKI.js.map → chunk-GVLYNP2I.js.map} +0 -0
  175. /package/dist/{chunk-EFZN22TO.js.map → chunk-KWQ2BQXF.js.map} +0 -0
  176. /package/dist/{chunk-ALWLM5MC.js.map → chunk-LFZXMQOH.js.map} +0 -0
  177. /package/dist/{chunk-2TWELY5M.js.map → chunk-NMXNHRAK.js.map} +0 -0
  178. /package/dist/{chunk-GCN7GGWE.js.map → chunk-ODQ2BKWU.js.map} +0 -0
  179. /package/dist/{chunk-KA253GGY.js.map → chunk-PZLUO4OY.js.map} +0 -0
  180. /package/dist/{chunk-X34RGEFX.js.map → chunk-QBUOZVNZ.js.map} +0 -0
  181. /package/dist/{chunk-PEAPABFI.js.map → chunk-SGXUMZWL.js.map} +0 -0
  182. /package/dist/{chunk-MHET2RG2.js.map → chunk-TOWP4T5L.js.map} +0 -0
  183. /package/dist/{chunk-GIZ6DENW.js.map → chunk-VH3PI43B.js.map} +0 -0
  184. /package/dist/{chunk-EPJ2GJNJ.js.map → chunk-YT7UHV67.js.map} +0 -0
  185. /package/dist/{chunk-UVVNWF43.js.map → chunk-YVMYQSED.js.map} +0 -0
  186. /package/dist/{source-manager-ABK5COKX.js.map → source-manager-6QZ2GDUA.js.map} +0 -0
@@ -12,11 +12,11 @@ import {
12
12
  render
13
13
  } from "../../chunk-66UDJBF6.js";
14
14
  import {
15
+ TEST_SKILLS,
15
16
  createMockCategory,
16
17
  createMockMatrix,
17
- createMockResolvedStack,
18
- createMockSkill
19
- } from "../../chunk-J73KIP6Z.js";
18
+ createMockResolvedStack
19
+ } from "../../chunk-XE6RTHUD.js";
20
20
  import {
21
21
  afterEach,
22
22
  beforeEach,
@@ -27,21 +27,21 @@ import {
27
27
  } from "../../chunk-XY3XDVMI.js";
28
28
  import {
29
29
  StepStack
30
- } from "../../chunk-WMAALRQI.js";
31
- import "../../chunk-MI4NWOWD.js";
32
- import "../../chunk-ZHJEZ7AU.js";
33
- import "../../chunk-YRVTXSXP.js";
34
- import "../../chunk-GVRZY5KI.js";
35
- import "../../chunk-GCN7GGWE.js";
36
- import "../../chunk-MMD26LKJ.js";
30
+ } from "../../chunk-FUEZQ2H6.js";
31
+ import "../../chunk-I26YP2Q3.js";
32
+ import "../../chunk-3WKFSTG6.js";
33
+ import "../../chunk-CDGHSTB6.js";
34
+ import "../../chunk-RWR56UVK.js";
35
+ import "../../chunk-ODQ2BKWU.js";
36
+ import "../../chunk-DO5OZHSS.js";
37
37
  import {
38
38
  useWizardStore
39
- } from "../../chunk-XRA4LHTJ.js";
40
- import "../../chunk-FDY6SGSA.js";
41
- import "../../chunk-SYHRJG5G.js";
39
+ } from "../../chunk-UK3AMBR7.js";
40
+ import "../../chunk-J64CA4V6.js";
41
+ import "../../chunk-RT6IBH37.js";
42
42
  import "../../chunk-T4EXUIBY.js";
43
- import "../../chunk-UXNHU7Y7.js";
44
- import "../../chunk-PP7NDFFE.js";
43
+ import "../../chunk-5QRJUBK7.js";
44
+ import "../../chunk-74HSA7C4.js";
45
45
  import {
46
46
  init_esm_shims
47
47
  } from "../../chunk-DHET7RCE.js";
@@ -51,15 +51,9 @@ init_esm_shims();
51
51
  import { jsx } from "react/jsx-runtime";
52
52
  var createMockStackWithSkills = () => {
53
53
  const skills = {
54
- ["web-framework-react"]: createMockSkill("web-framework-react", "web-framework", {
55
- description: "React framework"
56
- }),
57
- ["web-state-zustand"]: createMockSkill("web-state-zustand", "web-client-state", {
58
- description: "State management"
59
- }),
60
- ["api-framework-hono"]: createMockSkill("api-framework-hono", "api-api", {
61
- description: "Web framework"
62
- })
54
+ ["web-framework-react"]: TEST_SKILLS.react,
55
+ ["web-state-zustand"]: TEST_SKILLS.zustand,
56
+ ["api-framework-hono"]: TEST_SKILLS.hono
63
57
  };
64
58
  const suggestedStacks = [
65
59
  createMockResolvedStack("react-fullstack", "React Fullstack", {
@@ -67,21 +61,30 @@ var createMockStackWithSkills = () => {
67
61
  allSkillIds: ["web-framework-react", "web-state-zustand", "api-framework-hono"]
68
62
  }),
69
63
  createMockResolvedStack("react-minimal", "React Minimal", {
70
- description: "Minimal React setup",
71
64
  allSkillIds: ["web-framework-react"]
72
65
  })
73
66
  ];
74
67
  return createMockMatrix(skills, {
75
68
  suggestedStacks,
76
69
  categories: {
77
- "web-framework": createMockCategory("web-framework", "Web", {
78
- description: "Web skills",
70
+ "web-framework": createMockCategory("web-framework", "Web Framework", {
71
+ domain: "web",
79
72
  exclusive: false
80
73
  }),
81
- "api-api": createMockCategory("api-api", "API", {
82
- description: "API skills",
74
+ "api-api": createMockCategory("api-api", "API Framework", {
75
+ domain: "api",
83
76
  exclusive: false,
84
77
  order: 1
78
+ }),
79
+ "cli-framework": createMockCategory("cli-framework", "CLI Framework", {
80
+ domain: "cli",
81
+ exclusive: false,
82
+ order: 2
83
+ }),
84
+ "mobile-framework": createMockCategory("mobile-framework", "Mobile Framework", {
85
+ domain: "mobile",
86
+ exclusive: false,
87
+ order: 3
85
88
  })
86
89
  }
87
90
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/components/wizard/step-stack.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { StepStack } from \"./step-stack\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport {\n createMockCategory,\n createMockMatrix,\n createMockResolvedStack,\n createMockSkill,\n} from \"../../lib/__tests__/helpers\";\n\nimport type { MergedSkillsMatrix } from \"../../types\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n SELECT_NAV_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst createMockStackWithSkills = (): MergedSkillsMatrix => {\n const skills = {\n [\"web-framework-react\"]: createMockSkill(\"web-framework-react\", \"web-framework\", {\n description: \"React framework\",\n }),\n [\"web-state-zustand\"]: createMockSkill(\"web-state-zustand\", \"web-client-state\", {\n description: \"State management\",\n }),\n [\"api-framework-hono\"]: createMockSkill(\"api-framework-hono\", \"api-api\", {\n description: \"Web framework\",\n }),\n };\n\n const suggestedStacks = [\n createMockResolvedStack(\"react-fullstack\", \"React Fullstack\", {\n description: \"Full React stack with Zustand and Hono\",\n allSkillIds: [\"web-framework-react\", \"web-state-zustand\", \"api-framework-hono\"],\n }),\n createMockResolvedStack(\"react-minimal\", \"React Minimal\", {\n description: \"Minimal React setup\",\n allSkillIds: [\"web-framework-react\"],\n }),\n ];\n\n return createMockMatrix(skills, {\n suggestedStacks,\n categories: {\n \"web-framework\": createMockCategory(\"web-framework\", \"Web\", {\n description: \"Web skills\",\n exclusive: false,\n }),\n \"api-api\": createMockCategory(\"api-api\", \"API\", {\n description: \"API skills\",\n exclusive: false,\n order: 1,\n }),\n },\n });\n};\n\ndescribe(\"StepStack component\", () => {\n let cleanup: (() => void) | undefined;\n let mockMatrix: MergedSkillsMatrix;\n\n beforeEach(() => {\n useWizardStore.getState().reset();\n mockMatrix = createMockStackWithSkills();\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"unified stack/scratch selection (initial view)\", () => {\n describe(\"rendering\", () => {\n it(\"should render stack options and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"React Fullstack\");\n expect(output).toContain(\"React Minimal\");\n expect(output).toContain(\"Start from scratch\");\n });\n\n it(\"should render focused stack description (only focused item shows description)\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Full React stack\");\n });\n\n it(\"should render ViewTitle for stack selection\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n\n it(\"should render divider between stacks and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"\\u2500\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select first stack on Enter and show domain selection\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n expect(selectedStackId).toBe(\"react-fullstack\");\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should select second stack when navigated to\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n });\n\n describe(\"scratch selection\", () => {\n it(\"should show domain selection when scratch is selected\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n expect(selectedStackId).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should pre-select domains except CLI when scratch is chosen\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n expect(selectedDomains).toContain(\"mobile\");\n expect(selectedDomains).not.toContain(\"cli\");\n });\n });\n\n describe(\"cancel navigation\", () => {\n it(\"should call onCancel when pressing Escape at initial view\", async () => {\n const onCancel = vi.fn();\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} onCancel={onCancel} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(onCancel).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"arrow key navigation\", () => {\n it(\"should navigate down to second stack card\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n\n it(\"should navigate down then up back to first stack\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at top boundary\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at bottom boundary (scratch is last)\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"empty state\", () => {\n it(\"should still show scratch option with no stacks available\", () => {\n const emptyMatrix = createMockMatrix({}, { suggestedStacks: [] });\n\n const { lastFrame, unmount } = render(<StepStack matrix={emptyMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n expect(output).toContain(\"Start from scratch\");\n });\n });\n });\n\n describe(\"domain selection mode (after stack/scratch choice)\", () => {\n beforeEach(() => {\n useWizardStore.getState().setApproach(\"scratch\");\n });\n\n describe(\"rendering\", () => {\n it(\"should render domain options\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web\");\n expect(output).toContain(\"API\");\n expect(output).toContain(\"CLI\");\n });\n\n it(\"should render header text for domain selection\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should show domain descriptions\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n // Only the focused item (Web, first in list) shows its description\n expect(output).toContain(\"Frontend web applications\");\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain when selected\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default, toggle with space\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(useWizardStore.getState().selectedDomains).toContain(\"web\");\n\n useWizardStore.getState().toggleDomain(\"api\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n });\n\n it(\"should show selected domains summary when domains selected\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"web\");\n });\n\n it(\"should navigate to build step when continuing\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Navigate to continue option (after 4 domains)\n for (let i = 0; i < 4; i++) {\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n }\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n });\n });\n\n describe(\"back navigation\", () => {\n it(\"should return to stack/scratch selection when pressing ESC\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n });\n });\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/step-stack.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { StepStack } from \"./step-stack\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport {\n createMockCategory,\n createMockMatrix,\n createMockResolvedStack,\n TEST_SKILLS,\n} from \"../../lib/__tests__/helpers\";\n\nimport type { MergedSkillsMatrix } from \"../../types\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n SELECT_NAV_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\nconst createMockStackWithSkills = (): MergedSkillsMatrix => {\n const skills = {\n [\"web-framework-react\"]: TEST_SKILLS.react,\n [\"web-state-zustand\"]: TEST_SKILLS.zustand,\n [\"api-framework-hono\"]: TEST_SKILLS.hono,\n };\n\n const suggestedStacks = [\n createMockResolvedStack(\"react-fullstack\", \"React Fullstack\", {\n description: \"Full React stack with Zustand and Hono\",\n allSkillIds: [\"web-framework-react\", \"web-state-zustand\", \"api-framework-hono\"],\n }),\n createMockResolvedStack(\"react-minimal\", \"React Minimal\", {\n allSkillIds: [\"web-framework-react\"],\n }),\n ];\n\n return createMockMatrix(skills, {\n suggestedStacks,\n categories: {\n \"web-framework\": createMockCategory(\"web-framework\", \"Web Framework\", {\n domain: \"web\",\n exclusive: false,\n }),\n \"api-api\": createMockCategory(\"api-api\", \"API Framework\", {\n domain: \"api\",\n exclusive: false,\n order: 1,\n }),\n \"cli-framework\": createMockCategory(\"cli-framework\", \"CLI Framework\", {\n domain: \"cli\",\n exclusive: false,\n order: 2,\n }),\n \"mobile-framework\": createMockCategory(\"mobile-framework\", \"Mobile Framework\", {\n domain: \"mobile\",\n exclusive: false,\n order: 3,\n }),\n },\n });\n};\n\ndescribe(\"StepStack component\", () => {\n let cleanup: (() => void) | undefined;\n let mockMatrix: MergedSkillsMatrix;\n\n beforeEach(() => {\n useWizardStore.getState().reset();\n mockMatrix = createMockStackWithSkills();\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"unified stack/scratch selection (initial view)\", () => {\n describe(\"rendering\", () => {\n it(\"should render stack options and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"React Fullstack\");\n expect(output).toContain(\"React Minimal\");\n expect(output).toContain(\"Start from scratch\");\n });\n\n it(\"should render focused stack description (only focused item shows description)\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Full React stack\");\n });\n\n it(\"should render ViewTitle for stack selection\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n\n it(\"should render divider between stacks and scratch option\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"\\u2500\");\n });\n });\n\n describe(\"stack selection\", () => {\n it(\"should select first stack on Enter and show domain selection\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"stack\");\n expect(selectedStackId).toBe(\"react-fullstack\");\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should select second stack when navigated to\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n });\n\n describe(\"scratch selection\", () => {\n it(\"should show domain selection when scratch is selected\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach, selectedStackId } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n expect(selectedStackId).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should pre-select domains except CLI when scratch is chosen\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n expect(selectedDomains).toContain(\"mobile\");\n expect(selectedDomains).not.toContain(\"cli\");\n });\n });\n\n describe(\"cancel navigation\", () => {\n it(\"should call onCancel when pressing Escape at initial view\", async () => {\n const onCancel = vi.fn();\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} onCancel={onCancel} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(onCancel).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"arrow key navigation\", () => {\n it(\"should navigate down to second stack card\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-minimal\");\n });\n\n it(\"should navigate down then up back to first stack\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at top boundary\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedStackId } = useWizardStore.getState();\n expect(selectedStackId).toBe(\"react-fullstack\");\n });\n\n it(\"should clamp at bottom boundary (scratch is last)\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBe(\"scratch\");\n });\n });\n\n describe(\"empty state\", () => {\n it(\"should still show scratch option with no stacks available\", () => {\n const emptyMatrix = createMockMatrix({}, { suggestedStacks: [] });\n\n const { lastFrame, unmount } = render(<StepStack matrix={emptyMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n expect(output).toContain(\"Start from scratch\");\n });\n });\n });\n\n describe(\"domain selection mode (after stack/scratch choice)\", () => {\n beforeEach(() => {\n useWizardStore.getState().setApproach(\"scratch\");\n });\n\n describe(\"rendering\", () => {\n it(\"should render domain options\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Web\");\n expect(output).toContain(\"API\");\n expect(output).toContain(\"CLI\");\n });\n\n it(\"should render header text for domain selection\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Select domains to configure\");\n });\n\n it(\"should show domain descriptions\", () => {\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n // Only the focused item (Web, first in list) shows its description\n expect(output).toContain(\"Frontend web applications\");\n });\n });\n\n describe(\"domain selection\", () => {\n it(\"should toggle domain when selected\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default, toggle with space\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n });\n\n it(\"should allow multiple domain selection\", async () => {\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // First domain (Web) is focused by default\n stdin.write(\" \");\n await delay(SELECT_NAV_DELAY_MS);\n\n expect(useWizardStore.getState().selectedDomains).toContain(\"web\");\n\n useWizardStore.getState().toggleDomain(\"api\");\n\n const { selectedDomains } = useWizardStore.getState();\n expect(selectedDomains).toContain(\"web\");\n expect(selectedDomains).toContain(\"api\");\n });\n\n it(\"should show selected domains summary when domains selected\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Selected:\");\n expect(output).toContain(\"web\");\n });\n\n it(\"should navigate to build step when continuing\", async () => {\n useWizardStore.getState().toggleDomain(\"web\");\n\n const { stdin, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Navigate to continue option (after 4 domains)\n for (let i = 0; i < 4; i++) {\n stdin.write(ARROW_DOWN);\n await delay(SELECT_NAV_DELAY_MS);\n }\n stdin.write(ENTER);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { step } = useWizardStore.getState();\n expect(step).toBe(\"build\");\n });\n });\n\n describe(\"back navigation\", () => {\n it(\"should return to stack/scratch selection when pressing ESC\", async () => {\n const { stdin, lastFrame, unmount } = render(<StepStack matrix={mockMatrix} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n stdin.write(ESCAPE);\n await delay(SELECT_NAV_DELAY_MS);\n\n const { approach } = useWizardStore.getState();\n expect(approach).toBeNull();\n\n const output = lastFrame();\n expect(output).toContain(\"Choose a stack\");\n });\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ViewTitle
4
- } from "../../chunk-MMD26LKJ.js";
5
- import "../../chunk-PP7NDFFE.js";
4
+ } from "../../chunk-DO5OZHSS.js";
5
+ import "../../chunk-74HSA7C4.js";
6
6
  import "../../chunk-DHET7RCE.js";
7
7
  export {
8
8
  ViewTitle
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  WizardLayout
4
- } from "../../chunk-ORJPGZVD.js";
5
- import "../../chunk-MHET2RG2.js";
6
- import "../../chunk-44QCEK7E.js";
7
- import "../../chunk-XRA4LHTJ.js";
8
- import "../../chunk-FDY6SGSA.js";
9
- import "../../chunk-SYHRJG5G.js";
4
+ } from "../../chunk-FKBCYT7B.js";
5
+ import "../../chunk-TOWP4T5L.js";
6
+ import "../../chunk-D7JTL3DJ.js";
7
+ import "../../chunk-UK3AMBR7.js";
8
+ import "../../chunk-J64CA4V6.js";
9
+ import "../../chunk-RT6IBH37.js";
10
10
  import "../../chunk-T4EXUIBY.js";
11
- import "../../chunk-UXNHU7Y7.js";
12
- import "../../chunk-PP7NDFFE.js";
11
+ import "../../chunk-5QRJUBK7.js";
12
+ import "../../chunk-74HSA7C4.js";
13
13
  import "../../chunk-DHET7RCE.js";
14
14
  export {
15
15
  WizardLayout
@@ -3,8 +3,8 @@ import {
3
3
  WIZARD_STEPS,
4
4
  WizardTabs,
5
5
  formatStepLabel
6
- } from "../../chunk-MHET2RG2.js";
7
- import "../../chunk-PP7NDFFE.js";
6
+ } from "../../chunk-TOWP4T5L.js";
7
+ import "../../chunk-74HSA7C4.js";
8
8
  import "../../chunk-DHET7RCE.js";
9
9
  export {
10
10
  WIZARD_STEPS,
@@ -12,8 +12,8 @@ import {
12
12
  WIZARD_STEPS,
13
13
  WizardTabs,
14
14
  formatStepLabel
15
- } from "../../chunk-MHET2RG2.js";
16
- import "../../chunk-PP7NDFFE.js";
15
+ } from "../../chunk-TOWP4T5L.js";
16
+ import "../../chunk-74HSA7C4.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "../../chunk-DHET7RCE.js";
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "../../chunk-FF4Z7MHY.js";
5
- import "../../chunk-WMAALRQI.js";
6
- import "../../chunk-ORJPGZVD.js";
7
- import "../../chunk-MHET2RG2.js";
8
- import "../../chunk-BKW34TKI.js";
9
- import "../../chunk-IUYU2TP6.js";
10
- import "../../chunk-33D24DAF.js";
11
- import "../../chunk-EFZN22TO.js";
12
- import "../../chunk-7SOPVGDV.js";
13
- import "../../chunk-MI4NWOWD.js";
14
- import "../../chunk-ZHJEZ7AU.js";
15
- import "../../chunk-VHGIQN5O.js";
16
- import "../../chunk-EPJ2GJNJ.js";
17
- import "../../chunk-YRVTXSXP.js";
4
+ } from "../../chunk-CTQHZELA.js";
5
+ import "../../chunk-FKBCYT7B.js";
6
+ import "../../chunk-TOWP4T5L.js";
7
+ import "../../chunk-4C7PDDLY.js";
8
+ import "../../chunk-72GS6PIH.js";
9
+ import "../../chunk-FUEZQ2H6.js";
10
+ import "../../chunk-I26YP2Q3.js";
11
+ import "../../chunk-HM3DHMW7.js";
12
+ import "../../chunk-YT7UHV67.js";
18
13
  import "../../chunk-K77I4XGL.js";
19
- import "../../chunk-GVRZY5KI.js";
20
- import "../../chunk-GCN7GGWE.js";
21
- import "../../chunk-MMD26LKJ.js";
22
- import "../../chunk-44QCEK7E.js";
23
- import "../../chunk-52SI5XJH.js";
14
+ import "../../chunk-GVLYNP2I.js";
15
+ import "../../chunk-D7JTL3DJ.js";
16
+ import "../../chunk-3WKFSTG6.js";
17
+ import "../../chunk-KWQ2BQXF.js";
18
+ import "../../chunk-7SOPVGDV.js";
19
+ import "../../chunk-C7BO2ASM.js";
24
20
  import "../../chunk-KUV24B5M.js";
25
- import "../../chunk-53K3URKF.js";
21
+ import "../../chunk-CD64ZNYI.js";
26
22
  import "../../chunk-GG4BSB6S.js";
27
- import "../../chunk-AQANPOLS.js";
23
+ import "../../chunk-CDGHSTB6.js";
24
+ import "../../chunk-RWR56UVK.js";
25
+ import "../../chunk-ODQ2BKWU.js";
26
+ import "../../chunk-DO5OZHSS.js";
27
+ import "../../chunk-5M6JI76P.js";
28
28
  import "../../chunk-U3IGFMCY.js";
29
- import "../../chunk-XRA4LHTJ.js";
30
- import "../../chunk-FDY6SGSA.js";
31
- import "../../chunk-SYHRJG5G.js";
29
+ import "../../chunk-UK3AMBR7.js";
30
+ import "../../chunk-J64CA4V6.js";
31
+ import "../../chunk-RT6IBH37.js";
32
32
  import "../../chunk-T4EXUIBY.js";
33
- import "../../chunk-UXNHU7Y7.js";
34
- import "../../chunk-PP7NDFFE.js";
33
+ import "../../chunk-5QRJUBK7.js";
34
+ import "../../chunk-74HSA7C4.js";
35
35
  import "../../chunk-DHET7RCE.js";
36
36
  export {
37
37
  Wizard
@@ -1,11 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- loadDefaultMappings,
4
3
  resolveSource
5
- } from "../chunk-SYHRJG5G.js";
4
+ } from "../chunk-RT6IBH37.js";
6
5
  import "../chunk-T4EXUIBY.js";
7
- import "../chunk-UXNHU7Y7.js";
8
- import "../chunk-PP7NDFFE.js";
6
+ import "../chunk-5QRJUBK7.js";
7
+ import "../chunk-74HSA7C4.js";
9
8
  import {
10
9
  init_esm_shims
11
10
  } from "../chunk-DHET7RCE.js";
@@ -28,7 +27,6 @@ var hook = async function(options) {
28
27
  if (sArgIndex !== -1 && sArgIndex + 1 < options.argv.length) {
29
28
  sourceFlag = options.argv[sArgIndex + 1];
30
29
  }
31
- await loadDefaultMappings();
32
30
  try {
33
31
  const resolvedConfig = await resolveSource(sourceFlag, projectDir);
34
32
  options.config.sourceConfig = resolvedConfig;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["import { Hook } from \"@oclif/core\";\nimport { resolveSource } from \"../lib/configuration/index.js\";\nimport type { ResolvedConfig } from \"../lib/configuration/index.js\";\nimport { loadDefaultMappings } from \"../lib/loading/index.js\";\n\n/** Narrow interface for attaching sourceConfig to oclif's Config object. */\ninterface ConfigWithSource {\n sourceConfig?: ResolvedConfig;\n}\n\nconst hook: Hook<\"init\"> = async function (options) {\n const projectDir = process.cwd();\n\n // Extract --source flag from argv (not yet parsed by oclif at this point)\n let sourceFlag: string | undefined;\n const sourceArgIndex = options.argv.indexOf(\"--source\");\n if (sourceArgIndex !== -1 && sourceArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sourceArgIndex + 1];\n } else {\n const sourceFlagWithEquals = options.argv.find((arg) => arg.startsWith(\"--source=\"));\n if (sourceFlagWithEquals) {\n sourceFlag = sourceFlagWithEquals.split(\"=\")[1];\n }\n }\n\n // Short form -s\n const sArgIndex = options.argv.indexOf(\"-s\");\n if (sArgIndex !== -1 && sArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sArgIndex + 1];\n }\n\n // Load default agent-skill mappings from agent-mappings.yaml\n await loadDefaultMappings();\n\n try {\n const resolvedConfig = await resolveSource(sourceFlag, projectDir);\n // Boundary cast: oclif Config doesn't declare sourceConfig; read in BaseCommand.sourceConfig\n (options.config as unknown as ConfigWithSource).sourceConfig = resolvedConfig;\n } catch (error) {\n // Let the command handle config failures - commands can check if sourceConfig is undefined\n }\n};\n\nexport default hook;\n"],"mappings":";;;;;;;;;;;;;AAAA;AAUA,IAAM,OAAqB,eAAgB,SAAS;AAClD,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI;AACJ,QAAM,iBAAiB,QAAQ,KAAK,QAAQ,UAAU;AACtD,MAAI,mBAAmB,MAAM,iBAAiB,IAAI,QAAQ,KAAK,QAAQ;AACrE,iBAAa,QAAQ,KAAK,iBAAiB,CAAC;AAAA,EAC9C,OAAO;AACL,UAAM,uBAAuB,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AACnF,QAAI,sBAAsB;AACxB,mBAAa,qBAAqB,MAAM,GAAG,EAAE,CAAC;AAAA,IAChD;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,KAAK,QAAQ,IAAI;AAC3C,MAAI,cAAc,MAAM,YAAY,IAAI,QAAQ,KAAK,QAAQ;AAC3D,iBAAa,QAAQ,KAAK,YAAY,CAAC;AAAA,EACzC;AAGA,QAAM,oBAAoB;AAE1B,MAAI;AACF,UAAM,iBAAiB,MAAM,cAAc,YAAY,UAAU;AAEjE,IAAC,QAAQ,OAAuC,eAAe;AAAA,EACjE,SAAS,OAAO;AAAA,EAEhB;AACF;AAEA,IAAO,eAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/cli/hooks/init.ts"],"sourcesContent":["import { Hook } from \"@oclif/core\";\nimport { resolveSource } from \"../lib/configuration/index.js\";\nimport type { ResolvedConfig } from \"../lib/configuration/index.js\";\n\n/** Narrow interface for attaching sourceConfig to oclif's Config object. */\ninterface ConfigWithSource {\n sourceConfig?: ResolvedConfig;\n}\n\nconst hook: Hook<\"init\"> = async function (options) {\n const projectDir = process.cwd();\n\n // Extract --source flag from argv (not yet parsed by oclif at this point)\n let sourceFlag: string | undefined;\n const sourceArgIndex = options.argv.indexOf(\"--source\");\n if (sourceArgIndex !== -1 && sourceArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sourceArgIndex + 1];\n } else {\n const sourceFlagWithEquals = options.argv.find((arg) => arg.startsWith(\"--source=\"));\n if (sourceFlagWithEquals) {\n sourceFlag = sourceFlagWithEquals.split(\"=\")[1];\n }\n }\n\n // Short form -s\n const sArgIndex = options.argv.indexOf(\"-s\");\n if (sArgIndex !== -1 && sArgIndex + 1 < options.argv.length) {\n sourceFlag = options.argv[sArgIndex + 1];\n }\n\n try {\n const resolvedConfig = await resolveSource(sourceFlag, projectDir);\n // Boundary cast: oclif Config doesn't declare sourceConfig; read in BaseCommand.sourceConfig\n (options.config as unknown as ConfigWithSource).sourceConfig = resolvedConfig;\n } catch (error) {\n // Let the command handle config failures - commands can check if sourceConfig is undefined\n }\n};\n\nexport default hook;\n"],"mappings":";;;;;;;;;;;;AAAA;AASA,IAAM,OAAqB,eAAgB,SAAS;AAClD,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI;AACJ,QAAM,iBAAiB,QAAQ,KAAK,QAAQ,UAAU;AACtD,MAAI,mBAAmB,MAAM,iBAAiB,IAAI,QAAQ,KAAK,QAAQ;AACrE,iBAAa,QAAQ,KAAK,iBAAiB,CAAC;AAAA,EAC9C,OAAO;AACL,UAAM,uBAAuB,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AACnF,QAAI,sBAAsB;AACxB,mBAAa,qBAAqB,MAAM,GAAG,EAAE,CAAC;AAAA,IAChD;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,KAAK,QAAQ,IAAI;AAC3C,MAAI,cAAc,MAAM,YAAY,IAAI,QAAQ,KAAK,QAAQ;AAC3D,iBAAa,QAAQ,KAAK,YAAY,CAAC;AAAA,EACzC;AAEA,MAAI;AACF,UAAM,iBAAiB,MAAM,cAAc,YAAY,UAAU;AAEjE,IAAC,QAAQ,OAAuC,eAAe;AAAA,EACjE,SAAS,OAAO;AAAA,EAEhB;AACF;AAEA,IAAO,eAAQ;","names":[]}
@@ -3,14 +3,14 @@ import {
3
3
  addSource,
4
4
  getSourceSummary,
5
5
  removeSource
6
- } from "./chunk-SYHRJG5G.js";
6
+ } from "./chunk-RT6IBH37.js";
7
7
  import "./chunk-T4EXUIBY.js";
8
- import "./chunk-UXNHU7Y7.js";
9
- import "./chunk-PP7NDFFE.js";
8
+ import "./chunk-5QRJUBK7.js";
9
+ import "./chunk-74HSA7C4.js";
10
10
  import "./chunk-DHET7RCE.js";
11
11
  export {
12
12
  addSource,
13
13
  getSourceSummary,
14
14
  removeSource
15
15
  };
16
- //# sourceMappingURL=source-manager-ABK5COKX.js.map
16
+ //# sourceMappingURL=source-manager-6QZ2GDUA.js.map
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useWizardStore
4
- } from "../chunk-XRA4LHTJ.js";
5
- import "../chunk-FDY6SGSA.js";
6
- import "../chunk-SYHRJG5G.js";
4
+ } from "../chunk-UK3AMBR7.js";
5
+ import "../chunk-J64CA4V6.js";
6
+ import "../chunk-RT6IBH37.js";
7
7
  import "../chunk-T4EXUIBY.js";
8
- import "../chunk-UXNHU7Y7.js";
9
- import "../chunk-PP7NDFFE.js";
8
+ import "../chunk-5QRJUBK7.js";
9
+ import "../chunk-74HSA7C4.js";
10
10
  import "../chunk-DHET7RCE.js";
11
11
  export {
12
12
  useWizardStore
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  createMockMatrix,
4
- createMockSkill
5
- } from "../chunk-J73KIP6Z.js";
4
+ getTestSkill
5
+ } from "../chunk-XE6RTHUD.js";
6
6
  import {
7
7
  beforeEach,
8
8
  describe,
@@ -11,16 +11,16 @@ import {
11
11
  } from "../chunk-XY3XDVMI.js";
12
12
  import {
13
13
  useWizardStore
14
- } from "../chunk-XRA4LHTJ.js";
15
- import "../chunk-FDY6SGSA.js";
16
- import "../chunk-SYHRJG5G.js";
14
+ } from "../chunk-UK3AMBR7.js";
15
+ import "../chunk-J64CA4V6.js";
16
+ import "../chunk-RT6IBH37.js";
17
17
  import {
18
18
  typedKeys
19
19
  } from "../chunk-T4EXUIBY.js";
20
- import "../chunk-UXNHU7Y7.js";
20
+ import "../chunk-5QRJUBK7.js";
21
21
  import {
22
22
  DEFAULT_PRESELECTED_SKILLS
23
- } from "../chunk-PP7NDFFE.js";
23
+ } from "../chunk-74HSA7C4.js";
24
24
  import {
25
25
  init_esm_shims
26
26
  } from "../chunk-DHET7RCE.js";
@@ -640,61 +640,46 @@ describe("WizardStore", () => {
640
640
  }
641
641
  it("should sort local sources before scoped marketplace sources", () => {
642
642
  const store = useWizardStore.getState();
643
- const skill = createMockSkill("web-framework-react", "web-framework", {
644
- displayName: "react",
643
+ const skill = {
644
+ ...getTestSkill("react"),
645
645
  availableSources: [
646
- makeSource({ name: "Photoroom", type: "private", primary: true }),
646
+ makeSource({ name: "Acme Corp", type: "private", primary: true }),
647
647
  makeSource({ name: "local", type: "local", installed: true, installMode: "local" })
648
648
  ]
649
- });
650
- const matrix = createMockMatrix(
651
- { "web-framework-react": skill },
652
- {
653
- displayNames: { "web-framework-react": "react" }
654
- }
655
- );
649
+ };
650
+ const matrix = createMockMatrix({ "web-framework-react": skill });
656
651
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
657
652
  const rows = store.buildSourceRows(matrix);
658
653
  globalExpect(rows).toHaveLength(1);
659
654
  globalExpect(rows[0].options[0].id).toBe("local");
660
- globalExpect(rows[0].options[1].id).toBe("Photoroom");
655
+ globalExpect(rows[0].options[1].id).toBe("Acme Corp");
661
656
  });
662
657
  it("should sort scoped marketplace before default public marketplace", () => {
663
658
  const store = useWizardStore.getState();
664
- const skill = createMockSkill("web-framework-react", "web-framework", {
665
- displayName: "react",
659
+ const skill = {
660
+ ...getTestSkill("react"),
666
661
  availableSources: [
667
662
  makeSource({ name: "Agents Inc", type: "public" }),
668
- makeSource({ name: "Photoroom", type: "private", primary: true })
663
+ makeSource({ name: "Acme Corp", type: "private", primary: true })
669
664
  ]
670
- });
671
- const matrix = createMockMatrix(
672
- { "web-framework-react": skill },
673
- {
674
- displayNames: { "web-framework-react": "react" }
675
- }
676
- );
665
+ };
666
+ const matrix = createMockMatrix({ "web-framework-react": skill });
677
667
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
678
668
  const rows = store.buildSourceRows(matrix);
679
669
  globalExpect(rows).toHaveLength(1);
680
- globalExpect(rows[0].options[0].id).toBe("Photoroom");
670
+ globalExpect(rows[0].options[0].id).toBe("Acme Corp");
681
671
  globalExpect(rows[0].options[1].id).toBe("Agents Inc");
682
672
  });
683
673
  it("should sort default public marketplace before third-party sources", () => {
684
674
  const store = useWizardStore.getState();
685
- const skill = createMockSkill("web-framework-react", "web-framework", {
686
- displayName: "react",
675
+ const skill = {
676
+ ...getTestSkill("react"),
687
677
  availableSources: [
688
678
  makeSource({ name: "Extra Corp", type: "private" }),
689
679
  makeSource({ name: "Agents Inc", type: "public" })
690
680
  ]
691
- });
692
- const matrix = createMockMatrix(
693
- { "web-framework-react": skill },
694
- {
695
- displayNames: { "web-framework-react": "react" }
696
- }
697
- );
681
+ };
682
+ const matrix = createMockMatrix({ "web-framework-react": skill });
698
683
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
699
684
  const rows = store.buildSourceRows(matrix);
700
685
  globalExpect(rows).toHaveLength(1);
@@ -703,26 +688,21 @@ describe("WizardStore", () => {
703
688
  });
704
689
  it("should sort all four tiers in correct order", () => {
705
690
  const store = useWizardStore.getState();
706
- const skill = createMockSkill("web-framework-react", "web-framework", {
707
- displayName: "react",
691
+ const skill = {
692
+ ...getTestSkill("react"),
708
693
  availableSources: [
709
694
  makeSource({ name: "Extra Corp", type: "private" }),
710
695
  makeSource({ name: "Agents Inc", type: "public" }),
711
- makeSource({ name: "Photoroom", type: "private", primary: true }),
696
+ makeSource({ name: "Acme Corp", type: "private", primary: true }),
712
697
  makeSource({ name: "local", type: "local", installed: true, installMode: "local" })
713
698
  ]
714
- });
715
- const matrix = createMockMatrix(
716
- { "web-framework-react": skill },
717
- {
718
- displayNames: { "web-framework-react": "react" }
719
- }
720
- );
699
+ };
700
+ const matrix = createMockMatrix({ "web-framework-react": skill });
721
701
  store.toggleTechnology("web", "web-framework", "web-framework-react", true);
722
702
  const rows = store.buildSourceRows(matrix);
723
703
  globalExpect(rows).toHaveLength(1);
724
704
  const sourceNames = rows[0].options.map((opt) => opt.id);
725
- globalExpect(sourceNames).toEqual(["local", "Photoroom", "Agents Inc", "Extra Corp"]);
705
+ globalExpect(sourceNames).toEqual(["local", "Acme Corp", "Agents Inc", "Extra Corp"]);
726
706
  });
727
707
  });
728
708
  describe("agent selection", () => {