polpo-ai 0.5.21 → 0.5.24

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.
@@ -1,313 +1,59 @@
1
- /**
2
- * CLI commands for model and provider management.
3
- *
4
- * polpo models list — list available models and providers
5
- * polpo models status — show resolved model config, fallbacks, and auth status
6
- * polpo models scan — scan for locally running model servers (Ollama, vLLM, etc.)
7
- *
8
- * Aligned with OpenClaw's `openclaw models list/status/scan` interface.
9
- */
10
1
  import chalk from "chalk";
2
+ const GATEWAY_URL = "https://polpo.sh/api/gateway/models";
11
3
  export function registerModelsCommands(parent) {
12
4
  const models = parent
13
5
  .command("models")
14
- .description("Manage models and LLM providers");
15
- // ── polpo models list ─────────────────────────────
6
+ .description("List available AI models");
16
7
  models
17
8
  .command("list")
18
- .description("List available models from all providers")
19
- .option("--provider <name>", "Filter by provider name")
20
- .option("--all", "Show all models (not just featured)")
9
+ .description("List available models from the AI Gateway")
10
+ .option("--provider <name>", "Filter by provider (e.g. anthropic, openai, xai)")
21
11
  .option("--json", "Output as JSON")
22
12
  .option("--plain", "One model per line (machine-friendly)")
23
13
  .action(async (opts) => {
24
- const { listProviders, listModels } = await import("../../llm/pi-client.js");
25
- const providers = opts.provider ? [opts.provider] : listProviders();
26
- const allModels = opts.provider
27
- ? listModels(opts.provider)
28
- : providers.flatMap(p => listModels(p));
29
- if (opts.json) {
30
- console.log(JSON.stringify(allModels, null, 2));
31
- return;
32
- }
33
- if (opts.plain) {
34
- for (const m of allModels) {
35
- console.log(`${m.provider}:${m.id}`);
36
- }
37
- return;
38
- }
39
- // Group by provider
40
- const byProvider = new Map();
41
- for (const m of allModels) {
42
- const list = byProvider.get(m.provider) || [];
43
- list.push(m);
44
- byProvider.set(m.provider, list);
45
- }
46
- console.log(chalk.bold(`\nAvailable Models`) + chalk.dim(` (${allModels.length} total across ${byProvider.size} providers)\n`));
47
- for (const [provider, pModels] of byProvider) {
48
- // Show top N unless --all
49
- const show = opts.all ? pModels : pModels.slice(0, 5);
50
- console.log(` ${chalk.bold.cyan(provider)} ${chalk.dim(`(${pModels.length} models)`)}`);
51
- for (const m of show) {
52
- const tags = [];
53
- if (m.reasoning)
54
- tags.push(chalk.magenta("reasoning"));
55
- if (m.cost.input === 0 && m.cost.output === 0)
56
- tags.push(chalk.green("FREE"));
57
- const costStr = m.cost.input > 0
58
- ? chalk.dim(`$${m.cost.input.toFixed(2)}/$${m.cost.output.toFixed(2)} per 1M tok`)
59
- : "";
60
- const ctxStr = chalk.dim(`${(m.contextWindow / 1000).toFixed(0)}k ctx`);
61
- const tagStr = tags.length > 0 ? ` ${tags.join(" ")}` : "";
62
- console.log(` ${chalk.white(m.id)}${tagStr}`);
63
- console.log(` ${ctxStr} ${costStr}`);
64
- }
65
- if (!opts.all && pModels.length > show.length) {
66
- console.log(chalk.dim(` ... and ${pModels.length - show.length} more (use --all to see all)`));
67
- }
68
- console.log();
69
- }
70
- });
71
- // ── polpo models status ───────────────────────────
72
- models
73
- .command("status")
74
- .description("Show resolved model configuration, fallbacks, and auth status")
75
- .option("-d, --dir <path>", "Working directory", ".")
76
- .option("--json", "Output as JSON")
77
- .option("--check", "Exit code 1 if auth missing/expired, 2 if expiring soon")
78
- .option("--plain", "Print only the resolved primary model")
79
- .action(async (opts) => {
80
- const { resolve } = await import("node:path");
81
- const { getPolpoDir: getPolpoDirFn } = await import("../../core/constants.js");
82
- const { loadPolpoConfig } = await import("../../core/config.js");
83
- const { resolveModel, resolveModelSpec, resolveApiKey, resolveApiKeyAsync, parseModelSpec, setProviderOverrides, getProviderCooldowns } = await import("../../llm/pi-client.js");
84
- const polpoDir = getPolpoDirFn(resolve(opts.dir));
85
- let config;
86
- try {
87
- config = loadPolpoConfig(polpoDir);
88
- }
89
- catch {
90
- config = null;
91
- }
92
- // Set provider overrides if config loaded
93
- if (config?.providers) {
94
- setProviderOverrides(config.providers);
95
- }
96
- // Resolve the primary model
97
- const modelSpec = config?.settings?.orchestratorModel;
98
- const primarySpec = resolveModelSpec(modelSpec);
99
- const primary = primarySpec || process.env.POLPO_MODEL;
100
- if (!primary) {
101
- console.log(chalk.yellow("\n No default model configured. Run 'polpo setup' to set one.\n"));
102
- return;
103
- }
104
- if (opts.plain) {
105
- console.log(primary);
106
- return;
107
- }
108
- // Build status object
109
- const { provider: primaryProvider } = parseModelSpec(primary);
110
- let primaryModel;
14
+ let data;
111
15
  try {
112
- primaryModel = resolveModel(primary);
113
- }
114
- catch {
115
- primaryModel = null;
116
- }
117
- // Fallbacks
118
- const fallbacks = typeof modelSpec === "object" && modelSpec?.fallbacks
119
- ? modelSpec.fallbacks
120
- : [];
121
- // Auth status per provider
122
- const relevantProviders = new Set();
123
- relevantProviders.add(primaryProvider);
124
- for (const fb of fallbacks) {
125
- relevantProviders.add(parseModelSpec(fb).provider);
126
- }
127
- const authStatus = {};
128
- for (const provider of relevantProviders) {
129
- const envKey = !!resolveApiKey(provider);
130
- authStatus[provider] = {
131
- hasEnvKey: envKey,
132
- hasOAuth: false,
133
- profileCount: 0,
134
- issues: [],
135
- };
136
- }
137
- // Provider cooldowns
138
- const cooldowns = getProviderCooldowns();
139
- if (opts.json) {
140
- console.log(JSON.stringify({
141
- primary,
142
- primaryModel: primaryModel ? { id: primaryModel.id, name: primaryModel.name, provider: primaryModel.provider } : null,
143
- fallbacks,
144
- auth: authStatus,
145
- cooldowns,
146
- }, null, 2));
147
- if (opts.check) {
148
- const hasMissing = Object.values(authStatus).some(s => !s.hasEnvKey && !s.hasOAuth);
149
- const hasExpiring = Object.values(authStatus).some(s => s.issues.length > 0);
150
- process.exit(hasMissing ? 1 : hasExpiring ? 2 : 0);
151
- }
152
- return;
153
- }
154
- // Pretty output
155
- console.log(chalk.bold("\nModel Configuration\n"));
156
- // Primary
157
- const primaryIcon = primaryModel ? chalk.green("*") : chalk.red("x");
158
- console.log(` ${primaryIcon} ${chalk.bold("Primary:")} ${chalk.cyan(primary)}`);
159
- if (primaryModel) {
160
- const tags = [];
161
- if (primaryModel.reasoning)
162
- tags.push("reasoning");
163
- if (primaryModel.cost.input === 0)
164
- tags.push("FREE");
165
- console.log(chalk.dim(` ${primaryModel.name} | ${(primaryModel.contextWindow / 1000).toFixed(0)}k ctx${tags.length > 0 ? ` | ${tags.join(", ")}` : ""}`));
166
- }
167
- // Fallbacks
168
- if (fallbacks.length > 0) {
169
- console.log(`\n ${chalk.bold("Fallback chain:")}`);
170
- for (let i = 0; i < fallbacks.length; i++) {
171
- const fb = fallbacks[i];
172
- let fbModel;
173
- try {
174
- fbModel = resolveModel(fb);
175
- }
176
- catch {
177
- fbModel = null;
178
- }
179
- const icon = fbModel ? chalk.yellow(`${i + 1}.`) : chalk.red(`${i + 1}.`);
180
- console.log(` ${icon} ${fb}`);
181
- }
182
- }
183
- else {
184
- console.log(chalk.dim("\n No fallback models configured."));
185
- }
186
- // Auth
187
- console.log(chalk.bold("\n Provider Auth:\n"));
188
- for (const [provider, status] of Object.entries(authStatus)) {
189
- const icons = [];
190
- if (status.hasEnvKey)
191
- icons.push(chalk.green("env"));
192
- if (status.hasOAuth)
193
- icons.push(chalk.green("oauth"));
194
- if (!status.hasEnvKey && !status.hasOAuth)
195
- icons.push(chalk.red("none"));
196
- const profileInfo = status.profileCount > 0
197
- ? chalk.dim(` (${status.profileCount} profile${status.profileCount > 1 ? "s" : ""})`)
198
- : "";
199
- console.log(` ${chalk.bold(provider)}: ${icons.join(" + ")}${profileInfo}`);
200
- for (const issue of status.issues) {
201
- console.log(` ${chalk.yellow("!")} ${issue}`);
202
- }
203
- }
204
- // Cooldowns
205
- const activeCooldowns = Object.entries(cooldowns).filter(([, v]) => Date.now() < v.until);
206
- if (activeCooldowns.length > 0) {
207
- console.log(chalk.bold("\n Active Cooldowns:\n"));
208
- for (const [provider, cd] of activeCooldowns) {
209
- const remaining = Math.ceil((cd.until - Date.now()) / 60000);
210
- console.log(` ${chalk.red("*")} ${provider}: ${remaining}m remaining (${cd.reason || "unknown"}, ${cd.errorCount} errors)`);
211
- }
212
- }
213
- console.log();
214
- if (opts.check) {
215
- const hasMissing = Object.values(authStatus).some(s => !s.hasEnvKey && !s.hasOAuth);
216
- const hasExpiring = Object.values(authStatus).some(s => s.issues.length > 0);
217
- if (hasMissing) {
218
- console.log(chalk.red("Missing auth for one or more providers."));
16
+ const res = await fetch(GATEWAY_URL);
17
+ if (!res.ok) {
18
+ console.error(`Error: Could not fetch models (HTTP ${res.status})`);
219
19
  process.exit(1);
220
20
  }
221
- if (hasExpiring) {
222
- console.log(chalk.yellow("Auth issues detected (expiring or disabled)."));
223
- process.exit(2);
224
- }
225
- console.log(chalk.green("All providers authenticated."));
21
+ const json = await res.json();
22
+ data = json.data ?? json ?? [];
226
23
  }
227
- });
228
- // ── polpo models scan ─────────────────────────────
229
- models
230
- .command("scan")
231
- .description("Scan for locally running model servers (Ollama, vLLM, LM Studio, etc.)")
232
- .option("--json", "Output as JSON")
233
- .option("--timeout <ms>", "Connection timeout per endpoint", "3000")
234
- .action(async (opts) => {
235
- const timeout = parseInt(opts.timeout || "3000", 10);
236
- // Common local model server endpoints
237
- const endpoints = [
238
- { name: "Ollama", url: "http://localhost:11434/api/tags", modelsPath: "models", displayUrl: "http://localhost:11434" },
239
- { name: "vLLM", url: "http://localhost:8000/v1/models", modelsPath: "data", displayUrl: "http://localhost:8000" },
240
- { name: "LM Studio", url: "http://localhost:1234/v1/models", modelsPath: "data", displayUrl: "http://localhost:1234" },
241
- { name: "LocalAI", url: "http://localhost:8080/v1/models", modelsPath: "data", displayUrl: "http://localhost:8080" },
242
- { name: "LiteLLM Proxy", url: "http://localhost:4000/v1/models", modelsPath: "data", displayUrl: "http://localhost:4000" },
243
- { name: "TGI", url: "http://localhost:8080/info", modelsPath: null, displayUrl: "http://localhost:8080" },
244
- ];
245
- const discovered = [];
246
- if (!opts.json) {
247
- console.log(chalk.bold("\nScanning for local model servers...\n"));
24
+ catch (err) {
25
+ console.error(`Error: ${err.message}`);
26
+ process.exit(1);
248
27
  }
249
- const controller = new AbortController();
250
- const timeoutId = setTimeout(() => controller.abort(), timeout * endpoints.length + 5000);
251
- for (const ep of endpoints) {
252
- try {
253
- const abortCtrl = new AbortController();
254
- const timeoutHandle = setTimeout(() => abortCtrl.abort(), timeout);
255
- const res = await fetch(ep.url, {
256
- signal: abortCtrl.signal,
257
- headers: { Accept: "application/json" },
258
- });
259
- clearTimeout(timeoutHandle);
260
- if (!res.ok) {
261
- continue;
262
- }
263
- const data = await res.json();
264
- let models = [];
265
- if (ep.modelsPath && data[ep.modelsPath] && Array.isArray(data[ep.modelsPath])) {
266
- models = data[ep.modelsPath]
267
- .map(m => m.id || m.name || m.model || "unknown")
268
- .filter(Boolean);
269
- }
270
- else if (ep.name === "TGI" && typeof data === "object") {
271
- // TGI /info returns model_id directly
272
- const modelId = data.model_id;
273
- if (modelId)
274
- models = [modelId];
275
- }
276
- discovered.push({ name: ep.name, url: ep.displayUrl, models });
277
- if (!opts.json) {
278
- console.log(` ${chalk.green("*")} ${chalk.bold(ep.name)} ${chalk.dim(`(${ep.displayUrl})`)}`);
279
- if (models.length > 0) {
280
- for (const m of models.slice(0, 10)) {
281
- console.log(` ${chalk.white(m)}`);
282
- }
283
- if (models.length > 10) {
284
- console.log(chalk.dim(` ... and ${models.length - 10} more`));
285
- }
286
- }
287
- else {
288
- console.log(chalk.dim(" No models loaded"));
289
- }
290
- console.log();
291
- }
292
- }
293
- catch {
294
- // Server not running or unreachable — skip silently
295
- }
28
+ if (opts.provider) {
29
+ data = data.filter(m => m.id.startsWith(`${opts.provider}/`));
296
30
  }
297
- clearTimeout(timeoutId);
298
31
  if (opts.json) {
299
- console.log(JSON.stringify(discovered, null, 2));
32
+ console.log(JSON.stringify(data, null, 2));
300
33
  return;
301
34
  }
302
- if (discovered.length === 0) {
303
- console.log(chalk.dim(" No local model servers found."));
304
- console.log(chalk.dim(" Supported: Ollama, vLLM, LM Studio, LocalAI, LiteLLM, TGI\n"));
35
+ if (opts.plain) {
36
+ for (const m of data)
37
+ console.log(m.id);
38
+ return;
305
39
  }
306
- else {
307
- console.log(chalk.dim(` Found ${discovered.length} server${discovered.length > 1 ? "s" : ""} with ${discovered.reduce((s, d) => s + d.models.length, 0)} model${discovered.reduce((s, d) => s + d.models.length, 0) !== 1 ? "s" : ""}.\n`));
308
- console.log(chalk.dim(" To use a local model, add to polpo.json:"));
309
- console.log(chalk.dim(' "providers": { "ollama": { "baseUrl": "http://localhost:11434/v1", "api": "openai-completions" } }'));
310
- console.log(chalk.dim(' "orchestratorModel": "ollama:llama3.2"\n'));
40
+ // Group by provider
41
+ const byProvider = new Map();
42
+ for (const m of data) {
43
+ const provider = m.id.split("/")[0] ?? m.owned_by;
44
+ if (!byProvider.has(provider))
45
+ byProvider.set(provider, []);
46
+ byProvider.get(provider).push(m);
47
+ }
48
+ console.log(`\n ${chalk.bold(`${data.length} models`)} from ${byProvider.size} providers\n`);
49
+ for (const [provider, models] of byProvider) {
50
+ console.log(` ${chalk.bold(provider)} (${models.length})`);
51
+ for (const m of models) {
52
+ const ctx = m.context_window ? chalk.dim(` ${(m.context_window / 1000).toFixed(0)}k`) : "";
53
+ const price = m.pricing ? chalk.dim(` $${m.pricing.input}/$${m.pricing.output}`) : "";
54
+ console.log(` ${m.id}${ctx}${price}`);
55
+ }
56
+ console.log();
311
57
  }
312
58
  });
313
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/cli/commands/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/cli/commands/models.ts"],"names":[],"mappings":"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"}
@@ -145,13 +145,13 @@ export async function runSetupWizard(options) {
145
145
  selectedModel = capped[idx].spec;
146
146
  }
147
147
  else {
148
- const custom = await promptUser(" Model spec (provider:model): ");
148
+ const custom = await promptUser(" Model spec (provider/model): ");
149
149
  if (custom)
150
150
  selectedModel = custom;
151
151
  }
152
152
  }
153
153
  else {
154
- const custom = await promptUser(" Model spec (provider:model): ");
154
+ const custom = await promptUser(" Model spec (provider/model): ");
155
155
  if (custom)
156
156
  selectedModel = custom;
157
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmE5D"}
@@ -60,9 +60,15 @@ export function registerUpdateCommand(program) {
60
60
  return;
61
61
  }
62
62
  const pm = detectPackageManager();
63
+ // Clear cache to avoid stale versions
64
+ try {
65
+ if (pm === "npm")
66
+ execSync("npm cache clean --force", { stdio: "ignore", timeout: 30_000 });
67
+ }
68
+ catch { /* best effort */ }
63
69
  const cmd = pm === "pnpm"
64
- ? "pnpm add -g polpo-ai@latest"
65
- : "npm install -g polpo-ai@latest --force";
70
+ ? `pnpm add -g polpo-ai@${latest}`
71
+ : `npm install -g polpo-ai@${latest}`;
66
72
  console.log(chalk.dim(`\n Updating via ${pm}...`));
67
73
  console.log(chalk.dim(` $ ${cmd}\n`));
68
74
  execSync(cmd, { stdio: "inherit", timeout: 120_000 });
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ if (major < 20) {
7
7
  process.exit(1);
8
8
  }
9
9
  import { resolve, dirname } from "node:path";
10
- import { mkdir, access } from "node:fs/promises";
10
+ // fs/promises no longer needed (init removed)
11
11
  import { existsSync, readFileSync } from "node:fs";
12
12
  import { fileURLToPath } from "node:url";
13
13
  import { Command } from "commander";
@@ -53,8 +53,6 @@ import { registerConfigCommands } from "./commands/config.js";
53
53
  import { registerPlaybookCommands } from "./commands/playbook.js";
54
54
  import { registerSkillsCommands } from "./commands/skills.js";
55
55
  import { registerModelsCommands } from "./commands/models.js";
56
- import { registerSetupCommand } from "./commands/setup.js";
57
- import { registerBrowserCommands } from "./commands/browser-profile.js";
58
56
  import { registerScheduleCommands } from "./commands/schedule.js";
59
57
  import { registerAgentOnboardCommands } from "./commands/agent-onboard.js";
60
58
  import { registerUpdateCommand } from "./commands/update.js";
@@ -66,6 +64,7 @@ import { registerByokCommand } from "./commands/cloud/byok.js";
66
64
  import { registerProjectsCommand } from "./commands/cloud/projects.js";
67
65
  import { registerStatusCommand as registerCloudStatusCommand } from "./commands/cloud/status.js";
68
66
  import { registerLogsCommand as registerCloudLogsCommand } from "./commands/cloud/logs.js";
67
+ // ensureSetup removed — no longer gating on polpo.json
69
68
  import { startUpdateCheck } from "./update-check.js";
70
69
  /** Wire orchestrator events to console output with chalk formatting. */
71
70
  function wireConsoleEvents(orchestrator) {
@@ -176,7 +175,6 @@ function _buildLogo(center = false) {
176
175
  }).join("\n") + "\n";
177
176
  }
178
177
  const LOGO = _buildLogo(false);
179
- const LOGO_CENTER = () => _buildLogo(true);
180
178
  const LOGO_MINI = ` ${chalk.bold.white("🐙 P O L P O")} `;
181
179
  // ── Default action: start server + dashboard ────────────────────────
182
180
  const serveAction = async (opts) => {
@@ -231,33 +229,7 @@ program
231
229
  .option("--api-key <key>", "API key for authentication (optional)")
232
230
  .option("--cors-origins <origins>", "Comma-separated allowed CORS origins (env: POLPO_CORS_ORIGINS)")
233
231
  .action(serveAction);
234
- // polpo init
235
- program
236
- .command("init")
237
- .description("Initialize Polpo in the current project")
238
- .option("-d, --dir <path>", "Working directory", ".")
239
- .action(async (opts) => {
240
- console.log(LOGO_CENTER());
241
- const workDir = resolve(opts.dir);
242
- const polpoDir = getPolpoDir(workDir);
243
- await mkdir(polpoDir, { recursive: true });
244
- await mkdir(resolve(polpoDir, "logs"), { recursive: true });
245
- await mkdir(resolve(polpoDir, "assessments"), { recursive: true });
246
- // Create .polpo/polpo.json via setup wizard (or non-interactive fallback)
247
- const polpoJsonPath = resolve(polpoDir, "polpo.json");
248
- try {
249
- await access(polpoJsonPath);
250
- console.log(chalk.yellow(" .polpo/polpo.json already exists."));
251
- console.log(chalk.dim(" Run 'polpo setup' to reconfigure.\n"));
252
- }
253
- catch {
254
- const { runSetupWizard } = await import("./commands/setup.js");
255
- await runSetupWizard({ polpoDir, workDir });
256
- }
257
- console.log(chalk.green("\n Polpo initialized!"));
258
- console.log(chalk.dim("\n Local development: polpo start"));
259
- console.log(chalk.dim(" Cloud deployment: polpo login && polpo deploy\n"));
260
- });
232
+ // polpo init — removed. Create .polpo/agents.json directly or let your coding agent do it.
261
233
  // polpo run
262
234
  program
263
235
  .command("run")
@@ -544,8 +516,7 @@ registerConfigCommands(program);
544
516
  registerPlaybookCommands(program);
545
517
  registerSkillsCommands(program);
546
518
  registerModelsCommands(program);
547
- registerSetupCommand(program);
548
- registerBrowserCommands(program);
519
+ // init, setup, browser-profile, chat removed
549
520
  registerScheduleCommands(program);
550
521
  registerAgentOnboardCommands(program);
551
522
  registerUpdateCommand(program);