@agents-inc/cli 0.34.1 → 0.35.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 (115) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/config/skills-matrix.yaml +9 -9
  3. package/config/stacks.yaml +8 -8
  4. package/dist/{chunk-B47QYIUL.js → chunk-5LPPIT6H.js} +4 -4
  5. package/dist/chunk-AQQVSNUX.js +33 -0
  6. package/dist/chunk-AQQVSNUX.js.map +1 -0
  7. package/dist/{chunk-GVMA2EKC.js → chunk-BLLXNFWP.js} +2 -2
  8. package/dist/{chunk-KENWMEKN.js → chunk-BPD4VUAU.js} +4 -4
  9. package/dist/{chunk-X7SPCWY6.js → chunk-CXWPUVA7.js} +12 -7
  10. package/dist/chunk-CXWPUVA7.js.map +1 -0
  11. package/dist/{chunk-QC37C32G.js → chunk-IG7CUREJ.js} +2 -2
  12. package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
  13. package/dist/chunk-KUV24B5M.js.map +1 -0
  14. package/dist/{chunk-ZI5EBHCC.js → chunk-KWF6D7ZP.js} +21 -10
  15. package/dist/chunk-KWF6D7ZP.js.map +1 -0
  16. package/dist/{chunk-ZP4BI6J2.js → chunk-NJ775OJ4.js} +3 -3
  17. package/dist/{chunk-ALS7SH7X.js → chunk-NVQEHRJY.js} +2 -2
  18. package/dist/{chunk-TKB4O2RY.js → chunk-OGJ7DFCL.js} +2 -2
  19. package/dist/{chunk-R3AD6XBJ.js → chunk-OGXSTJP2.js} +3 -3
  20. package/dist/{chunk-NLR6Z37M.js → chunk-OI4WBRC7.js} +12 -3
  21. package/dist/chunk-OI4WBRC7.js.map +1 -0
  22. package/dist/{chunk-JZOLJVWA.js → chunk-PKUIO2Z7.js} +6 -5
  23. package/dist/chunk-PKUIO2Z7.js.map +1 -0
  24. package/dist/{chunk-CB7GYRUP.js → chunk-U36YCEBK.js} +76 -36
  25. package/dist/chunk-U36YCEBK.js.map +1 -0
  26. package/dist/{chunk-2LUXM5FB.js → chunk-UFUQUFV6.js} +7 -28
  27. package/dist/chunk-UFUQUFV6.js.map +1 -0
  28. package/dist/{chunk-TM4I4EHK.js → chunk-WMVGRAFB.js} +2884 -2925
  29. package/dist/chunk-WMVGRAFB.js.map +1 -0
  30. package/dist/{chunk-A5CYQQVG.js → chunk-XNQJBQ5X.js} +2 -2
  31. package/dist/{chunk-GIFEDW27.js → chunk-YIKBNGE3.js} +3 -3
  32. package/dist/{chunk-ANGAZ444.js → chunk-YN35L5NE.js} +1 -1
  33. package/dist/chunk-YN35L5NE.js.map +1 -0
  34. package/dist/commands/build/marketplace.js +2 -2
  35. package/dist/commands/build/plugins.js +4 -4
  36. package/dist/commands/build/stack.js +4 -4
  37. package/dist/commands/compile.js +17 -6
  38. package/dist/commands/compile.js.map +1 -1
  39. package/dist/commands/config/get.js +3 -3
  40. package/dist/commands/config/index.js +4 -4
  41. package/dist/commands/config/path.js +3 -3
  42. package/dist/commands/config/set-project.js +3 -3
  43. package/dist/commands/config/show.js +4 -4
  44. package/dist/commands/config/unset-project.js +3 -3
  45. package/dist/commands/diff.js +3 -3
  46. package/dist/commands/doctor.js +3 -3
  47. package/dist/commands/edit.js +24 -18
  48. package/dist/commands/edit.js.map +1 -1
  49. package/dist/commands/eject.js +3 -3
  50. package/dist/commands/import/skill.js +3 -3
  51. package/dist/commands/info.js +3 -3
  52. package/dist/commands/init.js +18 -16
  53. package/dist/commands/init.js.map +1 -1
  54. package/dist/commands/list.js +3 -3
  55. package/dist/commands/new/agent.js +4 -4
  56. package/dist/commands/new/skill.js +3 -3
  57. package/dist/commands/outdated.js +3 -3
  58. package/dist/commands/search.js +3 -3
  59. package/dist/commands/uninstall.js +103 -26
  60. package/dist/commands/uninstall.js.map +1 -1
  61. package/dist/commands/update.js +4 -4
  62. package/dist/commands/validate.js +3 -3
  63. package/dist/commands/version/bump.js +3 -3
  64. package/dist/commands/version/index.js +3 -3
  65. package/dist/commands/version/set.js +3 -3
  66. package/dist/commands/version/show.js +3 -3
  67. package/dist/components/wizard/domain-selection.js +4 -4
  68. package/dist/components/wizard/search-modal.js +2 -2
  69. package/dist/components/wizard/search-modal.test.js +2 -2
  70. package/dist/components/wizard/source-grid.js +3 -3
  71. package/dist/components/wizard/source-grid.test.js +3 -3
  72. package/dist/components/wizard/stack-selection.js +4 -4
  73. package/dist/components/wizard/step-build.js +4 -3
  74. package/dist/components/wizard/step-build.test.js +5 -4
  75. package/dist/components/wizard/step-build.test.js.map +1 -1
  76. package/dist/components/wizard/step-confirm.test.js +3 -3
  77. package/dist/components/wizard/step-settings.js +4 -4
  78. package/dist/components/wizard/step-settings.test.js +7 -7
  79. package/dist/components/wizard/step-sources.js +8 -7
  80. package/dist/components/wizard/step-sources.test.js +9 -8
  81. package/dist/components/wizard/step-sources.test.js.map +1 -1
  82. package/dist/components/wizard/step-stack.js +6 -6
  83. package/dist/components/wizard/step-stack.test.js +7 -7
  84. package/dist/components/wizard/wizard-layout.js +4 -4
  85. package/dist/components/wizard/wizard.js +15 -14
  86. package/dist/config/skills-matrix.yaml +9 -9
  87. package/dist/config/stacks.yaml +8 -8
  88. package/dist/hooks/init.js +4 -2
  89. package/dist/hooks/init.js.map +1 -1
  90. package/dist/{source-manager-WJYANKDI.js → source-manager-PTK4P6BF.js} +3 -3
  91. package/dist/stores/wizard-store.js +3 -3
  92. package/dist/stores/wizard-store.test.js +4 -4
  93. package/package.json +1 -1
  94. package/src/schemas/project-config.schema.json +3 -0
  95. package/src/schemas/project-source-config.schema.json +12 -0
  96. package/dist/chunk-2LUXM5FB.js.map +0 -1
  97. package/dist/chunk-ANGAZ444.js.map +0 -1
  98. package/dist/chunk-CB7GYRUP.js.map +0 -1
  99. package/dist/chunk-JMVWYAHT.js.map +0 -1
  100. package/dist/chunk-JZOLJVWA.js.map +0 -1
  101. package/dist/chunk-NLR6Z37M.js.map +0 -1
  102. package/dist/chunk-TM4I4EHK.js.map +0 -1
  103. package/dist/chunk-X7SPCWY6.js.map +0 -1
  104. package/dist/chunk-ZI5EBHCC.js.map +0 -1
  105. /package/dist/{chunk-B47QYIUL.js.map → chunk-5LPPIT6H.js.map} +0 -0
  106. /package/dist/{chunk-GVMA2EKC.js.map → chunk-BLLXNFWP.js.map} +0 -0
  107. /package/dist/{chunk-KENWMEKN.js.map → chunk-BPD4VUAU.js.map} +0 -0
  108. /package/dist/{chunk-QC37C32G.js.map → chunk-IG7CUREJ.js.map} +0 -0
  109. /package/dist/{chunk-ZP4BI6J2.js.map → chunk-NJ775OJ4.js.map} +0 -0
  110. /package/dist/{chunk-ALS7SH7X.js.map → chunk-NVQEHRJY.js.map} +0 -0
  111. /package/dist/{chunk-TKB4O2RY.js.map → chunk-OGJ7DFCL.js.map} +0 -0
  112. /package/dist/{chunk-R3AD6XBJ.js.map → chunk-OGXSTJP2.js.map} +0 -0
  113. /package/dist/{chunk-A5CYQQVG.js.map → chunk-XNQJBQ5X.js.map} +0 -0
  114. /package/dist/{chunk-GIFEDW27.js.map → chunk-YIKBNGE3.js.map} +0 -0
  115. /package/dist/{source-manager-WJYANKDI.js.map → source-manager-PTK4P6BF.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -9,6 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ---
11
11
 
12
+ ## [0.35.0] - 2026-02-18
13
+
14
+ **Selective uninstall, expert mode persistence, metadata.yaml requirement, and test infrastructure overhaul**
15
+
16
+ See [changelogs/0.35.0.md](./changelogs/0.35.0.md) for full details.
17
+
18
+ ---
19
+
12
20
  ## [0.34.1] - 2026-02-17
13
21
 
14
22
  **Code formatting**
@@ -38,9 +38,9 @@ categories:
38
38
  styling:
39
39
  id: styling
40
40
  displayName: Styling
41
- description: CSS approach (SCSS Modules, Tailwind)
41
+ description: CSS approach (SCSS Modules, Tailwind, CVA)
42
42
  domain: web
43
- exclusive: true
43
+ exclusive: false
44
44
  required: true
45
45
  order: 3
46
46
 
@@ -437,10 +437,6 @@ relationships:
437
437
  # DISCOURAGES (Soft warnings - selecting A shows warning for B but doesn't disable)
438
438
  # ─────────────────────────────────────────────────────────────────
439
439
  discourages:
440
- # Styling paradigm mixing is unusual but technically compatible
441
- - skills: [scss-modules, tailwind]
442
- reason: "Mixing CSS paradigms causes slower builds (Tailwind runs per-module) and inconsistent patterns - pick one approach for new projects. Valid for gradual migrations."
443
-
444
440
  # React state libraries - can coexist but adds complexity
445
441
  - skills: [zustand, redux-toolkit, mobx]
446
442
  reason: "Using multiple React state libraries adds complexity - choose one primary approach. Migration patterns exist for gradual transitions."
@@ -513,8 +509,12 @@ relationships:
513
509
  reason: "Radix primitives work well with any CSS approach"
514
510
 
515
511
  - when: tailwind
516
- suggest: [shadcn-ui]
517
- reason: "shadcn/ui is built for Tailwind"
512
+ suggest: [shadcn-ui, cva]
513
+ reason: "shadcn/ui is built for Tailwind; CVA provides type-safe variant management for Tailwind classes"
514
+
515
+ - when: cva
516
+ suggest: [tailwind]
517
+ reason: "CVA is designed for type-safe variant management of Tailwind utility classes"
518
518
 
519
519
  # UI component recommendations
520
520
  - when: shadcn-ui
@@ -691,7 +691,7 @@ relationships:
691
691
  skills: [nextjs-app-router, remix]
692
692
 
693
693
  - purpose: "Styling"
694
- skills: [scss-modules, tailwind]
694
+ skills: [scss-modules, tailwind, cva]
695
695
 
696
696
  - purpose: "Client State (React)"
697
697
  skills: [zustand, redux-toolkit, mobx, jotai]
@@ -4,7 +4,7 @@
4
4
  stacks:
5
5
  - id: nextjs-fullstack
6
6
  name: Next.js Fullstack
7
- description: Production-ready Next.js with complete backend infrastructure
7
+ description: React + Hono full-stack
8
8
  agents:
9
9
  web-developer:
10
10
  framework:
@@ -402,7 +402,7 @@ stacks:
402
402
 
403
403
  - id: angular-stack
404
404
  name: Modern Angular Stack
405
- description: Angular 19 with Signals and NgRx SignalStore
405
+ description: Angular + Signals stack
406
406
  agents:
407
407
  web-developer:
408
408
  framework:
@@ -694,7 +694,7 @@ stacks:
694
694
 
695
695
  - id: nuxt-stack
696
696
  name: Nuxt Full-Stack
697
- description: Vue 3 with Nuxt for full-stack Vue development
697
+ description: Vue + Nuxt full-stack
698
698
  agents:
699
699
  web-developer:
700
700
  framework:
@@ -997,7 +997,7 @@ stacks:
997
997
 
998
998
  - id: remix-stack
999
999
  name: Remix Full-Stack
1000
- description: Remix for form-heavy applications with excellent DX
1000
+ description: Remix + form-centric DX
1001
1001
  agents:
1002
1002
  web-developer:
1003
1003
  framework:
@@ -1291,7 +1291,7 @@ stacks:
1291
1291
 
1292
1292
  - id: vue-stack
1293
1293
  name: Modern Vue Stack
1294
- description: Vue 3 with Composition API, Pinia, and Tailwind
1294
+ description: Vue + Pinia + Tailwind
1295
1295
  agents:
1296
1296
  web-developer:
1297
1297
  framework:
@@ -1583,7 +1583,7 @@ stacks:
1583
1583
 
1584
1584
  - id: solidjs-stack
1585
1585
  name: SolidJS Stack
1586
- description: High-performance SolidJS with Tailwind and Hono backend
1586
+ description: SolidJS + Hono full-stack
1587
1587
  agents:
1588
1588
  web-developer:
1589
1589
  framework:
@@ -1866,7 +1866,7 @@ stacks:
1866
1866
 
1867
1867
  - id: react-native-stack
1868
1868
  name: React Native Stack
1869
- description: Cross-platform mobile with React Native and Expo
1869
+ description: React Native + Expo mobile
1870
1870
  agents:
1871
1871
  web-developer:
1872
1872
  framework:
@@ -2096,7 +2096,7 @@ stacks:
2096
2096
 
2097
2097
  - id: meta-stack
2098
2098
  name: Meta Agent Stack
2099
- description: Agents for creating agents, skills, documentation, and extracting patterns - invoke for meta-level development work
2099
+ description: Meta-level agent tooling
2100
2100
  agents:
2101
2101
  skill-summoner:
2102
2102
  methodology:
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "./chunk-TKB4O2RY.js";
4
+ } from "./chunk-OGJ7DFCL.js";
5
5
  import {
6
6
  DomainSelection
7
- } from "./chunk-ALS7SH7X.js";
7
+ } from "./chunk-NVQEHRJY.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "./chunk-R3AD6XBJ.js";
10
+ } from "./chunk-OGXSTJP2.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-DHET7RCE.js";
@@ -26,4 +26,4 @@ var StepStack = ({ matrix, onCancel }) => {
26
26
  export {
27
27
  StepStack
28
28
  };
29
- //# sourceMappingURL=chunk-B47QYIUL.js.map
29
+ //# sourceMappingURL=chunk-5LPPIT6H.js.map
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-DHET7RCE.js";
5
+
6
+ // src/cli/components/hooks/use-measured-height.ts
7
+ init_esm_shims();
8
+ import { useRef, useState, useEffect } from "react";
9
+ import { measureElement, useStdout } from "ink";
10
+ function useMeasuredHeight() {
11
+ const ref = useRef(null);
12
+ const [measuredHeight, setMeasuredHeight] = useState(0);
13
+ const { stdout } = useStdout();
14
+ useEffect(() => {
15
+ const measure = () => {
16
+ if (ref.current) {
17
+ const { height } = measureElement(ref.current);
18
+ setMeasuredHeight((prev) => prev !== height ? height : prev);
19
+ }
20
+ };
21
+ measure();
22
+ stdout.on("resize", measure);
23
+ return () => {
24
+ stdout.off("resize", measure);
25
+ };
26
+ }, [stdout]);
27
+ return { ref, measuredHeight };
28
+ }
29
+
30
+ export {
31
+ useMeasuredHeight
32
+ };
33
+ //# sourceMappingURL=chunk-AQQVSNUX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/hooks/use-measured-height.ts"],"sourcesContent":["import { useRef, useState, useEffect } from \"react\";\nimport { type DOMElement, measureElement, useStdout } from \"ink\";\n\n/**\n * Measures the computed height of a Box element using Ink's Yoga layout engine.\n *\n * Returns a ref to attach to a Box with `flexGrow={1}` and the measured height.\n * The Box must be inside a parent chain with a constrained height (e.g., an\n * explicit `height` prop on an ancestor) so Yoga can compute the remaining space.\n *\n * Returns 0 before the first layout pass. Re-measures on terminal resize.\n */\nexport function useMeasuredHeight(): {\n ref: React.Ref<DOMElement>;\n measuredHeight: number;\n} {\n const ref = useRef<DOMElement>(null);\n const [measuredHeight, setMeasuredHeight] = useState(0);\n const { stdout } = useStdout();\n\n useEffect(() => {\n const measure = () => {\n if (ref.current) {\n const { height } = measureElement(ref.current);\n setMeasuredHeight((prev) => (prev !== height ? height : prev));\n }\n };\n\n measure();\n\n stdout.on(\"resize\", measure);\n return () => {\n stdout.off(\"resize\", measure);\n };\n }, [stdout]);\n\n return { ref, measuredHeight };\n}\n"],"mappings":";;;;;;AAAA;AAAA,SAAS,QAAQ,UAAU,iBAAiB;AAC5C,SAA0B,gBAAgB,iBAAiB;AAWpD,SAAS,oBAGd;AACA,QAAM,MAAM,OAAmB,IAAI;AACnC,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,CAAC;AACtD,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,YAAU,MAAM;AACd,UAAM,UAAU,MAAM;AACpB,UAAI,IAAI,SAAS;AACf,cAAM,EAAE,OAAO,IAAI,eAAe,IAAI,OAAO;AAC7C,0BAAkB,CAAC,SAAU,SAAS,SAAS,SAAS,IAAK;AAAA,MAC/D;AAAA,IACF;AAEA,YAAQ;AAER,WAAO,GAAG,UAAU,OAAO;AAC3B,WAAO,MAAM;AACX,aAAO,IAAI,UAAU,OAAO;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO,EAAE,KAAK,eAAe;AAC/B;","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getErrorMessage
4
- } from "./chunk-NLR6Z37M.js";
4
+ } from "./chunk-OI4WBRC7.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -53,4 +53,4 @@ export {
53
53
  EXIT_CODES,
