@zhiweiliu/playwright-generator 1.0.30 → 1.0.32

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
@@ -22,6 +22,17 @@ This module streamlines the generation of Playwright test cases by integrating w
22
22
  - [Best Practices](#best-practices)
23
23
  - [Troubleshooting](#troubleshooting)
24
24
  - [GitHub Integration](#github-integration)
25
+ - [Local LLM Setup (Ollama)](#local-llm-setup-ollama)
26
+ - [How It Works](#how-it-works)
27
+ - [1. Install Ollama](#1-install-ollama)
28
+ - [2. Start the Ollama Server](#2-start-the-ollama-server)
29
+ - [3. Pull a Model](#3-pull-a-model)
30
+ - [4. Configure .env](#4-configure-env)
31
+ - [5. Generate a Test Case](#5-generate-a-test-case)
32
+ - [Recommended Models](#recommended-models)
33
+ - [Qwen Models](#qwen-models-by-alibaba)
34
+ - [DeepSeek Models](#deepseek-models-by-deepseek-ai)
35
+ - [Using LM Studio](#using-lm-studio-alternative)
25
36
  - [Contributing](#contributing)
26
37
  - [Development Setup](#development-setup)
27
38
  - [License](#license)
@@ -76,6 +87,7 @@ The installed module will have amazing features to facilitate your day-to-day te
76
87
  - Claude: Anthropic API key with Claude access enabled (visit https://console.anthropic.com/)
77
88
  - Azure OpenAI: Azure subscription with an OpenAI resource and deployment
78
89
  - ChatGPT: OpenAI API key (visit https://platform.openai.com/)
90
+ - Local LLM: Ollama installed locally (no API key required — see [Local LLM Setup](#local-llm-setup-ollama))
79
91
 
80
92
  ## Installation & Quick Start
81
93
 
@@ -134,14 +146,16 @@ project-root/
134
146
 
135
147
  ```env
136
148
  # AI Model Configuration
137
- AI_MODEL=claude # Options: claude, azure-openai, chatgpt
138
- CLAUDE_API_KEY=sk-ant-... # Required if using Claude (starts with sk-ant-)
139
- AZURE_OPENAI_API_KEY= # Required if using Azure OpenAI
140
- AZURE_OPENAI_ENDPOINT= # e.g. https://<resource>.openai.azure.com
141
- AZURE_OPENAI_DEPLOYMENT= # e.g. gpt-4o
142
- AZURE_OPENAI_API_VERSION=2024-02-01 # Optional, defaults to 2024-02-01
143
- CHATGPT_API_KEY= # Required if using ChatGPT (starts with sk-)
144
- CHATGPT_MODEL=gpt-4o # Optional, defaults to gpt-4o
149
+ AI_MODEL=claude # Options: claude, azure-openai, chatgpt, local
150
+ CLAUDE_API_KEY=sk-ant-... # Required if using Claude (starts with sk-ant-)
151
+ AZURE_OPENAI_API_KEY= # Required if using Azure OpenAI
152
+ AZURE_OPENAI_ENDPOINT= # e.g. https://<resource>.openai.azure.com
153
+ AZURE_OPENAI_DEPLOYMENT= # e.g. gpt-4o
154
+ AZURE_OPENAI_API_VERSION=2024-02-01 # Optional, defaults to 2024-02-01
155
+ CHATGPT_API_KEY= # Required if using ChatGPT (starts with sk-)
156
+ CHATGPT_MODEL=gpt-4o # Optional, defaults to gpt-4o
157
+ LOCAL_LLM_URL=http://localhost:11434 # Required if using local LLM (Ollama default)
158
+ LOCAL_LLM_MODEL=llama3 # Required if using local LLM (e.g. llama3, codellama, qwen2.5-coder)
145
159
 
146
160
  # Playwright Configuration
147
161
  BROWSER=chromium # Options: chromium, firefox, webkit
@@ -206,6 +220,7 @@ Playwright test automation code is generated by running a command, with generate
206
220
  - **Claude**: Anthropic Claude 3 Haiku API (widely available)
207
221
  - **Azure OpenAI**: Azure-hosted OpenAI models (e.g. gpt-4o)
208
222
  - **ChatGPT**: OpenAI API (e.g. gpt-4o)
223
+ - **Local LLM**: Any Ollama-compatible local model (e.g. llama3, codellama, qwen2.5-coder, deepseek-coder-v2)
209
224
 
210
225
  The generator now strips Markdown and explanation text from model output automatically, keeping only the extracted TypeScript test function before writing to `generated/*.test.ts`.
211
226
 
@@ -223,6 +238,9 @@ npx playwright-generator generate --tc TC-0001 --model azure-openai
223
238
  # Generate with ChatGPT
224
239
  npx playwright-generator generate --tc TC-0001 --model chatgpt
225
240
 
241
+ # Generate with local LLM
242
+ npx playwright-generator generate --tc TC-0001 --model local
243
+
226
244
  # Generate to specific output file
227
245
  npx playwright-generator generate --tc TC-0001 --output login.test.ts
228
246
 
@@ -324,14 +342,17 @@ Workflow file location: `.github/workflows/playwright-tests.yml`
324
342
 
325
343
  **Common Issues**:
326
344
 
327
- | Issue | Solution |
328
- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
329
- | `API key not found` | Verify `.env` file exists and `CLAUDE_API_KEY` or `AZURE_OPENAI_API_KEY` is set |
345
+ | Issue | Solution |
346
+ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
347
+ | `API key not found` | Verify `.env` file exists and `CLAUDE_API_KEY` or `AZURE_OPENAI_API_KEY` is set |
330
348
  | `Claude API connection failed` | Check `CLAUDE_API_KEY` is valid and account has Claude API access; ensure key starts with `sk-ant-`. Visit https://console.anthropic.com/ to enable Claude API. Uses Claude 3 Haiku which is widely available. |
331
- | `Tests timing out` | Increase `TIMEOUT` in `.env` or use explicit waits in test cases |
332
- | `Generated code doesn't compile` | Review the natural language description for clarity; regenerate with a refined prompt |
333
- | `Tests pass locally but fail in CI` | Check `BASE_URL` environment variable and add debugging with screenshots |
334
- | `Selector not found` | Ensure selectors are unique and reference current UI state |
349
+ | `Tests timing out` | Increase `TIMEOUT` in `.env` or use explicit waits in test cases |
350
+ | `Generated code doesn't compile` | Review the natural language description for clarity; regenerate with a refined prompt |
351
+ | `Tests pass locally but fail in CI` | Check `BASE_URL` environment variable and add debugging with screenshots |
352
+ | `Selector not found` | Ensure selectors are unique and reference current UI state |
353
+ | `ECONNREFUSED` (local LLM) | Ollama server is not running — run `ollama serve` |
354
+ | `model not found` (local LLM) | Run `ollama pull <model>` first |
355
+ | Slow local LLM generation | Local models are slower than cloud APIs; expect 30–120s; try `mistral` for speed |
335
356
 
336
357
  ### GitHub Integration
337
358
 
@@ -339,6 +360,141 @@ Workflow file location: `.github/workflows/playwright-tests.yml`
339
360
  - Tests also run on a scheduled basis (daily at midnight UTC)
340
361
  - Workflow status badges can be added to the README to display test status
341
362
 
363
+ ## Local LLM Setup (Ollama)
364
+
365
+ Run a local LLM with `playwright-generator` using [Ollama](https://ollama.com), which exposes an OpenAI-compatible API on your machine — no API keys or internet access required.
366
+
367
+ ### How It Works
368
+
369
+ The `local` provider sends requests to `LOCAL_LLM_URL/v1/chat/completions`, the standard endpoint exposed by Ollama. Any other local server that implements the same OpenAI-compatible API (e.g. LM Studio, llama.cpp server) will also work.
370
+
371
+ ### 1. Install Ollama
372
+
373
+ **macOS / Linux**:
374
+ ```bash
375
+ curl -fsSL https://ollama.com/install.sh | sh
376
+ ```
377
+
378
+ **macOS (Homebrew)**:
379
+ ```bash
380
+ brew install ollama
381
+ ```
382
+
383
+ **Windows**: Download the installer from https://ollama.com/download
384
+
385
+ ### 2. Start the Ollama Server
386
+
387
+ ```bash
388
+ ollama serve
389
+ ```
390
+
391
+ By default, Ollama listens on `http://localhost:11434`. The OpenAI-compatible endpoint is available at `http://localhost:11434/v1/chat/completions`.
392
+
393
+ ### 3. Pull a Model
394
+
395
+ ```bash
396
+ # General purpose — good balance of speed and quality
397
+ ollama pull llama3
398
+
399
+ # Smaller / faster — good for low-resource machines
400
+ ollama pull mistral
401
+
402
+ # Code-focused — best results for test generation
403
+ ollama pull codellama
404
+ ```
405
+
406
+ To list all models you have pulled:
407
+ ```bash
408
+ ollama list
409
+ ```
410
+
411
+ ### 4. Configure .env
412
+
413
+ ```env
414
+ AI_MODEL=local
415
+ LOCAL_LLM_URL=http://localhost:11434 # Ollama default; change if using a different port
416
+ LOCAL_LLM_MODEL=llama3 # Must match the model name you pulled
417
+ ```
418
+
419
+ ### 5. Generate a Test Case
420
+
421
+ ```bash
422
+ npx playwright-generator generate --tc TC-0001 --model local
423
+ ```
424
+
425
+ Or set `AI_MODEL=local` in `.env` and omit the `--model` flag:
426
+
427
+ ```bash
428
+ npx playwright-generator generate --tc TC-0001
429
+ ```
430
+
431
+ ### Recommended Models
432
+
433
+ | Model | Size | Best For |
434
+ |---|---|---|
435
+ | `llama3` | ~4.7 GB | General use, good code quality |
436
+ | `codellama` | ~3.8 GB | Code generation tasks |
437
+ | `mistral` | ~4.1 GB | Fast, low memory usage |
438
+ | `llama3:8b` | ~8 GB | Higher quality output |
439
+ | `deepseek-coder` | ~3.8 GB | Code-focused, strong TypeScript |
440
+ | `deepseek-coder-v2` | ~8.9 GB | Stronger code quality than v1 |
441
+ | `deepseek-r1` | ~4.7 GB | Reasoning-focused, good for complex logic |
442
+ | `qwen2.5-coder` | ~4.7 GB | Strong TypeScript/code generation |
443
+ | `qwen2.5` | ~4.7 GB | General use, multilingual |
444
+
445
+ ### Qwen Models (by Alibaba)
446
+
447
+ Qwen models perform well for code generation tasks and are fully supported by Ollama.
448
+
449
+ ```bash
450
+ ollama pull qwen2.5-coder # Recommended for code generation
451
+ ollama pull qwen2.5-coder:7b # Larger variant for higher quality
452
+ ollama pull qwen2.5 # General purpose
453
+ ```
454
+
455
+ ```env
456
+ AI_MODEL=local
457
+ LOCAL_LLM_URL=http://localhost:11434
458
+ LOCAL_LLM_MODEL=qwen2.5-coder
459
+ ```
460
+
461
+ > Tip: `qwen2.5-coder` is specifically trained on code and tends to produce cleaner TypeScript than general-purpose models of the same size.
462
+
463
+ ### DeepSeek Models (by DeepSeek AI)
464
+
465
+ DeepSeek offers both code-focused and reasoning models, both fully supported by Ollama.
466
+
467
+ ```bash
468
+ ollama pull deepseek-coder-v2 # Code-focused (recommended for test generation)
469
+ ollama pull deepseek-r1 # Reasoning model — good for complex multi-step test logic
470
+ ollama pull deepseek-coder # Smaller/faster code model
471
+ ```
472
+
473
+ ```env
474
+ AI_MODEL=local
475
+ LOCAL_LLM_URL=http://localhost:11434
476
+ LOCAL_LLM_MODEL=deepseek-coder-v2
477
+ ```
478
+
479
+ > Tip: `deepseek-r1` uses chain-of-thought reasoning internally, which can improve accuracy for complex test cases but is slower than `deepseek-coder-v2`.
480
+
481
+ ### Using LM Studio (Alternative)
482
+
483
+ [LM Studio](https://lmstudio.ai) also exposes an OpenAI-compatible server:
484
+
485
+ 1. Download and install LM Studio from https://lmstudio.ai
486
+ 2. Download a model inside the app (e.g. `Meta-Llama-3-8B-Instruct`)
487
+ 3. Start the local server from the **Local Server** tab (default port: `1234`)
488
+ 4. Set in `.env`:
489
+
490
+ ```env
491
+ AI_MODEL=local
492
+ LOCAL_LLM_URL=http://localhost:1234
493
+ LOCAL_LLM_MODEL=Meta-Llama-3-8B-Instruct # Must match the model name shown in LM Studio
494
+ ```
495
+
496
+ > Note: Local models are slower than cloud APIs — expect 30–120 seconds per generation depending on hardware. No data leaves your machine.
497
+
342
498
  ## Contributing
343
499
 
344
500
  Contributions are welcome! Please follow these guidelines:
@@ -375,5 +531,3 @@ MIT License - See LICENSE file for details
375
531
  For issues, questions, or suggestions, please open an issue on GitHub or contact the maintainers.
376
532
 
377
533
  ---
378
-
379
- **Happy Testing! 🎭**
package/dist/cli.js CHANGED
@@ -12,7 +12,7 @@ const program = new commander_1.Command();
12
12
  program
13
13
  .name("playwright-generator")
14
14
  .description("Generate Playwright test cases from natural language using LLM")
15
- .version("1.0.30");
15
+ .version("1.0.32");
16
16
  // Init command
17
17
  program
18
18
  .command("init [projectPath]")
@@ -31,7 +31,7 @@ program
31
31
  .command("generate")
32
32
  .description("Generate Playwright test code from natural language test cases")
33
33
  .option("-tc, --tc <testCaseIds>", "Comma-separated test case IDs (e.g., TC-0001,TC-0002)")
34
- .option("-m, --model <model>", "LLM model to use (claude, azure-openai or chatgpt)", "claude")
34
+ .option("-m, --model <model>", "LLM model to use (claude, azure-openai, chatgpt or local)", "claude")
35
35
  .option("-o, --output <outputFile>", "Output file name (relative to generated/ folder)")
36
36
  .action(async (options) => {
37
37
  try {
@@ -67,27 +67,31 @@ File name: *.test.md
67
67
 
68
68
  Format:
69
69
  -------
70
- # [TC-XXXX] [TAG1] [TAG2]
70
+ # Test Case: <Title>
71
71
 
72
- ## Test: Clear description of what is being tested
72
+ [TC-XXXX] [TAG1] [TAG2]
73
73
 
74
- Given the initial state or precondition
75
- When the user performs an action
76
- And additional actions
77
- Then expected result should occur
78
- And another expected result
74
+ ## Description
75
+
76
+ - Given the initial state or precondition
77
+ - When the user performs an action
78
+ - And additional actions
79
+ - Then expected result should occur
80
+ - And another expected result
79
81
 
80
82
  Example:
81
83
  --------
82
- # [TC-0001] [SMOKE] [LOGIN]
84
+ # Test Case: User Login
85
+
86
+ [TC-0001] [SMOKE] [LOGIN]
83
87
 
84
- ## Test: User logs in with valid credentials
88
+ ## User logs in with valid credentials
85
89
 
86
- Given the user is on the login page
87
- When the user enters username and password
88
- And clicks the login button
89
- Then the user should see the dashboard
90
- And the welcome message should contain the user name
90
+ - Given the user is on the login page
91
+ - When the user enters username and password
92
+ - And clicks the login button
93
+ - Then the user should see the dashboard
94
+ - And the welcome message should contain the user name
91
95
 
92
96
  Tags:
93
97
  -----
@@ -99,7 +103,7 @@ Tips for better AI-generated code:
99
103
  1. Use clear, specific language
100
104
  2. Mention element types (button, input, link, etc.)
101
105
  3. Include exact text or identifiers when possible
102
- 4. Use Given-When-Then structure for clarity
106
+ 4. Use Given-When-Then structure with bullet points (-) for clarity
103
107
  5. Keep test cases focused on one feature
104
108
  6. Review generated code before committing
105
109
  `));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,kDAAuD;AACvD,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CACL,yBAAyB,EACzB,uDAAuD,CACxD;KACA,MAAM,CACL,qBAAqB,EACrB,oDAAoD,EACpD,QAAQ,CACT;KACA,MAAM,CACL,2BAA2B,EAC3B,kDAAkD,CACnD;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CACT,sEAAsE,CACvE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAA,2BAAgB,EAAC,WAAW,EAAE;YAClC,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CZ,CAAC,CACD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,kDAAuD;AACvD,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CACL,yBAAyB,EACzB,uDAAuD,CACxD;KACA,MAAM,CACL,qBAAqB,EACrB,2DAA2D,EAC3D,QAAQ,CACT;KACA,MAAM,CACL,2BAA2B,EAC3B,kDAAkD,CACnD;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CACT,sEAAsE,CACvE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAA,2BAAgB,EAAC,WAAW,EAAE;YAClC,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgDZ,CAAC,CACD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export interface GenerateOptions {
2
2
  testCaseIds?: string[];
3
- model?: "copilot" | "claude";
3
+ model?: "claude" | "azure-openai" | "chatgpt" | "local";
4
4
  outputFile?: string;
5
5
  }
6
6
  export declare function generateTestCode(projectRoot: string, options: GenerateOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Gf;AA0FD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0FzD"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Gf;AA0FD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0FzD"}
@@ -122,9 +122,9 @@ function extractTestCaseContent(fileContent, testCaseId) {
122
122
  if (startIndex === -1) {
123
123
  throw new Error(`Test case [${testCaseId}] not found in file`);
124
124
  }
125
- // Find the start of this test case (previous "## Test Case:" or beginning of file)
125
+ // Find the start of this test case (previous "# Test Case:" / "## Test Case:" heading or beginning of file)
126
126
  for (let i = startIndex - 1; i >= 0; i--) {
127
- if (lines[i].trim().startsWith("## Test Case:")) {
127
+ if (/^#{1,2}\s+Test Case:/i.test(lines[i].trim())) {
128
128
  startIndex = i;
129
129
  break;
130
130
  }
@@ -132,9 +132,9 @@ function extractTestCaseContent(fileContent, testCaseId) {
132
132
  startIndex = 0;
133
133
  }
134
134
  }
135
- // Find the end of this test case (next "## Test Case:" or end of file)
135
+ // Find the end of this test case (next "# Test Case:" / "## Test Case:" heading or end of file)
136
136
  for (let i = startIndex + 1; i < lines.length; i++) {
137
- if (lines[i].trim().startsWith("## Test Case:") && i > startIndex) {
137
+ if (/^#{1,2}\s+Test Case:/i.test(lines[i].trim()) && i > startIndex) {
138
138
  endIndex = i;
139
139
  break;
140
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ async function initializeProject(projectPath) {
27
27
  }
28
28
  // Copy .env.example to project
29
29
  const envExampleContent = `# AI Model Configuration
30
- AI_MODEL=claude # Options: claude, azure-openai
30
+ AI_MODEL=claude # Options: claude, azure-openai, chatgpt, local
31
31
  CLAUDE_API_KEY= # Required if using Claude (starts with sk-ant-)
32
32
  AZURE_OPENAI_API_KEY= # Required if using Azure OpenAI
33
33
  AZURE_OPENAI_ENDPOINT= # e.g. https://<resource>.openai.azure.com
@@ -35,6 +35,8 @@ AZURE_OPENAI_DEPLOYMENT= # e.g. gpt-4o
35
35
  AZURE_OPENAI_API_VERSION=2024-02-01 # Optional, defaults to 2024-02-01
36
36
  CHATGPT_API_KEY= # Required if using ChatGPT (starts with sk-)
37
37
  CHATGPT_MODEL=gpt-4o # Optional, defaults to gpt-4o
38
+ LOCAL_LLM_URL=http://localhost:11434 # Required if using local LLM (Ollama default)
39
+ LOCAL_LLM_MODEL=llama3 # Required if using local LLM (e.g. llama3, mistral, codellama)
38
40
 
39
41
  # Playwright Configuration
40
42
  BROWSER=chromium
@@ -134,109 +136,107 @@ export default defineConfig({
134
136
  await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, "tsconfig.json"), JSON.stringify(tsconfig, null, 2));
135
137
  console.log(chalk_1.default.green("✓ Created tsconfig.json"));
136
138
  // Create sample test cases
137
- const saucedemoSampleContent = `# SauceDemo Sample Test Cases
138
-
139
- This file contains sample natural language test cases for the SauceDemo e-commerce website (https://saucedemo.com). These test cases demonstrate comprehensive testing scenarios with detailed step-by-step descriptions.
140
-
141
- ## Test Case: Complete Purchase Flow
139
+ const saucedemoSampleContent = `# Test Case: Complete Purchase Flow
142
140
 
143
141
  [TC-SAMPLE-0001] [SMOKE] [PURCHASE] [END-TO-END]
144
- Complete e-commerce purchase flow from login to order confirmation
145
142
 
146
- Given the user navigates to the SauceDemo login page at https://saucedemo.com
147
- When the user enters "standard_user" as the username
148
- And the user enters "secret_sauce" as the password
149
- And the user clicks the "Login" button
150
- Then the user should be redirected to the products page
151
- And the page title should contain "Products"
143
+ ## Complete e-commerce purchase flow from login to order confirmation
152
144
 
153
- When the user clicks on the "Sauce Labs Backpack" product
154
- Then the product details page should open
155
- And the product name should be "Sauce Labs Backpack"
156
- And the product price should be displayed
145
+ - Given the user navigates to the SauceDemo login page at https://saucedemo.com
146
+ - When the user enters "standard_user" as the username
147
+ - And the user enters "secret_sauce" as the password
148
+ - And the user clicks the "Login" button
149
+ - Then the user should be redirected to the products page
150
+ - And the page title should contain "Products"
157
151
 
158
- When the user clicks the "Add to Cart" button
159
- Then the cart icon should show "1" item
160
- And the "Add to Cart" button should change to "Remove"
152
+ - When the user clicks on the "Sauce Labs Backpack" product
153
+ - Then the product details page should open
154
+ - And the product name should be "Sauce Labs Backpack"
155
+ - And the product price should be displayed
161
156
 
162
- When the user clicks the cart icon in the top right
163
- Then the cart page should open
164
- And the "Sauce Labs Backpack" should be listed in the cart
165
- And the quantity should be 1
166
- And the price should match the product page
157
+ - When the user clicks the "Add to Cart" button
158
+ - Then the cart icon should show "1" item
159
+ - And the "Add to Cart" button should change to "Remove"
167
160
 
168
- When the user clicks the "Checkout" button
169
- Then the checkout information page should open
161
+ - When the user clicks the cart icon in the top right
162
+ - Then the cart page should open
163
+ - And the "Sauce Labs Backpack" should be listed in the cart
164
+ - And the quantity should be 1
165
+ - And the price should match the product page
170
166
 
171
- When the user enters "John" as the first name
172
- And the user enters "Doe" as the last name
173
- And the user enters "12345" as the zip code
174
- And the user clicks the "Continue" button
175
- Then the checkout overview page should open
176
- And the item total should be calculated correctly
177
- And the tax should be applied
178
- And the total amount should be displayed
167
+ - When the user clicks the "Checkout" button
168
+ - Then the checkout information page should open
179
169
 
180
- When the user clicks the "Finish" button
181
- Then the order confirmation page should open
182
- And a success message "Thank you for your order!" should be displayed
183
- And the order number should be shown
170
+ - When the user enters "John" as the first name
171
+ - And the user enters "Doe" as the last name
172
+ - And the user enters "12345" as the zip code
173
+ - And the user clicks the "Continue" button
174
+ - Then the checkout overview page should open
175
+ - And the item total should be calculated correctly
176
+ - And the tax should be applied
177
+ - And the total amount should be displayed
184
178
 
185
- ## Test Case: Product Browsing and Cart Management
179
+ - When the user clicks the "Finish" button
180
+ - Then the order confirmation page should open
181
+ - And a success message "Thank you for your order!" should be displayed
182
+ - And the order number should be shown
183
+
184
+ # Test Case: Product Browsing and Cart Management
186
185
 
187
186
  [TC-SAMPLE-0002] [REGRESSION] [BROWSING] [CART]
188
- Browse products, sort items, and manage cart contents
189
187
 
190
- Given the user is logged in to SauceDemo with valid credentials
191
- When the user is on the products page
192
- Then all products should be displayed in a grid layout
193
- And each product should show name, price, and "Add to Cart" button
188
+ ## Browse products, sort items, and manage cart contents
189
+
190
+ - Given the user is logged in to SauceDemo with valid credentials
191
+ - When the user is on the products page
192
+ - Then all products should be displayed in a grid layout
193
+ - And each product should show name, price, and "Add to Cart" button
194
194
 
195
- When the user clicks the sort dropdown
196
- Then sorting options should be displayed: Name (A to Z), Name (Z to A), Price (low to high), Price (high to low)
195
+ - When the user clicks the sort dropdown
196
+ - Then sorting options should be displayed: Name (A to Z), Name (Z to A), Price (low to high), Price (high to low)
197
197
 
198
- When the user selects "Name (A to Z)" from the sort dropdown
199
- Then products should be sorted alphabetically by name in ascending order
200
- And the first product should be "Sauce Labs Backpack"
198
+ - When the user selects "Name (A to Z)" from the sort dropdown
199
+ - Then products should be sorted alphabetically by name in ascending order
200
+ - And the first product should be "Sauce Labs Backpack"
201
201
 
202
- When the user selects "Name (Z to A)" from the sort dropdown
203
- Then products should be sorted alphabetically by name in descending order
204
- And the first product should be "Test.allTheThings() T-Shirt (Red)"
202
+ - When the user selects "Name (Z to A)" from the sort dropdown
203
+ - Then products should be sorted alphabetically by name in descending order
204
+ - And the first product should be "Test.allTheThings() T-Shirt (Red)"
205
205
 
206
- When the user selects "Price (low to high)" from the sort dropdown
207
- Then products should be sorted by price in ascending order
208
- And the first product should be the cheapest item
206
+ - When the user selects "Price (low to high)" from the sort dropdown
207
+ - Then products should be sorted by price in ascending order
208
+ - And the first product should be the cheapest item
209
209
 
210
- When the user selects "Price (high to low)" from the sort dropdown
211
- Then products should be sorted by price in descending order
212
- And the first product should be the most expensive item
210
+ - When the user selects "Price (high to low)" from the sort dropdown
211
+ - Then products should be sorted by price in descending order
212
+ - And the first product should be the most expensive item
213
213
 
214
- When the user clicks "Add to Cart" on the first product in the sorted list
215
- Then the cart icon should update to show "1"
216
- And that product's button should show "Remove"
214
+ - When the user clicks "Add to Cart" on the first product in the sorted list
215
+ - Then the cart icon should update to show "1"
216
+ - And that product's button should show "Remove"
217
217
 
218
- When the user clicks "Add to Cart" on the second product in the sorted list
219
- Then the cart icon should update to show "2"
220
- And both products' buttons should show "Remove"
218
+ - When the user clicks "Add to Cart" on the second product in the sorted list
219
+ - Then the cart icon should update to show "2"
220
+ - And both products' buttons should show "Remove"
221
221
 
222
- When the user clicks the cart icon
223
- Then the cart page should open
224
- And both selected products should be listed
225
- And the quantities should be 1 for each
226
- And the total price should be the sum of both items
222
+ - When the user clicks the cart icon
223
+ - Then the cart page should open
224
+ - And both selected products should be listed
225
+ - And the quantities should be 1 for each
226
+ - And the total price should be the sum of both items
227
227
 
228
- When the user clicks "Remove" next to the first product
229
- Then that product should be removed from the cart
230
- And the cart should show only the second product
231
- And the cart icon should show "1"
228
+ - When the user clicks "Remove" next to the first product
229
+ - Then that product should be removed from the cart
230
+ - And the cart should show only the second product
231
+ - And the cart icon should show "1"
232
232
 
233
- When the user clicks "Continue Shopping"
234
- Then the user should return to the products page
235
- And the cart icon should still show "1"
233
+ - When the user clicks "Continue Shopping"
234
+ - Then the user should return to the products page
235
+ - And the cart icon should still show "1"
236
236
 
237
- When the user clicks the cart icon again
238
- Then the cart should still contain the remaining product
239
- And the user can proceed with checkout if desired
237
+ - When the user clicks the cart icon again
238
+ - Then the cart should still contain the remaining product
239
+ - And the user can proceed with checkout if desired
240
240
  `;
241
241
  await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, "tests", "saucedemo-samples.test.md"), saucedemoSampleContent);
242
242
  console.log(chalk_1.default.green("✓ Created SauceDemo sample test cases"));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export interface Config {
2
- aiModel: "claude" | "azure-openai" | "chatgpt";
2
+ aiModel: "claude" | "azure-openai" | "chatgpt" | "local";
3
3
  claudeApiKey?: string;
4
4
  azureOpenAIApiKey?: string;
5
5
  azureOpenAIEndpoint?: string;
@@ -7,6 +7,8 @@ export interface Config {
7
7
  azureOpenAIApiVersion?: string;
8
8
  chatGPTApiKey?: string;
9
9
  chatGPTModel?: string;
10
+ localLLMUrl?: string;
11
+ localLLMModel?: string;
10
12
  browser: "chromium" | "firefox" | "webkit";
11
13
  headless: boolean;
12
14
  baseUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,OAAO,CAAC,UAAU;IAoBlB,SAAS,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO;IAkBzB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI3C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAG5C;;AAED,wBAA2C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,OAAO,CAAC,UAAU;IAsBlB,SAAS,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO;IAkBzB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI3C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAG5C;;AAED,wBAA2C"}
package/dist/config.js CHANGED
@@ -29,6 +29,8 @@ class ConfigManager {
29
29
  azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION || "2024-02-01",
30
30
  chatGPTApiKey: process.env.CHATGPT_API_KEY,
31
31
  chatGPTModel: process.env.CHATGPT_MODEL || "gpt-4o",
32
+ localLLMUrl: process.env.LOCAL_LLM_URL || "http://localhost:11434",
33
+ localLLMModel: process.env.LOCAL_LLM_MODEL || "llama3",
32
34
  browser: process.env.BROWSER ||
33
35
  "chromium",
34
36
  headless: process.env.HEADLESS !== "false",
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AAEpB,6BAA6B;AAC7B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAkBhB,MAAa,aAAa;IAIxB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,OAAO,EAAG,OAAO,CAAC,GAAG,CAAC,QAAkD,IAAI,QAAQ;YACpF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACxC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACnD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;YAC1D,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,YAAY;YAC3E,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YAC1C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ;YACnD,OAAO,EACJ,OAAO,CAAC,GAAG,CAAC,OAA6C;gBAC1D,UAAU;YACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO;YAC1C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB;YACxD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,cAAc;QACZ,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7G,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;YAClI,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,OAAO,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAhED,sCAgEC;AAED,kBAAe,aAAa,CAAC,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AAEpB,6BAA6B;AAC7B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAoBhB,MAAa,aAAa;IAIxB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,OAAO,EAAG,OAAO,CAAC,GAAG,CAAC,QAA4D,IAAI,QAAQ;YAC9F,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACxC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACnD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;YAC1D,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,YAAY;YAC3E,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YAC1C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ;YACnD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wBAAwB;YAClE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ;YACtD,OAAO,EACJ,OAAO,CAAC,GAAG,CAAC,OAA6C;gBAC1D,UAAU;YACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO;YAC1C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB;YACxD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,cAAc;QACZ,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7G,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;YAClI,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,OAAO,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAlED,sCAkEC;AAED,kBAAe,aAAa,CAAC,WAAW,EAAE,CAAC"}
@@ -17,7 +17,7 @@ class ChatGPTProvider extends provider_1.LLMProvider {
17
17
  }
18
18
  async validateConnection() {
19
19
  try {
20
- const response = await axios_1.default.post(this.baseUrl, { model: this.model, messages: [{ role: "user", content: "test" }], max_tokens: 10 }, { headers: { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" }, timeout: 5000 });
20
+ const response = await axios_1.default.post(this.baseUrl, { model: this.model, messages: [{ role: "user", content: "test" }], max_completion_tokens: 10 }, { headers: { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" }, timeout: 5000 });
21
21
  return response.status === 200;
22
22
  }
23
23
  catch (error) {
@@ -30,7 +30,7 @@ class ChatGPTProvider extends provider_1.LLMProvider {
30
30
  const response = await axios_1.default.post(this.baseUrl, {
31
31
  model: this.model,
32
32
  messages: [{ role: "user", content: this.buildPrompt(prompt) }],
33
- max_tokens: 2000,
33
+ max_completion_tokens: 2000,
34
34
  temperature: 0.2,
35
35
  }, {
36
36
  headers: { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" },
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/llm/chatgpt.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,eAAgB,SAAQ,sBAAW;IAK9C,YAAY,MAAc,EAAE,KAAK,GAAG,QAAQ;QAC1C,KAAK,EAAE,CAAC;QAHF,YAAO,GAAG,4CAA4C,CAAC;QAI7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EACpF,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAC3G,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAiB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,GAAG;aACjB,EACD;gBACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACvF,OAAO,EAAE,KAAK;aACf,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE1E,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;gBACjC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AA1DD,0CA0DC"}
1
+ {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/llm/chatgpt.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,eAAgB,SAAQ,sBAAW;IAK9C,YAAY,MAAc,EAAE,KAAK,GAAG,QAAQ;QAC1C,KAAK,EAAE,CAAC;QAHF,YAAO,GAAG,4CAA4C,CAAC;QAI7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAC/F,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAC3G,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAiB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,qBAAqB,EAAE,IAAI;gBAC3B,WAAW,EAAE,GAAG;aACjB,EACD;gBACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACvF,OAAO,EAAE,KAAK;aACf,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE1E,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;gBACjC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AA1DD,0CA0DC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,qBAAa,UAAU;IACrB,MAAM,CAAC,cAAc,IAAI,WAAW;CAkBrC;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOzC,qBAAa,UAAU;IACrB,MAAM,CAAC,cAAc,IAAI,WAAW;CAsBrC;AAED,eAAe,UAAU,CAAC"}
package/dist/llm/index.js CHANGED
@@ -7,6 +7,7 @@ exports.LLMFactory = void 0;
7
7
  const claude_1 = require("./claude");
8
8
  const azure_openai_1 = require("./azure-openai");
9
9
  const chatgpt_1 = require("./chatgpt");
10
+ const local_1 = require("./local");
10
11
  const config_1 = __importDefault(require("../config"));
11
12
  class LLMFactory {
12
13
  static createProvider() {
@@ -20,6 +21,9 @@ class LLMFactory {
20
21
  throw new Error("Azure OpenAI deployment not configured. Set AZURE_OPENAI_DEPLOYMENT in .env");
21
22
  return new azure_openai_1.AzureOpenAIProvider(config.azureOpenAIApiKey, config.azureOpenAIEndpoint, config.azureOpenAIDeployment, config.azureOpenAIApiVersion);
22
23
  }
24
+ if (config.aiModel === "local") {
25
+ return new local_1.LocalLLMProvider(config.localLLMUrl, config.localLLMModel);
26
+ }
23
27
  if (config.aiModel === "chatgpt") {
24
28
  if (!config.chatGPTApiKey)
25
29
  throw new Error("ChatGPT API key not configured. Set CHATGPT_API_KEY in .env");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";;;;;;AACA,qCAA0C;AAC1C,iDAAqD;AACrD,uCAA4C;AAC5C,uDAAsC;AAEtC,MAAa,UAAU;IACrB,MAAM,CAAC,cAAc;QACnB,MAAM,MAAM,GAAG,gBAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACxH,IAAI,CAAC,MAAM,CAAC,mBAAmB;gBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC5H,IAAI,CAAC,MAAM,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAClI,OAAO,IAAI,kCAAmB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACnJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1G,OAAO,IAAI,yBAAe,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACvG,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;CACF;AAnBD,gCAmBC;AAED,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";;;;;;AACA,qCAA0C;AAC1C,iDAAqD;AACrD,uCAA4C;AAC5C,mCAA2C;AAC3C,uDAAsC;AAEtC,MAAa,UAAU;IACrB,MAAM,CAAC,cAAc;QACnB,MAAM,MAAM,GAAG,gBAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACxH,IAAI,CAAC,MAAM,CAAC,mBAAmB;gBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC5H,IAAI,CAAC,MAAM,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAClI,OAAO,IAAI,kCAAmB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACnJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,IAAI,wBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1G,OAAO,IAAI,yBAAe,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACvG,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;CACF;AAvBD,gCAuBC;AAED,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { LLMProvider, LLMPrompt, GeneratedCode } from "./provider";
2
+ export declare class LocalLLMProvider extends LLMProvider {
3
+ private baseUrl;
4
+ private model;
5
+ constructor(baseUrl?: string, model?: string);
6
+ validateConnection(): Promise<boolean>;
7
+ generateTestCode(prompt: LLMPrompt): Promise<GeneratedCode>;
8
+ }
9
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/llm/local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,SAA2B,EAAE,KAAK,SAAW;IAM1D,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IActC,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;CAgClE"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalLLMProvider = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const provider_1 = require("./provider");
9
+ class LocalLLMProvider extends provider_1.LLMProvider {
10
+ constructor(baseUrl = "http://localhost:11434", model = "llama3") {
11
+ super();
12
+ this.baseUrl = baseUrl.replace(/\/$/, "");
13
+ this.model = model;
14
+ }
15
+ async validateConnection() {
16
+ try {
17
+ const response = await axios_1.default.post(`${this.baseUrl}/v1/chat/completions`, { model: this.model, messages: [{ role: "user", content: "test" }], max_tokens: 10 }, { headers: { "Content-Type": "application/json" }, timeout: 5000 });
18
+ return response.status === 200;
19
+ }
20
+ catch (error) {
21
+ console.error("Local LLM connection validation failed:", error.response?.data || error.message);
22
+ return false;
23
+ }
24
+ }
25
+ async generateTestCode(prompt) {
26
+ try {
27
+ const response = await axios_1.default.post(`${this.baseUrl}/v1/chat/completions`, {
28
+ model: this.model,
29
+ messages: [{ role: "user", content: this.buildPrompt(prompt) }],
30
+ temperature: 0.2,
31
+ stream: false,
32
+ }, {
33
+ headers: { "Content-Type": "application/json" },
34
+ timeout: 120000,
35
+ });
36
+ const generatedCode = response.data.choices?.[0]?.message?.content || "";
37
+ if (!generatedCode.trim())
38
+ throw new Error("Empty response from local LLM");
39
+ return {
40
+ code: generatedCode,
41
+ timestamp: new Date(),
42
+ model: `local/${this.model}`,
43
+ testCaseId: prompt.testCaseId,
44
+ };
45
+ }
46
+ catch (error) {
47
+ const errorMessage = error.response
48
+ ? `HTTP ${error.response.status}: ${JSON.stringify(error.response.data)}`
49
+ : error.message;
50
+ throw new Error(`Failed to generate code with local LLM: ${errorMessage}`);
51
+ }
52
+ }
53
+ }
54
+ exports.LocalLLMProvider = LocalLLMProvider;
55
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/llm/local.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,gBAAiB,SAAQ,sBAAW;IAI/C,YAAY,OAAO,GAAG,wBAAwB,EAAE,KAAK,GAAG,QAAQ;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,sBAAsB,EACrC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EACpF,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CACnE,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAiB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,sBAAsB,EACrC;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,WAAW,EAAE,GAAG;gBAChB,MAAM,EAAE,KAAK;aACd,EACD;gBACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,OAAO,EAAE,MAAM;aAChB,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAE5E,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;gBAC5B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;gBACjC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAxDD,4CAwDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhiweiliu/playwright-generator",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "description": "Generate Playwright test cases from natural language using LLM",
5
5
  "main": "dist/index.js",
6
6
  "bin": {