@agents-inc/cli 0.38.0 → 0.41.1

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 (182) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/config/skills-matrix.yaml +115 -123
  3. package/config/stacks.yaml +687 -687
  4. package/dist/{chunk-YHQNTBBN.js → chunk-2D6LKRHW.js} +2 -2
  5. package/dist/{chunk-CYFU3ARY.js → chunk-342YB6TQ.js} +15 -17
  6. package/dist/chunk-342YB6TQ.js.map +1 -0
  7. package/dist/{chunk-HRMQ2RGY.js → chunk-423MJ6DT.js} +31 -56
  8. package/dist/chunk-423MJ6DT.js.map +1 -0
  9. package/dist/{chunk-NFV4SKH5.js → chunk-4LT6RXMY.js} +4 -4
  10. package/dist/{chunk-IVIK776Y.js → chunk-4SYXPG7L.js} +2 -2
  11. package/dist/{chunk-DUQFF45G.js → chunk-4UTPJXUX.js} +8 -8
  12. package/dist/{chunk-3E2V5YL3.js → chunk-5TMB53BV.js} +3 -3
  13. package/dist/{chunk-NI2RSNWB.js → chunk-7FBM7V3E.js} +10 -22
  14. package/dist/chunk-7FBM7V3E.js.map +1 -0
  15. package/dist/chunk-ACVJVYMC.js +111 -0
  16. package/dist/chunk-ACVJVYMC.js.map +1 -0
  17. package/dist/{chunk-FWQK3HWB.js → chunk-AH7XHAKN.js} +11 -11
  18. package/dist/chunk-AH7XHAKN.js.map +1 -0
  19. package/dist/{chunk-VAHVSQIG.js → chunk-AVVYFEMF.js} +2 -2
  20. package/dist/{chunk-EISBUEBL.js → chunk-BFISETQG.js} +3 -3
  21. package/dist/{chunk-ZBJQXDQN.js → chunk-BK7TANUV.js} +4 -2
  22. package/dist/chunk-BK7TANUV.js.map +1 -0
  23. package/dist/{chunk-VAK5PX72.js → chunk-DV4ALU5I.js} +6 -6
  24. package/dist/{chunk-OEX5JDQD.js → chunk-FHBICUXB.js} +4 -4
  25. package/dist/{chunk-TA6IIQI4.js → chunk-GEDWVX6Y.js} +3 -3
  26. package/dist/chunk-GEDWVX6Y.js.map +1 -0
  27. package/dist/{chunk-M6PGIZNS.js → chunk-H6H3COI5.js} +5 -5
  28. package/dist/{chunk-54ZZCWN4.js → chunk-KC2SIUIA.js} +3 -8
  29. package/dist/chunk-KC2SIUIA.js.map +1 -0
  30. package/dist/{chunk-2XX4TMCI.js → chunk-KXM7KOPE.js} +2 -2
  31. package/dist/{chunk-HKDE4LJW.js → chunk-LJRP4SWY.js} +6 -5
  32. package/dist/chunk-LJRP4SWY.js.map +1 -0
  33. package/dist/{chunk-TBDIR6LY.js → chunk-MNPPGIZQ.js} +5 -5
  34. package/dist/{chunk-3NQJOJZL.js → chunk-NYP5SB2V.js} +2 -2
  35. package/dist/{chunk-UOMMQ5M6.js → chunk-NZYKDVRL.js} +2 -2
  36. package/dist/{chunk-UV6JUGIY.js → chunk-PURJZ72D.js} +2 -2
  37. package/dist/{chunk-ATLRUR3B.js → chunk-R52N7DBG.js} +2 -2
  38. package/dist/{chunk-WSGGJKD5.js → chunk-SILUTTV7.js} +6 -6
  39. package/dist/chunk-SILUTTV7.js.map +1 -0
  40. package/dist/{chunk-IZRVFC2Z.js → chunk-TJAZ7QCF.js} +4 -4
  41. package/dist/{chunk-U5OB5ADP.js → chunk-TTXV55NQ.js} +57 -16
  42. package/dist/chunk-TTXV55NQ.js.map +1 -0
  43. package/dist/{chunk-TY5GELDB.js → chunk-UKTYDNWJ.js} +2 -2
  44. package/dist/{chunk-HRW7BIDE.js → chunk-WS6OQIEN.js} +2 -2
  45. package/dist/{chunk-YJIJTBSX.js → chunk-XJXJZ2MJ.js} +42 -54
  46. package/dist/chunk-XJXJZ2MJ.js.map +1 -0
  47. package/dist/chunk-YLJYAQSG.js +210 -0
  48. package/dist/chunk-YLJYAQSG.js.map +1 -0
  49. package/dist/{chunk-MZB3GGOH.js → chunk-YRVTXSXP.js} +1 -2
  50. package/dist/chunk-YRVTXSXP.js.map +1 -0
  51. package/dist/{chunk-TNFACSWF.js → chunk-ZLHGJSRK.js} +3 -3
  52. package/dist/cli/defaults/agent-mappings.yaml +14 -70
  53. package/dist/commands/build/marketplace.js +3 -3
  54. package/dist/commands/build/plugins.js +5 -5
  55. package/dist/commands/build/stack.js +5 -5
  56. package/dist/commands/compile.js +8 -7
  57. package/dist/commands/compile.js.map +1 -1
  58. package/dist/commands/config/get.js +4 -4
  59. package/dist/commands/config/index.js +5 -5
  60. package/dist/commands/config/path.js +4 -4
  61. package/dist/commands/config/set-project.js +4 -4
  62. package/dist/commands/config/show.js +5 -5
  63. package/dist/commands/config/unset-project.js +4 -4
  64. package/dist/commands/diff.js +8 -5
  65. package/dist/commands/diff.js.map +1 -1
  66. package/dist/commands/doctor.js +8 -7
  67. package/dist/commands/doctor.js.map +1 -1
  68. package/dist/commands/edit.js +33 -30
  69. package/dist/commands/edit.js.map +1 -1
  70. package/dist/commands/eject.js +4 -4
  71. package/dist/commands/import/skill.js +5 -5
  72. package/dist/commands/info.js +7 -6
  73. package/dist/commands/info.js.map +1 -1
  74. package/dist/commands/init.js +40 -32
  75. package/dist/commands/init.js.map +1 -1
  76. package/dist/commands/list.js +6 -5
  77. package/dist/commands/list.js.map +1 -1
  78. package/dist/commands/new/agent.js +5 -5
  79. package/dist/commands/new/skill.js +8 -5
  80. package/dist/commands/new/skill.js.map +1 -1
  81. package/dist/commands/outdated.js +8 -5
  82. package/dist/commands/outdated.js.map +1 -1
  83. package/dist/commands/search.js +7 -7
  84. package/dist/commands/uninstall.js +19 -7
  85. package/dist/commands/uninstall.js.map +1 -1
  86. package/dist/commands/update.js +8 -7
  87. package/dist/commands/update.js.map +1 -1
  88. package/dist/commands/validate.js +5 -5
  89. package/dist/commands/version/bump.js +4 -4
  90. package/dist/commands/version/index.js +4 -4
  91. package/dist/commands/version/set.js +4 -4
  92. package/dist/commands/version/show.js +4 -4
  93. package/dist/components/skill-search/skill-search.js +3 -3
  94. package/dist/components/wizard/category-grid.js +2 -2
  95. package/dist/components/wizard/category-grid.test.js +40 -40
  96. package/dist/components/wizard/category-grid.test.js.map +1 -1
  97. package/dist/components/wizard/checkbox-grid.js +2 -2
  98. package/dist/components/wizard/checkbox-grid.test.js +16 -6
  99. package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
  100. package/dist/components/wizard/domain-selection.js +7 -7
  101. package/dist/components/wizard/help-modal.js +2 -2
  102. package/dist/components/wizard/menu-item.js +2 -2
  103. package/dist/components/wizard/search-modal.js +2 -2
  104. package/dist/components/wizard/search-modal.test.js +2 -2
  105. package/dist/components/wizard/section-progress.js +2 -2
  106. package/dist/components/wizard/section-progress.test.js +2 -2
  107. package/dist/components/wizard/source-grid.js +3 -3
  108. package/dist/components/wizard/source-grid.test.js +3 -3
  109. package/dist/components/wizard/stack-selection.js +9 -9
  110. package/dist/components/wizard/step-agents.js +7 -7
  111. package/dist/components/wizard/step-agents.test.js +24 -19
  112. package/dist/components/wizard/step-agents.test.js.map +1 -1
  113. package/dist/components/wizard/step-build.js +8 -8
  114. package/dist/components/wizard/step-build.test.js +40 -39
  115. package/dist/components/wizard/step-build.test.js.map +1 -1
  116. package/dist/components/wizard/step-confirm.js +3 -3
  117. package/dist/components/wizard/step-confirm.test.js +19 -13
  118. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  119. package/dist/components/wizard/step-refine.js +2 -2
  120. package/dist/components/wizard/step-refine.test.js +2 -2
  121. package/dist/components/wizard/step-settings.js +5 -5
  122. package/dist/components/wizard/step-settings.test.js +8 -8
  123. package/dist/components/wizard/step-sources.js +9 -9
  124. package/dist/components/wizard/step-sources.test.js +13 -13
  125. package/dist/components/wizard/step-sources.test.js.map +1 -1
  126. package/dist/components/wizard/step-stack.js +12 -12
  127. package/dist/components/wizard/step-stack.test.js +19 -21
  128. package/dist/components/wizard/step-stack.test.js.map +1 -1
  129. package/dist/components/wizard/view-title.js +2 -2
  130. package/dist/components/wizard/wizard-layout.js +8 -8
  131. package/dist/components/wizard/wizard-tabs.js +2 -2
  132. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  133. package/dist/components/wizard/wizard.js +25 -25
  134. package/dist/config/skills-matrix.yaml +115 -123
  135. package/dist/config/stacks.yaml +687 -687
  136. package/dist/hooks/init.js +3 -3
  137. package/dist/{source-manager-FEGVYDFZ.js → source-manager-PPABS6BC.js} +4 -4
  138. package/dist/stores/wizard-store.js +5 -5
  139. package/dist/stores/wizard-store.test.js +115 -187
  140. package/dist/stores/wizard-store.test.js.map +1 -1
  141. package/package.json +1 -1
  142. package/src/schemas/metadata.schema.json +41 -1
  143. package/src/schemas/project-config.schema.json +34 -35
  144. package/src/schemas/skills-matrix.schema.json +100 -101
  145. package/src/schemas/stacks.schema.json +34 -35
  146. package/dist/chunk-54ZZCWN4.js.map +0 -1
  147. package/dist/chunk-CYFU3ARY.js.map +0 -1
  148. package/dist/chunk-EXFVAEPY.js +0 -80
  149. package/dist/chunk-EXFVAEPY.js.map +0 -1
  150. package/dist/chunk-FWQK3HWB.js.map +0 -1
  151. package/dist/chunk-HKDE4LJW.js.map +0 -1
  152. package/dist/chunk-HRMQ2RGY.js.map +0 -1
  153. package/dist/chunk-IWNPFIGY.js +0 -110
  154. package/dist/chunk-IWNPFIGY.js.map +0 -1
  155. package/dist/chunk-MZB3GGOH.js.map +0 -1
  156. package/dist/chunk-NI2RSNWB.js.map +0 -1
  157. package/dist/chunk-TA6IIQI4.js.map +0 -1
  158. package/dist/chunk-U5OB5ADP.js.map +0 -1
  159. package/dist/chunk-WSGGJKD5.js.map +0 -1
  160. package/dist/chunk-YJIJTBSX.js.map +0 -1
  161. package/dist/chunk-ZBJQXDQN.js.map +0 -1
  162. /package/dist/{chunk-YHQNTBBN.js.map → chunk-2D6LKRHW.js.map} +0 -0
  163. /package/dist/{chunk-NFV4SKH5.js.map → chunk-4LT6RXMY.js.map} +0 -0
  164. /package/dist/{chunk-IVIK776Y.js.map → chunk-4SYXPG7L.js.map} +0 -0
  165. /package/dist/{chunk-DUQFF45G.js.map → chunk-4UTPJXUX.js.map} +0 -0
  166. /package/dist/{chunk-3E2V5YL3.js.map → chunk-5TMB53BV.js.map} +0 -0
  167. /package/dist/{chunk-VAHVSQIG.js.map → chunk-AVVYFEMF.js.map} +0 -0
  168. /package/dist/{chunk-EISBUEBL.js.map → chunk-BFISETQG.js.map} +0 -0
  169. /package/dist/{chunk-VAK5PX72.js.map → chunk-DV4ALU5I.js.map} +0 -0
  170. /package/dist/{chunk-OEX5JDQD.js.map → chunk-FHBICUXB.js.map} +0 -0
  171. /package/dist/{chunk-M6PGIZNS.js.map → chunk-H6H3COI5.js.map} +0 -0
  172. /package/dist/{chunk-2XX4TMCI.js.map → chunk-KXM7KOPE.js.map} +0 -0
  173. /package/dist/{chunk-TBDIR6LY.js.map → chunk-MNPPGIZQ.js.map} +0 -0
  174. /package/dist/{chunk-3NQJOJZL.js.map → chunk-NYP5SB2V.js.map} +0 -0
  175. /package/dist/{chunk-UOMMQ5M6.js.map → chunk-NZYKDVRL.js.map} +0 -0
  176. /package/dist/{chunk-UV6JUGIY.js.map → chunk-PURJZ72D.js.map} +0 -0
  177. /package/dist/{chunk-ATLRUR3B.js.map → chunk-R52N7DBG.js.map} +0 -0
  178. /package/dist/{chunk-IZRVFC2Z.js.map → chunk-TJAZ7QCF.js.map} +0 -0
  179. /package/dist/{chunk-TY5GELDB.js.map → chunk-UKTYDNWJ.js.map} +0 -0
  180. /package/dist/{chunk-HRW7BIDE.js.map → chunk-WS6OQIEN.js.map} +0 -0
  181. /package/dist/{chunk-TNFACSWF.js.map → chunk-ZLHGJSRK.js.map} +0 -0
  182. /package/dist/{source-manager-FEGVYDFZ.js.map → source-manager-PPABS6BC.js.map} +0 -0