54
54
  BaseCommand
55
55
  };
56
- //# sourceMappingURL=chunk-GVMA2EKC.js.map
56
+ //# sourceMappingURL=chunk-BLLXNFWP.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-HTTPKSL6.js";
8
8
  import {
9
9
  useKeyboardNavigation
10
- } from "./chunk-JMVWYAHT.js";
10
+ } from "./chunk-KUV24B5M.js";
11
11
  import {
12
12
  useTextInput
13
13
  } from "./chunk-U3IGFMCY.js";
@@ -16,11 +16,11 @@ import {
16
16
  addSource,
17
17
  getSourceSummary,
18
18
  removeSource
19
- } from "./chunk-TM4I4EHK.js";
19
+ } from "./chunk-WMVGRAFB.js";
20
20
  import {
21
21
  getErrorMessage,
22
22
  verbose
23
- } from "./chunk-NLR6Z37M.js";
23
+ } from "./chunk-OI4WBRC7.js";
24
24
  import {
25
25
  CLI_COLORS
26
26
  } from "./chunk-YCS7GF6Y.js";
@@ -232,4 +232,4 @@ var StepSettings = ({ projectDir, onClose }) => {
232
232
  export {
233
233
  StepSettings
234
234
  };
235
- //# sourceMappingURL=chunk-KENWMEKN.js.map
235
+ //# sourceMappingURL=chunk-BPD4VUAU.js.map
@@ -1,17 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SourceGrid
4
- } from "./chunk-CB7GYRUP.js";
4
+ } from "./chunk-U36YCEBK.js";
5
+ import {
6
+ useMeasuredHeight
7
+ } from "./chunk-AQQVSNUX.js";
5
8
  import {
6
9
  ViewTitle
7
10
  } from "./chunk-HTTPKSL6.js";
