crawlix 0.1.0 โ†’ 0.1.2

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 CHANGED
@@ -1,5 +1,10 @@
1
1
  # ๐Ÿ‘พ Crawlix
2
2
 
3
+ [![npm version](https://badge.fury.io/js/crawlix.svg)](https://www.npmjs.com/package/crawlix)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)
6
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/m-taqii/crawlix/pulls)
7
+
3
8
  > Claw through bugs before your users do.
4
9
 
5
10
  Crawlix is an open-source autonomous QA agent that spawns AI-powered user personas and unleashes them on your product. Each persona navigates independently, makes real decisions, hits dead ends, and finds bugs - without you writing a single test script.
@@ -24,15 +29,17 @@ Crawlix spawns multiple AI agents simultaneously. Each one opens your app in a r
24
29
  ~ Non-Native 106 warnings ยท 1 info 10 steps ยท 27.5s
25
30
  ~ Slow Network no findings 4 steps ยท 27.7s
26
31
 
27
- โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
28
- โ”‚ ๐Ÿ‘พ Crawlix - run complete โ”‚
29
- โ”‚ โ”‚
30
- โ”‚ 1 critical 106 warnings 1 info โ”‚
31
- โ”‚ โ”‚
32
- โ”‚ 0 passed 0 stuck 6 incomplete โ”‚
33
- โ”‚ โ”‚
34
- โ”‚ total time โ†’ 539.8s โ”‚
35
- โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
32
+ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
33
+ โ”‚ ๐Ÿ‘พ Crawlix - run complete โ”‚
34
+ โ”‚ โ”‚
35
+ โ”‚ 1 critical 106 warnings 1 info โ”‚
36
+ โ”‚ โ”‚
37
+ โ”‚ 0 passed 0 stuck 6 incomplete โ”‚
38
+ โ”‚ โ”‚
39
+ โ”‚ total time โ†’ 539.8s โ”‚
40
+ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
41
+
42
+ ๐Ÿ“‹ report saved โ†’ ./crawlix-reports/report-2026-05-24.md
36
43
  ```
37
44
 
38
45
  No test scripts. No selectors. No maintenance.
@@ -57,14 +64,15 @@ crawlix setup
57
64
 
58
65
  Supported providers:
59
66
 
60
- - Groq
61
- - Gemini
67
+
68
+ - Groq
69
+ - Gemini
62
70
  - Cerebras
63
71
  - Mistral
64
72
  - OpenRouter
65
- - Ollama
73
+ - Ollama
66
74
  - OpenAI
67
- - Anthropic
75
+ - Anthropic
68
76
 
69
77
  Config is saved to `~/.crawlix/crawlix.config.json`.
70
78
 
@@ -76,17 +84,26 @@ Config is saved to `~/.crawlix/crawlix.config.json`.
76
84
  # run all agents against your app
77
85
  crawlix run --url https://myapp.com --goal "complete the signup flow"
78
86
 
79
- # run specific agents only
87
+ # run specific agent(s) only - comma separated
80
88
  crawlix run --url https://myapp.com --goal "login" --agent first-timer,adversarial
81
89
 
82
90
  # run headed - watch agents navigate in real browser
83
91
  crawlix run --url https://myapp.com --goal "checkout" --headed
84
92
 
85
- # control steps and concurrency
86
- crawlix run --url https://myapp.com --goal "find pricing" --steps 15 --concurrency 1
93
+ # control max steps per agent
94
+ crawlix run --url https://myapp.com --goal "find pricing" --steps 15
95
+
96
+ # control how many agents run in parallel
97
+ crawlix run --url https://myapp.com --goal "test signup" --concurrency 1
98
+
99
+ # use round robin across multiple providers to avoid rate limiting
100
+ crawlix run --url https://myapp.com --goal "test signup" --round-robin
87
101
 
88
102
  # list all available agents
89
103
  crawlix agents
104
+
105
+ # reconfigure your LLM provider
106
+ crawlix setup
90
107
  ```
91
108
 
92
109
  ---
@@ -129,6 +146,19 @@ crawlix run --url https://myapp.com --goal "book an appointment" --agent doctor
129
146
 
130
147
  ---
131
148
 
149
+ ## Reports
150
+
151
+ After every run, Crawlix generates an AI-powered markdown report saved to `./crawlix-reports/`.
152
+
153
+ The report includes:
154
+ - Executive summary
155
+ - Critical issues with suggested fixes
156
+ - Warning patterns across agents
157
+ - Agent performance breakdown
158
+ - Prioritized recommendations
159
+
160
+ ---
161
+
132
162
  ## Findings
133
163
 
134
164
  Crawlix reports three severity levels:
@@ -1,2 +1,3 @@
1
+ #!/usr/bin/env node
1
2
  export {};
2
3
  //# sourceMappingURL=index.d.ts.map
package/dist/cli/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  import { Command } from 'commander';
2
3
  import { runCommand } from './commands/run.js';
3
4
  import { setupCommand } from './commands/setup.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAA;AAChE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAEzB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAA;AAChE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAEzB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"director.d.ts","sourceRoot":"","sources":["../../src/core/director.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAY,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,qBAAa,QAAQ;IACjB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,IAAI,CAAS;gBAGT,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;IAM1D,IAAI,WAAW,IAAI,MAAM,CAExB;IAGD,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,WAAW;IA0BN,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAStF"}
1
+ {"version":3,"file":"director.d.ts","sourceRoot":"","sources":["../../src/core/director.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAY,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,qBAAa,QAAQ;IACjB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,IAAI,CAAS;gBAGT,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;IAM1D,IAAI,WAAW,IAAI,MAAM,CAExB;IAGD,OAAO,CAAC,iBAAiB;IAuCzB,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,WAAW;IA0BN,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAStF"}
@@ -63,8 +63,13 @@ Set "type" to "stuck" only after ${this.persona.patience <= 3 ? '2' : this.perso
63
63
  `${e.action.value ? `"${e.action.value}"` : ''} ` +
64
64
  `โ†’ ${e.action.reasoning}` +
65
65
  (e.action.finding ? ` โš  ${e.action.finding.severity.toUpperCase()}: ${e.action.finding.description}` : '')).join('\n');
66
+ const lastAction = history.at(-1);
67
+ const lastActionHint = lastAction?.action.type === 'type'
68
+ ? `\nHINT: You just typed "${lastAction.action.value}" into "${lastAction.action.target}" โ€” you must now submit by pressing Enter or clicking the submit/search button.`
69
+ : '';
66
70
  return [
67
71
  header,
72
+ lastActionHint,
68
73
  '',
69
74
  'โ”€โ”€ PAGE ELEMENTS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€',
70
75
  pageState.tree,
@@ -1 +1 @@
1
- {"version":3,"file":"director.js","sourceRoot":"","sources":["../../src/core/director.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,MAAM,OAAO,QAAQ;IACT,OAAO,CAAgB;IACvB,GAAG,CAAM;IACT,IAAI,CAAS;IAGrB,YAAY,OAAsB,EAAE,GAAQ,EAAE,IAAY;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,sBAAsB;IACd,iBAAiB;QACrB,OAAO;;WAEJ,IAAI,CAAC,OAAO,CAAC,IAAI;eACb,IAAI,CAAC,OAAO,CAAC,WAAW;QAC/B,IAAI,CAAC,IAAI;;;EAGf,IAAI,CAAC,OAAO,CAAC,YAAY;;;oBAGP,IAAI,CAAC,OAAO,CAAC,QAAQ,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,kCAAkC;sBACtL,IAAI,CAAC,OAAO,CAAC,UAAU,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,mBAAmB;sBACpL,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,UAAU,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,wCAAwC;;;;;;;;;;;;;;;;;;;;;;mCAsB/M,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,oCAAoC,CAAA;IAC5I,CAAC;IAED,oDAAoD;IAC5C,gBAAgB,CAAC,SAAoB,EAAE,OAAuB;QAClE,MAAM,MAAM,GAAG;YACX,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;YACtD,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;SAC/D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE5B,wDAAwD;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC;YACpC,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACzB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;gBAChF,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG;gBAC5B,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;gBACzB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhB,OAAO;YACH,MAAM;YACN,EAAE;YACF,6CAA6C;YAC7C,SAAS,CAAC,IAAI;YACd,EAAE;YACF,6CAA6C;YAC7C,WAAW;YACX,EAAE;YACF,2BAA2B;SAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED,qCAAqC;IAC7B,WAAW,CAAC,GAAW;QAC3B,MAAM,OAAO,GAAG,GAAG;aACd,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;aAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,IAAI,EAAE,CAAA;QAEX,IAAI,MAA+B,CAAA;QACnC,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,IAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,MAAM,CAAC,CAAC,CAA4B,CAAA;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,EAAE,CAAC,CAAA;QACxE,CAAC;QAED,OAAO,MAA2B,CAAA;IACtC,CAAC;IAED,2BAA2B;IACpB,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,OAAuB;QAC7D,MAAM,KAAK,GAAa;YACpB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAChC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;SACnF,CAAA;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;CACJ"}
1
+ {"version":3,"file":"director.js","sourceRoot":"","sources":["../../src/core/director.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export class Extractor {
23
23
  const label = (el.getAttribute('aria-label') ??
24
24
  el.getAttribute('placeholder') ??
25
25
  el.getAttribute('title') ??
26
- el.textContent?.trim().slice(0, 60) ??
26
+ el.textContent?.trim().replace(/\s+/g, ' ').slice(0, 60) ??
27
27
  '').trim();
28
28
  const type = el.getAttribute('type') ?? '';
29
29
  const name = el.getAttribute('name') ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACpB,KAAK,CAAC,OAAO,CAAC,IAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAEvD,iDAAiD;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpC,MAAM,QAAQ,GAAG;gBACf,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;gBAClD,iBAAiB,EAAE,eAAe,EAAE,cAAc;gBAClD,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB;gBAC1D,iCAAiC;aAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEZ,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;iBACnD,MAAM,CAAC,EAAE,CAAC,EAAE;gBACX,eAAe;gBACf,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;gBACvC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YAC1C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,YAAY;iBAC1B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;gBACpC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAClG,MAAM,KAAK,GAAG,CACZ,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;oBAC7B,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;oBAC9B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;oBACxB,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBACnC,EAAE,CACH,CAAC,IAAI,EAAE,CAAA;gBACR,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAE1C,OAAO,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;YAC7H,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,GAAG;YACH,KAAK;YACL,IAAI,EAAE,IAAI,IAAI,iCAAiC;YAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACpB,KAAK,CAAC,OAAO,CAAC,IAAU;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAEvD,iDAAiD;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpC,MAAM,QAAQ,GAAG;gBACf,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;gBAClD,iBAAiB,EAAE,eAAe,EAAE,cAAc;gBAClD,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB;gBAC1D,iCAAiC;aAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEZ,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;iBACnD,MAAM,CAAC,EAAE,CAAC,EAAE;gBACX,eAAe;gBACf,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAA;gBACvC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YAC1C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,YAAY;iBAC1B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;gBACpC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAClG,MAAM,KAAK,GAAG,CACZ,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;oBAC7B,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;oBAC9B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;oBACxB,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBACxD,EAAE,CACH,CAAC,IAAI,EAAE,CAAA;gBACR,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAE1C,OAAO,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;YAC7H,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,OAAO;YACL,GAAG;YACH,KAAK;YACL,IAAI,EAAE,IAAI,IAAI,iCAAiC;YAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personas/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAwFlD,CAAA;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,aAAa,CAa3E;AAID,eAAO,MAAM,aAAa,EAA4B,KAAK,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personas/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAwFlD,CAAA;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,aAAa,CAgB3E;AAID,eAAO,MAAM,aAAa,EAA4B,KAAK,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAA"}
@@ -85,13 +85,16 @@ every slow response as at least a warning-level finding.`,
85
85
  // Accepts either a persona name string or a full PersonaConfig
86
86
  export function resolvePersona(input) {
87
87
  if (typeof input === 'string') {
88
- const persona = PERSONAS[input.toLowerCase()];
89
- if (!persona) {
90
- const available = Object.keys(PERSONAS).join(', ');
91
- throw new Error(`Unknown persona "${input}". Available: ${available}\n` +
92
- `Or pass a full PersonaConfig object.`);
93
- }
94
- return persona;
88
+ // try direct key match first
89
+ const byKey = PERSONAS[input.toLowerCase()];
90
+ if (byKey)
91
+ return byKey;
92
+ // try name match with normalization
93
+ const byName = Object.values(PERSONAS).find(p => p.name.toLowerCase().replace(/\s+/g, '-') === input.toLowerCase());
94
+ if (byName)
95
+ return byName;
96
+ const available = Object.keys(PERSONAS).join(', ');
97
+ throw new Error(`Unknown persona "${input}". Available: ${available}`);
95
98
  }
96
99
  return input;
97
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personas/index.ts"],"names":[],"mappings":"AAEA,uBAAuB;AACvB,MAAM,CAAC,MAAM,QAAQ,GAAkC;IAErD,aAAa,EAAE;QACb,IAAI,EAAa,aAAa;QAC9B,WAAW,EAAM,yDAAyD;QAC1E,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,UAAU;QAC3B,YAAY,EAAE;;;;;+CAK6B;KAC5C;IAED,WAAW,EAAE;QACX,IAAI,EAAa,WAAW;QAC5B,WAAW,EAAM,uDAAuD;QACxE,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;mDAKiC;KAChD;IAED,YAAY,EAAE;QACZ,IAAI,EAAa,YAAY;QAC7B,WAAW,EAAM,8DAA8D;QAC/E,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;2DAKyC;KACxD;IAED,aAAa,EAAE;QACb,IAAI,EAAa,aAAa;QAC9B,WAAW,EAAM,+DAA+D;QAChF,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,EAAE;QACnB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;;wDAMsC;KACrD;IAED,YAAY,EAAE;QACZ,IAAI,EAAa,oBAAoB;QACrC,WAAW,EAAM,2EAA2E;QAC5F,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,UAAU;QAC3B,YAAY,EAAE;;;;;kFAKgE;KAC/E;IAED,cAAc,EAAE;QACd,IAAI,EAAa,cAAc;QAC/B,WAAW,EAAM,4EAA4E;QAC7F,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;;yDAMuC;KACtD;CAEF,CAAA;AAED,YAAY;AACZ,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,KAA6B;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClD,MAAM,IAAI,KAAK,CACb,oBAAoB,KAAK,iBAAiB,SAAS,IAAI;gBACvD,sCAAsC,CACvC,CAAA;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qBAAqB;AAErB,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAiC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personas/index.ts"],"names":[],"mappings":"AAEA,uBAAuB;AACvB,MAAM,CAAC,MAAM,QAAQ,GAAkC;IAErD,aAAa,EAAE;QACb,IAAI,EAAa,aAAa;QAC9B,WAAW,EAAM,yDAAyD;QAC1E,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,UAAU;QAC3B,YAAY,EAAE;;;;;+CAK6B;KAC5C;IAED,WAAW,EAAE;QACX,IAAI,EAAa,WAAW;QAC5B,WAAW,EAAM,uDAAuD;QACxE,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;mDAKiC;KAChD;IAED,YAAY,EAAE;QACZ,IAAI,EAAa,YAAY;QAC7B,WAAW,EAAM,8DAA8D;QAC/E,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;2DAKyC;KACxD;IAED,aAAa,EAAE;QACb,IAAI,EAAa,aAAa;QAC9B,WAAW,EAAM,+DAA+D;QAChF,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,EAAE;QACnB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;;wDAMsC;KACrD;IAED,YAAY,EAAE;QACZ,IAAI,EAAa,oBAAoB;QACrC,WAAW,EAAM,2EAA2E;QAC5F,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,UAAU;QAC3B,YAAY,EAAE;;;;;kFAKgE;KAC/E;IAED,cAAc,EAAE;QACd,IAAI,EAAa,cAAc;QAC/B,WAAW,EAAM,4EAA4E;QAC7F,QAAQ,EAAS,CAAC;QAClB,UAAU,EAAO,CAAC;QAClB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;;;;;;yDAMuC;KACtD;CAEF,CAAA;AAED,YAAY;AACZ,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,KAA6B;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,6BAA6B;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;QAC3C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QAEvB,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,EAAE,CAClE,CAAA;QACD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,iBAAiB,SAAS,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qBAAqB;AAErB,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAiC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/personas/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAyCtD,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B/E;AAED,wBAAsB,YAAY,kBAmBjC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/personas/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAyCtD,wBAAsB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA4B/E;AAED,wBAAsB,YAAY,kBAmBjC"}
@@ -44,7 +44,7 @@ export async function loadPersonas(agentFlag) {
44
44
  ...customs
45
45
  ];
46
46
  return requested.map(name => {
47
- const found = allPersonas.find(p => p.name.toLowerCase() === name);
47
+ const found = allPersonas.find(p => p.name.toLowerCase().replace(/\s+/g, '-') === name.toLowerCase());
48
48
  if (!found)
49
49
  throw new Error(`Unknown agent "${name}". Run 'crawlix agents --list' to see available agents.`);
50
50
  return found;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/personas/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/personas/loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crawlix",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "AI testers that think like users. Your users will break it anyway. Crawlix finds it first.",
5
5
  "main": "./dist/cli/index.js",
6
6
  "exports": {