@kamrankhan027/probe-ai 1.1.0 → 1.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 +22 -33
- package/dist/index.js +24 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://www.npmjs.com/package/@kamrankhan027/probe-ai)
|
|
8
8
|
[](https://opensource.org/licenses/MIT)
|
|
9
9
|
[](https://langchain-ai.github.io/langgraphjs/)
|
|
10
|
-
[](https://ai.google.dev/)
|
|
11
11
|
[](https://www.typescriptlang.org/)
|
|
12
12
|
|
|
13
13
|
</div>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
### Option 1: Run Instantly via `npx` (Zero Installation Required)
|
|
20
20
|
```bash
|
|
21
|
-
npx @kamrankhan027/probe-ai
|
|
21
|
+
npx @kamrankhan027/probe-ai@latest
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
---
|
|
@@ -30,13 +30,10 @@ npx @kamrankhan027/probe-ai
|
|
|
30
30
|
npm install -g @kamrankhan027/probe-ai
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
**Using pnpm:**
|
|
33
|
+
**Using pnpm / yarn:**
|
|
34
34
|
```bash
|
|
35
35
|
pnpm add -g @kamrankhan027/probe-ai
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
**Using yarn:**
|
|
39
|
-
```bash
|
|
36
|
+
# or
|
|
40
37
|
yarn global add @kamrankhan027/probe-ai
|
|
41
38
|
```
|
|
42
39
|
|
|
@@ -47,13 +44,20 @@ probe-ai
|
|
|
47
44
|
|
|
48
45
|
---
|
|
49
46
|
|
|
50
|
-
##
|
|
47
|
+
## 🧠 Supported AI Models & Providers
|
|
48
|
+
|
|
49
|
+
ProbeAI is **universal and provider-agnostic**. On startup, select your preferred engine:
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
| Provider | Supported Models | Environment Variable |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| **🔷 Google Gemini** | `gemini-3.6-flash`, `gemini-3.5-flash`, `gemini-2.5-flash`, `gemini-2.5-pro` | `GEMINI_API_KEY` |
|
|
54
|
+
| **🟢 OpenAI** | `gpt-5.6` (Sol/Terra/Luna), `gpt-4o`, `gpt-4o-mini`, `o3-mini`, `gpt-oss` | `OPENAI_API_KEY` |
|
|
55
|
+
| **🟣 Anthropic Claude** | `claude-sonnet-5`, `claude-opus-5`, `claude-3-5-sonnet-latest`, `claude-3-5-haiku` | `ANTHROPIC_API_KEY` |
|
|
56
|
+
| **⚡ Groq (LPU Engine)** | `llama-3.3-70b-versatile`, `gpt-oss-120b`, `qwen-3.6` (Free & Ultra-Fast) | `GROQ_API_KEY` |
|
|
57
|
+
| **🌐 OpenRouter** | `deepseek/deepseek-r1:free`, `qwen/qwen-2.5-coder-32b-instruct:free`, `mistral-large-3` | `OPENROUTER_API_KEY` |
|
|
58
|
+
| **🦙 Ollama (Local)** | `qwen2.5-coder:7b`, `deepseek-r1`, `llama3.3`, `gemma-4` (100% Offline & Free) | *None needed!* |
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
> 💡 **Custom Model Overrides**: You can pass any custom model string directly via environment variables (e.g. `OPENAI_MODEL=gpt-5.6` or `ANTHROPIC_MODEL=claude-sonnet-5`) or during the interactive startup prompt.
|
|
57
61
|
|
|
58
62
|
---
|
|
59
63
|
|
|
@@ -70,25 +74,20 @@ ProbeAI uses Google Gemini for fast, structured reasoning.
|
|
|
70
74
|
## 💡 Example Prompts to Try
|
|
71
75
|
|
|
72
76
|
```text
|
|
73
|
-
|
|
77
|
+
❯ inspect https://bookmark-agent-backend.onrender.com and export a Postman collection
|
|
74
78
|
```
|
|
75
79
|
*Auto-maps all endpoints and creates `reports/postman_collection.json`.*
|
|
76
80
|
|
|
77
81
|
```text
|
|
78
|
-
|
|
82
|
+
❯ test all endpoints on https://bookmark-agent-backend.onrender.com and save an HTML report
|
|
79
83
|
```
|
|
80
84
|
*Executes Happy Path, Query Filter, and Error test cases and saves `reports/audit_report.html`.*
|
|
81
85
|
|
|
82
86
|
```text
|
|
83
|
-
|
|
87
|
+
❯ set auth Bearer my_jwt_token_123 and test protected endpoints
|
|
84
88
|
```
|
|
85
89
|
*Injects your authorization header into session memory for all subsequent calls.*
|
|
86
90
|
|
|
87
|
-
```text
|
|
88
|
-
You: Authenticate via POST https://api.example.com/login with {"email":"dev@example.com","password":"secret"}, then test /api/dashboard
|
|
89
|
-
```
|
|
90
|
-
*Extracts the JWT from the login response and tests the protected dashboard route automatically.*
|
|
91
|
-
|
|
92
91
|
---
|
|
93
92
|
|
|
94
93
|
## 🏗️ Repository Architecture
|
|
@@ -97,7 +96,9 @@ You: Authenticate via POST https://api.example.com/login with {"email":"dev@exam
|
|
|
97
96
|
probe-ai/
|
|
98
97
|
├── cli/ # 🚀 Native TypeScript NPM Package (@kamrankhan027/probe-ai)
|
|
99
98
|
│ ├── src/
|
|
100
|
-
│ │ ├── index.ts # Interactive CLI loop &
|
|
99
|
+
│ │ ├── index.ts # Interactive CLI loop & Modern UI
|
|
100
|
+
│ │ ├── wizard.ts # Multi-Provider Startup Wizard
|
|
101
|
+
│ │ ├── model-factory.ts # Universal LangChain chat model factory
|
|
101
102
|
│ │ ├── agent.ts # @langchain/langgraph ReAct workflow
|
|
102
103
|
│ │ └── tools/ # OpenAPI, HTTP, Auth, Postman & Report tools
|
|
103
104
|
│ ├── dist/
|
|
@@ -111,18 +112,6 @@ probe-ai/
|
|
|
111
112
|
|
|
112
113
|
---
|
|
113
114
|
|
|
114
|
-
## 🛠️ Local Development
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
git clone https://github.com/kamran-027/probe-ai.git
|
|
118
|
-
cd probe-ai/cli
|
|
119
|
-
npm install
|
|
120
|
-
npm run build
|
|
121
|
-
npm start
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
115
|
<div align="center">
|
|
127
116
|
Built by <b>Kamran Khan</b> as part of <b>Cadence Labs</b>.
|
|
128
117
|
</div>
|
package/dist/index.js
CHANGED
|
@@ -4243,9 +4243,9 @@ var authenticateViaLoginTool = tool2(
|
|
|
4243
4243
|
description: "Execute a login or token generation endpoint (e.g. POST /auth/login with credentials), extract the bearer token from JSON response, and save it to the session headers.",
|
|
4244
4244
|
schema: external_exports.object({
|
|
4245
4245
|
loginUrl: external_exports.string().describe("The URL of the login/auth endpoint"),
|
|
4246
|
-
method: external_exports.string().
|
|
4247
|
-
payloadJson: external_exports.string().
|
|
4248
|
-
tokenField: external_exports.string().
|
|
4246
|
+
method: external_exports.string().default("POST").describe("HTTP method (default: POST)"),
|
|
4247
|
+
payloadJson: external_exports.string().default("{}").describe("JSON string payload with email/username/password"),
|
|
4248
|
+
tokenField: external_exports.string().default("access_token").describe("Field name containing the token in JSON response (default: access_token)")
|
|
4249
4249
|
})
|
|
4250
4250
|
}
|
|
4251
4251
|
);
|
|
@@ -4362,9 +4362,9 @@ var executeHttpRequestTool = tool3(
|
|
|
4362
4362
|
schema: external_exports.object({
|
|
4363
4363
|
method: external_exports.string().describe("HTTP method, e.g. GET, POST, DELETE"),
|
|
4364
4364
|
url: external_exports.string().describe("Target endpoint URL"),
|
|
4365
|
-
headersJson: external_exports.string().
|
|
4366
|
-
paramsJson: external_exports.string().
|
|
4367
|
-
bodyJson: external_exports.string().
|
|
4365
|
+
headersJson: external_exports.string().default("{}").describe("Optional JSON string of custom headers"),
|
|
4366
|
+
paramsJson: external_exports.string().default("{}").describe("Optional JSON string of query parameters"),
|
|
4367
|
+
bodyJson: external_exports.string().default("{}").describe("Optional JSON string payload body")
|
|
4368
4368
|
})
|
|
4369
4369
|
}
|
|
4370
4370
|
);
|
|
@@ -4443,7 +4443,7 @@ var exportPostmanCollectionTool = tool4(
|
|
|
4443
4443
|
description: "Generate a ready-to-import Postman Collection v2.1.0 JSON file directly from the base URL's OpenAPI spec.",
|
|
4444
4444
|
schema: external_exports.object({
|
|
4445
4445
|
baseUrl: external_exports.string().describe("The base URL of the API server"),
|
|
4446
|
-
outputFilename: external_exports.string().
|
|
4446
|
+
outputFilename: external_exports.string().default("probe_collection.json").describe("Output filename (default: probe_collection.json)")
|
|
4447
4447
|
})
|
|
4448
4448
|
}
|
|
4449
4449
|
);
|
|
@@ -4558,8 +4558,8 @@ var saveHtmlAuditReportTool = tool5(
|
|
|
4558
4558
|
name: "save_html_audit_report",
|
|
4559
4559
|
description: "Generate an executive standalone single-page HTML audit report with health scores, latency metrics, and expandable request/response inspection accordions.",
|
|
4560
4560
|
schema: external_exports.object({
|
|
4561
|
-
filename: external_exports.string().
|
|
4562
|
-
reportTitle: external_exports.string().
|
|
4561
|
+
filename: external_exports.string().default("audit_report.html").describe("Report filename (default: audit_report.html)"),
|
|
4562
|
+
reportTitle: external_exports.string().default("ProbeAI API Audit Report").describe("Title for the report")
|
|
4563
4563
|
})
|
|
4564
4564
|
}
|
|
4565
4565
|
);
|
|
@@ -4709,34 +4709,34 @@ async function resolveProviderConfig() {
|
|
|
4709
4709
|
message: "Choose AI Engine Provider:",
|
|
4710
4710
|
choices: [
|
|
4711
4711
|
{
|
|
4712
|
-
name: `${chalk7.bold.cyan("\u{1F537} Google Gemini")} ${chalk7.dim("(Gemini
|
|
4712
|
+
name: `${chalk7.bold.cyan("\u{1F537} Google Gemini")} ${chalk7.dim("(Gemini 3.6 / 3.5 / 2.5 Flash - Free & Fast)")}`,
|
|
4713
4713
|
value: "gemini"
|
|
4714
4714
|
},
|
|
4715
4715
|
{
|
|
4716
|
-
name: `${chalk7.bold.green("\u{1F7E2} OpenAI")} ${chalk7.dim("(GPT-5.6 / GPT-4o
|
|
4716
|
+
name: `${chalk7.bold.green("\u{1F7E2} OpenAI")} ${chalk7.dim("(GPT-5.6 Sol/Terra, GPT-4o, o3-mini, GPT-OSS)")}`,
|
|
4717
4717
|
value: "openai"
|
|
4718
4718
|
},
|
|
4719
4719
|
{
|
|
4720
|
-
name: `${chalk7.bold.hex("#A855F7")("\u{1F7E3} Anthropic Claude")} ${chalk7.dim("(Sonnet 5
|
|
4720
|
+
name: `${chalk7.bold.hex("#A855F7")("\u{1F7E3} Anthropic Claude")} ${chalk7.dim("(Sonnet 5, Opus 5, Claude 3.5 Sonnet)")}`,
|
|
4721
4721
|
value: "anthropic"
|
|
4722
4722
|
},
|
|
4723
4723
|
{
|
|
4724
|
-
name: `${chalk7.bold.yellow("\u26A1 Groq")} ${chalk7.dim("(Llama 3.3 70B -
|
|
4724
|
+
name: `${chalk7.bold.yellow("\u26A1 Groq")} ${chalk7.dim("(Llama 3.3 70B, GPT-OSS 120B, Qwen 3.6)")}`,
|
|
4725
4725
|
value: "groq"
|
|
4726
4726
|
},
|
|
4727
4727
|
{
|
|
4728
|
-
name: `${chalk7.bold.hex("#3B82F6")("\u{1F310} OpenRouter")} ${chalk7.dim("(DeepSeek / Qwen 2.5
|
|
4728
|
+
name: `${chalk7.bold.hex("#3B82F6")("\u{1F310} OpenRouter")} ${chalk7.dim("(DeepSeek V4/R1, Qwen 3.5/2.5 Coder, Mistral)")}`,
|
|
4729
4729
|
value: "openrouter"
|
|
4730
4730
|
},
|
|
4731
4731
|
{
|
|
4732
|
-
name: `${chalk7.bold.white("\u{1F999} Ollama")} ${chalk7.dim("(Local /
|
|
4732
|
+
name: `${chalk7.bold.white("\u{1F999} Ollama")} ${chalk7.dim("(Local / Offline: DeepSeek-R1, Qwen Coder, Gemma 4)")}`,
|
|
4733
4733
|
value: "ollama"
|
|
4734
4734
|
}
|
|
4735
4735
|
]
|
|
4736
4736
|
});
|
|
4737
4737
|
if (provider === "ollama") {
|
|
4738
4738
|
const customModel2 = await input({
|
|
4739
|
-
message: "Enter Ollama model
|
|
4739
|
+
message: "Enter Ollama model (e.g. qwen2.5-coder:7b, deepseek-r1, llama3.3):",
|
|
4740
4740
|
default: "qwen2.5-coder:7b"
|
|
4741
4741
|
});
|
|
4742
4742
|
return { provider: "ollama", modelName: customModel2 };
|
|
@@ -4756,8 +4756,15 @@ async function resolveProviderConfig() {
|
|
|
4756
4756
|
console.log(chalk7.red("\nError: An API key is required to proceed. Exiting...\n"));
|
|
4757
4757
|
process.exit(1);
|
|
4758
4758
|
}
|
|
4759
|
+
const modelHints = {
|
|
4760
|
+
gemini: "gemini-2.5-flash (or gemini-3.6-flash, gemini-2.5-pro)",
|
|
4761
|
+
openai: "gpt-4o (or gpt-5.6, gpt-4o-mini, o3-mini)",
|
|
4762
|
+
anthropic: "claude-3-5-sonnet-latest (or claude-sonnet-5, claude-opus-5)",
|
|
4763
|
+
groq: "llama-3.3-70b-versatile (or qwen-2.5-32b)",
|
|
4764
|
+
openrouter: "qwen/qwen-2.5-coder-32b-instruct:free (or deepseek/deepseek-r1:free)"
|
|
4765
|
+
};
|
|
4759
4766
|
const customModel = await input({
|
|
4760
|
-
message:
|
|
4767
|
+
message: `Model ID [default: ${modelHints[provider]}]:`,
|
|
4761
4768
|
default: ""
|
|
4762
4769
|
});
|
|
4763
4770
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kamrankhan027/probe-ai",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Autonomous API Schema & Reliability Inspector CLI. Probes OpenAPI specs, generates test suites, executes real-time HTTP calls, and exports Postman collections.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|