8
11
  import {
9
12
  useWizardStore
10
- } from "./chunk-R3AD6XBJ.js";
13
+ } from "./chunk-OGXSTJP2.js";
11
14
  import {
12
15
  resolveAllSources,
13
16
  searchExtraSources
14
- } from "./chunk-TM4I4EHK.js";
17
+ } from "./chunk-WMVGRAFB.js";
15
18
  import {
16
19
  CLI_COLORS,
17
20
  DEFAULT_BRANDING
@@ -35,6 +38,7 @@ var StepSources = ({
35
38
  const [view, setView] = useState("choice");
36
39
  const [choiceIndex, setChoiceIndex] = useState(0);
37
40
  const [isGridSearching, setIsGridSearching] = useState(false);
41
+ const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();
38
42
  const handleGridSelect = useCallback(
39
43
  (skillId, sourceId) => {
40
44
  store.setSourceSelection(skillId, sourceId);
@@ -97,18 +101,19 @@ var StepSources = ({
97
101
  });
98
102
  if (view === "customize") {
99
103
  const rows2 = store.buildSourceRows(matrix);
100
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", width: "100%", children: [
104
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", width: "100%", flexGrow: 1, flexBasis: 0, children: [
101
105
  /* @__PURE__ */ jsx(ViewTitle, { children: "Customize skill sources" }),
102
- /* @__PURE__ */ jsx(
106
+ /* @__PURE__ */ jsx(Box, { ref: gridRef, flexGrow: 1, flexBasis: 0, children: /* @__PURE__ */ jsx(
103
107
  SourceGrid,
104
108
  {
105
109
  rows: rows2,
110
+ availableHeight: gridHeight,
106
111
  onSelect: handleGridSelect,
107
112
  onSearch: handleSearch,
108
113
  onBind: handleBind,
109
114
  onSearchStateChange: handleSearchStateChange
110
115
  }
111
- )
116
+ ) })
112
117
  ] });
113
118
  }
114
119
  const selectedTechnologies = store.getAllSelectedTechnologies();
@@ -186,4 +191,4 @@ var StepSources = ({
186
191
  export {
187
192
  StepSources
188
193
  };
189
- //# sourceMappingURL=chunk-X7SPCWY6.js.map
194
+ //# sourceMappingURL=chunk-CXWPUVA7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-sources.tsx"],"sourcesContent":["import React, { useState, useCallback } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type {\n BoundSkillCandidate,\n MergedSkillsMatrix,\n SkillAlias,\n SkillId,\n} from \"../../types/index.js\";\nimport { CLI_COLORS, DEFAULT_BRANDING } from \"../../consts.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { SourceGrid } from \"./source-grid.js\";\nimport { ViewTitle } from \"./view-title.js\";\nimport { searchExtraSources } from \"../../lib/loading/multi-source-loader.js\";\nimport { resolveAllSources } from \"../../lib/configuration/index.js\";\n\nexport type StepSourcesProps = {\n matrix: MergedSkillsMatrix;\n projectDir?: string;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype SourcesView = \"choice\" | \"customize\";\n\nexport const StepSources: React.FC<StepSourcesProps> = ({\n matrix,\n projectDir,\n onContinue,\n onBack,\n}) => {\n const store = useWizardStore();\n const [view, setView] = useState<SourcesView>(\"choice\");\n const [choiceIndex, setChoiceIndex] = useState(0);\n const [isGridSearching, setIsGridSearching] = useState(false);\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n\n const handleGridSelect = useCallback(\n (skillId: SkillId, sourceId: string) => {\n store.setSourceSelection(skillId, sourceId);\n },\n [store],\n );\n\n const handleSearch = useCallback(\n async (alias: SkillAlias): Promise<BoundSkillCandidate[]> => {\n if (!projectDir) return [];\n try {\n const sources = await resolveAllSources(projectDir);\n return await searchExtraSources(alias, sources.extras);\n } catch {\n return [];\n }\n },\n [projectDir],\n );\n\n const handleBind = useCallback(\n (candidate: BoundSkillCandidate) => {\n store.bindSkill({\n id: candidate.id,\n sourceUrl: candidate.sourceUrl,\n sourceName: candidate.sourceName,\n boundTo: candidate.alias,\n description: candidate.description,\n });\n },\n [store],\n );\n\n const handleSearchStateChange = useCallback((active: boolean) => {\n setIsGridSearching(active);\n }, []);\n\n useInput((_input, key) => {\n if (view === \"choice\") {\n if (key.return) {\n if (choiceIndex === 0) {\n onContinue();\n } else {\n store.setCustomizeSources(true);\n setView(\"customize\");\n }\n }\n if (key.escape) {\n onBack();\n }\n if (key.upArrow || key.downArrow) {\n setChoiceIndex((prev) => (prev === 0 ? 1 : 0));\n }\n } else if (view === \"customize\") {\n if (isGridSearching) return;\n\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n store.setCustomizeSources(false);\n setView(\"choice\");\n }\n }\n });\n\n if (view === \"customize\") {\n const rows = store.buildSourceRows(matrix);\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <ViewTitle>Customize skill sources</ViewTitle>\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <SourceGrid\n rows={rows}\n availableHeight={gridHeight}\n onSelect={handleGridSelect}\n onSearch={handleSearch}\n onBind={handleBind}\n onSearchStateChange={handleSearchStateChange}\n />\n </Box>\n </Box>\n );\n }\n\n const selectedTechnologies = store.getAllSelectedTechnologies();\n const rows = store.buildSourceRows(matrix);\n const isRecommendedSelected = choiceIndex === 0;\n const hasLocalSkills = rows.some((row) =>\n row.options.some((o) => o.installed && o.id === \"local\"),\n );\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text>\n Your stack includes{\" \"}\n <Text color={CLI_COLORS.PRIMARY} bold>\n {selectedTechnologies.length}\n </Text>{\" \"}\n technologies.\n </Text>\n <Text> </Text>\n\n <Box\n borderStyle=\"round\"\n borderColor={isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n marginBottom={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isRecommendedSelected}\n >\n {isRecommendedSelected ? \">\" : \"\\u25CB\"}{\" \"}\n {hasLocalSkills\n ? \"Use installed skill sources\"\n : \"Use all recommended skills (verified)\"}\n </Text>\n <Text> </Text>\n <Text dimColor>\n {hasLocalSkills\n ? \"Keep your current local and public skill selections.\"\n : \"This is the fastest option. All skills are verified and\"}\n </Text>\n {!hasLocalSkills && <Text dimColor>maintained by {DEFAULT_BRANDING.NAME}</Text>}\n </Box>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor={!isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={!isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={!isRecommendedSelected}\n >\n {!isRecommendedSelected ? \">\" : \"\\u25CB\"} Customize skill sources\n </Text>\n <Text> </Text>\n <Text dimColor>Choose alternative skills for each technology</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,UAAU,mBAAmB;AAC7C,SAAS,KAAK,MAAM,gBAAgB;AAyG9B,SACE,KADF;AAjFC,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,eAAe;AAC7B,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,QAAQ;AACtD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,CAAC;AAChD,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,QAAM,EAAE,KAAK,SAAS,gBAAgB,WAAW,IAAI,kBAAkB;AAEvE,QAAM,mBAAmB;AAAA,IACvB,CAAC,SAAkB,aAAqB;AACtC,YAAM,mBAAmB,SAAS,QAAQ;AAAA,IAC5C;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,eAAe;AAAA,IACnB,OAAO,UAAsD;AAC3D,UAAI,CAAC,WAAY,QAAO,CAAC;AACzB,UAAI;AACF,cAAM,UAAU,MAAM,kBAAkB,UAAU;AAClD,eAAO,MAAM,mBAAmB,OAAO,QAAQ,MAAM;AAAA,MACvD,QAAQ;AACN,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,aAAa;AAAA,IACjB,CAAC,cAAmC;AAClC,YAAM,UAAU;AAAA,QACd,IAAI,UAAU;AAAA,QACd,WAAW,UAAU;AAAA,QACrB,YAAY,UAAU;AAAA,QACtB,SAAS,UAAU;AAAA,QACnB,aAAa,UAAU;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,0BAA0B,YAAY,CAAC,WAAoB;AAC/D,uBAAmB,MAAM;AAAA,EAC3B,GAAG,CAAC,CAAC;AAEL,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,SAAS,UAAU;AACrB,UAAI,IAAI,QAAQ;AACd,YAAI,gBAAgB,GAAG;AACrB,qBAAW;AAAA,QACb,OAAO;AACL,gBAAM,oBAAoB,IAAI;AAC9B,kBAAQ,WAAW;AAAA,QACrB;AAAA,MACF;AACA,UAAI,IAAI,QAAQ;AACd,eAAO;AAAA,MACT;AACA,UAAI,IAAI,WAAW,IAAI,WAAW;AAChC,uBAAe,CAAC,SAAU,SAAS,IAAI,IAAI,CAAE;AAAA,MAC/C;AAAA,IACF,WAAW,SAAS,aAAa;AAC/B,UAAI,gBAAiB;AAErB,UAAI,IAAI,QAAQ;AACd,mBAAW;AAAA,MACb;AACA,UAAI,IAAI,QAAQ;AACd,cAAM,oBAAoB,KAAK;AAC/B,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,SAAS,aAAa;AACxB,UAAMA,QAAO,MAAM,gBAAgB,MAAM;AACzC,WACE,qBAAC,OAAI,eAAc,UAAS,OAAM,QAAO,UAAU,GAAG,WAAW,GAC/D;AAAA,0BAAC,aAAU,qCAAuB;AAAA,MAClC,oBAAC,OAAI,KAAK,SAAS,UAAU,GAAG,WAAW,GACzC;AAAA,QAAC;AAAA;AAAA,UACC,MAAMA;AAAA,UACN,iBAAiB;AAAA,UACjB,UAAU;AAAA,UACV,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,qBAAqB;AAAA;AAAA,MACvB,GACF;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,uBAAuB,MAAM,2BAA2B;AAC9D,QAAM,OAAO,MAAM,gBAAgB,MAAM;AACzC,QAAM,wBAAwB,gBAAgB;AAC9C,QAAM,iBAAiB,KAAK;AAAA,IAAK,CAAC,QAChC,IAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,OAAO;AAAA,EACzD;AAEA,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GACpC;AAAA,yBAAC,QAAK;AAAA;AAAA,MACgB;AAAA,MACpB,oBAAC,QAAK,OAAO,WAAW,SAAS,MAAI,MAClC,+BAAqB,QACxB;AAAA,MAAQ;AAAA,MAAI;AAAA,OAEd;AAAA,IACA,oBAAC,QAAK,eAAC;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACrE,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QAEd,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,wBAAwB,WAAW,UAAU;AAAA,cACpD,MAAM;AAAA,cAEL;AAAA,wCAAwB,MAAM;AAAA,gBAAU;AAAA,gBACxC,iBACG,gCACA;AAAA;AAAA;AAAA,UACN;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MACX,2BACG,yDACA,2DACN;AAAA,UACC,CAAC,kBAAkB,qBAAC,QAAK,UAAQ,MAAC;AAAA;AAAA,YAAe,iBAAiB;AAAA,aAAK;AAAA,WAC1E;AAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,CAAC,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACtE,UAAU;AAAA,QACV,UAAU;AAAA,QAEV,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,CAAC,wBAAwB,WAAW,UAAU;AAAA,cACrD,MAAM,CAAC;AAAA,cAEN;AAAA,iBAAC,wBAAwB,MAAM;AAAA,gBAAS;AAAA;AAAA;AAAA,UAC3C;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MAAC,2DAA6C;AAAA,WAC9D;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":["rows"]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useKeyboardNavigation
4
- } from "./chunk-JMVWYAHT.js";
4
+ } from "./chunk-KUV24B5M.js";
5
5
  import {
6
6
  CLI_COLORS
7
7
  } from "./chunk-YCS7GF6Y.js";
@@ -92,4 +92,4 @@ var SearchModal = ({ results, alias, onBind, onClose }) => {
92
92
  export {
93
93
  SearchModal
94
94
  };
95
- //# sourceMappingURL=chunk-QC37C32G.js.map
95
+ //# sourceMappingURL=chunk-IG7CUREJ.js.map
@@ -34,7 +34,6 @@ function useKeyboardNavigation(itemCount, handlers = {}, options = {}) {
34
34
  useInput(
35
35
  useCallback(
36
36
  (input, key) => {
37
- if (!active) return;
38
37
  if (key.escape) {
39
38
  onEscape?.();
40
39
  return;
@@ -51,8 +50,9 @@ function useKeyboardNavigation(itemCount, handlers = {}, options = {}) {
51
50
  moveDown();
52
51
  }
53
52
  },
54
- [active, onEnter, onEscape, vimKeys, moveUp, moveDown]
55
- )
53
+ [onEnter, onEscape, vimKeys, moveUp, moveDown]
54
+ ),
55
+ { isActive: active }
56
56
  );
57
57
  return { focusedIndex, setFocusedIndex };
58
58
  }
@@ -60,4 +60,4 @@ function useKeyboardNavigation(itemCount, handlers = {}, options = {}) {
60
60
  export {
61
61
  useKeyboardNavigation
62
62
  };
63
- //# sourceMappingURL=chunk-JMVWYAHT.js.map
63
+ //# sourceMappingURL=chunk-KUV24B5M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/hooks/use-keyboard-navigation.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useInput } from \"ink\";\n\ntype KeyboardNavigationHandlers = {\n onEnter?: (focusedIndex: number) => void;\n onEscape?: () => void;\n};\n\ntype KeyboardNavigationOptions = {\n wrap?: boolean;\n vimKeys?: boolean;\n active?: boolean;\n};\n\nexport function useKeyboardNavigation(\n itemCount: number,\n handlers: KeyboardNavigationHandlers = {},\n options: KeyboardNavigationOptions = {},\n): {\n focusedIndex: number;\n setFocusedIndex: Dispatch<SetStateAction<number>>;\n} {\n const { onEnter, onEscape } = handlers;\n const { wrap = true, vimKeys = true, active = true } = options;\n\n const [focusedIndex, setFocusedIndex] = useState(0);\n const focusedIndexRef = useRef(focusedIndex);\n\n useEffect(() => {\n focusedIndexRef.current = focusedIndex;\n }, [focusedIndex]);\n\n const moveUp = useCallback(() => {\n setFocusedIndex((prev) => {\n if (wrap) {\n return (prev - 1 + itemCount) % itemCount;\n }\n return Math.max(0, prev - 1);\n });\n }, [itemCount, wrap]);\n\n const moveDown = useCallback(() => {\n setFocusedIndex((prev) => {\n if (wrap) {\n return (prev + 1) % itemCount;\n }\n return Math.min(itemCount - 1, prev + 1);\n });\n }, [itemCount, wrap]);\n\n useInput(\n useCallback(\n (\n input: string,\n key: { upArrow: boolean; downArrow: boolean; return: boolean; escape: boolean },\n ) => {\n if (key.escape) {\n onEscape?.();\n return;\n }\n\n if (key.return) {\n onEnter?.(focusedIndexRef.current);\n return;\n }\n\n if (key.upArrow || (vimKeys && input === \"k\")) {\n moveUp();\n return;\n }\n\n if (key.downArrow || (vimKeys && input === \"j\")) {\n moveDown();\n }\n },\n [onEnter, onEscape, vimKeys, moveUp, moveDown],\n ),\n { isActive: active },\n );\n\n return { focusedIndex, setFocusedIndex };\n}\n"],"mappings":";;;;;;AAAA;AACA,SAAS,UAAU,aAAa,QAAQ,iBAAiB;AACzD,SAAS,gBAAgB;AAalB,SAAS,sBACd,WACA,WAAuC,CAAC,GACxC,UAAqC,CAAC,GAItC;AACA,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAM,EAAE,OAAO,MAAM,UAAU,MAAM,SAAS,KAAK,IAAI;AAEvD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,kBAAkB,OAAO,YAAY;AAE3C,YAAU,MAAM;AACd,oBAAgB,UAAU;AAAA,EAC5B,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,SAAS,YAAY,MAAM;AAC/B,oBAAgB,CAAC,SAAS;AACxB,UAAI,MAAM;AACR,gBAAQ,OAAO,IAAI,aAAa;AAAA,MAClC;AACA,aAAO,KAAK,IAAI,GAAG,OAAO,CAAC;AAAA,IAC7B,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,QAAM,WAAW,YAAY,MAAM;AACjC,oBAAgB,CAAC,SAAS;AACxB,UAAI,MAAM;AACR,gBAAQ,OAAO,KAAK;AAAA,MACtB;AACA,aAAO,KAAK,IAAI,YAAY,GAAG,OAAO,CAAC;AAAA,IACzC,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB;AAAA,IACE;AAAA,MACE,CACE,OACA,QACG;AACH,YAAI,IAAI,QAAQ;AACd,qBAAW;AACX;AAAA,QACF;AAEA,YAAI,IAAI,QAAQ;AACd,oBAAU,gBAAgB,OAAO;AACjC;AAAA,QACF;AAEA,YAAI,IAAI,WAAY,WAAW,UAAU,KAAM;AAC7C,iBAAO;AACP;AAAA,QACF;AAEA,YAAI,IAAI,aAAc,WAAW,UAAU,KAAM;AAC/C,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,CAAC,SAAS,UAAU,SAAS,QAAQ,QAAQ;AAAA,IAC/C;AAAA,IACA,EAAE,UAAU,OAAO;AAAA,EACrB;AAEA,SAAO,EAAE,cAAc,gBAAgB;AACzC;","names":[]}
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepStack
4
- } from "./chunk-B47QYIUL.js";
4
+ } from "./chunk-5LPPIT6H.js";
5
5
  import {
6
6
  WizardLayout
7
- } from "./chunk-JZOLJVWA.js";
7
+ } from "./chunk-PKUIO2Z7.js";
8
8
  import {
9
9
  StepConfirm
10
10
  } from "./chunk-CEWNZQMH.js";
11
11
  import {
12
12
  StepSettings
13
- } from "./chunk-KENWMEKN.js";
13
+ } from "./chunk-BPD4VUAU.js";
14
14
  import {
15
15
  StepSources
16
- } from "./chunk-X7SPCWY6.js";
16
+ } from "./chunk-CXWPUVA7.js";
17
17
  import {
18
18
  StepBuild
19
- } from "./chunk-2LUXM5FB.js";
19
+ } from "./chunk-UFUQUFV6.js";
20
20
  import {
21
21
  getStackName
22
22
  } from "./chunk-MZB3GGOH.js";