@@ -1,11 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- createMockCategory,
4
3
  createMockMatrix,
5
4
  createMockSkill
6
- } from "../chunk-FWQK3HWB.js";
5
+ } from "../chunk-AH7XHAKN.js";
7
6
  import {
8
- afterEach,
9
7
  beforeEach,
10
8
  describe,
11
9
  globalExpect,
@@ -13,19 +11,16 @@ import {
13
11
  } from "../chunk-XY3XDVMI.js";
14
12
  import {
15
13
  useWizardStore
16
- } from "../chunk-HRMQ2RGY.js";
17
- import "../chunk-WSGGJKD5.js";
18
- import {
19
- clearDefaultsCache,
20
- loadDefaultMappings
21
- } from "../chunk-U5OB5ADP.js";
14
+ } from "../chunk-423MJ6DT.js";
15
+ import "../chunk-SILUTTV7.js";
16
+ import "../chunk-TTXV55NQ.js";
22
17
  import {
23
18
  typedKeys
24
19
  } from "../chunk-T4EXUIBY.js";
25
- import "../chunk-YJIJTBSX.js";
20
+ import "../chunk-XJXJZ2MJ.js";
26
21
  import {
27
22
  DEFAULT_PRESELECTED_SKILLS
28
- } from "../chunk-ZBJQXDQN.js";
23
+ } from "../chunk-BK7TANUV.js";
29
24
  import {
30
25
  init_esm_shims
31
26
  } from "../chunk-DHET7RCE.js";
