@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.
- package/CHANGELOG.md +8 -0
- package/config/skills-matrix.yaml +9 -9
- package/config/stacks.yaml +8 -8
- package/dist/{chunk-B47QYIUL.js → chunk-5LPPIT6H.js} +4 -4
- package/dist/chunk-AQQVSNUX.js +33 -0
- package/dist/chunk-AQQVSNUX.js.map +1 -0
- package/dist/{chunk-GVMA2EKC.js → chunk-BLLXNFWP.js} +2 -2
- package/dist/{chunk-KENWMEKN.js → chunk-BPD4VUAU.js} +4 -4
- package/dist/{chunk-X7SPCWY6.js → chunk-CXWPUVA7.js} +12 -7
- package/dist/chunk-CXWPUVA7.js.map +1 -0
- package/dist/{chunk-QC37C32G.js → chunk-IG7CUREJ.js} +2 -2
- package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
- package/dist/chunk-KUV24B5M.js.map +1 -0
- package/dist/{chunk-ZI5EBHCC.js → chunk-KWF6D7ZP.js} +21 -10
- package/dist/chunk-KWF6D7ZP.js.map +1 -0
- package/dist/{chunk-ZP4BI6J2.js → chunk-NJ775OJ4.js} +3 -3
- package/dist/{chunk-ALS7SH7X.js → chunk-NVQEHRJY.js} +2 -2
- package/dist/{chunk-TKB4O2RY.js → chunk-OGJ7DFCL.js} +2 -2
- package/dist/{chunk-R3AD6XBJ.js → chunk-OGXSTJP2.js} +3 -3
- package/dist/{chunk-NLR6Z37M.js → chunk-OI4WBRC7.js} +12 -3
- package/dist/chunk-OI4WBRC7.js.map +1 -0
- package/dist/{chunk-JZOLJVWA.js → chunk-PKUIO2Z7.js} +6 -5
- package/dist/chunk-PKUIO2Z7.js.map +1 -0
- package/dist/{chunk-CB7GYRUP.js → chunk-U36YCEBK.js} +76 -36
- package/dist/chunk-U36YCEBK.js.map +1 -0
- package/dist/{chunk-2LUXM5FB.js → chunk-UFUQUFV6.js} +7 -28
- package/dist/chunk-UFUQUFV6.js.map +1 -0
- package/dist/{chunk-TM4I4EHK.js → chunk-WMVGRAFB.js} +2884 -2925
- package/dist/chunk-WMVGRAFB.js.map +1 -0
- package/dist/{chunk-A5CYQQVG.js → chunk-XNQJBQ5X.js} +2 -2
- package/dist/{chunk-GIFEDW27.js → chunk-YIKBNGE3.js} +3 -3
- package/dist/{chunk-ANGAZ444.js → chunk-YN35L5NE.js} +1 -1
- package/dist/chunk-YN35L5NE.js.map +1 -0
- package/dist/commands/build/marketplace.js +2 -2
- package/dist/commands/build/plugins.js +4 -4
- package/dist/commands/build/stack.js +4 -4
- package/dist/commands/compile.js +17 -6
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +3 -3
- package/dist/commands/config/index.js +4 -4
- package/dist/commands/config/path.js +3 -3
- package/dist/commands/config/set-project.js +3 -3
- package/dist/commands/config/show.js +4 -4
- package/dist/commands/config/unset-project.js +3 -3
- package/dist/commands/diff.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/edit.js +24 -18
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +3 -3
- package/dist/commands/import/skill.js +3 -3
- package/dist/commands/info.js +3 -3
- package/dist/commands/init.js +18 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/new/agent.js +4 -4
- package/dist/commands/new/skill.js +3 -3
- package/dist/commands/outdated.js +3 -3
- package/dist/commands/search.js +3 -3
- package/dist/commands/uninstall.js +103 -26
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +4 -4
- package/dist/commands/validate.js +3 -3
- package/dist/commands/version/bump.js +3 -3
- package/dist/commands/version/index.js +3 -3
- package/dist/commands/version/set.js +3 -3
- package/dist/commands/version/show.js +3 -3
- package/dist/components/wizard/domain-selection.js +4 -4
- package/dist/components/wizard/search-modal.js +2 -2
- package/dist/components/wizard/search-modal.test.js +2 -2
- package/dist/components/wizard/source-grid.js +3 -3
- package/dist/components/wizard/source-grid.test.js +3 -3
- package/dist/components/wizard/stack-selection.js +4 -4
- package/dist/components/wizard/step-build.js +4 -3
- package/dist/components/wizard/step-build.test.js +5 -4
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.test.js +3 -3
- package/dist/components/wizard/step-settings.js +4 -4
- package/dist/components/wizard/step-settings.test.js +7 -7
- package/dist/components/wizard/step-sources.js +8 -7
- package/dist/components/wizard/step-sources.test.js +9 -8
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +6 -6
- package/dist/components/wizard/step-stack.test.js +7 -7
- package/dist/components/wizard/wizard-layout.js +4 -4
- package/dist/components/wizard/wizard.js +15 -14
- package/dist/config/skills-matrix.yaml +9 -9
- package/dist/config/stacks.yaml +8 -8
- package/dist/hooks/init.js +4 -2
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-manager-WJYANKDI.js → source-manager-PTK4P6BF.js} +3 -3
- package/dist/stores/wizard-store.js +3 -3
- package/dist/stores/wizard-store.test.js +4 -4
- package/package.json +1 -1
- package/src/schemas/project-config.schema.json +3 -0
- package/src/schemas/project-source-config.schema.json +12 -0
- package/dist/chunk-2LUXM5FB.js.map +0 -1
- package/dist/chunk-ANGAZ444.js.map +0 -1
- package/dist/chunk-CB7GYRUP.js.map +0 -1
- package/dist/chunk-JMVWYAHT.js.map +0 -1
- package/dist/chunk-JZOLJVWA.js.map +0 -1
- package/dist/chunk-NLR6Z37M.js.map +0 -1
- package/dist/chunk-TM4I4EHK.js.map +0 -1
- package/dist/chunk-X7SPCWY6.js.map +0 -1
- package/dist/chunk-ZI5EBHCC.js.map +0 -1
- /package/dist/{chunk-B47QYIUL.js.map → chunk-5LPPIT6H.js.map} +0 -0
- /package/dist/{chunk-GVMA2EKC.js.map → chunk-BLLXNFWP.js.map} +0 -0
- /package/dist/{chunk-KENWMEKN.js.map → chunk-BPD4VUAU.js.map} +0 -0
- /package/dist/{chunk-QC37C32G.js.map → chunk-IG7CUREJ.js.map} +0 -0
- /package/dist/{chunk-ZP4BI6J2.js.map → chunk-NJ775OJ4.js.map} +0 -0
- /package/dist/{chunk-ALS7SH7X.js.map → chunk-NVQEHRJY.js.map} +0 -0
- /package/dist/{chunk-TKB4O2RY.js.map → chunk-OGJ7DFCL.js.map} +0 -0
- /package/dist/{chunk-R3AD6XBJ.js.map → chunk-OGXSTJP2.js.map} +0 -0
- /package/dist/{chunk-A5CYQQVG.js.map → chunk-XNQJBQ5X.js.map} +0 -0
- /package/dist/{chunk-GIFEDW27.js.map → chunk-YIKBNGE3.js.map} +0 -0
- /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:
|
|
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]
|
package/config/stacks.yaml
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
stacks:
|
|
5
5
|
- id: nextjs-fullstack
|
|
6
6
|
name: Next.js Fullstack
|
|
7
|
-
description:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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-
|
|
4
|
+
} from "./chunk-OGJ7DFCL.js";
|
|
5
5
|
import {
|
|
6
6
|
DomainSelection
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NVQEHRJY.js";
|
|
8
8
|
import {
|
|
9
9
|
useWizardStore
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
19
|
+
} from "./chunk-WMVGRAFB.js";
|
|
20
20
|
import {
|
|
21
21
|
getErrorMessage,
|
|
22
22
|
verbose
|
|
23
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
13
|
+
} from "./chunk-OGXSTJP2.js";
|
|
11
14
|
import {
|
|
12
15
|
resolveAllSources,
|
|
13
16
|
searchExtraSources
|
|
14
|
-
} from "./chunk-
|
|
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-
|
|
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":"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","names":["rows"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
useKeyboardNavigation
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
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
|
-
[
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-5LPPIT6H.js";
|
|
5
5
|
import {
|
|
6
6
|
WizardLayout
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
13
|
+
} from "./chunk-BPD4VUAU.js";
|
|
14
14
|
import {
|
|
15
15
|
StepSources
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-CXWPUVA7.js";
|
|
17
17
|
import {
|
|
18
18
|
StepBuild
|
|
19
|
-
} from "./chunk-
|
|
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-
|
|
28
|
+
} from "./chunk-OGXSTJP2.js";
|
|
29
29
|
import {
|
|
30
30
|
resolveAlias,
|
|
31
31
|
validateSelection
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-WMVGRAFB.js";
|
|
33
33
|
import {
|
|
34
34
|
warn
|
|
35
|
-
} from "./chunk-
|
|
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({
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
891
|
+
//# sourceMappingURL=chunk-OI4WBRC7.js.map
|