@@ -25,14 +25,14 @@ import {
25
25
  } from "./chunk-5YNZJ5TP.js";
26
26
  import {
27
27
  useWizardStore
28
- } from "./chunk-R3AD6XBJ.js";
28
+ } from "./chunk-OGXSTJP2.js";
29
29
  import {
30
30
  resolveAlias,
31
31
  validateSelection
32
- } from "./chunk-TM4I4EHK.js";
32
+ } from "./chunk-WMVGRAFB.js";
33
33
  import {
34
34
  warn
35
- } from "./chunk-NLR6Z37M.js";
35
+ } from "./chunk-OI4WBRC7.js";
36
36
  import {
37
37
  CLI_COLORS
38
38
  } from "./chunk-YCS7GF6Y.js";
@@ -53,6 +53,7 @@ function useWizardInitialization({
53
53
  matrix,
54
54
  initialStep,
55
55
  initialInstallMode,
56
+ initialExpertMode,
56
57
  installedSkillIds
57
58
  }) {
58
59
  const initialized = useRef(false);
@@ -67,6 +68,9 @@ function useWizardInitialization({
67
68
  if (initialInstallMode) {
68
69
  useWizardStore.setState({ installMode: initialInstallMode });
69
70
  }
71
+ if (initialExpertMode) {
72
+ useWizardStore.setState({ expertMode: initialExpertMode });
73
+ }
70
74
  }
71
75
  }
72
76
 
@@ -132,6 +136,7 @@ var Wizard = ({
132
136
  logo,
133
137
  initialStep,
134
138
  initialInstallMode,
139
+ initialExpertMode,
135
140
  installedSkillIds,
136
141
  projectDir
137
142
  }) => {
@@ -142,7 +147,13 @@ var Wizard = ({
142
147
  const terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;
143
148
  const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;
144
149
  const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;
145
- useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });
150
+ useWizardInitialization({
151
+ matrix,
152
+ initialStep,
153
+ initialInstallMode,
154
+ initialExpertMode,
155
+ installedSkillIds
156
+ });
146
157
  const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });
