kooni-bot 0.2.11 → 0.2.13
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/bin/kooni.js +27 -5
- package/package.json +1 -1
package/bin/kooni.js
CHANGED
|
@@ -22,7 +22,7 @@ import { execFileSync, spawnSync } from "node:child_process";
|
|
|
22
22
|
import { randomUUID } from "node:crypto";
|
|
23
23
|
import { fileURLToPath } from "node:url";
|
|
24
24
|
|
|
25
|
-
const CLI_VERSION = "0.2.
|
|
25
|
+
const CLI_VERSION = "0.2.13";
|
|
26
26
|
|
|
27
27
|
const REPO = process.env.KOONI_REPO || "iamnocodeveloper/kooni-bot";
|
|
28
28
|
const BRANCH = process.env.KOONI_BRANCH || "main";
|
|
@@ -219,6 +219,7 @@ function normBotLang(v) {
|
|
|
219
219
|
const BRAINS = {
|
|
220
220
|
claude: { provider: "anthropic", secret: "ANTHROPIC_API_KEY", label: "Claude" },
|
|
221
221
|
chatgpt: { provider: "openai", secret: "OPENAI_API_KEY", label: "ChatGPT" },
|
|
222
|
+
aisa: { provider: "openai", secret: "OPENAI_API_KEY", label: "AIsa" },
|
|
222
223
|
grok: { provider: "xai", secret: "XAI_API_KEY", label: "Grok" },
|
|
223
224
|
minimax: { provider: "minimax", secret: "MINIMAX_API_KEY", label: "MiniMax" },
|
|
224
225
|
gateway: { provider: "openai", secret: "OPENAI_API_KEY", label: "Gateway" },
|
|
@@ -742,7 +743,7 @@ function writeDevVars(dir, answers, kbToken) {
|
|
|
742
743
|
|
|
743
744
|
function collectAnswers(flags) {
|
|
744
745
|
const rawBrain = String(flags.cerebro || flags.brain || "").trim().toLowerCase();
|
|
745
|
-
const brainKey = ({ claude: "claude", anthropic: "claude", chatgpt: "chatgpt", openai: "chatgpt", gpt: "chatgpt", grok: "grok", xai: "grok", minimax: "minimax", gateway: "gateway" })[rawBrain] || null;
|
|
746
|
+
const brainKey = ({ claude: "claude", anthropic: "claude", chatgpt: "chatgpt", openai: "chatgpt", gpt: "chatgpt", aisa: "aisa", grok: "grok", xai: "grok", minimax: "minimax", gateway: "gateway" })[rawBrain] || null;
|
|
746
747
|
const tone = ({ cercano: "cercano", friendly: "cercano", formal: "formal", divertido: "divertido", playful: "divertido" })[String(flags.tono || "").trim().toLowerCase()] || null;
|
|
747
748
|
|
|
748
749
|
// Lo que vino por flag se conserva; lo que NO vino queda undefined para que
|
|
@@ -794,10 +795,13 @@ async function onboarding(rl, answers, defaultDir) {
|
|
|
794
795
|
// hace después desde el dashboard. Aquí solo fijamos el default.
|
|
795
796
|
answers.tier = answers.tier || "free";
|
|
796
797
|
|
|
797
|
-
const brainKeys = ["claude", "chatgpt", "grok", "minimax", "gateway"];
|
|
798
|
+
const brainKeys = ["claude", "chatgpt", "aisa", "grok", "minimax", "gateway"];
|
|
798
799
|
const brainIdx = await select(rl, t().brainQ, brainKeys.map((k) => ({
|
|
799
800
|
key: k, label: BRAINS[k].label,
|
|
800
|
-
desc: k === "claude" ? t().brainDesc
|
|
801
|
+
desc: k === "claude" ? t().brainDesc
|
|
802
|
+
: k === "chatgpt" ? "key directa de OpenAI (sk-proj-…)"
|
|
803
|
+
: k === "aisa" ? "key de AIsa (sk-ais…) · gateway api.aisa.one/v1"
|
|
804
|
+
: k === "gateway" ? "OpenRouter / cualquier gateway" : "",
|
|
801
805
|
})), { value: answers.brainKey, default: 0 });
|
|
802
806
|
answers.brainKey = brainKeys[brainIdx] || "claude";
|
|
803
807
|
answers.provider = BRAINS[answers.brainKey].provider;
|
|
@@ -805,6 +809,10 @@ async function onboarding(rl, answers, defaultDir) {
|
|
|
805
809
|
if (answers.brainKey === "gateway" && !answers.baseUrl) {
|
|
806
810
|
answers.baseUrl = await ask(rl, t().qBaseUrl, undefined) || "https://api.aisa.one/v1";
|
|
807
811
|
}
|
|
812
|
+
if (answers.brainKey === "aisa" && !answers.baseUrl) {
|
|
813
|
+
answers.baseUrl = "https://api.aisa.one/v1";
|
|
814
|
+
console.log(" " + C.yellow("ℹ️ AIsa configurado con OPENAI_API_BASE_URL=https://api.aisa.one/v1."));
|
|
815
|
+
}
|
|
808
816
|
|
|
809
817
|
// La API key se pide aquí, apenas se elige el cerebro — y se conserva para el
|
|
810
818
|
// deploy (se guarda como secret sin mostrarla). En no-interactivo se salta.
|
|
@@ -812,6 +820,20 @@ async function onboarding(rl, answers, defaultDir) {
|
|
|
812
820
|
answers.apiKey = await promptSecret(rl, t().qApiKey(BRAINS[answers.brainKey].label));
|
|
813
821
|
}
|
|
814
822
|
|
|
823
|
+
// Guard de gateway: si la key es de AIsa (o un gateway) y NO hay base URL, el
|
|
824
|
+
// bot desplegaría pero contestaría "Algo falló de mi lado" (401 contra OpenAI
|
|
825
|
+
// directo). Detectamos la key y la arreglamos o avisamos en el acto.
|
|
826
|
+
if (answers.provider === "openai" && !answers.baseUrl && answers.apiKey) {
|
|
827
|
+
const raw = String(answers.apiKey).trim();
|
|
828
|
+
const k = raw.toLowerCase();
|
|
829
|
+
if (k.startsWith("sk-ais") || k.includes("aisa")) {
|
|
830
|
+
answers.baseUrl = "https://api.aisa.one/v1";
|
|
831
|
+
console.log(" " + C.yellow("ℹ️ Detecté una key de AIsa — configuré OPENAI_API_BASE_URL=https://api.aisa.one/v1 automáticamente."));
|
|
832
|
+
} else if (!/^sk-proj-/.test(raw) && !/^sk-[A-Za-z0-9]{48}$/.test(raw)) {
|
|
833
|
+
console.warn(" " + C.yellow("⚠️ Tu key de OpenAI no parece directa (sk-proj-…). Si es de un gateway (AIsa/OpenRouter), el bot NO contestará sin OPENAI_API_BASE_URL en wrangler.toml — agrega el var o repite init eligiendo 'Gateway'."));
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
815
837
|
answers.what = answers.what ?? (await ask(rl, t().qWhat, undefined) || "");
|
|
816
838
|
answers.offer = answers.offer ?? (await ask(rl, t().qOffer, undefined) || "");
|
|
817
839
|
answers.hours = answers.hours ?? (await ask(rl, t().qHours, undefined) || "");
|
|
@@ -1226,7 +1248,7 @@ async function cmdDeploy(flags, rest) {
|
|
|
1226
1248
|
try {
|
|
1227
1249
|
const wt = readFileSync(join(dir, "wrangler.toml"), "utf8");
|
|
1228
1250
|
const p = (wt.match(/LLM_PROVIDER\s*=\s*"([^"]+)"/) || [])[1] || "anthropic";
|
|
1229
|
-
brainKey = ({ anthropic: "claude", openai: "chatgpt", xai: "grok", minimax: "minimax" })[p] || "claude";
|
|
1251
|
+
brainKey = ({ anthropic: "claude", openai: "chatgpt", aisa: "aisa", xai: "grok", minimax: "minimax" })[p] || "claude";
|
|
1230
1252
|
} catch {}
|
|
1231
1253
|
flags.brainKey = brainKey;
|
|
1232
1254
|
await deployBot(dir, { flags, rl });
|
package/package.json
CHANGED