swarm-code 0.1.4 → 0.1.5
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/interactive.js +65 -22
- package/package.json +1 -1
package/dist/interactive.js
CHANGED
|
@@ -1582,30 +1582,73 @@ async function interactive() {
|
|
|
1582
1582
|
console.log();
|
|
1583
1583
|
}
|
|
1584
1584
|
else {
|
|
1585
|
-
// Agent works without keys (e.g. OpenCode) —
|
|
1586
|
-
console.log(` ${c.bold}${agent.name}${c.reset} ${c.dim}—
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1585
|
+
// Agent works without keys (e.g. OpenCode) — choose backend
|
|
1586
|
+
console.log(` ${c.bold}${agent.name}${c.reset} ${c.dim}— choose your backend:${c.reset}\n`);
|
|
1587
|
+
console.log(` ${c.dim}1${c.reset} Ollama ${c.dim}Run models locally (free, requires download)${c.reset}`);
|
|
1588
|
+
console.log(` ${c.dim}2${c.reset} OpenRouter ${c.dim}Cloud API for 200+ models (requires API key)${c.reset}`);
|
|
1589
|
+
console.log();
|
|
1590
|
+
const backendChoice = await questionWithEsc(setupRl, ` ${c.cyan}Backend [1-2]:${c.reset} `);
|
|
1591
|
+
const pickedOpenRouter = backendChoice !== null && backendChoice.trim() === "2";
|
|
1592
|
+
if (pickedOpenRouter) {
|
|
1593
|
+
// OpenRouter setup
|
|
1594
|
+
console.log();
|
|
1595
|
+
const orKey = await questionWithEsc(setupRl, ` ${c.cyan}OPENROUTER_API_KEY:${c.reset} `);
|
|
1596
|
+
if (orKey?.trim()) {
|
|
1597
|
+
process.env.OPENROUTER_API_KEY = orKey.trim();
|
|
1598
|
+
try {
|
|
1599
|
+
const envPath = path.join(process.cwd(), ".env");
|
|
1600
|
+
let envContent = "";
|
|
1601
|
+
try {
|
|
1602
|
+
envContent = fs.readFileSync(envPath, "utf-8");
|
|
1603
|
+
}
|
|
1604
|
+
catch { }
|
|
1605
|
+
if (!envContent.includes("OPENROUTER_API_KEY")) {
|
|
1606
|
+
fs.appendFileSync(envPath, `\nOPENROUTER_API_KEY=${orKey.trim()}\n`);
|
|
1607
|
+
}
|
|
1608
|
+
console.log(` ${c.green}✓${c.reset} OpenRouter configured`);
|
|
1609
|
+
}
|
|
1610
|
+
catch {
|
|
1611
|
+
console.log(` ${c.green}✓${c.reset} OpenRouter key set for this session`);
|
|
1612
|
+
}
|
|
1613
|
+
currentModelId = "openrouter/auto";
|
|
1614
|
+
saveModelPreference(currentModelId);
|
|
1615
|
+
}
|
|
1616
|
+
else {
|
|
1617
|
+
console.log(` ${c.dim}No key provided — you can set OPENROUTER_API_KEY in .env later${c.reset}`);
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
else {
|
|
1621
|
+
// Ollama setup
|
|
1622
|
+
console.log();
|
|
1623
|
+
const ok = await ensureOllamaSetup(setupRl, "ollama/deepseek-coder-v2");
|
|
1624
|
+
if (ok)
|
|
1625
|
+
usesOllama = true;
|
|
1626
|
+
}
|
|
1590
1627
|
console.log();
|
|
1591
1628
|
}
|
|
1592
1629
|
}
|
|
1593
1630
|
// ── Step 3: Set default model ────────────────────────────────
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1631
|
+
if (currentModelId.startsWith("openrouter/")) {
|
|
1632
|
+
// Already set during OpenRouter setup
|
|
1633
|
+
console.log(` ${c.green}✓${c.reset} Default model: ${c.bold}${currentModelId}${c.reset} ${c.dim}(OpenRouter)${c.reset}`);
|
|
1634
|
+
}
|
|
1635
|
+
else {
|
|
1636
|
+
const activeProvider = Object.keys(PROVIDER_KEYS).find((p) => process.env[providerEnvKey(p)]);
|
|
1637
|
+
if (activeProvider) {
|
|
1638
|
+
currentProviderName = activeProvider;
|
|
1639
|
+
const defaultModel = getDefaultModelForProvider(activeProvider);
|
|
1640
|
+
if (defaultModel) {
|
|
1641
|
+
currentModelId = defaultModel;
|
|
1642
|
+
saveModelPreference(currentModelId);
|
|
1643
|
+
console.log(` ${c.green}✓${c.reset} Default model: ${c.bold}${currentModelId}${c.reset}`);
|
|
1644
|
+
}
|
|
1645
|
+
}
|
|
1646
|
+
else if (usesOllama) {
|
|
1647
|
+
currentModelId = "ollama/deepseek-coder-v2";
|
|
1600
1648
|
saveModelPreference(currentModelId);
|
|
1601
|
-
console.log(` ${c.green}✓${c.reset} Default model: ${c.bold}${currentModelId}${c.reset}`);
|
|
1649
|
+
console.log(` ${c.green}✓${c.reset} Default model: ${c.bold}${currentModelId}${c.reset} ${c.dim}(local)${c.reset}`);
|
|
1602
1650
|
}
|
|
1603
1651
|
}
|
|
1604
|
-
else if (usesOllama) {
|
|
1605
|
-
currentModelId = "ollama/deepseek-coder-v2";
|
|
1606
|
-
saveModelPreference(currentModelId);
|
|
1607
|
-
console.log(` ${c.green}✓${c.reset} Default model: ${c.bold}${currentModelId}${c.reset} ${c.dim}(local)${c.reset}`);
|
|
1608
|
-
}
|
|
1609
1652
|
console.log();
|
|
1610
1653
|
setupRl.close();
|
|
1611
1654
|
}
|
|
@@ -1637,12 +1680,12 @@ async function interactive() {
|
|
|
1637
1680
|
}
|
|
1638
1681
|
}
|
|
1639
1682
|
if (!currentModel) {
|
|
1640
|
-
if (currentModelId.startsWith("ollama/")) {
|
|
1641
|
-
//
|
|
1642
|
-
|
|
1643
|
-
console.log(`\n ${c.green}✓${c.reset}
|
|
1683
|
+
if (currentModelId.startsWith("ollama/") || currentModelId.startsWith("openrouter/")) {
|
|
1684
|
+
// Non-pi-ai model — redirect to swarm mode which uses OpenCode natively.
|
|
1685
|
+
const backend = currentModelId.startsWith("ollama/") ? "Ollama" : "OpenRouter";
|
|
1686
|
+
console.log(`\n ${c.green}✓${c.reset} ${backend} model selected: ${c.bold}${currentModelId}${c.reset}`);
|
|
1644
1687
|
console.log(`\n ${c.dim}This interactive REPL uses direct LLM API calls.${c.reset}`);
|
|
1645
|
-
console.log(` ${c.dim}To use
|
|
1688
|
+
console.log(` ${c.dim}To use ${backend} with OpenCode, run:${c.reset}\n`);
|
|
1646
1689
|
console.log(` ${c.bold}swarm --dir ./your-project "your task"${c.reset}\n`);
|
|
1647
1690
|
process.exit(0);
|
|
1648
1691
|
}
|
package/package.json
CHANGED