147
158
  useInput((input, key) => {
148
159
  if (store.showSettings) {
@@ -289,4 +300,4 @@ var Wizard = ({
289
300
  export {
290
301
  Wizard
291
302
  };
292
- //# sourceMappingURL=chunk-ZI5EBHCC.js.map
303
+ //# sourceMappingURL=chunk-KWF6D7ZP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/hooks/use-wizard-initialization.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport type { DomainSelections, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport { getStackName } from \"./utils.js\";\nimport { warn } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\n\nexport type WizardResultV2 = {\n selectedSkills: SkillId[];\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n sourceSelections: Partial<Record<SkillId, string>>;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n};\n\ntype WizardProps = {\n matrix: MergedSkillsMatrix;\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version?: string;\n marketplaceLabel?: string;\n logo?: string;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n initialExpertMode?: boolean;\n installedSkillIds?: SkillId[];\n projectDir?: string;\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\nconst MIN_TERMINAL_HEIGHT = 15;\n\nexport const Wizard: React.FC<WizardProps> = ({\n matrix,\n onComplete,\n onCancel,\n version,\n marketplaceLabel,\n logo,\n initialStep,\n initialInstallMode,\n initialExpertMode,\n installedSkillIds,\n projectDir,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;\n\n useWizardInitialization({\n matrix,\n initialStep,\n initialInstallMode,\n initialExpertMode,\n installedSkillIds,\n });\n\n const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });\n\n useInput((input, key) => {\n // ESC is handled by step-settings.tsx's own useKeyboardNavigation hook\n if (store.showSettings) {\n if (input === \"g\" || input === \"G\") {\n store.toggleSettings();\n }\n return;\n }\n\n if (store.showHelp) {\n if (key.escape || input === \"?\") {\n store.toggleHelp();\n }\n return;\n }\n\n if (input === \"?\") {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n // At the initial stack/scratch selection (approach not yet set), ESC cancels the wizard.\n // StackSelection handles its own ESC via the onCancel prop.\n // Other steps that don't have their own escape handler use goBack.\n if (\n store.step !== \"build\" &&\n store.step !== \"confirm\" &&\n store.step !== \"sources\" &&\n store.step !== \"stack\"\n ) {\n store.goBack();\n }\n return;\n }\n\n if ((input === \"a\" || input === \"A\") && store.step === \"build\" && store.selectedStackId) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if ((input === \"g\" || input === \"G\") && store.step === \"sources\") {\n store.toggleSettings();\n return;\n }\n\n if (input === \"e\" || input === \"E\") {\n store.toggleExpertMode();\n return;\n }\n if (input === \"p\" || input === \"P\") {\n store.toggleInstallMode();\n }\n });\n\n const handleComplete = useCallback(() => {\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);\n if (!stack) {\n warn(`Stack not found in matrix: '${store.selectedStackId}'`);\n }\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => {\n const resolved = resolveAlias(tech, matrix);\n if (!matrix.skills[resolved]) {\n warn(\n `Technology '${tech}' could not be resolved to a skill ID - it may be missing from skill_aliases`,\n );\n }\n return resolved;\n });\n }\n\n const methodologySkills = store.getDefaultMethodologySkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n const result: WizardResultV2 = {\n selectedSkills: allSkills,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n sourceSelections: store.sourceSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, matrix, onComplete, exit]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n exit();\n }, [onCancel, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"stack\":\n return <StepStack matrix={matrix} onCancel={handleCancel} />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n matrix={matrix}\n projectDir={projectDir}\n onContinue={() => store.setStep(\"confirm\")}\n onBack={store.goBack}\n />\n );\n }\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId, matrix);\n const technologyCount = store.getTechnologyCount();\n return (\n <StepConfirm\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={technologyCount}\n skillCount={technologyCount}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal || isShortTerminal) {\n const issue = isNarrowTerminal\n ? `too narrow (${terminalWidth} columns, need ${MIN_TERMINAL_WIDTH})`\n : `too short (${terminalHeight} rows, need ${MIN_TERMINAL_HEIGHT})`;\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>Terminal {issue}. Please resize your terminal.</Text>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} marketplaceLabel={marketplaceLabel} logo={logo}>\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport type { MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\n\ntype UseWizardInitializationOptions = {\n matrix: MergedSkillsMatrix;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n initialExpertMode?: boolean;\n installedSkillIds?: SkillId[];\n};\n\n/**\n * Runs one-time wizard store initialization before the first render.\n * Populates step, approach, install mode, and skill selections from props.\n */\nexport function useWizardInitialization({\n matrix,\n initialStep,\n initialInstallMode,\n initialExpertMode,\n installedSkillIds,\n}: UseWizardInitializationOptions): void {\n const initialized = useRef(false);\n\n if (!initialized.current) {\n initialized.current = true;\n\n if (initialStep) {\n if (installedSkillIds?.length) {\n useWizardStore\n .getState()\n .populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);\n }\n useWizardStore.setState({ step: initialStep, approach: \"scratch\" });\n }\n if (initialInstallMode) {\n useWizardStore.setState({ installMode: initialInstallMode });\n }\n if (initialExpertMode) {\n useWizardStore.setState({ expertMode: initialExpertMode });\n }\n }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n matrix: MergedSkillsMatrix;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n matrix,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [\"web\"];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || \"web\";\n const parentDomainSelections = store.getParentDomainSelections(activeDomain, matrix);\n\n const onToggle = useCallback(\n (subcategoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[subcategoryId];\n store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);\n },\n [store, matrix],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n matrix,\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showDescriptions: store.showDescriptions,\n expertMode: store.expertMode,\n parentDomainSelections,\n installedSkillIds,\n onToggle,\n onToggleDescriptions: store.toggleShowDescriptions,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  BaseCommand
4
- } from "./chunk-GVMA2EKC.js";
4
+ } from "./chunk-BLLXNFWP.js";
5
5
  import {
6
6
  DEFAULT_SOURCE,
7
7
  SOURCE_ENV_VAR,
@@ -10,7 +10,7 @@ import {
10
10
  loadProjectSourceConfig,
11
11
  resolveAgentsSource,
12
12
  resolveSource
13
- } from "./chunk-TM4I4EHK.js";
13
+ } from "./chunk-WMVGRAFB.js";
14
14
  import {
15
15
  DEFAULT_BRANDING
16
16
  } from "./chunk-YCS7GF6Y.js";
@@ -90,4 +90,4 @@ ${DEFAULT_BRANDING.NAME} Configuration
90
90
  export {
91
91
  ConfigShow
92
92
  };
93
- //# sourceMappingURL=chunk-ZP4BI6J2.js.map
93
+ //# sourceMappingURL=chunk-NJ775OJ4.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useWizardStore
4
- } from "./chunk-R3AD6XBJ.js";
4
+ } from "./chunk-OGXSTJP2.js";
5
5
  import {
6
6
  CLI_COLORS,
7
7
  UI_SYMBOLS
@@ -117,4 +117,4 @@ var DomainSelection = () => {
117
117
  export {
118
118
  DomainSelection
119
119
  };
120
- //# sourceMappingURL=chunk-ALS7SH7X.js.map
120
+ //# sourceMappingURL=chunk-NVQEHRJY.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-YPJKOM42.js";
11
11
  import {
12
12
  useWizardStore
13
- } from "./chunk-R3AD6XBJ.js";
13
+ } from "./chunk-OGXSTJP2.js";
14
14
  import {
15
15
  DEFAULT_SCRATCH_DOMAINS
16
16
  } from "./chunk-YCS7GF6Y.js";
@@ -106,4 +106,4 @@ var StackSelection = ({ matrix, onCancel }) => {
106
106
  export {
107
107
  StackSelection
108
108
  };
109
- //# sourceMappingURL=chunk-TKB4O2RY.js.map
109
+ //# sourceMappingURL=chunk-OGJ7DFCL.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveAlias
4
- } from "./chunk-TM4I4EHK.js";
4
+ } from "./chunk-WMVGRAFB.js";
5
5
  import {
6
6
  typedEntries,
7
7
  typedKeys
8
8
  } from "./chunk-T4EXUIBY.js";
9
9
  import {
10
10
  warn
11
- } from "./chunk-NLR6Z37M.js";
11
+ } from "./chunk-OI4WBRC7.js";
12
12
  import {
13
13
  DEFAULT_PRESELECTED_SKILLS
14
14
  } from "./chunk-YCS7GF6Y.js";
