whisker-ux 0.1.0 → 0.2.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 +103 -56
- package/dist/agent.js +106 -11
- package/dist/agent.js.map +1 -1
- package/dist/auth.d.ts +10 -0
- package/dist/auth.js +53 -0
- package/dist/auth.js.map +1 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +37 -1
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +154 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +12 -0
- package/dist/config.js +145 -5
- package/dist/config.js.map +1 -1
- package/dist/report.d.ts +1 -1
- package/dist/report.js +5 -7
- package/dist/report.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/ui.d.ts +5 -3
- package/dist/ui.js +28 -8
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiC,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,MAAM,GAA2B;QACrC,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,YAAY;QACxB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;KACX,CAAC;IAEF,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,OAAO,cAAc;IAOL;IANZ,OAAO,GAAmB,IAAI,CAAC;IAC/B,OAAO,GAA0B,IAAI,CAAC;IACtC,IAAI,GAAgB,IAAI,CAAC;IACzB,aAAa,GAAa,EAAE,CAAC;IAC7B,eAAe,GAAqB,EAAE,CAAC;IAE/C,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAE7C,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE;gBACJ,iBAAiB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;aACnF;SACF,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;YAC5C,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAC7C,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAC3C,QAAQ,EAAE;gBACR,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;aACpC;YACD,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEzC,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,GAAG,CAAC,OAAO,EAAE,CACzD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpC,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;oBACnB,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;oBACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;oBACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;YACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;gBACxB,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,IAAI,gBAAgB;gBAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC5B,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAC9C,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,GAAG,CAAC,OAAO,EAAE,CACzD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAClC,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;wBACxB,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;wBACnB,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;wBACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;wBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE;wBACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;oBACxB,MAAM,EAAE,CAAC;oBACT,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,IAAI,gBAAgB;oBAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAsB;QACxC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,YAAY;gBACf,sDAAsD;gBACtD,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;wBACjE,MAAM,EAAE,MAAM;qBACf,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,aAAa;gBAChB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;wBACjE,MAAM,EAAE,OAAO;qBAChB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,cAAc;gBACjB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;wBACjE,MAAM,EAAE,QAAQ;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,cAAc;gBACjB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CACvB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CACrB,CAAC;gBACJ,CAAC;gBACD,MAAM;YAER,KAAK,cAAc;gBACjB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;wBACjE,UAAU,EAAE,CAAC;qBACd,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM;YAER,KAAK,KAAK;gBACR,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACxC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACjD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;oBACjD,MAAM,MAAM,GACV,MAAM,CAAC,gBAAgB,KAAK,MAAM;wBAChC,CAAC,CAAC,CAAC,MAAM;wBACT,CAAC,CAAC,MAAM,CAAC,gBAAgB,KAAK,OAAO;4BACnC,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,CAAC,CAAC;oBACV,MAAM,MAAM,GACV,MAAM,CAAC,gBAAgB,KAAK,MAAM;wBAChC,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI;4BAChC,CAAC,CAAC,CAAC,MAAM;4BACT,CAAC,CAAC,CAAC,CAAC;oBACV,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM;YAER,KAAK,iBAAiB;gBACpB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACtC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClE,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACxB,CAAC;gBACD,MAAM;YAER,KAAK,MAAM;gBACT,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,MAAM;YAER;gBACE,OAAO,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,mDAAmD;QACnD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;CACF"}
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
4
6
|
import { runSession } from "./agent.js";
|
|
5
7
|
import { writeReport } from "./report.js";
|
|
6
|
-
import { getApiKey, runSetup, getConfigPath, deleteApiKey } from "./config.js";
|
|
7
|
-
import {
|
|
8
|
+
import { getApiKey, runSetup, getConfigPath, deleteApiKey, listAuthStates, deleteAuthState, authStateExists, getAuthDir } from "./config.js";
|
|
9
|
+
import { printConfig, printResults, printError } from "./ui.js";
|
|
10
|
+
import { runAuthCapture } from "./auth.js";
|
|
11
|
+
// Validate auth state name to prevent path traversal attacks
|
|
12
|
+
// Only allow alphanumeric characters, underscores, and hyphens
|
|
13
|
+
const AUTH_NAME_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
14
|
+
function validateAuthName(name) {
|
|
15
|
+
return AUTH_NAME_PATTERN.test(name) && name.length > 0 && name.length <= 64;
|
|
16
|
+
}
|
|
17
|
+
// Read version from package.json
|
|
18
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf-8"));
|
|
20
|
+
const VERSION = packageJson.version;
|
|
8
21
|
const program = new Command();
|
|
9
22
|
program
|
|
10
23
|
.name("whisker")
|
|
11
24
|
.description("AI-powered usability testing CLI using Claude computer use")
|
|
12
|
-
.version(
|
|
25
|
+
.version(VERSION);
|
|
13
26
|
// Setup command
|
|
14
27
|
program
|
|
15
28
|
.command("setup")
|
|
@@ -40,11 +53,26 @@ program
|
|
|
40
53
|
.option("-m, --max-steps <number>", "Maximum number of steps", "50")
|
|
41
54
|
.option("-v, --viewport <WxH>", "Viewport size (e.g., 1280x800)", "1280x800")
|
|
42
55
|
.option("-o, --output <dir>", "Output directory", ".whisker")
|
|
56
|
+
.option("-l, --login", "Pause for manual login before AI takes over")
|
|
57
|
+
.option("-a, --auth <name>", "Use saved authentication state")
|
|
58
|
+
.option("-w, --screenshot-window <number>", "Screenshots to keep in context (reduces token usage)", "5")
|
|
43
59
|
.action(async (task, opts) => {
|
|
44
60
|
// Get API key from config or environment
|
|
45
61
|
const apiKey = getApiKey();
|
|
46
62
|
if (!apiKey) {
|
|
47
|
-
|
|
63
|
+
const cwd = process.cwd();
|
|
64
|
+
const configPath = getConfigPath();
|
|
65
|
+
printError(`No Anthropic API key found.\n\n` +
|
|
66
|
+
`Checked these locations:\n` +
|
|
67
|
+
` • ANTHROPIC_API_KEY environment variable\n` +
|
|
68
|
+
` • ${cwd}/.env.local\n` +
|
|
69
|
+
` • ${cwd}/.env\n` +
|
|
70
|
+
` • ${configPath}\n\n` +
|
|
71
|
+
`Quick setup - create a .env file:\n` +
|
|
72
|
+
` echo "ANTHROPIC_API_KEY=sk-ant-..." > .env\n\n` +
|
|
73
|
+
`Or run interactive setup:\n` +
|
|
74
|
+
` whisker setup\n\n` +
|
|
75
|
+
`Get your API key at: https://console.anthropic.com/settings/keys`);
|
|
48
76
|
process.exit(1);
|
|
49
77
|
}
|
|
50
78
|
// Set for the Anthropic SDK to pick up
|
|
@@ -67,6 +95,31 @@ program
|
|
|
67
95
|
printError("max-steps must be a positive integer");
|
|
68
96
|
process.exit(1);
|
|
69
97
|
}
|
|
98
|
+
// Validate auth name if provided
|
|
99
|
+
if (opts.auth && !validateAuthName(opts.auth)) {
|
|
100
|
+
printError(`Invalid auth name "${opts.auth}".\n` +
|
|
101
|
+
`Names must contain only letters, numbers, underscores, and hyphens (max 64 chars).`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
// Ensure --login and --auth are mutually exclusive
|
|
105
|
+
if (opts.login && opts.auth) {
|
|
106
|
+
printError(`Cannot use --login and --auth together.\n` +
|
|
107
|
+
`Use --login for manual login, or --auth to use saved authentication state.`);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Validate auth state file exists
|
|
111
|
+
if (opts.auth && !authStateExists(opts.auth)) {
|
|
112
|
+
printError(`Auth state "${opts.auth}" not found.\n\n` +
|
|
113
|
+
`Save it first with:\n` +
|
|
114
|
+
` whisker auth save ${opts.auth} --url <login-url>`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
// Parse screenshot window
|
|
118
|
+
const screenshotWindow = parseInt(opts.screenshotWindow, 10);
|
|
119
|
+
if (isNaN(screenshotWindow) || screenshotWindow <= 0) {
|
|
120
|
+
printError("screenshot-window must be a positive integer");
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
70
123
|
const config = {
|
|
71
124
|
task,
|
|
72
125
|
url: opts.url,
|
|
@@ -74,21 +127,112 @@ program
|
|
|
74
127
|
maxSteps,
|
|
75
128
|
viewport: { width, height },
|
|
76
129
|
outputDir: opts.output,
|
|
130
|
+
interactiveLogin: opts.login,
|
|
131
|
+
authStateName: opts.auth,
|
|
132
|
+
screenshotWindow,
|
|
77
133
|
};
|
|
78
134
|
// Print banner and config
|
|
79
|
-
|
|
80
|
-
printConfig(config.task, config.url, config.persona, config.maxSteps, `${config.viewport.width}x${config.viewport.height}`);
|
|
135
|
+
printConfig(config.task, config.url, VERSION, config.persona, config.maxSteps, `${config.viewport.width}x${config.viewport.height}`);
|
|
81
136
|
try {
|
|
82
137
|
const { report, sessionLog } = await runSession(config);
|
|
83
|
-
|
|
84
|
-
// Print results
|
|
85
|
-
|
|
86
|
-
|
|
138
|
+
await writeReport(report, sessionLog, config.outputDir, VERSION);
|
|
139
|
+
// Print results
|
|
140
|
+
printResults(report.taskCompleted, report.summary, report.findings, config.outputDir);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
// Auth command group
|
|
148
|
+
const authCommand = program
|
|
149
|
+
.command("auth")
|
|
150
|
+
.description("Manage saved authentication states");
|
|
151
|
+
// Auth save subcommand
|
|
152
|
+
authCommand
|
|
153
|
+
.command("save <name>")
|
|
154
|
+
.description("Save browser auth state for reuse")
|
|
155
|
+
.requiredOption("-u, --url <url>", "URL to open for login")
|
|
156
|
+
.option("-v, --viewport <WxH>", "Viewport size (e.g., 1280x800)", "1280x800")
|
|
157
|
+
.action(async (name, opts) => {
|
|
158
|
+
// Validate auth name to prevent path traversal
|
|
159
|
+
if (!validateAuthName(name)) {
|
|
160
|
+
printError(`Invalid auth name "${name}".\n` +
|
|
161
|
+
`Names must contain only letters, numbers, underscores, and hyphens (max 64 chars).`);
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
// Parse viewport
|
|
165
|
+
const viewportParts = opts.viewport.split("x");
|
|
166
|
+
if (viewportParts.length !== 2) {
|
|
167
|
+
printError("Invalid viewport format. Use WxH (e.g., 1280x800)");
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const width = parseInt(viewportParts[0], 10);
|
|
171
|
+
const height = parseInt(viewportParts[1], 10);
|
|
172
|
+
if (isNaN(width) || isNaN(height) || width <= 0 || height <= 0) {
|
|
173
|
+
printError("Invalid viewport dimensions. Use positive integers.");
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
await runAuthCapture({
|
|
178
|
+
url: opts.url,
|
|
179
|
+
name,
|
|
180
|
+
viewport: { width, height },
|
|
181
|
+
});
|
|
87
182
|
}
|
|
88
183
|
catch (err) {
|
|
89
184
|
printError(err instanceof Error ? err.message : String(err));
|
|
90
185
|
process.exit(1);
|
|
91
186
|
}
|
|
92
187
|
});
|
|
188
|
+
// Auth list subcommand
|
|
189
|
+
authCommand
|
|
190
|
+
.command("list")
|
|
191
|
+
.description("List saved authentication states")
|
|
192
|
+
.action(() => {
|
|
193
|
+
const states = listAuthStates();
|
|
194
|
+
if (states.length === 0) {
|
|
195
|
+
console.log("No saved authentication states.");
|
|
196
|
+
console.log("");
|
|
197
|
+
console.log("Save one with: whisker auth save <name> --url <login-url>");
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
console.log("");
|
|
201
|
+
console.log("Saved authentication states:");
|
|
202
|
+
console.log("");
|
|
203
|
+
for (const state of states) {
|
|
204
|
+
const date = new Date(state.savedAt);
|
|
205
|
+
const dateStr = date.toLocaleDateString() + " " + date.toLocaleTimeString();
|
|
206
|
+
console.log(` ${state.name}`);
|
|
207
|
+
console.log(` Saved: ${dateStr}`);
|
|
208
|
+
console.log(` Path: ${state.filePath}`);
|
|
209
|
+
console.log("");
|
|
210
|
+
}
|
|
211
|
+
console.log(`Auth directory: ${getAuthDir()}`);
|
|
212
|
+
});
|
|
213
|
+
// Auth delete subcommand
|
|
214
|
+
authCommand
|
|
215
|
+
.command("delete <name>")
|
|
216
|
+
.description("Delete a saved authentication state")
|
|
217
|
+
.action((name) => {
|
|
218
|
+
// Validate auth name to prevent path traversal
|
|
219
|
+
if (!validateAuthName(name)) {
|
|
220
|
+
printError(`Invalid auth name "${name}".\n` +
|
|
221
|
+
`Names must contain only letters, numbers, underscores, and hyphens (max 64 chars).`);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
if (!authStateExists(name)) {
|
|
225
|
+
printError(`Auth state "${name}" not found.`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
const deleted = deleteAuthState(name);
|
|
229
|
+
if (deleted) {
|
|
230
|
+
console.log(`Auth state "${name}" deleted.`);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
printError(`Failed to delete auth state "${name}".`);
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
93
237
|
program.parse();
|
|
94
238
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
export declare function getApiKey(): string | undefined;
|
|
2
2
|
export declare function saveApiKey(apiKey: string): void;
|
|
3
|
+
export declare function saveApiKeyToEnvFile(apiKey: string): void;
|
|
3
4
|
export declare function runSetup(): Promise<void>;
|
|
4
5
|
export declare function getConfigPath(): string;
|
|
5
6
|
export declare function deleteApiKey(): boolean;
|
|
7
|
+
export interface AuthStateInfo {
|
|
8
|
+
name: string;
|
|
9
|
+
savedAt: string;
|
|
10
|
+
filePath: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getAuthStatePath(name: string): string;
|
|
13
|
+
export declare function authStateExists(name: string): boolean;
|
|
14
|
+
export declare function ensureAuthDir(): void;
|
|
15
|
+
export declare function listAuthStates(): AuthStateInfo[];
|
|
16
|
+
export declare function deleteAuthState(name: string): boolean;
|
|
17
|
+
export declare function getAuthDir(): string;
|
package/dist/config.js
CHANGED
|
@@ -4,12 +4,45 @@ import * as os from "node:os";
|
|
|
4
4
|
import * as readline from "node:readline";
|
|
5
5
|
const CONFIG_DIR = path.join(os.homedir(), ".config", "whisker");
|
|
6
6
|
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
7
|
+
const AUTH_DIR = path.join(CONFIG_DIR, "auth");
|
|
8
|
+
// Load API key from .env files in current directory
|
|
9
|
+
// Checks .env.local first (for local overrides), then .env
|
|
10
|
+
function loadFromEnvFile() {
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
const envFiles = [".env.local", ".env"];
|
|
13
|
+
for (const filename of envFiles) {
|
|
14
|
+
const envPath = path.join(cwd, filename);
|
|
15
|
+
try {
|
|
16
|
+
if (fs.existsSync(envPath)) {
|
|
17
|
+
const content = fs.readFileSync(envPath, "utf-8");
|
|
18
|
+
// Match ANTHROPIC_API_KEY=value with:
|
|
19
|
+
// - Optional leading whitespace
|
|
20
|
+
// - Optional "export" keyword
|
|
21
|
+
// - Optional spaces around "="
|
|
22
|
+
// - Optional quotes around value
|
|
23
|
+
const match = content.match(/^\s*(?:export\s+)?ANTHROPIC_API_KEY\s*=\s*["']?([^"'\n]+?)["']?\s*$/m);
|
|
24
|
+
if (match?.[1]?.trim()) {
|
|
25
|
+
return match[1].trim();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Ignore errors reading this file, try next
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
7
35
|
export function getApiKey() {
|
|
8
|
-
// Environment variable takes precedence
|
|
36
|
+
// 1. Environment variable takes precedence
|
|
9
37
|
if (process.env.ANTHROPIC_API_KEY) {
|
|
10
38
|
return process.env.ANTHROPIC_API_KEY;
|
|
11
39
|
}
|
|
12
|
-
// Try
|
|
40
|
+
// 2. Try .env file in current directory
|
|
41
|
+
const envKey = loadFromEnvFile();
|
|
42
|
+
if (envKey) {
|
|
43
|
+
return envKey;
|
|
44
|
+
}
|
|
45
|
+
// 3. Try global config file
|
|
13
46
|
try {
|
|
14
47
|
if (fs.existsSync(CONFIG_FILE)) {
|
|
15
48
|
const content = fs.readFileSync(CONFIG_FILE, "utf-8");
|
|
@@ -38,6 +71,32 @@ export function saveApiKey(apiKey) {
|
|
|
38
71
|
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
39
72
|
fs.chmodSync(CONFIG_FILE, 0o600); // Read/write only for owner
|
|
40
73
|
}
|
|
74
|
+
export function saveApiKeyToEnvFile(apiKey) {
|
|
75
|
+
const envPath = path.join(process.cwd(), ".env");
|
|
76
|
+
let content = "";
|
|
77
|
+
// Read existing .env content if it exists
|
|
78
|
+
try {
|
|
79
|
+
if (fs.existsSync(envPath)) {
|
|
80
|
+
content = fs.readFileSync(envPath, "utf-8");
|
|
81
|
+
// Remove existing ANTHROPIC_API_KEY line if present (with optional export prefix)
|
|
82
|
+
content = content.replace(/^\s*(?:export\s+)?ANTHROPIC_API_KEY\s*=.*\n?/m, "");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Start fresh
|
|
87
|
+
}
|
|
88
|
+
// Add the API key
|
|
89
|
+
const newLine = `ANTHROPIC_API_KEY=${apiKey}\n`;
|
|
90
|
+
content = content.trim() ? content.trim() + "\n" + newLine : newLine;
|
|
91
|
+
fs.writeFileSync(envPath, content);
|
|
92
|
+
// Set secure permissions (read/write only for owner)
|
|
93
|
+
try {
|
|
94
|
+
fs.chmodSync(envPath, 0o600);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore errors on platforms that don't support POSIX permissions
|
|
98
|
+
}
|
|
99
|
+
}
|
|
41
100
|
export async function runSetup() {
|
|
42
101
|
const rl = readline.createInterface({
|
|
43
102
|
input: process.stdin,
|
|
@@ -60,19 +119,38 @@ export async function runSetup() {
|
|
|
60
119
|
rl.close();
|
|
61
120
|
return;
|
|
62
121
|
}
|
|
122
|
+
console.log("");
|
|
63
123
|
}
|
|
64
124
|
const apiKey = await question("Enter your Anthropic API key: ");
|
|
65
|
-
rl.close();
|
|
66
125
|
if (!apiKey.trim()) {
|
|
67
126
|
console.log("No key provided. Setup cancelled.");
|
|
127
|
+
rl.close();
|
|
68
128
|
return;
|
|
69
129
|
}
|
|
70
130
|
if (!apiKey.startsWith("sk-ant-")) {
|
|
71
131
|
console.log("Warning: Key doesn't look like an Anthropic API key (should start with sk-ant-)");
|
|
132
|
+
console.log("");
|
|
72
133
|
}
|
|
73
|
-
|
|
134
|
+
// Ask where to save
|
|
74
135
|
console.log("");
|
|
75
|
-
console.log(
|
|
136
|
+
console.log("Where should I save the key?");
|
|
137
|
+
console.log(" 1. .env file in current directory (good for this project only)");
|
|
138
|
+
console.log(` 2. Global config at ${CONFIG_FILE} (works everywhere)`);
|
|
139
|
+
console.log("");
|
|
140
|
+
const saveChoice = (await question("Choice (1 or 2, default 2): ")).trim();
|
|
141
|
+
rl.close();
|
|
142
|
+
const trimmedKey = apiKey.trim();
|
|
143
|
+
if (saveChoice === "1") {
|
|
144
|
+
saveApiKeyToEnvFile(trimmedKey);
|
|
145
|
+
console.log("");
|
|
146
|
+
console.log("API key saved to .env file in current directory");
|
|
147
|
+
console.log("Note: Add .env to your .gitignore to keep it secret!");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
saveApiKey(trimmedKey);
|
|
151
|
+
console.log("");
|
|
152
|
+
console.log(`API key saved to ${CONFIG_FILE}`);
|
|
153
|
+
}
|
|
76
154
|
console.log("You're ready to use Whisker!");
|
|
77
155
|
}
|
|
78
156
|
export function getConfigPath() {
|
|
@@ -101,4 +179,66 @@ export function deleteApiKey() {
|
|
|
101
179
|
}
|
|
102
180
|
return false;
|
|
103
181
|
}
|
|
182
|
+
export function getAuthStatePath(name) {
|
|
183
|
+
return path.join(AUTH_DIR, `${name}.json`);
|
|
184
|
+
}
|
|
185
|
+
export function authStateExists(name) {
|
|
186
|
+
return fs.existsSync(getAuthStatePath(name));
|
|
187
|
+
}
|
|
188
|
+
export function ensureAuthDir() {
|
|
189
|
+
fs.mkdirSync(AUTH_DIR, { recursive: true });
|
|
190
|
+
// Set directory permissions (read/write/execute only for owner)
|
|
191
|
+
try {
|
|
192
|
+
fs.chmodSync(AUTH_DIR, 0o700);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Ignore on platforms that don't support POSIX permissions
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export function listAuthStates() {
|
|
199
|
+
const states = [];
|
|
200
|
+
try {
|
|
201
|
+
if (!fs.existsSync(AUTH_DIR)) {
|
|
202
|
+
return states;
|
|
203
|
+
}
|
|
204
|
+
const files = fs.readdirSync(AUTH_DIR);
|
|
205
|
+
for (const file of files) {
|
|
206
|
+
if (file.endsWith(".json")) {
|
|
207
|
+
try {
|
|
208
|
+
const name = file.slice(0, -5); // Remove .json extension
|
|
209
|
+
const filePath = path.join(AUTH_DIR, file);
|
|
210
|
+
const stat = fs.statSync(filePath);
|
|
211
|
+
states.push({
|
|
212
|
+
name,
|
|
213
|
+
savedAt: stat.mtime.toISOString(),
|
|
214
|
+
filePath,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Skip files that can't be read (e.g., deleted between readdir and stat)
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Ignore directory read errors
|
|
225
|
+
}
|
|
226
|
+
return states.sort((a, b) => a.name.localeCompare(b.name));
|
|
227
|
+
}
|
|
228
|
+
export function deleteAuthState(name) {
|
|
229
|
+
try {
|
|
230
|
+
const filePath = getAuthStatePath(name);
|
|
231
|
+
if (fs.existsSync(filePath)) {
|
|
232
|
+
fs.unlinkSync(filePath);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Ignore errors
|
|
238
|
+
}
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
export function getAuthDir() {
|
|
242
|
+
return AUTH_DIR;
|
|
243
|
+
}
|
|
104
244
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAM/C,oDAAoD;AACpD,2DAA2D;AAC3D,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAExC,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,sCAAsC;gBACtC,gCAAgC;gBAChC,8BAA8B;gBAC9B,+BAA+B;gBAC/B,iCAAiC;gBACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,sEAAsE,CACvE,CAAC;gBACF,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,2CAA2C;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,MAAM,GAAwB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC,eAAe,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC;IAChC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,4BAA4B;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,0CAA0C;IAC1C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5C,kFAAkF;YAClF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,+CAA+C,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,qBAAqB,MAAM,IAAI,CAAC;IAChD,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAErE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnC,qDAAqD;IACrD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAmB,EAAE,CACnD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC;IAChC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QAClE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gCAAgC,CAAC,CAAC;IAEhE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,qBAAqB,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,UAAU,GAAG,CAAC,MAAM,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3E,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,MAAM,GAAwB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,eAAe,CAAC;gBAE9B,0CAA0C;gBAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAUD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,gEAAgE;IAChE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;oBACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI;wBACJ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;wBACjC,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,yEAAyE;gBAC3E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/report.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WhiskerReport, SessionLog } from "./types.js";
|
|
2
|
-
export declare function writeReport(report: WhiskerReport, sessionLog: SessionLog, outputDir: string): Promise<{
|
|
2
|
+
export declare function writeReport(report: WhiskerReport, sessionLog: SessionLog, outputDir: string, version?: string): Promise<{
|
|
3
3
|
markdownPath: string;
|
|
4
4
|
jsonPath: string;
|
|
5
5
|
screenshotDir: string;
|
package/dist/report.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
export async function writeReport(report, sessionLog, outputDir) {
|
|
3
|
+
export async function writeReport(report, sessionLog, outputDir, version = "0.1.0") {
|
|
4
4
|
// Ensure output directories exist
|
|
5
5
|
const screenshotDir = path.join(outputDir, "screenshots");
|
|
6
6
|
// Clear existing screenshots from previous runs
|
|
@@ -23,12 +23,12 @@ export async function writeReport(report, sessionLog, outputDir) {
|
|
|
23
23
|
fs.writeFileSync(filepath, Buffer.from(step.screenshotBase64, "base64"));
|
|
24
24
|
}
|
|
25
25
|
// Generate and write report.md
|
|
26
|
-
const markdown = generateMarkdown(report,
|
|
26
|
+
const markdown = generateMarkdown(report, version);
|
|
27
27
|
const markdownPath = path.join(outputDir, "report.md");
|
|
28
28
|
fs.writeFileSync(markdownPath, markdown);
|
|
29
29
|
return { markdownPath, jsonPath, screenshotDir };
|
|
30
30
|
}
|
|
31
|
-
function generateMarkdown(report,
|
|
31
|
+
function generateMarkdown(report, version) {
|
|
32
32
|
const lines = [];
|
|
33
33
|
lines.push("# Whisker Usability Test Report");
|
|
34
34
|
lines.push("");
|
|
@@ -135,10 +135,8 @@ function generateMarkdown(report, outputDir) {
|
|
|
135
135
|
}
|
|
136
136
|
lines.push("---");
|
|
137
137
|
lines.push("");
|
|
138
|
-
|
|
138
|
+
const displayVersion = version.startsWith("v") ? version : `v${version}`;
|
|
139
|
+
lines.push(`*Generated by Whisker ${displayVersion} using ${report.metadata.modelUsed}*`);
|
|
139
140
|
return lines.join("\n");
|
|
140
141
|
}
|
|
141
|
-
function capitalize(s) {
|
|
142
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
143
|
-
}
|
|
144
142
|
//# sourceMappingURL=report.js.map
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAqB,EACrB,UAAsB,EACtB,SAAiB;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/ui.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export declare function
|
|
2
|
-
export declare function printConfig(task: string, url: string, persona?: string, maxSteps?: number, viewport?: string): void;
|
|
1
|
+
export declare function printConfig(task: string, url: string, version: string, persona?: string, maxSteps?: number, viewport?: string): void;
|
|
3
2
|
export declare function printTestStart(): void;
|
|
4
3
|
export declare function startSpinner(message: string): void;
|
|
5
4
|
export declare function stopSpinner(completedMessage?: string): void;
|
|
@@ -15,5 +14,8 @@ export declare function printResults(taskCompleted: boolean, summary: string, fi
|
|
|
15
14
|
id: string;
|
|
16
15
|
title: string;
|
|
17
16
|
description: string;
|
|
18
|
-
}>, outputDir: string
|
|
17
|
+
}>, outputDir: string): void;
|
|
19
18
|
export declare function printError(message: string): void;
|
|
19
|
+
export declare function printLoginPrompt(): void;
|
|
20
|
+
export declare function printLoginComplete(): void;
|
|
21
|
+
export declare function waitForEnterKey(): Promise<void>;
|