@ik-firewall/core 1.0.0 → 1.0.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/dist/index.cjs +54 -2
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +53 -2
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -31,6 +31,7 @@ __export(index_exports, {
|
|
|
31
31
|
IKFirewallCore: () => IKFirewallCore,
|
|
32
32
|
LocalProvider: () => LocalProvider,
|
|
33
33
|
OpenAIProvider: () => OpenAIProvider,
|
|
34
|
+
PerplexityProvider: () => PerplexityProvider,
|
|
34
35
|
StressTester: () => StressTester,
|
|
35
36
|
SurgicalTester: () => SurgicalTester
|
|
36
37
|
});
|
|
@@ -47,6 +48,8 @@ if (typeof window === "undefined") {
|
|
|
47
48
|
var Registry = class _Registry {
|
|
48
49
|
static instance;
|
|
49
50
|
registryPath;
|
|
51
|
+
hasWarnedNoFs = false;
|
|
52
|
+
hasWarnedSaveError = false;
|
|
50
53
|
constructor() {
|
|
51
54
|
this.registryPath = "";
|
|
52
55
|
if (typeof process !== "undefined" && process.versions && process.versions.node) {
|
|
@@ -56,7 +59,12 @@ var Registry = class _Registry {
|
|
|
56
59
|
this.registryPath = path.join(process.cwd(), ".ik-adapter", "registry.json");
|
|
57
60
|
this.ensureDirectory();
|
|
58
61
|
} catch (e) {
|
|
59
|
-
|
|
62
|
+
if (!this.hasWarnedNoFs) {
|
|
63
|
+
console.warn("\n[IK_REGISTRY] \u26A0\uFE0F WARNING: Node.js environment detected but fs/path modules failed to load. Falling back to in-memory mode.");
|
|
64
|
+
console.warn("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Custom configurations (metaprompts, instances) will be LOST upon server restart or lambda spin-down.");
|
|
65
|
+
console.warn("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: Host on a traditional VPS (Node/Docker) or migrate settings to your database if you need persistence on Serverless runtimes.\n");
|
|
66
|
+
this.hasWarnedNoFs = true;
|
|
67
|
+
}
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
}
|
|
@@ -93,13 +101,26 @@ var Registry = class _Registry {
|
|
|
93
101
|
}
|
|
94
102
|
save(data) {
|
|
95
103
|
if (!fs || !this.registryPath) {
|
|
104
|
+
if (!this.hasWarnedNoFs) {
|
|
105
|
+
console.warn("\n[IK_REGISTRY] \u26A0\uFE0F WARNING: No File System (fs) detected. Running in in-memory mode.");
|
|
106
|
+
console.warn("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Custom configurations (metaprompts, instances) will be LOST upon server restart or lambda spin-down.");
|
|
107
|
+
console.warn("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: If hosting on Vercel/Serverless or Edge runtimes, do not rely on local JSON for dynamic config changes.");
|
|
108
|
+
console.warn("[IK_REGISTRY] \u{1F449} Consider migrating user-generated adapter settings to your database or host on a traditional VPS (Node/Docker) to ensure persistence.\n");
|
|
109
|
+
this.hasWarnedNoFs = true;
|
|
110
|
+
}
|
|
96
111
|
return;
|
|
97
112
|
}
|
|
98
113
|
try {
|
|
99
114
|
this.ensureDirectory();
|
|
100
115
|
fs.writeFileSync(this.registryPath, JSON.stringify(data, null, 2), "utf8");
|
|
101
116
|
} catch (error) {
|
|
102
|
-
|
|
117
|
+
if (!this.hasWarnedSaveError) {
|
|
118
|
+
console.error("\n[IK_REGISTRY] \u{1F6A8} ERROR saving registry.json. Your environment likely has a read-only filesystem (e.g. Vercel Serverless).");
|
|
119
|
+
console.error("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Serverless environments wipe or restrict file writes!");
|
|
120
|
+
console.error("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: Host on a traditional VPS (Node/Docker) or intercept state changes via Events/Database to ensure persistence.");
|
|
121
|
+
console.error("[IK_REGISTRY] Actual Error:", error.message, "\n");
|
|
122
|
+
this.hasWarnedSaveError = true;
|
|
123
|
+
}
|
|
103
124
|
}
|
|
104
125
|
}
|
|
105
126
|
/**
|
|
@@ -1129,6 +1150,18 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
1129
1150
|
}
|
|
1130
1151
|
};
|
|
1131
1152
|
|
|
1153
|
+
// src/providers/PerplexityProvider.ts
|
|
1154
|
+
var PerplexityProvider = class extends BaseProvider {
|
|
1155
|
+
functionalProvider;
|
|
1156
|
+
constructor(provider) {
|
|
1157
|
+
super();
|
|
1158
|
+
this.functionalProvider = provider;
|
|
1159
|
+
}
|
|
1160
|
+
async call(prompt, role) {
|
|
1161
|
+
return this.functionalProvider(prompt, role);
|
|
1162
|
+
}
|
|
1163
|
+
};
|
|
1164
|
+
|
|
1132
1165
|
// src/Orchestrator.ts
|
|
1133
1166
|
var Orchestrator = class {
|
|
1134
1167
|
config;
|
|
@@ -1147,6 +1180,7 @@ var Orchestrator = class {
|
|
|
1147
1180
|
if (mode === "anthropic") return { provider: "anthropic", model: "claude-3-5-sonnet-20241022", tier: 4 };
|
|
1148
1181
|
if (mode === "deepseek") return { provider: "deepseek", model: "deepseek-reasoner", tier: 4 };
|
|
1149
1182
|
if (mode === "gemini") return { provider: "gemini", model: "gemini-1.5-pro", tier: 4 };
|
|
1183
|
+
if (mode === "perplexity") return { provider: "perplexity", model: "sonar-large-online", tier: 4 };
|
|
1150
1184
|
return { provider: "openai", model: "gpt-4o", tier: 4 };
|
|
1151
1185
|
}
|
|
1152
1186
|
if (mode === "local") {
|
|
@@ -1173,6 +1207,13 @@ var Orchestrator = class {
|
|
|
1173
1207
|
tier: isHighComplexity ? 3 : 2
|
|
1174
1208
|
};
|
|
1175
1209
|
}
|
|
1210
|
+
if (mode === "perplexity") {
|
|
1211
|
+
return {
|
|
1212
|
+
provider: "perplexity",
|
|
1213
|
+
model: isHighComplexity ? "sonar-large-online" : "sonar-small-online",
|
|
1214
|
+
tier: isHighComplexity ? 3 : 2
|
|
1215
|
+
};
|
|
1216
|
+
}
|
|
1176
1217
|
if (mode === "cloud" || mode === "openai") {
|
|
1177
1218
|
return {
|
|
1178
1219
|
provider: "openai",
|
|
@@ -1417,6 +1458,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1417
1458
|
this.cloudProvider = new DeepSeekProvider(cloudProvider);
|
|
1418
1459
|
} else if (mode === "gemini") {
|
|
1419
1460
|
this.cloudProvider = new GeminiProvider(cloudProvider);
|
|
1461
|
+
} else if (mode === "perplexity") {
|
|
1462
|
+
this.cloudProvider = new PerplexityProvider(cloudProvider);
|
|
1420
1463
|
} else {
|
|
1421
1464
|
this.cloudProvider = new OpenAIProvider(cloudProvider);
|
|
1422
1465
|
}
|
|
@@ -1487,6 +1530,10 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1487
1530
|
available: !!process.env.GEMINI_API_KEY,
|
|
1488
1531
|
reason: !!process.env.GEMINI_API_KEY ? void 0 : "Missing GEMINI_API_KEY inside environment."
|
|
1489
1532
|
};
|
|
1533
|
+
providers["perplexity"] = {
|
|
1534
|
+
available: !!process.env.PERPLEXITY_API_KEY,
|
|
1535
|
+
reason: !!process.env.PERPLEXITY_API_KEY ? void 0 : "Missing PERPLEXITY_API_KEY inside environment."
|
|
1536
|
+
};
|
|
1490
1537
|
return providers;
|
|
1491
1538
|
}
|
|
1492
1539
|
/**
|
|
@@ -1545,6 +1592,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1545
1592
|
overrideProvider = new DeepSeekProvider(provider);
|
|
1546
1593
|
} else if (mode === "gemini") {
|
|
1547
1594
|
overrideProvider = new GeminiProvider(provider);
|
|
1595
|
+
} else if (mode === "perplexity") {
|
|
1596
|
+
overrideProvider = new PerplexityProvider(provider);
|
|
1548
1597
|
} else {
|
|
1549
1598
|
overrideProvider = new OpenAIProvider(provider);
|
|
1550
1599
|
}
|
|
@@ -1694,6 +1743,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1694
1743
|
overrideProvider = new DeepSeekProvider(provider);
|
|
1695
1744
|
} else if (mode === "gemini") {
|
|
1696
1745
|
overrideProvider = new GeminiProvider(provider);
|
|
1746
|
+
} else if (mode === "perplexity") {
|
|
1747
|
+
overrideProvider = new PerplexityProvider(provider);
|
|
1697
1748
|
} else {
|
|
1698
1749
|
overrideProvider = new OpenAIProvider(provider);
|
|
1699
1750
|
}
|
|
@@ -2420,6 +2471,7 @@ var IKBenchmarks = {
|
|
|
2420
2471
|
IKFirewallCore,
|
|
2421
2472
|
LocalProvider,
|
|
2422
2473
|
OpenAIProvider,
|
|
2474
|
+
PerplexityProvider,
|
|
2423
2475
|
StressTester,
|
|
2424
2476
|
SurgicalTester
|
|
2425
2477
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type ModelRole = 'high_performance' | 'cost_optimized' | 'audit_layer';
|
|
2
|
-
type ProviderMode = 'openai' | 'anthropic' | 'deepseek' | 'gemini' | 'local' | 'hybrid';
|
|
2
|
+
type ProviderMode = 'openai' | 'anthropic' | 'deepseek' | 'gemini' | 'perplexity' | 'local' | 'hybrid';
|
|
3
3
|
type RuntimeStrategy = 'internal' | 'sidecar' | 'wasm';
|
|
4
4
|
type ContextMode = 'FIRST_MESSAGE' | 'EVERY_MESSAGE' | 'SYSTEM_ONLY';
|
|
5
5
|
type PromptLength = 'SHORT' | 'MEDIUM' | 'LONG';
|
|
@@ -224,6 +224,16 @@ declare class GeminiProvider extends BaseProvider {
|
|
|
224
224
|
call(prompt: string, role: ModelRole): Promise<AIResponse>;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/**
|
|
228
|
+
* PerplexityProvider ensures compatibility with Perplexity API (Sonar online models)
|
|
229
|
+
* while connecting to the core firewall logic.
|
|
230
|
+
*/
|
|
231
|
+
declare class PerplexityProvider extends BaseProvider {
|
|
232
|
+
private functionalProvider;
|
|
233
|
+
constructor(provider: AIProvider);
|
|
234
|
+
call(prompt: string, role: ModelRole): Promise<AIResponse>;
|
|
235
|
+
}
|
|
236
|
+
|
|
227
237
|
/**
|
|
228
238
|
* IK FIREWALL: THE CORE ALGORITHM (STANDALONE VERSION)
|
|
229
239
|
* Version: 2.1.0 (Modular & Provider-Agnostic)
|
|
@@ -680,4 +690,4 @@ declare const IKBenchmarks: {
|
|
|
680
690
|
BIG_TEST: TestPrompt[];
|
|
681
691
|
};
|
|
682
692
|
|
|
683
|
-
export { type AIProvider, type AIResponse, AnthropicProvider, BaseProvider, type ContextMode, DeepSeekProvider, Dictionaries, DictionaryRegex, GeminiProvider, HeuristicGatekeeper, IKBenchmarks, type IKConfig, IKFirewallCore, type IKHooks, type IKMetrics, type IKPluginInfo, LocalProvider, type ModelRole, OpenAIProvider, type PromptLength, type PromptType, type ProviderMode, type RuntimeStrategy, type StressReport, type StressTestCase, StressTester, SurgicalTester, type TestCase, type TestPrompt, type TestResult, type UsageData };
|
|
693
|
+
export { type AIProvider, type AIResponse, AnthropicProvider, BaseProvider, type ContextMode, DeepSeekProvider, Dictionaries, DictionaryRegex, GeminiProvider, HeuristicGatekeeper, IKBenchmarks, type IKConfig, IKFirewallCore, type IKHooks, type IKMetrics, type IKPluginInfo, LocalProvider, type ModelRole, OpenAIProvider, PerplexityProvider, type PromptLength, type PromptType, type ProviderMode, type RuntimeStrategy, type StressReport, type StressTestCase, StressTester, SurgicalTester, type TestCase, type TestPrompt, type TestResult, type UsageData };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type ModelRole = 'high_performance' | 'cost_optimized' | 'audit_layer';
|
|
2
|
-
type ProviderMode = 'openai' | 'anthropic' | 'deepseek' | 'gemini' | 'local' | 'hybrid';
|
|
2
|
+
type ProviderMode = 'openai' | 'anthropic' | 'deepseek' | 'gemini' | 'perplexity' | 'local' | 'hybrid';
|
|
3
3
|
type RuntimeStrategy = 'internal' | 'sidecar' | 'wasm';
|
|
4
4
|
type ContextMode = 'FIRST_MESSAGE' | 'EVERY_MESSAGE' | 'SYSTEM_ONLY';
|
|
5
5
|
type PromptLength = 'SHORT' | 'MEDIUM' | 'LONG';
|
|
@@ -224,6 +224,16 @@ declare class GeminiProvider extends BaseProvider {
|
|
|
224
224
|
call(prompt: string, role: ModelRole): Promise<AIResponse>;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/**
|
|
228
|
+
* PerplexityProvider ensures compatibility with Perplexity API (Sonar online models)
|
|
229
|
+
* while connecting to the core firewall logic.
|
|
230
|
+
*/
|
|
231
|
+
declare class PerplexityProvider extends BaseProvider {
|
|
232
|
+
private functionalProvider;
|
|
233
|
+
constructor(provider: AIProvider);
|
|
234
|
+
call(prompt: string, role: ModelRole): Promise<AIResponse>;
|
|
235
|
+
}
|
|
236
|
+
|
|
227
237
|
/**
|
|
228
238
|
* IK FIREWALL: THE CORE ALGORITHM (STANDALONE VERSION)
|
|
229
239
|
* Version: 2.1.0 (Modular & Provider-Agnostic)
|
|
@@ -680,4 +690,4 @@ declare const IKBenchmarks: {
|
|
|
680
690
|
BIG_TEST: TestPrompt[];
|
|
681
691
|
};
|
|
682
692
|
|
|
683
|
-
export { type AIProvider, type AIResponse, AnthropicProvider, BaseProvider, type ContextMode, DeepSeekProvider, Dictionaries, DictionaryRegex, GeminiProvider, HeuristicGatekeeper, IKBenchmarks, type IKConfig, IKFirewallCore, type IKHooks, type IKMetrics, type IKPluginInfo, LocalProvider, type ModelRole, OpenAIProvider, type PromptLength, type PromptType, type ProviderMode, type RuntimeStrategy, type StressReport, type StressTestCase, StressTester, SurgicalTester, type TestCase, type TestPrompt, type TestResult, type UsageData };
|
|
693
|
+
export { type AIProvider, type AIResponse, AnthropicProvider, BaseProvider, type ContextMode, DeepSeekProvider, Dictionaries, DictionaryRegex, GeminiProvider, HeuristicGatekeeper, IKBenchmarks, type IKConfig, IKFirewallCore, type IKHooks, type IKMetrics, type IKPluginInfo, LocalProvider, type ModelRole, OpenAIProvider, PerplexityProvider, type PromptLength, type PromptType, type ProviderMode, type RuntimeStrategy, type StressReport, type StressTestCase, StressTester, SurgicalTester, type TestCase, type TestPrompt, type TestResult, type UsageData };
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,8 @@ if (typeof window === "undefined") {
|
|
|
16
16
|
var Registry = class _Registry {
|
|
17
17
|
static instance;
|
|
18
18
|
registryPath;
|
|
19
|
+
hasWarnedNoFs = false;
|
|
20
|
+
hasWarnedSaveError = false;
|
|
19
21
|
constructor() {
|
|
20
22
|
this.registryPath = "";
|
|
21
23
|
if (typeof process !== "undefined" && process.versions && process.versions.node) {
|
|
@@ -25,7 +27,12 @@ var Registry = class _Registry {
|
|
|
25
27
|
this.registryPath = path.join(process.cwd(), ".ik-adapter", "registry.json");
|
|
26
28
|
this.ensureDirectory();
|
|
27
29
|
} catch (e) {
|
|
28
|
-
|
|
30
|
+
if (!this.hasWarnedNoFs) {
|
|
31
|
+
console.warn("\n[IK_REGISTRY] \u26A0\uFE0F WARNING: Node.js environment detected but fs/path modules failed to load. Falling back to in-memory mode.");
|
|
32
|
+
console.warn("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Custom configurations (metaprompts, instances) will be LOST upon server restart or lambda spin-down.");
|
|
33
|
+
console.warn("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: Host on a traditional VPS (Node/Docker) or migrate settings to your database if you need persistence on Serverless runtimes.\n");
|
|
34
|
+
this.hasWarnedNoFs = true;
|
|
35
|
+
}
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
}
|
|
@@ -62,13 +69,26 @@ var Registry = class _Registry {
|
|
|
62
69
|
}
|
|
63
70
|
save(data) {
|
|
64
71
|
if (!fs || !this.registryPath) {
|
|
72
|
+
if (!this.hasWarnedNoFs) {
|
|
73
|
+
console.warn("\n[IK_REGISTRY] \u26A0\uFE0F WARNING: No File System (fs) detected. Running in in-memory mode.");
|
|
74
|
+
console.warn("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Custom configurations (metaprompts, instances) will be LOST upon server restart or lambda spin-down.");
|
|
75
|
+
console.warn("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: If hosting on Vercel/Serverless or Edge runtimes, do not rely on local JSON for dynamic config changes.");
|
|
76
|
+
console.warn("[IK_REGISTRY] \u{1F449} Consider migrating user-generated adapter settings to your database or host on a traditional VPS (Node/Docker) to ensure persistence.\n");
|
|
77
|
+
this.hasWarnedNoFs = true;
|
|
78
|
+
}
|
|
65
79
|
return;
|
|
66
80
|
}
|
|
67
81
|
try {
|
|
68
82
|
this.ensureDirectory();
|
|
69
83
|
fs.writeFileSync(this.registryPath, JSON.stringify(data, null, 2), "utf8");
|
|
70
84
|
} catch (error) {
|
|
71
|
-
|
|
85
|
+
if (!this.hasWarnedSaveError) {
|
|
86
|
+
console.error("\n[IK_REGISTRY] \u{1F6A8} ERROR saving registry.json. Your environment likely has a read-only filesystem (e.g. Vercel Serverless).");
|
|
87
|
+
console.error("[IK_REGISTRY] \u{1F4DD} INTEGRATOR NOTICE: Serverless environments wipe or restrict file writes!");
|
|
88
|
+
console.error("[IK_REGISTRY] \u{1F4A1} BEST PRACTICE: Host on a traditional VPS (Node/Docker) or intercept state changes via Events/Database to ensure persistence.");
|
|
89
|
+
console.error("[IK_REGISTRY] Actual Error:", error.message, "\n");
|
|
90
|
+
this.hasWarnedSaveError = true;
|
|
91
|
+
}
|
|
72
92
|
}
|
|
73
93
|
}
|
|
74
94
|
/**
|
|
@@ -1098,6 +1118,18 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
1098
1118
|
}
|
|
1099
1119
|
};
|
|
1100
1120
|
|
|
1121
|
+
// src/providers/PerplexityProvider.ts
|
|
1122
|
+
var PerplexityProvider = class extends BaseProvider {
|
|
1123
|
+
functionalProvider;
|
|
1124
|
+
constructor(provider) {
|
|
1125
|
+
super();
|
|
1126
|
+
this.functionalProvider = provider;
|
|
1127
|
+
}
|
|
1128
|
+
async call(prompt, role) {
|
|
1129
|
+
return this.functionalProvider(prompt, role);
|
|
1130
|
+
}
|
|
1131
|
+
};
|
|
1132
|
+
|
|
1101
1133
|
// src/Orchestrator.ts
|
|
1102
1134
|
var Orchestrator = class {
|
|
1103
1135
|
config;
|
|
@@ -1116,6 +1148,7 @@ var Orchestrator = class {
|
|
|
1116
1148
|
if (mode === "anthropic") return { provider: "anthropic", model: "claude-3-5-sonnet-20241022", tier: 4 };
|
|
1117
1149
|
if (mode === "deepseek") return { provider: "deepseek", model: "deepseek-reasoner", tier: 4 };
|
|
1118
1150
|
if (mode === "gemini") return { provider: "gemini", model: "gemini-1.5-pro", tier: 4 };
|
|
1151
|
+
if (mode === "perplexity") return { provider: "perplexity", model: "sonar-large-online", tier: 4 };
|
|
1119
1152
|
return { provider: "openai", model: "gpt-4o", tier: 4 };
|
|
1120
1153
|
}
|
|
1121
1154
|
if (mode === "local") {
|
|
@@ -1142,6 +1175,13 @@ var Orchestrator = class {
|
|
|
1142
1175
|
tier: isHighComplexity ? 3 : 2
|
|
1143
1176
|
};
|
|
1144
1177
|
}
|
|
1178
|
+
if (mode === "perplexity") {
|
|
1179
|
+
return {
|
|
1180
|
+
provider: "perplexity",
|
|
1181
|
+
model: isHighComplexity ? "sonar-large-online" : "sonar-small-online",
|
|
1182
|
+
tier: isHighComplexity ? 3 : 2
|
|
1183
|
+
};
|
|
1184
|
+
}
|
|
1145
1185
|
if (mode === "cloud" || mode === "openai") {
|
|
1146
1186
|
return {
|
|
1147
1187
|
provider: "openai",
|
|
@@ -1386,6 +1426,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1386
1426
|
this.cloudProvider = new DeepSeekProvider(cloudProvider);
|
|
1387
1427
|
} else if (mode === "gemini") {
|
|
1388
1428
|
this.cloudProvider = new GeminiProvider(cloudProvider);
|
|
1429
|
+
} else if (mode === "perplexity") {
|
|
1430
|
+
this.cloudProvider = new PerplexityProvider(cloudProvider);
|
|
1389
1431
|
} else {
|
|
1390
1432
|
this.cloudProvider = new OpenAIProvider(cloudProvider);
|
|
1391
1433
|
}
|
|
@@ -1456,6 +1498,10 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1456
1498
|
available: !!process.env.GEMINI_API_KEY,
|
|
1457
1499
|
reason: !!process.env.GEMINI_API_KEY ? void 0 : "Missing GEMINI_API_KEY inside environment."
|
|
1458
1500
|
};
|
|
1501
|
+
providers["perplexity"] = {
|
|
1502
|
+
available: !!process.env.PERPLEXITY_API_KEY,
|
|
1503
|
+
reason: !!process.env.PERPLEXITY_API_KEY ? void 0 : "Missing PERPLEXITY_API_KEY inside environment."
|
|
1504
|
+
};
|
|
1459
1505
|
return providers;
|
|
1460
1506
|
}
|
|
1461
1507
|
/**
|
|
@@ -1514,6 +1560,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1514
1560
|
overrideProvider = new DeepSeekProvider(provider);
|
|
1515
1561
|
} else if (mode === "gemini") {
|
|
1516
1562
|
overrideProvider = new GeminiProvider(provider);
|
|
1563
|
+
} else if (mode === "perplexity") {
|
|
1564
|
+
overrideProvider = new PerplexityProvider(provider);
|
|
1517
1565
|
} else {
|
|
1518
1566
|
overrideProvider = new OpenAIProvider(provider);
|
|
1519
1567
|
}
|
|
@@ -1663,6 +1711,8 @@ var IKFirewallCore = class _IKFirewallCore {
|
|
|
1663
1711
|
overrideProvider = new DeepSeekProvider(provider);
|
|
1664
1712
|
} else if (mode === "gemini") {
|
|
1665
1713
|
overrideProvider = new GeminiProvider(provider);
|
|
1714
|
+
} else if (mode === "perplexity") {
|
|
1715
|
+
overrideProvider = new PerplexityProvider(provider);
|
|
1666
1716
|
} else {
|
|
1667
1717
|
overrideProvider = new OpenAIProvider(provider);
|
|
1668
1718
|
}
|
|
@@ -2388,6 +2438,7 @@ export {
|
|
|
2388
2438
|
IKFirewallCore,
|
|
2389
2439
|
LocalProvider,
|
|
2390
2440
|
OpenAIProvider,
|
|
2441
|
+
PerplexityProvider,
|
|
2391
2442
|
StressTester,
|
|
2392
2443
|
SurgicalTester
|
|
2393
2444
|
};
|