@@ -160,41 +155,41 @@ describe("WizardStore", () => {
160
155
  describe("technology selection", () => {
161
156
  it("should toggle technology in exclusive mode", () => {
162
157
  const store = useWizardStore.getState();
163
- store.toggleTechnology("web", "framework", "web-framework-react", true);
158
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
164
159
  const { domainSelections } = useWizardStore.getState();
165
- globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
160
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
166
161
  });
167
162
  it("should replace technology in exclusive mode", () => {
168
163
  const store = useWizardStore.getState();
169
- store.toggleTechnology("web", "framework", "web-framework-react", true);
170
- store.toggleTechnology("web", "framework", "web-framework-vue", true);
164
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
165
+ store.toggleTechnology("web", "web-framework", "web-framework-vue", true);
171
166
  const { domainSelections } = useWizardStore.getState();
172
- globalExpect(domainSelections.web.framework).toEqual(["web-framework-vue"]);
167
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-vue"]);
173
168
  });
174
169
  it("should toggle off technology in exclusive mode", () => {
175
170
  const store = useWizardStore.getState();
176
- store.toggleTechnology("web", "framework", "web-framework-react", true);
177
- store.toggleTechnology("web", "framework", "web-framework-react", true);
171
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
172
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
178
173
  const { domainSelections } = useWizardStore.getState();
179
- globalExpect(domainSelections.web.framework).toEqual([]);
174
+ globalExpect(domainSelections.web["web-framework"]).toEqual([]);
180
175
  });
181
176
  it("should allow multiple selections in non-exclusive mode", () => {
182
177
  const store = useWizardStore.getState();
183
- store.toggleTechnology("web", "testing", "web-testing-vitest", false);
184
- store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
178
+ store.toggleTechnology("web", "web-testing", "web-testing-vitest", false);
179
+ store.toggleTechnology("web", "web-testing", "web-testing-playwright-e2e", false);
185
180
  const { domainSelections } = useWizardStore.getState();
186
- globalExpect(domainSelections.web.testing).toEqual([
181
+ globalExpect(domainSelections.web["web-testing"]).toEqual([
187
182
  "web-testing-vitest",
188
183
  "web-testing-playwright-e2e"
189
184
  ]);
190
185
  });
191
186
  it("should toggle off technology in non-exclusive mode", () => {
192
187
  const store = useWizardStore.getState();
193
- store.toggleTechnology("web", "testing", "web-testing-vitest", false);
194
- store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
195
- store.toggleTechnology("web", "testing", "web-testing-vitest", false);
188
+ store.toggleTechnology("web", "web-testing", "web-testing-vitest", false);
189
+ store.toggleTechnology("web", "web-testing", "web-testing-playwright-e2e", false);
190
+ store.toggleTechnology("web", "web-testing", "web-testing-vitest", false);
196
191
  const { domainSelections } = useWizardStore.getState();
197
- globalExpect(domainSelections.web.testing).toEqual(["web-testing-playwright-e2e"]);
192
+ globalExpect(domainSelections.web["web-testing"]).toEqual(["web-testing-playwright-e2e"]);
198
193
  });
199
194
  });
200
195
  describe("domain navigation", () => {
@@ -352,9 +347,9 @@ describe("WizardStore", () => {
352
347
  describe("computed getters", () => {
353
348
  it("should get all selected technologies", () => {
354
349
  const store = useWizardStore.getState();
355
- store.toggleTechnology("web", "framework", "web-framework-react", true);
356
- store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
357
- store.toggleTechnology("api", "api", "api-framework-hono", true);
350
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
351
+ store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
352
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
358
353
  const technologies = store.getAllSelectedTechnologies();
359
354
  globalExpect(technologies).toContain("web-framework-react");
360
355
  globalExpect(technologies).toContain("web-styling-scss-modules");
@@ -369,9 +364,9 @@ describe("WizardStore", () => {
369
364
  });
370
365
  it("should get selected technologies per domain", () => {
371
366
  const store = useWizardStore.getState();
372
- store.toggleTechnology("web", "framework", "web-framework-react", true);
373
- store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
374
- store.toggleTechnology("api", "api", "api-framework-hono", true);
367
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
368
+ store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
369
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
375
370
  const perDomain = store.getSelectedTechnologiesPerDomain();
376
371
  globalExpect(perDomain.web).toEqual(["web-framework-react", "web-styling-scss-modules"]);
377
372
  globalExpect(perDomain.api).toEqual(["api-framework-hono"]);
@@ -384,16 +379,16 @@ describe("WizardStore", () => {
384
379
  });
385
380
  it("should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain", () => {
386
381
  const store = useWizardStore.getState();
387
- store.toggleTechnology("web", "framework", "web-framework-react", true);
388
- store.toggleTechnology("web", "framework", "web-framework-react", true);
382
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
383
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
389
384
  const perDomain = store.getSelectedTechnologiesPerDomain();
390
385
  globalExpect(perDomain.web).toBeUndefined();
391
386
  });
392
387
  it("should get technology count", () => {
393
388
  const store = useWizardStore.getState();
394
- store.toggleTechnology("web", "framework", "web-framework-react", true);
395
- store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
396
- store.toggleTechnology("api", "api", "api-framework-hono", true);
389
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
390
+ store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
391
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
397
392
  globalExpect(store.getTechnologyCount()).toBe(3);
398
393
  });
399
394
  it("should return 0 for getTechnologyCount with no selections", () => {
@@ -435,65 +430,6 @@ describe("WizardStore", () => {
435
430
  globalExpect(store.canGoToPreviousDomain()).toBe(false);
436
431
  });
437
432
  });
438
- describe("parent domain selectors", () => {
439
- const matrixWithParentDomain = {
440
- categories: {
441
- "error-handling": createMockCategory("error-handling", "Error Handling", {
442
- domain: "web-extras",
443
- parentDomain: "web",
444
- exclusive: false
445
- }),
446
- framework: createMockCategory("framework", "Framework", {
447
- domain: "web"
448
- })
449
- }
450
- };
451
- const matrixWithoutParent = {
452
- categories: {
453
- framework: createMockCategory("framework", "Framework", {
454
- domain: "web"
455
- })
456
- }
457
- };
458
- it("should find parent domain for a domain with parentDomain", () => {
459
- const store = useWizardStore.getState();
460
- const parent = store.getParentDomain(
461
- "web-extras",
462
- matrixWithParentDomain
463
- );
464
- globalExpect(parent).toBe("web");
465
- });
466
- it("should return undefined for a domain without parentDomain", () => {
467
- const store = useWizardStore.getState();
468
- const parent = store.getParentDomain("web", matrixWithoutParent);
469
- globalExpect(parent).toBeUndefined();
470
- });
471
- it("should get parent domain selections when parent exists", () => {
472
- const store = useWizardStore.getState();
473
- store.toggleTechnology("web", "framework", "web-framework-react", true);
474
- const parentSelections = store.getParentDomainSelections(
475
- "web-extras",
476
- matrixWithParentDomain
477
- );
478
- globalExpect(parentSelections).toEqual({ framework: ["web-framework-react"] });
479
- });
480
- it("should return undefined for getParentDomainSelections when no parent", () => {
481
- const store = useWizardStore.getState();
482
- const parentSelections = store.getParentDomainSelections(
483
- "web",
484
- matrixWithoutParent
485
- );
486
- globalExpect(parentSelections).toBeUndefined();
487
- });
488
- it("should return undefined for getParentDomainSelections when parent has no selections", () => {
489
- const store = useWizardStore.getState();
490
- const parentSelections = store.getParentDomainSelections(
491
- "web-extras",
492
- matrixWithParentDomain
493
- );
494
- globalExpect(parentSelections).toBeUndefined();
495
- });
496
- });
497
433
  describe("reset", () => {
498
434
  it("should reset to initial state", () => {
499
435
  const store = useWizardStore.getState();
@@ -518,17 +454,17 @@ describe("WizardStore", () => {
518
454
  const store = useWizardStore.getState();
519
455
  const stack = {
520
456
  agents: {
521
- web: { framework: [sa("web-framework-react", true)] }
457
+ web: { "web-framework": [sa("web-framework-react", true)] }
522
458
  }
523
459
  };
524
460
  const categories = {
525
- framework: { domain: "web" }
461
+ "web-framework": { domain: "web" }
526
462
  };
527
463
  store.populateFromStack(stack, categories);
528
464
  const { selectedDomains, domainSelections } = useWizardStore.getState();
529
- globalExpect(selectedDomains).toEqual(["web", "web-extras", "api", "cli", "mobile", "shared"]);
465
+ globalExpect(selectedDomains).toEqual(["web", "api", "cli", "mobile", "shared"]);
530
466
  globalExpect(domainSelections.web).toBeDefined();
531
- globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
467
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
532
468
  globalExpect(domainSelections.api).toBeUndefined();
533
469
  });
534
470
  it("should populate domainSelections from stack agents", () => {
@@ -536,32 +472,32 @@ describe("WizardStore", () => {
536
472
  const stack = {
537
473
  agents: {
538
474
  web: {
539
- framework: [sa("web-framework-react", true)],
540
- "client-state": [sa("web-state-zustand")]
475
+ "web-framework": [sa("web-framework-react", true)],
476
+ "web-client-state": [sa("web-state-zustand")]
541
477
  },
542
- api: { api: [sa("api-framework-hono", true)] }
478
+ api: { "api-api": [sa("api-framework-hono", true)] }
543
479
  }
544
480
  };
545
481
  const categories = {
546
- framework: { domain: "web" },
547
- "client-state": { domain: "web" },
548
- api: { domain: "api" }
482
+ "web-framework": { domain: "web" },
483
+ "web-client-state": { domain: "web" },
484
+ "api-api": { domain: "api" }
549
485
  };
550
486
  store.populateFromStack(stack, categories);
551
487
  const { domainSelections } = useWizardStore.getState();
552
- globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
553
- globalExpect(domainSelections.web["client-state"]).toEqual(["web-state-zustand"]);
554
- globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
488
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
489
+ globalExpect(domainSelections.web["web-client-state"]).toEqual(["web-state-zustand"]);
490
+ globalExpect(domainSelections.api["api-api"]).toEqual(["api-framework-hono"]);
555
491
  });
556
492
  it("should skip entries without a domain", () => {
557
493
  const store = useWizardStore.getState();
558
494
  const stack = {
559
495
  agents: {
560
- misc: { methodology: [sa("meta-methodology-vitest")] }
496
+ misc: { "shared-methodology": [sa("meta-methodology-vitest")] }
561
497
  }
562
498
  };
563
499
  const categories = {
564
- methodology: {}
500
+ "shared-methodology": {}
565
501
  };
566
502
  store.populateFromStack(stack, categories);
567
503
  const { domainSelections } = useWizardStore.getState();
@@ -572,7 +508,7 @@ describe("WizardStore", () => {
572
508
  const stack = {
573
509
  agents: {
574
510
  "pattern-scout": {
575
- methodology: [
511
+ "shared-methodology": [
576
512
  sa("meta-methodology-investigation-requirements", true),
577
513
  sa("meta-methodology-anti-over-engineering", true),
578
514
  sa("meta-methodology-success-criteria", true)
@@ -581,11 +517,11 @@ describe("WizardStore", () => {
581
517
  }
582
518
  };
583
519
  const categories = {
584
- methodology: { domain: "shared" }
520
+ "shared-methodology": { domain: "shared" }
585
521
  };
586
522
  store.populateFromStack(stack, categories);
587
523
  const { domainSelections } = useWizardStore.getState();
588
- globalExpect(domainSelections.shared.methodology).toEqual([
524
+ globalExpect(domainSelections.shared["shared-methodology"]).toEqual([
589
525
  "meta-methodology-investigation-requirements",
590
526
  "meta-methodology-anti-over-engineering",
591
527
  "meta-methodology-success-criteria"
@@ -596,41 +532,41 @@ describe("WizardStore", () => {
596
532
  const stack = {
597
533
  agents: {
598
534
  web: {
599
- framework: [sa("web-framework-react", true)],
600
- methodology: [
535
+ "web-framework": [sa("web-framework-react", true)],
536
+ "shared-methodology": [
601
537
  sa("meta-methodology-investigation-requirements", true),
602
538
  sa("meta-methodology-anti-over-engineering", true)
603
539
  ]
604
540
  },
605
- api: { api: [sa("api-framework-hono", true)] }
541
+ api: { "api-api": [sa("api-framework-hono", true)] }
606
542
  }
607
543
  };
608
544
  const categories = {
609
- framework: { domain: "web" },
610
- methodology: { domain: "shared" },
611
- api: { domain: "api" }
545
+ "web-framework": { domain: "web" },
546
+ "shared-methodology": { domain: "shared" },
547
+ "api-api": { domain: "api" }
612
548
  };
613
549
  store.populateFromStack(stack, categories);
614
550
  const { domainSelections } = useWizardStore.getState();
615
- globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
616
- globalExpect(domainSelections.shared.methodology).toEqual([
551
+ globalExpect(domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
552
+ globalExpect(domainSelections.shared["shared-methodology"]).toEqual([
617
553
  "meta-methodology-investigation-requirements",
618
554
  "meta-methodology-anti-over-engineering"
619
555
  ]);
620
- globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
556
+ globalExpect(domainSelections.api["api-api"]).toEqual(["api-framework-hono"]);
621
557
  });
622
558
  it("should deduplicate skills from arrays across multiple agents", () => {
623
559
  const store = useWizardStore.getState();
624
560
  const stack = {
625
561
  agents: {
626
562
  agent1: {
627
- methodology: [
563
+ "shared-methodology": [
628
564
  sa("meta-methodology-investigation-requirements", true),
629
565
  sa("meta-methodology-anti-over-engineering", true)
630
566
  ]
631
567
  },
632
568
  agent2: {
633
- methodology: [
569
+ "shared-methodology": [
634
570
  sa("meta-methodology-anti-over-engineering", true),
635
571
  sa("meta-methodology-success-criteria", true)
636
572
  ]
@@ -638,11 +574,11 @@ describe("WizardStore", () => {
638
574
  }
639
575
  };
640
576
  const categories = {
641
- methodology: { domain: "shared" }
577
+ "shared-methodology": { domain: "shared" }
642
578
  };
643
579
  store.populateFromStack(stack, categories);
644
580
  const { domainSelections } = useWizardStore.getState();
645
- globalExpect(domainSelections.shared.methodology).toEqual([
581
+ globalExpect(domainSelections.shared["shared-methodology"]).toEqual([
646
582
  "meta-methodology-investigation-requirements",
647
583
  "meta-methodology-anti-over-engineering",
648
584
  "meta-methodology-success-criteria"
@@ -670,28 +606,28 @@ describe("WizardStore", () => {
670
606
  store.toggleDomain("web");
671
607
  store.toggleDomain("api");
672
608
  store.setStep("build");
673
- store.toggleTechnology("web", "framework", "web-framework-react", true);
674
- store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
675
- store.toggleTechnology("api", "api", "api-framework-hono", true);
609
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
610
+ store.toggleTechnology("web", "web-styling", "web-styling-scss-modules", true);
611
+ store.toggleTechnology("api", "api-api", "api-framework-hono", true);
676
612
  store.setStep("confirm");
677
613
  const state = useWizardStore.getState();
678
614
  globalExpect(state.step).toBe("confirm");
679
615
  globalExpect(state.approach).toBe("scratch");
680
616
  globalExpect(state.selectedDomains).toEqual(["web", "api"]);
681
- globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
682
- globalExpect(state.domainSelections.web.styling).toEqual(["web-styling-scss-modules"]);
683
- globalExpect(state.domainSelections.api.api).toEqual(["api-framework-hono"]);
617
+ globalExpect(state.domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
618
+ globalExpect(state.domainSelections.web["web-styling"]).toEqual(["web-styling-scss-modules"]);
619
+ globalExpect(state.domainSelections.api["api-api"]).toEqual(["api-framework-hono"]);
684
620
  });
685
621
  it("should preserve selections when going back", () => {
686
622
  const store = useWizardStore.getState();
687
623
  store.setApproach("scratch");
688
624
  store.toggleDomain("web");
689
625
  store.setStep("build");
690
- store.toggleTechnology("web", "framework", "web-framework-react", true);
626
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
691
627
  store.goBack();
692
628
  const state = useWizardStore.getState();
693
629
  globalExpect(state.selectedDomains).toContain("web");
694
- globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
630
+ globalExpect(state.domainSelections.web["web-framework"]).toEqual(["web-framework-react"]);
695
631
  });
696
632
  });
697
633
  describe("buildSourceRows sort order", () => {
@@ -704,7 +640,7 @@ describe("WizardStore", () => {
704
640
  }
705
641
  it("should sort local sources before scoped marketplace sources", () => {
706
642
  const store = useWizardStore.getState();
707
- const skill = createMockSkill("web-framework-react", "framework", {
643
+ const skill = createMockSkill("web-framework-react", "web-framework", {
708
644
  displayName: "react",
709
645
  availableSources: [
710
646
  makeSource({ name: "Photoroom", type: "private", primary: true }),
@@ -717,7 +653,7 @@ describe("WizardStore", () => {
717
653
  displayNames: { "web-framework-react": "react" }
718
654
  }
719
655
  );
720
- store.toggleTechnology("web", "framework", "web-framework-react", true);
656
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
721
657
  const rows = store.buildSourceRows(matrix);
722
658
  globalExpect(rows).toHaveLength(1);
723
659
  globalExpect(rows[0].options[0].id).toBe("local");
@@ -725,7 +661,7 @@ describe("WizardStore", () => {
725
661
  });
726
662
  it("should sort scoped marketplace before default public marketplace", () => {
727
663
  const store = useWizardStore.getState();
728
- const skill = createMockSkill("web-framework-react", "framework", {
664
+ const skill = createMockSkill("web-framework-react", "web-framework", {
729
665
  displayName: "react",
730
666
  availableSources: [
731
667
  makeSource({ name: "Agents Inc", type: "public" }),
@@ -738,7 +674,7 @@ describe("WizardStore", () => {
738
674
  displayNames: { "web-framework-react": "react" }
739
675
  }
740
676
  );
741
- store.toggleTechnology("web", "framework", "web-framework-react", true);
677
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
742
678
  const rows = store.buildSourceRows(matrix);
743
679
  globalExpect(rows).toHaveLength(1);
744
680
  globalExpect(rows[0].options[0].id).toBe("Photoroom");
@@ -746,7 +682,7 @@ describe("WizardStore", () => {
746
682
  });
747
683
  it("should sort default public marketplace before third-party sources", () => {
748
684
  const store = useWizardStore.getState();
749
- const skill = createMockSkill("web-framework-react", "framework", {
685
+ const skill = createMockSkill("web-framework-react", "web-framework", {
750
686
  displayName: "react",
751
687
  availableSources: [
752
688
  makeSource({ name: "Extra Corp", type: "private" }),
@@ -759,7 +695,7 @@ describe("WizardStore", () => {
759
695
  displayNames: { "web-framework-react": "react" }
760
696
  }
761
697
  );
762
- store.toggleTechnology("web", "framework", "web-framework-react", true);
698
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
763
699
  const rows = store.buildSourceRows(matrix);
764
700
  globalExpect(rows).toHaveLength(1);
765
701
  globalExpect(rows[0].options[0].id).toBe("Agents Inc");
@@ -767,7 +703,7 @@ describe("WizardStore", () => {
767
703
  });
768
704
  it("should sort all four tiers in correct order", () => {
769
705
  const store = useWizardStore.getState();
770
- const skill = createMockSkill("web-framework-react", "framework", {
706
+ const skill = createMockSkill("web-framework-react", "web-framework", {
771
707
  displayName: "react",
772
708
  availableSources: [
773
709
  makeSource({ name: "Extra Corp", type: "private" }),
@@ -782,7 +718,7 @@ describe("WizardStore", () => {
782
718
  displayNames: { "web-framework-react": "react" }
783
719
  }
784
720
  );
785
- store.toggleTechnology("web", "framework", "web-framework-react", true);
721
+ store.toggleTechnology("web", "web-framework", "web-framework-react", true);
786
722
  const rows = store.buildSourceRows(matrix);
787
723
  globalExpect(rows).toHaveLength(1);
788
724
  const sourceNames = rows[0].options.map((opt) => opt.id);
@@ -823,18 +759,11 @@ describe("WizardStore", () => {
823
759
  globalExpect(selectedAgents).toEqual([]);
824
760
  });
825
761
  });
826
- describe("preselectAgentsFromSkills", () => {
827
- beforeEach(async () => {
828
- clearDefaultsCache();
829
- await loadDefaultMappings();
830
- });
831
- afterEach(() => {
832
- clearDefaultsCache();
833
- });
834
- it("should preselect web-related agents when web skills are selected", () => {
762
+ describe("preselectAgentsFromDomains", () => {
763
+ it("should preselect web-related agents when web domain is selected", () => {
835
764
  const store = useWizardStore.getState();
836
- store.toggleTechnology("web", "framework", "web-framework-react", true);
837
- store.preselectAgentsFromSkills();
765
+ store.toggleDomain("web");
766
+ store.preselectAgentsFromDomains();
838
767
  const { selectedAgents } = useWizardStore.getState();
839
768
  globalExpect(selectedAgents).toContain("web-developer");
840
769
  globalExpect(selectedAgents).toContain("web-reviewer");
@@ -843,22 +772,32 @@ describe("WizardStore", () => {
843
772
  globalExpect(selectedAgents).toContain("web-pm");
844
773
  globalExpect(selectedAgents).toContain("web-architecture");
845
774
  });
846
- it("should preselect api-related agents when api skills are selected", () => {
775
+ it("should preselect api-related agents when api domain is selected", () => {
847
776
  const store = useWizardStore.getState();
848
- store.toggleTechnology("api", "api", "api-framework-hono", true);
849
- store.preselectAgentsFromSkills();
777
+ store.toggleDomain("api");
778
+ store.preselectAgentsFromDomains();
850
779
  const { selectedAgents } = useWizardStore.getState();
851
780
  globalExpect(selectedAgents).toContain("api-developer");
852
781
  globalExpect(selectedAgents).toContain("api-reviewer");
853
782
  globalExpect(selectedAgents).toContain("api-researcher");
854
783
  globalExpect(selectedAgents).not.toContain("web-developer");
855
784
  });
856
- it("should never include optional agents regardless of skills", () => {
785
+ it("should preselect cli agents when cli domain is selected", () => {
786
+ const store = useWizardStore.getState();
787
+ store.toggleDomain("cli");
788
+ store.preselectAgentsFromDomains();
789
+ const { selectedAgents } = useWizardStore.getState();
790
+ globalExpect(selectedAgents).toContain("cli-developer");
791
+ globalExpect(selectedAgents).toContain("cli-tester");
792
+ globalExpect(selectedAgents).toContain("cli-reviewer");
793
+ globalExpect(selectedAgents).toContain("cli-migrator");
794
+ });
795
+ it("should never include optional agents regardless of domains", () => {
857
796
  const store = useWizardStore.getState();
858
- store.toggleTechnology("web", "framework", "web-framework-react", true);
859
- store.toggleTechnology("api", "api", "api-framework-hono", true);
860
- store.toggleTechnology("cli", "framework", "cli-framework-oclif-ink", true);
861
- store.preselectAgentsFromSkills();
797
+ store.toggleDomain("web");
798
+ store.toggleDomain("api");
799
+ store.toggleDomain("cli");
800
+ store.preselectAgentsFromDomains();
862
801
  const { selectedAgents } = useWizardStore.getState();
863
802
  globalExpect(selectedAgents).not.toContain("agent-summoner");
864
803
  globalExpect(selectedAgents).not.toContain("skill-summoner");
@@ -866,38 +805,27 @@ describe("WizardStore", () => {
866
805
  globalExpect(selectedAgents).not.toContain("pattern-scout");
867
806
  globalExpect(selectedAgents).not.toContain("web-pattern-critique");
868
807
  });
869
- it("should return empty agents when no skills are selected", () => {
808
+ it("should return empty agents when no domains are selected", () => {
870
809
  const store = useWizardStore.getState();
871
- store.preselectAgentsFromSkills();
810
+ store.preselectAgentsFromDomains();
872
811
  const { selectedAgents } = useWizardStore.getState();
873
812
  globalExpect(selectedAgents).toEqual([]);
874
813
  });
875
- it("should produce union of agents for skills across multiple domains", () => {
814
+ it("should produce union of agents for multiple domains", () => {
876
815
  const store = useWizardStore.getState();
877
- store.toggleTechnology("web", "framework", "web-framework-react", true);
878
- store.toggleTechnology("api", "api", "api-framework-hono", true);
879
- store.preselectAgentsFromSkills();
816
+ store.toggleDomain("web");
817
+ store.toggleDomain("api");
818
+ store.preselectAgentsFromDomains();
880
819
  const { selectedAgents } = useWizardStore.getState();
881
820
  globalExpect(selectedAgents).toContain("web-developer");
882
821
  globalExpect(selectedAgents).toContain("api-developer");
883
822
  globalExpect(selectedAgents).toContain("web-reviewer");
884
823
  globalExpect(selectedAgents).toContain("api-reviewer");
885
824
  });
886
- it("should preselect cli agents when cli skills are selected", () => {
825
+ it("should not preselect api agents when only web domain is selected", () => {
887
826
  const store = useWizardStore.getState();
888
- store.toggleTechnology("cli", "framework", "cli-framework-oclif-ink", true);
889
- store.preselectAgentsFromSkills();
890
- const { selectedAgents } = useWizardStore.getState();
891
- globalExpect(selectedAgents).toContain("cli-developer");
892
- globalExpect(selectedAgents).toContain("cli-tester");
893
- globalExpect(selectedAgents).toContain("cli-reviewer");
894
- globalExpect(selectedAgents).toContain("cli-migrator");
895
- });
896
- it("should not preselect api agents when only web skills are selected", () => {
897
- const store = useWizardStore.getState();
898
- store.toggleTechnology("web", "framework", "web-framework-react", true);
899
- store.toggleTechnology("web", "styling", "web-styling-scss-modules", false);
900
- store.preselectAgentsFromSkills();
827
+ store.toggleDomain("web");
828
+ store.preselectAgentsFromDomains();
901
829
  const { selectedAgents } = useWizardStore.getState();
902
830
  globalExpect(selectedAgents).toContain("web-developer");
903
831
  globalExpect(selectedAgents).not.toContain("api-developer");
@@ -905,9 +833,9 @@ describe("WizardStore", () => {
905
833
  });
906
834
  it("should return sorted agents", () => {
907
835
  const store = useWizardStore.getState();
908
- store.toggleTechnology("web", "framework", "web-framework-react", true);
909
- store.toggleTechnology("api", "api", "api-framework-hono", true);
910
- store.preselectAgentsFromSkills();
836
+ store.toggleDomain("web");
837
+ store.toggleDomain("api");
838
+ store.preselectAgentsFromDomains();
911
839
  const { selectedAgents } = useWizardStore.getState();
912
840
  const sorted = [...selectedAgents].sort();
913
841
  globalExpect(selectedAgents).toEqual(sorted);
@@ -915,8 +843,8 @@ describe("WizardStore", () => {
915
843
  it("should replace previous agent selection", () => {
916
844
  const store = useWizardStore.getState();
917
845
  store.toggleAgent("documentor");
918
- store.toggleTechnology("web", "framework", "web-framework-react", true);
919
- store.preselectAgentsFromSkills();
846
+ store.toggleDomain("web");
847
+ store.preselectAgentsFromDomains();
920
848
  const { selectedAgents } = useWizardStore.getState();
921
849
  globalExpect(selectedAgents).not.toContain("documentor");
922
850
  });