@@ -362,4 +362,4 @@ var useWizardStore = create((set, get) => ({
362
362
  export {
363
363
  useWizardStore
364
364
  };
365
- //# sourceMappingURL=chunk-R3AD6XBJ.js.map
365
+ //# sourceMappingURL=chunk-OGXSTJP2.js.map
@@ -414,6 +414,8 @@ var projectConfigLoaderSchema = z.object({
414
414
  author: z.string().optional(),
415
415
  /** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
416
416
  installMode: z.enum(["local", "plugin"]).optional(),
417
+ /** Whether expert mode (advanced/niche skills) was enabled in the wizard */
418
+ expertMode: z.boolean().optional(),
417
419
  /** Agent-to-subcategory-to-skill mappings from selected stack (accepts same formats as stacks.yaml) */
418
420
  stack: z.record(z.string(), stackAgentConfigSchema).optional(),
419
421
  /** Skills source path or URL (e.g., "github:my-org/skills") */
@@ -436,6 +438,8 @@ var projectConfigValidationSchema = z.object({
436
438
  author: z.string().optional(),
437
439
  /** "local" = .claude/agents, "plugin" = .claude/plugins/ (DEFAULT_PLUGIN_NAME) */
438
440
  installMode: z.enum(["local", "plugin"]),
441
+ /** Whether expert mode (advanced/niche skills) was enabled in the wizard */
442
+ expertMode: z.boolean().optional(),
439
443
  /** Agent-to-subcategory-to-skill mappings from selected stack */
440
444
  stack: z.record(z.string(), stackAgentConfigSchema),
441
445
  /** Skills source path or URL (e.g., "github:my-org/skills") */
@@ -514,7 +518,9 @@ var localRawMetadataSchema = z.object({
514
518
  /** Setup skills that must be installed first (e.g., env setup) */
515
519
  requires_setup: z.array(skillIdSchema).optional(),
516
520
  /** Usage skills this setup skill configures (inverse relationship) */
517
- provides_setup_for: z.array(skillIdSchema).optional()
521
+ provides_setup_for: z.array(skillIdSchema).optional(),
522
+ /** If true, this skill was installed by the Agents Inc. CLI (safe to remove on uninstall) */
523
+ generatedByAgentsInc: z.boolean().optional()
518
524
  }).passthrough();
519
525
  var localSkillMetadataSchema = z.object({
520
526
  forked_from: z.object({
@@ -524,7 +530,9 @@ var localSkillMetadataSchema = z.object({
524
530
  content_hash: z.string(),
525
531
  /** ISO date when the fork was created */
526
532
  date: z.string()
527
- }).optional()
533
+ }).optional(),
534
+ /** If true, this skill was installed by the Agents Inc. CLI (safe to remove on uninstall) */
535
+ generatedByAgentsInc: z.boolean().optional()
528
536
  }).passthrough();
529
537
  var stackSchema = z.object({
530
538
  id: z.string().min(1),
@@ -867,6 +875,7 @@ export {
867
875
  localSkillMetadataSchema,
868
876
  stacksConfigSchema,
869
877
  marketplaceSchema,
878
+ defaultMappingsSchema,
870
879
  settingsFileSchema,
871
880
  importedSkillMetadataSchema,
872
881
  projectSourceConfigSchema,
@@ -879,4 +888,4 @@ export {
879
888
  validateNestingDepth,
880
889
  warnUnknownFields
881
890
  };
882
- //# sourceMappingURL=chunk-NLR6Z37M.js.map
891
+ //# sourceMappingURL=chunk-OI4WBRC7.js.map