sequant 1.3.1 → 1.4.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/README.md +3 -0
- package/dist/bin/cli.js +1 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/commands/init.d.ts +1 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +42 -11
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/init.test.js +35 -10
- package/dist/src/commands/init.test.js.map +1 -1
- package/dist/src/lib/system.d.ts.map +1 -1
- package/dist/src/lib/system.js +9 -0
- package/dist/src/lib/system.js.map +1 -1
- package/dist/src/lib/system.test.js +27 -0
- package/dist/src/lib/system.test.js.map +1 -1
- package/dist/src/lib/tty.d.ts +2 -0
- package/dist/src/lib/tty.d.ts.map +1 -1
- package/dist/src/lib/tty.js +11 -6
- package/dist/src/lib/tty.js.map +1 -1
- package/dist/src/lib/tty.test.js +44 -2
- package/dist/src/lib/tty.test.js.map +1 -1
- package/dist/src/lib/wizard.d.ts +64 -0
- package/dist/src/lib/wizard.d.ts.map +1 -0
- package/dist/src/lib/wizard.js +255 -0
- package/dist/src/lib/wizard.js.map +1 -0
- package/dist/src/lib/wizard.test.d.ts +2 -0
- package/dist/src/lib/wizard.test.d.ts.map +1 -0
- package/dist/src/lib/wizard.test.js +268 -0
- package/dist/src/lib/wizard.test.js.map +1 -0
- package/dist/src/lib/workflow/run-log-schema.d.ts +4 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty.test.js","sourceRoot":"","sources":["../../../src/lib/tty.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tty.test.js","sourceRoot":"","sources":["../../../src/lib/tty.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAM,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,UAAU,EACV,WAAW,EACX,IAAI,EACJ,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAElB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/C,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjD,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,oBAAoB;QACpB,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACjC,4BAA4B;QAC5B,MAAM,MAAM,GAAG;YACb,IAAI;YACJ,wBAAwB;YACxB,gBAAgB;YAChB,WAAW;YACX,UAAU;YACV,QAAQ;YACR,aAAa;YACb,WAAW;YACX,OAAO;YACP,kBAAkB;YAClB,UAAU;YACV,oBAAoB;SACrB,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B;QAC1B,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;YAC5C,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YAC7C,KAAK,EAAE,mBAAmB;YAC1B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;YACpC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;YAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,sBAAsB,CAAC;YACjD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,2DAA2D;YAC3D,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,6CAA6C;YAC7C,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,gDAAgD,CACjD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,6CAA6C;YAC7C,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;YACpC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,4CAA4C,CAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;YAC/B,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,uCAAuC,CACxC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;YACpC,mDAAmD;YACnD,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,4CAA4C,CAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;YAC/B,oDAAoD;YACpD,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,uCAAuC,CACxC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;gBAC5C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC7C,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC9B,uDAAuD;YACvD,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CACpC,sCAAsC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup wizard for guiding users through dependency installation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Dependency status after checking
|
|
6
|
+
*/
|
|
7
|
+
export interface DependencyStatus {
|
|
8
|
+
name: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
installed: boolean;
|
|
11
|
+
authenticated?: boolean;
|
|
12
|
+
required: boolean;
|
|
13
|
+
docsUrl: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Result of checking all dependencies
|
|
17
|
+
*/
|
|
18
|
+
export interface DependencyCheckResult {
|
|
19
|
+
dependencies: DependencyStatus[];
|
|
20
|
+
allRequiredMet: boolean;
|
|
21
|
+
hasMissing: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check the status of all required and optional dependencies
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkAllDependencies(): DependencyCheckResult;
|
|
27
|
+
/**
|
|
28
|
+
* Display the dependency check results
|
|
29
|
+
*/
|
|
30
|
+
export declare function displayDependencyStatus(result: DependencyCheckResult): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get detailed install instructions for a dependency
|
|
33
|
+
*/
|
|
34
|
+
export declare function getInstallInstructions(depName: string): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Result from running the setup wizard
|
|
37
|
+
*/
|
|
38
|
+
export interface WizardResult {
|
|
39
|
+
skipped: boolean;
|
|
40
|
+
completed: boolean;
|
|
41
|
+
remainingIssues: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run the interactive setup wizard for missing dependencies
|
|
45
|
+
*
|
|
46
|
+
* @param result - The dependency check result
|
|
47
|
+
* @param options - Options for the wizard
|
|
48
|
+
* @returns The wizard result
|
|
49
|
+
*/
|
|
50
|
+
export declare function runSetupWizard(result: DependencyCheckResult, options?: {
|
|
51
|
+
skipPrompts?: boolean;
|
|
52
|
+
}): Promise<WizardResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Determine if the setup wizard should be run
|
|
55
|
+
*
|
|
56
|
+
* @param options - Options from the init command
|
|
57
|
+
* @returns true if wizard should run
|
|
58
|
+
*/
|
|
59
|
+
export declare function shouldRunSetupWizard(options: {
|
|
60
|
+
skipSetup?: boolean;
|
|
61
|
+
yes?: boolean;
|
|
62
|
+
interactive?: boolean;
|
|
63
|
+
}): boolean;
|
|
64
|
+
//# sourceMappingURL=wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../../src/lib/wizard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,qBAAqB,CAoD5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAyB3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwChE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,OAAO,CAAC,YAAY,CAAC,CAyIvB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAYV"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup wizard for guiding users through dependency installation
|
|
3
|
+
*/
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import inquirer from "inquirer";
|
|
6
|
+
import { commandExists, isGhAuthenticated, getInstallHint } from "./system.js";
|
|
7
|
+
import { isCI } from "./tty.js";
|
|
8
|
+
/**
|
|
9
|
+
* Check the status of all required and optional dependencies
|
|
10
|
+
*/
|
|
11
|
+
export function checkAllDependencies() {
|
|
12
|
+
const dependencies = [];
|
|
13
|
+
// GitHub CLI (required)
|
|
14
|
+
const ghInstalled = commandExists("gh");
|
|
15
|
+
const ghAuthenticated = ghInstalled ? isGhAuthenticated() : false;
|
|
16
|
+
dependencies.push({
|
|
17
|
+
name: "gh",
|
|
18
|
+
displayName: "GitHub CLI (gh)",
|
|
19
|
+
installed: ghInstalled,
|
|
20
|
+
authenticated: ghAuthenticated,
|
|
21
|
+
required: true,
|
|
22
|
+
docsUrl: "https://cli.github.com",
|
|
23
|
+
});
|
|
24
|
+
// Claude Code CLI (required)
|
|
25
|
+
const claudeInstalled = commandExists("claude");
|
|
26
|
+
dependencies.push({
|
|
27
|
+
name: "claude",
|
|
28
|
+
displayName: "Claude Code CLI",
|
|
29
|
+
installed: claudeInstalled,
|
|
30
|
+
required: true,
|
|
31
|
+
docsUrl: "https://docs.anthropic.com/en/docs/claude-code",
|
|
32
|
+
});
|
|
33
|
+
// jq (optional)
|
|
34
|
+
const jqInstalled = commandExists("jq");
|
|
35
|
+
dependencies.push({
|
|
36
|
+
name: "jq",
|
|
37
|
+
displayName: "jq (JSON processor)",
|
|
38
|
+
installed: jqInstalled,
|
|
39
|
+
required: false,
|
|
40
|
+
docsUrl: "https://jqlang.github.io/jq/",
|
|
41
|
+
});
|
|
42
|
+
const allRequiredMet = dependencies
|
|
43
|
+
.filter((d) => d.required)
|
|
44
|
+
.every((d) => {
|
|
45
|
+
if (d.name === "gh") {
|
|
46
|
+
return d.installed && d.authenticated;
|
|
47
|
+
}
|
|
48
|
+
return d.installed;
|
|
49
|
+
});
|
|
50
|
+
const hasMissing = dependencies.some((d) => {
|
|
51
|
+
if (d.name === "gh") {
|
|
52
|
+
return !d.installed || !d.authenticated;
|
|
53
|
+
}
|
|
54
|
+
return d.required && !d.installed;
|
|
55
|
+
});
|
|
56
|
+
return { dependencies, allRequiredMet, hasMissing };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Display the dependency check results
|
|
60
|
+
*/
|
|
61
|
+
export function displayDependencyStatus(result) {
|
|
62
|
+
console.log(chalk.blue("\nChecking dependencies...\n"));
|
|
63
|
+
for (const dep of result.dependencies) {
|
|
64
|
+
if (dep.installed) {
|
|
65
|
+
if (dep.name === "gh" && !dep.authenticated) {
|
|
66
|
+
console.log(chalk.yellow(` ${chalk.yellow("!")} ${dep.displayName} - installed but not authenticated`));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(chalk.green(` ${chalk.green("✓")} ${dep.displayName} - installed`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const marker = dep.required ? chalk.red("✗") : chalk.yellow("○");
|
|
74
|
+
const status = dep.required
|
|
75
|
+
? "not installed (required)"
|
|
76
|
+
: "not installed (optional)";
|
|
77
|
+
console.log(` ${marker} ${dep.displayName} - ${status}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
console.log();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get detailed install instructions for a dependency
|
|
84
|
+
*/
|
|
85
|
+
export function getInstallInstructions(depName) {
|
|
86
|
+
const instructions = [];
|
|
87
|
+
const installHint = getInstallHint(depName);
|
|
88
|
+
switch (depName) {
|
|
89
|
+
case "gh":
|
|
90
|
+
instructions.push(`${chalk.cyan("→")} Install: ${chalk.bold(installHint)}`);
|
|
91
|
+
instructions.push(`${chalk.cyan("→")} Or visit: ${chalk.underline("https://cli.github.com")}`);
|
|
92
|
+
instructions.push(`${chalk.cyan("→")} After install, run: ${chalk.bold("gh auth login")}`);
|
|
93
|
+
break;
|
|
94
|
+
case "claude":
|
|
95
|
+
instructions.push(`${chalk.cyan("→")} Install: ${chalk.bold("npm install -g @anthropic-ai/claude-code")}`);
|
|
96
|
+
instructions.push(`${chalk.cyan("→")} Or visit: ${chalk.underline("https://docs.anthropic.com/en/docs/claude-code")}`);
|
|
97
|
+
break;
|
|
98
|
+
case "jq":
|
|
99
|
+
instructions.push(`${chalk.cyan("→")} Install: ${chalk.bold(installHint)}`);
|
|
100
|
+
instructions.push(`${chalk.cyan("→")} Or visit: ${chalk.underline("https://jqlang.github.io/jq/")}`);
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
instructions.push(`${chalk.cyan("→")} Install ${depName}`);
|
|
104
|
+
}
|
|
105
|
+
return instructions;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Run the interactive setup wizard for missing dependencies
|
|
109
|
+
*
|
|
110
|
+
* @param result - The dependency check result
|
|
111
|
+
* @param options - Options for the wizard
|
|
112
|
+
* @returns The wizard result
|
|
113
|
+
*/
|
|
114
|
+
export async function runSetupWizard(result, options = {}) {
|
|
115
|
+
const missingDeps = result.dependencies.filter((d) => {
|
|
116
|
+
if (d.name === "gh") {
|
|
117
|
+
return !d.installed || !d.authenticated;
|
|
118
|
+
}
|
|
119
|
+
return d.required && !d.installed;
|
|
120
|
+
});
|
|
121
|
+
if (missingDeps.length === 0) {
|
|
122
|
+
return { skipped: false, completed: true, remainingIssues: [] };
|
|
123
|
+
}
|
|
124
|
+
// In non-interactive mode, just return the issues
|
|
125
|
+
if (options.skipPrompts) {
|
|
126
|
+
return {
|
|
127
|
+
skipped: true,
|
|
128
|
+
completed: false,
|
|
129
|
+
remainingIssues: missingDeps.map((d) => {
|
|
130
|
+
if (d.name === "gh" && d.installed && !d.authenticated) {
|
|
131
|
+
return `${d.displayName} not authenticated`;
|
|
132
|
+
}
|
|
133
|
+
return `${d.displayName} not installed`;
|
|
134
|
+
}),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// Ask if user wants to set up missing dependencies
|
|
138
|
+
let setupDeps = false;
|
|
139
|
+
try {
|
|
140
|
+
const response = await inquirer.prompt([
|
|
141
|
+
{
|
|
142
|
+
type: "confirm",
|
|
143
|
+
name: "setupDeps",
|
|
144
|
+
message: "Would you like to set up missing dependencies?",
|
|
145
|
+
default: true,
|
|
146
|
+
},
|
|
147
|
+
]);
|
|
148
|
+
setupDeps = response.setupDeps;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// If prompt fails (e.g., non-interactive), skip wizard
|
|
152
|
+
return {
|
|
153
|
+
skipped: true,
|
|
154
|
+
completed: false,
|
|
155
|
+
remainingIssues: missingDeps.map((d) => {
|
|
156
|
+
if (d.name === "gh" && d.installed && !d.authenticated) {
|
|
157
|
+
return `${d.displayName} not authenticated`;
|
|
158
|
+
}
|
|
159
|
+
return `${d.displayName} not installed`;
|
|
160
|
+
}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (!setupDeps) {
|
|
164
|
+
return {
|
|
165
|
+
skipped: true,
|
|
166
|
+
completed: false,
|
|
167
|
+
remainingIssues: missingDeps.map((d) => {
|
|
168
|
+
if (d.name === "gh" && d.installed && !d.authenticated) {
|
|
169
|
+
return `${d.displayName} not authenticated`;
|
|
170
|
+
}
|
|
171
|
+
return `${d.displayName} not installed`;
|
|
172
|
+
}),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Guide through each missing dependency
|
|
176
|
+
const remainingIssues = [];
|
|
177
|
+
for (const dep of missingDeps) {
|
|
178
|
+
console.log(chalk.bold(`\nSetting up ${dep.displayName}...\n`));
|
|
179
|
+
const instructions = getInstallInstructions(dep.name);
|
|
180
|
+
for (const instruction of instructions) {
|
|
181
|
+
console.log(` ${instruction}`);
|
|
182
|
+
}
|
|
183
|
+
console.log();
|
|
184
|
+
let action = "skip";
|
|
185
|
+
try {
|
|
186
|
+
const response = await inquirer.prompt([
|
|
187
|
+
{
|
|
188
|
+
type: "list",
|
|
189
|
+
name: "action",
|
|
190
|
+
message: "What would you like to do?",
|
|
191
|
+
choices: [
|
|
192
|
+
{ name: "I've installed it - verify now", value: "verify" },
|
|
193
|
+
{ name: "Skip for now", value: "skip" },
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
]);
|
|
197
|
+
action = response.action;
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// If prompt fails, skip this dependency
|
|
201
|
+
action = "skip";
|
|
202
|
+
}
|
|
203
|
+
if (action === "verify") {
|
|
204
|
+
// Re-check this dependency
|
|
205
|
+
const isNowInstalled = commandExists(dep.name);
|
|
206
|
+
const isNowAuthenticated = dep.name === "gh"
|
|
207
|
+
? isNowInstalled
|
|
208
|
+
? isGhAuthenticated()
|
|
209
|
+
: false
|
|
210
|
+
: true;
|
|
211
|
+
if (isNowInstalled && isNowAuthenticated) {
|
|
212
|
+
console.log(chalk.green(`\n ✓ ${dep.displayName} - now installed and ready!\n`));
|
|
213
|
+
}
|
|
214
|
+
else if (dep.name === "gh" && isNowInstalled && !isNowAuthenticated) {
|
|
215
|
+
console.log(chalk.yellow(`\n ! ${dep.displayName} - installed but not authenticated yet\n`));
|
|
216
|
+
remainingIssues.push(`${dep.displayName} not authenticated`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
console.log(chalk.yellow(`\n ! ${dep.displayName} - not detected yet\n`));
|
|
220
|
+
remainingIssues.push(`${dep.displayName} not installed`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
if (dep.name === "gh" && dep.installed && !dep.authenticated) {
|
|
225
|
+
remainingIssues.push(`${dep.displayName} not authenticated`);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
remainingIssues.push(`${dep.displayName} not installed`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
skipped: false,
|
|
234
|
+
completed: remainingIssues.length === 0,
|
|
235
|
+
remainingIssues,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Determine if the setup wizard should be run
|
|
240
|
+
*
|
|
241
|
+
* @param options - Options from the init command
|
|
242
|
+
* @returns true if wizard should run
|
|
243
|
+
*/
|
|
244
|
+
export function shouldRunSetupWizard(options) {
|
|
245
|
+
// Skip if --skip-setup flag is set
|
|
246
|
+
if (options.skipSetup) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
// Skip in CI environments
|
|
250
|
+
if (isCI()) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../../src/lib/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard.test.d.ts","sourceRoot":"","sources":["../../../src/lib/wizard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
// Mock system functions
|
|
3
|
+
vi.mock("./system.js", () => ({
|
|
4
|
+
commandExists: vi.fn(),
|
|
5
|
+
isGhAuthenticated: vi.fn(),
|
|
6
|
+
getInstallHint: vi.fn((pkg) => {
|
|
7
|
+
if (pkg === "gh")
|
|
8
|
+
return "brew install gh";
|
|
9
|
+
if (pkg === "claude")
|
|
10
|
+
return "npm install -g @anthropic-ai/claude-code";
|
|
11
|
+
if (pkg === "jq")
|
|
12
|
+
return "brew install jq";
|
|
13
|
+
return `Install ${pkg}`;
|
|
14
|
+
}),
|
|
15
|
+
}));
|
|
16
|
+
// Mock tty functions
|
|
17
|
+
vi.mock("./tty.js", () => ({
|
|
18
|
+
isCI: vi.fn(),
|
|
19
|
+
}));
|
|
20
|
+
// Mock inquirer
|
|
21
|
+
vi.mock("inquirer", () => ({
|
|
22
|
+
default: {
|
|
23
|
+
prompt: vi.fn(),
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
import { checkAllDependencies, displayDependencyStatus, getInstallInstructions, runSetupWizard, shouldRunSetupWizard, } from "./wizard.js";
|
|
27
|
+
import { commandExists, isGhAuthenticated } from "./system.js";
|
|
28
|
+
import { isCI } from "./tty.js";
|
|
29
|
+
import inquirer from "inquirer";
|
|
30
|
+
const mockCommandExists = vi.mocked(commandExists);
|
|
31
|
+
const mockIsGhAuthenticated = vi.mocked(isGhAuthenticated);
|
|
32
|
+
const mockIsCI = vi.mocked(isCI);
|
|
33
|
+
const mockInquirerPrompt = vi.mocked(inquirer.prompt);
|
|
34
|
+
describe("wizard", () => {
|
|
35
|
+
let consoleLogSpy;
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
vi.resetAllMocks();
|
|
38
|
+
consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
39
|
+
mockIsCI.mockReturnValue(false);
|
|
40
|
+
});
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
consoleLogSpy.mockRestore();
|
|
43
|
+
});
|
|
44
|
+
describe("checkAllDependencies", () => {
|
|
45
|
+
it("detects all dependencies installed and authenticated", () => {
|
|
46
|
+
mockCommandExists.mockReturnValue(true);
|
|
47
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
48
|
+
const result = checkAllDependencies();
|
|
49
|
+
expect(result.allRequiredMet).toBe(true);
|
|
50
|
+
expect(result.hasMissing).toBe(false);
|
|
51
|
+
expect(result.dependencies).toHaveLength(3);
|
|
52
|
+
const ghDep = result.dependencies.find((d) => d.name === "gh");
|
|
53
|
+
expect(ghDep?.installed).toBe(true);
|
|
54
|
+
expect(ghDep?.authenticated).toBe(true);
|
|
55
|
+
const claudeDep = result.dependencies.find((d) => d.name === "claude");
|
|
56
|
+
expect(claudeDep?.installed).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it("detects missing gh CLI", () => {
|
|
59
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "gh");
|
|
60
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
61
|
+
const result = checkAllDependencies();
|
|
62
|
+
expect(result.allRequiredMet).toBe(false);
|
|
63
|
+
expect(result.hasMissing).toBe(true);
|
|
64
|
+
const ghDep = result.dependencies.find((d) => d.name === "gh");
|
|
65
|
+
expect(ghDep?.installed).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
it("detects gh installed but not authenticated", () => {
|
|
68
|
+
mockCommandExists.mockReturnValue(true);
|
|
69
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
70
|
+
const result = checkAllDependencies();
|
|
71
|
+
expect(result.allRequiredMet).toBe(false);
|
|
72
|
+
expect(result.hasMissing).toBe(true);
|
|
73
|
+
const ghDep = result.dependencies.find((d) => d.name === "gh");
|
|
74
|
+
expect(ghDep?.installed).toBe(true);
|
|
75
|
+
expect(ghDep?.authenticated).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
it("detects missing claude CLI", () => {
|
|
78
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
79
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
80
|
+
const result = checkAllDependencies();
|
|
81
|
+
expect(result.allRequiredMet).toBe(false);
|
|
82
|
+
expect(result.hasMissing).toBe(true);
|
|
83
|
+
const claudeDep = result.dependencies.find((d) => d.name === "claude");
|
|
84
|
+
expect(claudeDep?.installed).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it("jq missing does not fail allRequiredMet (optional)", () => {
|
|
87
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "jq");
|
|
88
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
89
|
+
const result = checkAllDependencies();
|
|
90
|
+
// jq is optional, so all required should still be met
|
|
91
|
+
expect(result.allRequiredMet).toBe(true);
|
|
92
|
+
// But hasMissing only tracks required deps
|
|
93
|
+
expect(result.hasMissing).toBe(false);
|
|
94
|
+
const jqDep = result.dependencies.find((d) => d.name === "jq");
|
|
95
|
+
expect(jqDep?.installed).toBe(false);
|
|
96
|
+
expect(jqDep?.required).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe("displayDependencyStatus", () => {
|
|
100
|
+
it("displays installed dependencies with checkmarks", () => {
|
|
101
|
+
mockCommandExists.mockReturnValue(true);
|
|
102
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
103
|
+
const result = checkAllDependencies();
|
|
104
|
+
displayDependencyStatus(result);
|
|
105
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
106
|
+
expect(output).toContain("Checking dependencies");
|
|
107
|
+
expect(output).toContain("GitHub CLI (gh)");
|
|
108
|
+
expect(output).toContain("installed");
|
|
109
|
+
});
|
|
110
|
+
it("displays missing required dependencies with X mark", () => {
|
|
111
|
+
mockCommandExists.mockReturnValue(false);
|
|
112
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
113
|
+
const result = checkAllDependencies();
|
|
114
|
+
displayDependencyStatus(result);
|
|
115
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
116
|
+
expect(output).toContain("not installed (required)");
|
|
117
|
+
});
|
|
118
|
+
it("displays unauthenticated gh with warning", () => {
|
|
119
|
+
mockCommandExists.mockReturnValue(true);
|
|
120
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
121
|
+
const result = checkAllDependencies();
|
|
122
|
+
displayDependencyStatus(result);
|
|
123
|
+
const output = consoleLogSpy.mock.calls.map((c) => c[0]).join("\n");
|
|
124
|
+
expect(output).toContain("installed but not authenticated");
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe("getInstallInstructions", () => {
|
|
128
|
+
it("returns install instructions for gh", () => {
|
|
129
|
+
const instructions = getInstallInstructions("gh");
|
|
130
|
+
expect(instructions.length).toBeGreaterThan(0);
|
|
131
|
+
expect(instructions.some((i) => i.includes("brew install gh"))).toBe(true);
|
|
132
|
+
expect(instructions.some((i) => i.includes("gh auth login"))).toBe(true);
|
|
133
|
+
});
|
|
134
|
+
it("returns install instructions for claude", () => {
|
|
135
|
+
const instructions = getInstallInstructions("claude");
|
|
136
|
+
expect(instructions.length).toBeGreaterThan(0);
|
|
137
|
+
expect(instructions.some((i) => i.includes("@anthropic-ai/claude-code"))).toBe(true);
|
|
138
|
+
});
|
|
139
|
+
it("returns install instructions for jq", () => {
|
|
140
|
+
const instructions = getInstallInstructions("jq");
|
|
141
|
+
expect(instructions.length).toBeGreaterThan(0);
|
|
142
|
+
expect(instructions.some((i) => i.includes("brew install jq"))).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
it("returns generic instruction for unknown package", () => {
|
|
145
|
+
const instructions = getInstallInstructions("unknown-pkg");
|
|
146
|
+
expect(instructions.length).toBe(1);
|
|
147
|
+
expect(instructions[0]).toContain("Install unknown-pkg");
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe("runSetupWizard", () => {
|
|
151
|
+
it("returns completed when all dependencies are met", async () => {
|
|
152
|
+
mockCommandExists.mockReturnValue(true);
|
|
153
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
154
|
+
const depResult = checkAllDependencies();
|
|
155
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
156
|
+
expect(wizardResult.skipped).toBe(false);
|
|
157
|
+
expect(wizardResult.completed).toBe(true);
|
|
158
|
+
expect(wizardResult.remainingIssues).toHaveLength(0);
|
|
159
|
+
});
|
|
160
|
+
it("returns skipped with issues when skipPrompts is true", async () => {
|
|
161
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
162
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
163
|
+
const depResult = checkAllDependencies();
|
|
164
|
+
const wizardResult = await runSetupWizard(depResult, {
|
|
165
|
+
skipPrompts: true,
|
|
166
|
+
});
|
|
167
|
+
expect(wizardResult.skipped).toBe(true);
|
|
168
|
+
expect(wizardResult.completed).toBe(false);
|
|
169
|
+
expect(wizardResult.remainingIssues).toContain("Claude Code CLI not installed");
|
|
170
|
+
});
|
|
171
|
+
it("returns skipped when user declines setup", async () => {
|
|
172
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
173
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
174
|
+
mockInquirerPrompt.mockResolvedValueOnce({ setupDeps: false });
|
|
175
|
+
const depResult = checkAllDependencies();
|
|
176
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
177
|
+
expect(wizardResult.skipped).toBe(true);
|
|
178
|
+
expect(wizardResult.completed).toBe(false);
|
|
179
|
+
expect(wizardResult.remainingIssues.length).toBeGreaterThan(0);
|
|
180
|
+
});
|
|
181
|
+
it("verifies installation when user confirms", async () => {
|
|
182
|
+
// First check: claude is missing
|
|
183
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
184
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
185
|
+
const depResult = checkAllDependencies();
|
|
186
|
+
// User accepts wizard and verifies installation
|
|
187
|
+
mockInquirerPrompt
|
|
188
|
+
.mockResolvedValueOnce({ setupDeps: true })
|
|
189
|
+
.mockResolvedValueOnce({ action: "verify" });
|
|
190
|
+
// After verification, claude is now installed
|
|
191
|
+
mockCommandExists.mockReturnValue(true);
|
|
192
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
193
|
+
expect(wizardResult.completed).toBe(true);
|
|
194
|
+
expect(wizardResult.remainingIssues).toHaveLength(0);
|
|
195
|
+
});
|
|
196
|
+
it("records remaining issues when user skips individual deps", async () => {
|
|
197
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
198
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
199
|
+
const depResult = checkAllDependencies();
|
|
200
|
+
// User accepts wizard but skips claude
|
|
201
|
+
mockInquirerPrompt
|
|
202
|
+
.mockResolvedValueOnce({ setupDeps: true })
|
|
203
|
+
.mockResolvedValueOnce({ action: "skip" });
|
|
204
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
205
|
+
expect(wizardResult.completed).toBe(false);
|
|
206
|
+
expect(wizardResult.remainingIssues).toContain("Claude Code CLI not installed");
|
|
207
|
+
});
|
|
208
|
+
it("handles gh authentication issue specifically", async () => {
|
|
209
|
+
mockCommandExists.mockReturnValue(true);
|
|
210
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
211
|
+
const depResult = checkAllDependencies();
|
|
212
|
+
const wizardResult = await runSetupWizard(depResult, {
|
|
213
|
+
skipPrompts: true,
|
|
214
|
+
});
|
|
215
|
+
expect(wizardResult.remainingIssues).toContain("GitHub CLI (gh) not authenticated");
|
|
216
|
+
});
|
|
217
|
+
it("handles multiple missing dependencies in sequence", async () => {
|
|
218
|
+
// Both gh and claude are missing
|
|
219
|
+
mockCommandExists.mockReturnValue(false);
|
|
220
|
+
mockIsGhAuthenticated.mockReturnValue(false);
|
|
221
|
+
const depResult = checkAllDependencies();
|
|
222
|
+
// User accepts wizard, verifies gh (success), skips claude
|
|
223
|
+
mockInquirerPrompt
|
|
224
|
+
.mockResolvedValueOnce({ setupDeps: true })
|
|
225
|
+
.mockResolvedValueOnce({ action: "verify" }) // gh
|
|
226
|
+
.mockResolvedValueOnce({ action: "skip" }); // claude
|
|
227
|
+
// After first verify, gh is now installed and authenticated
|
|
228
|
+
mockCommandExists.mockImplementation((cmd) => cmd === "gh");
|
|
229
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
230
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
231
|
+
expect(wizardResult.completed).toBe(false);
|
|
232
|
+
expect(wizardResult.remainingIssues).toContain("Claude Code CLI not installed");
|
|
233
|
+
expect(wizardResult.remainingIssues).not.toContain("GitHub CLI");
|
|
234
|
+
});
|
|
235
|
+
it("records issue when verification fails after user claims installation", async () => {
|
|
236
|
+
mockCommandExists.mockImplementation((cmd) => cmd !== "claude");
|
|
237
|
+
mockIsGhAuthenticated.mockReturnValue(true);
|
|
238
|
+
const depResult = checkAllDependencies();
|
|
239
|
+
// User accepts and tries to verify, but it's still not installed
|
|
240
|
+
mockInquirerPrompt
|
|
241
|
+
.mockResolvedValueOnce({ setupDeps: true })
|
|
242
|
+
.mockResolvedValueOnce({ action: "verify" });
|
|
243
|
+
// claude still not installed after "verification"
|
|
244
|
+
// (mockCommandExists already returns false for claude)
|
|
245
|
+
const wizardResult = await runSetupWizard(depResult);
|
|
246
|
+
expect(wizardResult.completed).toBe(false);
|
|
247
|
+
expect(wizardResult.remainingIssues).toContain("Claude Code CLI not installed");
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe("shouldRunSetupWizard", () => {
|
|
251
|
+
it("returns false when skipSetup is true", () => {
|
|
252
|
+
expect(shouldRunSetupWizard({ skipSetup: true })).toBe(false);
|
|
253
|
+
});
|
|
254
|
+
it("returns false in CI environment", () => {
|
|
255
|
+
mockIsCI.mockReturnValue(true);
|
|
256
|
+
expect(shouldRunSetupWizard({})).toBe(false);
|
|
257
|
+
});
|
|
258
|
+
it("returns true in normal terminal environment", () => {
|
|
259
|
+
mockIsCI.mockReturnValue(false);
|
|
260
|
+
expect(shouldRunSetupWizard({})).toBe(true);
|
|
261
|
+
});
|
|
262
|
+
it("returns true even with yes flag (wizard still runs)", () => {
|
|
263
|
+
mockIsCI.mockReturnValue(false);
|
|
264
|
+
expect(shouldRunSetupWizard({ yes: true })).toBe(true);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=wizard.test.js.map
|