@poolzin/pool-bot 2026.1.38 → 2026.2.0
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/assets/chrome-extension/README.md +3 -3
- package/assets/chrome-extension/background.js +5 -5
- package/assets/chrome-extension/manifest.json +3 -3
- package/assets/chrome-extension/options.html +4 -4
- package/assets/chrome-extension/options.js +1 -1
- package/dist/acp/client.js +3 -3
- package/dist/acp/types.js +1 -1
- package/dist/agents/agent-paths.js +3 -3
- package/dist/agents/auth-profiles/paths.js +3 -3
- package/dist/agents/cli-runner/helpers.js +1 -1
- package/dist/agents/cli-runner.js +2 -2
- package/dist/agents/cloudflare-ai-gateway.js +31 -0
- package/dist/agents/compaction.js +16 -2
- package/dist/agents/context-window-guard.js +13 -10
- package/dist/agents/context.js +4 -4
- package/dist/agents/docs-path.js +1 -1
- package/dist/agents/minimax-vlm.js +1 -1
- package/dist/agents/model-auth.js +12 -1
- package/dist/agents/model-catalog.js +4 -4
- package/dist/agents/model-selection.js +10 -4
- package/dist/agents/models-config.js +3 -3
- package/dist/agents/models-config.providers.js +147 -39
- package/dist/agents/pi-embedded-helpers/openai.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +8 -8
- package/dist/agents/pi-embedded-runner/model.js +2 -2
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
- package/dist/agents/pi-embedded-runner/run.js +4 -4
- package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-model-discovery.js +10 -0
- package/dist/agents/pi-tool-definition-adapter.js +50 -9
- package/dist/agents/pi-tools.before-tool-call.js +67 -0
- package/dist/agents/pi-tools.js +10 -5
- package/dist/agents/pi-tools.read.js +2 -2
- package/dist/agents/session-file-repair.js +83 -0
- package/dist/agents/session-transcript-repair.js +68 -0
- package/dist/agents/skills/frontmatter.js +1 -1
- package/dist/agents/skills/workspace.js +2 -2
- package/dist/agents/system-prompt.js +28 -4
- package/dist/agents/together-models.js +127 -0
- package/dist/agents/tool-images.js +1 -1
- package/dist/agents/tool-policy.js +1 -1
- package/dist/agents/tools/browser-tool.js +3 -3
- package/dist/agents/tools/image-tool.js +2 -2
- package/dist/agents/tools/memory-tool.js +94 -7
- package/dist/agents/tools/web-search.js +1 -1
- package/dist/agents/workspace.js +1 -5
- package/dist/auto-reply/commands-registry.data.js +1 -1
- package/dist/auto-reply/reply/commands-context-report.js +2 -2
- package/dist/auto-reply/reply/commands-session.js +2 -2
- package/dist/auto-reply/reply/get-reply-run.js +14 -4
- package/dist/auto-reply/reply/groups.js +1 -1
- package/dist/auto-reply/reply/inbound-context.js +4 -0
- package/dist/auto-reply/reply/inbound-meta.js +130 -0
- package/dist/auto-reply/reply/untrusted-context.js +15 -0
- package/dist/auto-reply/status.js +1 -1
- package/dist/browser/client-fetch.js +1 -1
- package/dist/browser/config.js +1 -1
- package/dist/browser/extension-relay.js +3 -3
- package/dist/browser/server-context.js +2 -2
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui.js +3 -3
- package/dist/channels/plugins/agent-tools/whatsapp-login.js +1 -17
- package/dist/channels/plugins/catalog.js +2 -2
- package/dist/channels/plugins/onboarding/imessage.js +1 -1
- package/dist/channels/plugins/onboarding/signal.js +1 -1
- package/dist/channels/plugins/onboarding/slack.js +4 -4
- package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
- package/dist/channels/plugins/pairing-message.js +1 -1
- package/dist/cli/browser-cli-extension.js +2 -2
- package/dist/cli/docs-cli.js +1 -1
- package/dist/cli/gateway-cli/dev.js +1 -1
- package/dist/cli/memory-cli.js +25 -15
- package/dist/cli/nodes-cli/register.canvas.js +1 -1
- package/dist/cli/plugins-cli.js +1 -1
- package/dist/cli/run-main.js +2 -2
- package/dist/cli/security-cli.js +1 -1
- package/dist/cli/tagline.js +1 -1
- package/dist/cli/update-cli.js +4 -4
- package/dist/cli/webhooks-cli.js +5 -5
- package/dist/commands/agents.commands.add.js +1 -1
- package/dist/commands/auth-choice.apply.api-providers.js +305 -17
- package/dist/commands/auth-choice.apply.js +4 -1
- package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
- package/dist/commands/auth-choice.apply.xai.js +63 -0
- package/dist/commands/auth-choice.preferred-provider.js +7 -1
- package/dist/commands/configure.wizard.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/docs.js +1 -1
- package/dist/commands/doctor-gateway-services.js +3 -3
- package/dist/commands/doctor-state-integrity.js +2 -14
- package/dist/commands/doctor-update.js +3 -3
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/models/list.probe.js +2 -2
- package/dist/commands/models/list.registry.js +4 -4
- package/dist/commands/models/list.status-command.js +2 -2
- package/dist/commands/onboard-auth.config-core.js +366 -28
- package/dist/commands/onboard-auth.credentials.js +71 -9
- package/dist/commands/onboard-auth.js +3 -3
- package/dist/commands/onboard-auth.models.js +26 -24
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +140 -6
- package/dist/commands/status-all/report-lines.js +1 -1
- package/dist/commands/status.command.js +1 -1
- package/dist/commands/uninstall.js +3 -3
- package/dist/compat/legacy-names.js +1 -1
- package/dist/config/io.js +3 -3
- package/dist/config/schema.js +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.memory.js +1 -0
- package/dist/config/version.js +4 -4
- package/dist/config/zod-schema.js +0 -6
- package/dist/daemon/constants.js +7 -7
- package/dist/daemon/inspect.js +6 -6
- package/dist/daemon/systemd-unit.js +1 -1
- package/dist/discord/monitor/message-handler.process.js +6 -4
- package/dist/gateway/client.js +0 -14
- package/dist/gateway/live-image-probe.js +1 -66
- package/dist/gateway/openai-http.js +2 -2
- package/dist/gateway/openresponses-http.js +4 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +1 -1
- package/dist/gateway/server.impl.js +2 -6
- package/dist/hooks/frontmatter.js +1 -1
- package/dist/hooks/hooks-status.js +1 -1
- package/dist/hooks/install.js +2 -2
- package/dist/hooks/loader.js +1 -1
- package/dist/hooks/workspace.js +3 -3
- package/dist/index.js +2 -2
- package/dist/infra/bonjour.js +3 -3
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/provider-usage.fetch.minimax.js +1 -1
- package/dist/infra/restart.js +1 -1
- package/dist/infra/tailscale.js +1 -1
- package/dist/macos/relay.js +2 -2
- package/dist/media/input-files.js +1 -1
- package/dist/media/mime.js +4 -0
- package/dist/media/png-encode.js +74 -0
- package/dist/media-understanding/providers/image.js +2 -2
- package/dist/memory/backend-config.js +207 -0
- package/dist/memory/embeddings.js +1 -1
- package/dist/memory/index.js +0 -5
- package/dist/memory/manager.js +3 -25
- package/dist/memory/types.js +1 -0
- package/dist/node-host/runner.js +2 -2
- package/dist/pairing/pairing-messages.js +1 -1
- package/dist/plugins/discovery.js +1 -1
- package/dist/plugins/install.js +2 -2
- package/dist/plugins/update.js +1 -1
- package/dist/security/audit.js +2 -2
- package/dist/shared/text/reasoning-tags.js +52 -7
- package/dist/slack/monitor/message-handler/prepare.js +10 -4
- package/dist/slack/monitor/slash.js +10 -4
- package/dist/tailscale/detect.js +146 -0
- package/dist/telegram/bot-message-context.js +1 -1
- package/dist/test-helpers/workspace.js +11 -0
- package/dist/test-utils/channel-plugins.js +82 -0
- package/dist/test-utils/ports.js +73 -0
- package/dist/utils/shell-argv.js +61 -0
- package/dist/utils.js +10 -0
- package/dist/web/qr-image.js +1 -61
- package/dist/wizard/onboarding.finalize.js +7 -7
- package/dist/wizard/onboarding.js +3 -3
- package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
- package/docs/_config.yml +2 -2
- package/docs/_layouts/default.html +9 -9
- package/docs/concepts/typebox.md +1 -1
- package/docs/docs.json +1 -1
- package/docs/northflank.mdx +7 -7
- package/docs/railway.mdx +3 -3
- package/docs/render.mdx +5 -5
- package/docs/start/lore.md +2 -2
- package/extensions/bluebubbles/index.ts +2 -2
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/accounts.ts +8 -8
- package/extensions/bluebubbles/src/actions.test.ts +22 -22
- package/extensions/bluebubbles/src/actions.ts +5 -5
- package/extensions/bluebubbles/src/attachments.ts +2 -2
- package/extensions/bluebubbles/src/channel.ts +16 -16
- package/extensions/bluebubbles/src/chat.ts +2 -2
- package/extensions/bluebubbles/src/media-send.ts +2 -2
- package/extensions/bluebubbles/src/monitor.test.ts +46 -46
- package/extensions/bluebubbles/src/monitor.ts +5 -5
- package/extensions/bluebubbles/src/onboarding.ts +7 -7
- package/extensions/bluebubbles/src/reactions.ts +2 -2
- package/extensions/bluebubbles/src/send.ts +2 -2
- package/extensions/copilot-proxy/README.md +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/index.ts +2 -2
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diagnostics-otel/src/service.ts +3 -3
- package/extensions/discord/index.ts +2 -2
- package/extensions/discord/package.json +1 -1
- package/extensions/google-antigravity-auth/README.md +1 -1
- package/extensions/google-antigravity-auth/index.ts +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/README.md +1 -1
- package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/index.ts +3 -3
- package/extensions/googlechat/package.json +1 -1
- package/extensions/googlechat/src/accounts.ts +8 -8
- package/extensions/googlechat/src/actions.ts +6 -6
- package/extensions/googlechat/src/channel.ts +21 -21
- package/extensions/googlechat/src/monitor.ts +8 -8
- package/extensions/googlechat/src/onboarding.ts +10 -10
- package/extensions/imessage/index.ts +2 -2
- package/extensions/imessage/package.json +1 -1
- package/extensions/line/index.ts +2 -2
- package/extensions/line/package.json +1 -1
- package/extensions/line/src/card-command.ts +2 -2
- package/extensions/line/src/channel.logout.test.ts +4 -4
- package/extensions/line/src/channel.sendPayload.test.ts +8 -8
- package/extensions/line/src/channel.ts +3 -3
- package/extensions/llm-task/README.md +3 -3
- package/extensions/llm-task/index.ts +2 -2
- package/extensions/llm-task/package.json +1 -1
- package/extensions/llm-task/src/llm-task-tool.ts +4 -4
- package/extensions/lobster/README.md +6 -6
- package/extensions/lobster/index.ts +2 -2
- package/extensions/lobster/src/lobster-tool.test.ts +4 -4
- package/extensions/lobster/src/lobster-tool.ts +2 -2
- package/extensions/matrix/index.ts +2 -2
- package/extensions/matrix/package.json +1 -1
- package/extensions/matrix/src/matrix/client/config.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
- package/extensions/matrix/src/onboarding.ts +1 -1
- package/extensions/mattermost/index.ts +2 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
- package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
- package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
- package/extensions/mattermost/src/onboarding.ts +2 -2
- package/extensions/memory-core/index.ts +2 -2
- package/extensions/memory-core/package.json +1 -4
- package/extensions/memory-lancedb/index.ts +3 -3
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/msteams/index.ts +2 -2
- package/extensions/msteams/package.json +1 -1
- package/extensions/msteams/src/channel.directory.test.ts +2 -2
- package/extensions/msteams/src/channel.ts +2 -2
- package/extensions/msteams/src/graph-upload.ts +4 -4
- package/extensions/msteams/src/monitor-handler.ts +2 -2
- package/extensions/msteams/src/monitor.ts +2 -2
- package/extensions/msteams/src/onboarding.ts +9 -9
- package/extensions/msteams/src/reply-dispatcher.ts +2 -2
- package/extensions/msteams/src/send-context.ts +2 -2
- package/extensions/msteams/src/send.ts +4 -4
- package/extensions/nextcloud-talk/index.ts +2 -2
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nextcloud-talk/src/channel.ts +7 -7
- package/extensions/nextcloud-talk/src/inbound.ts +7 -7
- package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
- package/extensions/nostr/README.md +2 -2
- package/extensions/nostr/index.ts +5 -5
- package/extensions/nostr/package.json +1 -1
- package/extensions/nostr/src/types.ts +4 -4
- package/extensions/open-prose/index.ts +2 -2
- package/extensions/qwen-portal-auth/README.md +1 -1
- package/extensions/signal/index.ts +2 -2
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/index.ts +2 -2
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/index.ts +2 -2
- package/extensions/telegram/package.json +1 -1
- package/extensions/telegram/src/channel.ts +2 -2
- package/extensions/tlon/README.md +2 -2
- package/extensions/tlon/index.ts +2 -2
- package/extensions/tlon/package.json +1 -1
- package/extensions/tlon/src/channel.ts +13 -13
- package/extensions/tlon/src/monitor/index.ts +3 -3
- package/extensions/tlon/src/onboarding.ts +3 -3
- package/extensions/tlon/src/types.ts +3 -3
- package/extensions/twitch/README.md +1 -1
- package/extensions/twitch/index.ts +2 -2
- package/extensions/twitch/package.json +1 -1
- package/extensions/twitch/src/config.ts +3 -3
- package/extensions/twitch/src/monitor.ts +3 -3
- package/extensions/twitch/src/onboarding.ts +9 -9
- package/extensions/twitch/src/outbound.test.ts +2 -2
- package/extensions/twitch/src/plugin.test.ts +2 -2
- package/extensions/twitch/src/plugin.ts +8 -8
- package/extensions/twitch/src/send.test.ts +2 -2
- package/extensions/twitch/src/send.ts +4 -4
- package/extensions/twitch/src/token.test.ts +8 -8
- package/extensions/twitch/src/token.ts +3 -3
- package/extensions/twitch/src/twitch-client.ts +3 -3
- package/extensions/twitch/src/types.ts +3 -3
- package/extensions/twitch/src/utils/markdown.ts +1 -1
- package/extensions/voice-call/README.md +3 -3
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/core-bridge.ts +2 -2
- package/extensions/voice-call/src/response-generator.ts +1 -1
- package/extensions/whatsapp/index.ts +2 -2
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/README.md +1 -1
- package/extensions/zalo/index.ts +2 -2
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalo/src/accounts.ts +8 -8
- package/extensions/zalo/src/actions.ts +4 -4
- package/extensions/zalo/src/channel.directory.test.ts +2 -2
- package/extensions/zalo/src/channel.ts +18 -18
- package/extensions/zalo/src/monitor.ts +9 -9
- package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
- package/extensions/zalo/src/onboarding.ts +24 -24
- package/extensions/zalo/src/send.ts +2 -2
- package/extensions/zalouser/README.md +2 -2
- package/extensions/zalouser/index.ts +2 -2
- package/extensions/zalouser/package.json +1 -1
- package/extensions/zalouser/src/accounts.ts +9 -9
- package/extensions/zalouser/src/channel.ts +24 -24
- package/extensions/zalouser/src/monitor.ts +4 -4
- package/extensions/zalouser/src/onboarding.ts +28 -28
- package/package.json +13 -250
- package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
- package/skills/tmux/scripts/find-sessions.sh +1 -1
- package/CHANGELOG.md +0 -200
- package/README-header.png +0 -0
- package/git-hooks/pre-commit +0 -4
- package/scripts/format-staged.js +0 -148
- package/scripts/postinstall.js +0 -300
- package/scripts/setup-git-hooks.js +0 -96
- package/skills/webgpu-threejs-tsl/REFERENCE.md +0 -283
- package/skills/webgpu-threejs-tsl/SKILL.md +0 -91
- package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +0 -404
- package/skills/webgpu-threejs-tsl/docs/core-concepts.md +0 -453
- package/skills/webgpu-threejs-tsl/docs/materials.md +0 -353
- package/skills/webgpu-threejs-tsl/docs/post-processing.md +0 -434
- package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +0 -324
- package/skills/webgpu-threejs-tsl/examples/basic-setup.js +0 -87
- package/skills/webgpu-threejs-tsl/examples/custom-material.js +0 -170
- package/skills/webgpu-threejs-tsl/examples/earth-shader.js +0 -292
- package/skills/webgpu-threejs-tsl/examples/particle-system.js +0 -259
- package/skills/webgpu-threejs-tsl/examples/post-processing.js +0 -199
- package/skills/webgpu-threejs-tsl/templates/compute-shader.js +0 -305
- package/skills/webgpu-threejs-tsl/templates/webgpu-project.js +0 -276
package/dist/commands/docs.js
CHANGED
|
@@ -3,7 +3,7 @@ import { runCommandWithTimeout } from "../process/exec.js";
|
|
|
3
3
|
import { formatDocsLink } from "../terminal/links.js";
|
|
4
4
|
import { isRich, theme } from "../terminal/theme.js";
|
|
5
5
|
import { formatCliCommand } from "../cli/command-format.js";
|
|
6
|
-
const SEARCH_TOOL = "https://docs.molt.bot/mcp.
|
|
6
|
+
const SEARCH_TOOL = "https://docs.molt.bot/mcp.SearchPoolbot";
|
|
7
7
|
const SEARCH_TIMEOUT_MS = 30_000;
|
|
8
8
|
const DEFAULT_SNIPPET_MAX = 220;
|
|
9
9
|
function resolveNodeRunner() {
|
|
@@ -36,7 +36,7 @@ export async function maybeMigrateLegacyGatewayService(cfg, mode, runtime, promp
|
|
|
36
36
|
return;
|
|
37
37
|
note(legacyServices.map((svc) => `- ${svc.label} (${svc.platform}, ${svc.detail})`).join("\n"), "Legacy gateway services detected");
|
|
38
38
|
const migrate = await prompter.confirmSkipInNonInteractive({
|
|
39
|
-
message: "Migrate legacy gateway services to
|
|
39
|
+
message: "Migrate legacy gateway services to Poolbot now?",
|
|
40
40
|
initialValue: true,
|
|
41
41
|
});
|
|
42
42
|
if (!migrate)
|
|
@@ -62,11 +62,11 @@ export async function maybeMigrateLegacyGatewayService(cfg, mode, runtime, promp
|
|
|
62
62
|
const service = resolveGatewayService();
|
|
63
63
|
const loaded = await service.isLoaded({ env: process.env });
|
|
64
64
|
if (loaded) {
|
|
65
|
-
note(`
|
|
65
|
+
note(`Poolbot ${service.label} already ${service.loadedText}.`, "Gateway");
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
const install = await prompter.confirmSkipInNonInteractive({
|
|
69
|
-
message: "Install
|
|
69
|
+
message: "Install Poolbot gateway service now?",
|
|
70
70
|
initialValue: true,
|
|
71
71
|
});
|
|
72
72
|
if (!install)
|
|
@@ -3,7 +3,7 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { resolveDefaultAgentId } from "../agents/agent-scope.js";
|
|
5
5
|
import { resolveOAuthDir, resolveStateDir } from "../config/paths.js";
|
|
6
|
-
import { loadSessionStore, resolveMainSessionKey, resolveSessionFilePath,
|
|
6
|
+
import { loadSessionStore, resolveMainSessionKey, resolveSessionFilePath, resolveSessionTranscriptsDirForAgent, resolveStorePath, } from "../config/sessions.js";
|
|
7
7
|
import { note } from "../terminal/note.js";
|
|
8
8
|
import { shortenHomePath } from "../utils.js";
|
|
9
9
|
function existsDir(dir) {
|
|
@@ -291,19 +291,7 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
291
291
|
const transcriptPath = resolveSessionFilePath(sessionId, entry, {
|
|
292
292
|
agentId,
|
|
293
293
|
});
|
|
294
|
-
|
|
295
|
-
// Se o arquivo não existe no path esperado, verificar também o path alternativo
|
|
296
|
-
if (!existsFile(transcriptPath)) {
|
|
297
|
-
// Tentar verificar se o arquivo existe com o path alternativo (sem sessionFile)
|
|
298
|
-
const altPath = resolveSessionTranscriptPath(sessionId, agentId);
|
|
299
|
-
if (existsFile(altPath)) {
|
|
300
|
-
// Arquivo existe em path alternativo - atualizar entry se necessário
|
|
301
|
-
return false;
|
|
302
|
-
}
|
|
303
|
-
// Arquivo realmente não existe em nenhum path
|
|
304
|
-
return true;
|
|
305
|
-
}
|
|
306
|
-
return false;
|
|
294
|
+
return !existsFile(transcriptPath);
|
|
307
295
|
});
|
|
308
296
|
if (missing.length > 0) {
|
|
309
297
|
warnings.push(`- ${missing.length}/${recent.length} recent sessions are missing transcripts. Check for deleted session files or split state dirs.`);
|
|
@@ -3,7 +3,7 @@ import { isTruthyEnvValue } from "../infra/env.js";
|
|
|
3
3
|
import { runCommandWithTimeout } from "../process/exec.js";
|
|
4
4
|
import { note } from "../terminal/note.js";
|
|
5
5
|
import { formatCliCommand } from "../cli/command-format.js";
|
|
6
|
-
async function
|
|
6
|
+
async function detectPoolbotGitCheckout(root) {
|
|
7
7
|
const res = await runCommandWithTimeout(["git", "-C", root, "rev-parse", "--show-toplevel"], {
|
|
8
8
|
timeoutMs: 5000,
|
|
9
9
|
}).catch(() => null);
|
|
@@ -28,10 +28,10 @@ export async function maybeOfferUpdateBeforeDoctor(params) {
|
|
|
28
28
|
Boolean(process.stdin.isTTY);
|
|
29
29
|
if (!canOfferUpdate || !params.root)
|
|
30
30
|
return { updated: false };
|
|
31
|
-
const git = await
|
|
31
|
+
const git = await detectPoolbotGitCheckout(params.root);
|
|
32
32
|
if (git === "git") {
|
|
33
33
|
const shouldUpdate = await params.confirm({
|
|
34
|
-
message: "Update
|
|
34
|
+
message: "Update Poolbot from git before running doctor?",
|
|
35
35
|
initialValue: true,
|
|
36
36
|
});
|
|
37
37
|
if (!shouldUpdate)
|
package/dist/commands/doctor.js
CHANGED
|
@@ -41,7 +41,7 @@ function resolveMode(cfg) {
|
|
|
41
41
|
export async function doctorCommand(runtime = defaultRuntime, options = {}) {
|
|
42
42
|
const prompter = createDoctorPrompter({ runtime, options });
|
|
43
43
|
printWizardHeader(runtime);
|
|
44
|
-
intro("
|
|
44
|
+
intro("Poolbot doctor");
|
|
45
45
|
const root = await resolvePoolBotPackageRoot({
|
|
46
46
|
moduleUrl: import.meta.url,
|
|
47
47
|
argv1: process.argv[1],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
|
|
4
4
|
import { ensureAuthProfileStore, listProfilesForProvider, resolveAuthProfileDisplayLabel, resolveAuthProfileOrder, } from "../../agents/auth-profiles.js";
|
|
5
5
|
import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js";
|
|
6
6
|
import { describeFailoverError } from "../../agents/failover-error.js";
|
|
@@ -250,7 +250,7 @@ async function runTargetsWithConcurrency(params) {
|
|
|
250
250
|
const { cfg, targets, timeoutMs, maxTokens, onProgress } = params;
|
|
251
251
|
const concurrency = Math.max(1, Math.min(targets.length || 1, params.concurrency));
|
|
252
252
|
const agentId = resolveDefaultAgentId(cfg);
|
|
253
|
-
const agentDir =
|
|
253
|
+
const agentDir = resolvePoolbotAgentDir();
|
|
254
254
|
const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId) ?? resolveDefaultAgentWorkspaceDir();
|
|
255
255
|
const sessionDir = resolveSessionTranscriptsDirForAgent(agentId);
|
|
256
256
|
await fs.mkdir(workspaceDir, { recursive: true });
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { discoverAuthStorage, discoverModels } from "@mariozechner/pi-coding-agent";
|
|
2
|
-
import {
|
|
2
|
+
import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
|
|
3
3
|
import { listProfilesForProvider } from "../../agents/auth-profiles.js";
|
|
4
4
|
import { getCustomProviderApiKey, resolveAwsSdkEnvVarName, resolveEnvApiKey, } from "../../agents/model-auth.js";
|
|
5
|
-
import {
|
|
5
|
+
import { ensurePoolbotModelsJson } from "../../agents/models-config.js";
|
|
6
6
|
import { modelKey } from "./shared.js";
|
|
7
7
|
const isLocalBaseUrl = (baseUrl) => {
|
|
8
8
|
try {
|
|
@@ -30,8 +30,8 @@ const hasAuthForProvider = (provider, cfg, authStore) => {
|
|
|
30
30
|
return false;
|
|
31
31
|
};
|
|
32
32
|
export async function loadModelRegistry(cfg) {
|
|
33
|
-
await
|
|
34
|
-
const agentDir =
|
|
33
|
+
await ensurePoolbotModelsJson(cfg);
|
|
34
|
+
const agentDir = resolvePoolbotAgentDir();
|
|
35
35
|
const authStorage = discoverAuthStorage(agentDir);
|
|
36
36
|
const registry = discoverModels(authStorage, agentDir);
|
|
37
37
|
const models = registry.getAll();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import {
|
|
2
|
+
import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
|
|
3
3
|
import { buildAuthHealthSummary, DEFAULT_OAUTH_WARN_MS, formatRemainingShort, } from "../../agents/auth-health.js";
|
|
4
4
|
import { ensureAuthProfileStore, resolveAuthStorePathForDisplay, resolveProfileUnusableUntilForDisplay, } from "../../agents/auth-profiles.js";
|
|
5
5
|
import { resolveEnvApiKey } from "../../agents/model-auth.js";
|
|
@@ -42,7 +42,7 @@ export async function modelsStatusCommand(opts, runtime) {
|
|
|
42
42
|
return acc;
|
|
43
43
|
}, {});
|
|
44
44
|
const allowed = Object.keys(cfg.agents?.defaults?.models ?? {});
|
|
45
|
-
const agentDir =
|
|
45
|
+
const agentDir = resolvePoolbotAgentDir();
|
|
46
46
|
const store = ensureAuthProfileStore();
|
|
47
47
|
const modelsPath = path.join(agentDir, "models.json");
|
|
48
48
|
const providersFromStore = new Set(Object.values(store.profiles)
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { buildCloudflareAiGatewayModelDefinition, resolveCloudflareAiGatewayBaseUrl, } from "../agents/cloudflare-ai-gateway.js";
|
|
2
|
+
import { buildQianfanProvider, buildXiaomiProvider, QIANFAN_DEFAULT_MODEL_ID, XIAOMI_DEFAULT_MODEL_ID, } from "../agents/models-config.providers.js";
|
|
1
3
|
import { buildSyntheticModelDefinition, SYNTHETIC_BASE_URL, SYNTHETIC_DEFAULT_MODEL_REF, SYNTHETIC_MODEL_CATALOG, } from "../agents/synthetic-models.js";
|
|
4
|
+
import { buildTogetherModelDefinition, TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG, } from "../agents/together-models.js";
|
|
2
5
|
import { buildVeniceModelDefinition, VENICE_BASE_URL, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_CATALOG, } from "../agents/venice-models.js";
|
|
3
|
-
import { OPENROUTER_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, } from "./onboard-auth.credentials.js";
|
|
4
|
-
import {
|
|
6
|
+
import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, TOGETHER_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, XIAOMI_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, XAI_DEFAULT_MODEL_REF, } from "./onboard-auth.credentials.js";
|
|
7
|
+
import { buildMoonshotModelDefinition, buildXaiModelDefinition, QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_REF, KIMI_CODING_MODEL_REF, MOONSHOT_BASE_URL, MOONSHOT_CN_BASE_URL, MOONSHOT_DEFAULT_MODEL_ID, MOONSHOT_DEFAULT_MODEL_REF, XAI_BASE_URL, XAI_DEFAULT_MODEL_ID, } from "./onboard-auth.models.js";
|
|
5
8
|
export function applyZaiConfig(cfg) {
|
|
6
9
|
const models = { ...cfg.agents?.defaults?.models };
|
|
7
10
|
models[ZAI_DEFAULT_MODEL_REF] = {
|
|
@@ -62,6 +65,61 @@ export function applyVercelAiGatewayProviderConfig(cfg) {
|
|
|
62
65
|
},
|
|
63
66
|
};
|
|
64
67
|
}
|
|
68
|
+
export function applyCloudflareAiGatewayProviderConfig(cfg, params) {
|
|
69
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
70
|
+
models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF] = {
|
|
71
|
+
...models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF],
|
|
72
|
+
alias: models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF]?.alias ?? "Cloudflare AI Gateway",
|
|
73
|
+
};
|
|
74
|
+
const providers = { ...cfg.models?.providers };
|
|
75
|
+
const existingProvider = providers["cloudflare-ai-gateway"];
|
|
76
|
+
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
77
|
+
const defaultModel = buildCloudflareAiGatewayModelDefinition();
|
|
78
|
+
const hasDefaultModel = existingModels.some((model) => model.id === defaultModel.id);
|
|
79
|
+
const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
|
|
80
|
+
const baseUrl = params?.accountId && params?.gatewayId
|
|
81
|
+
? resolveCloudflareAiGatewayBaseUrl({
|
|
82
|
+
accountId: params.accountId,
|
|
83
|
+
gatewayId: params.gatewayId,
|
|
84
|
+
})
|
|
85
|
+
: existingProvider?.baseUrl;
|
|
86
|
+
if (!baseUrl) {
|
|
87
|
+
return {
|
|
88
|
+
...cfg,
|
|
89
|
+
agents: {
|
|
90
|
+
...cfg.agents,
|
|
91
|
+
defaults: {
|
|
92
|
+
...cfg.agents?.defaults,
|
|
93
|
+
models,
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
|
|
99
|
+
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
100
|
+
const normalizedApiKey = resolvedApiKey?.trim();
|
|
101
|
+
providers["cloudflare-ai-gateway"] = {
|
|
102
|
+
...existingProviderRest,
|
|
103
|
+
baseUrl,
|
|
104
|
+
api: "anthropic-messages",
|
|
105
|
+
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
106
|
+
models: mergedModels.length > 0 ? mergedModels : [defaultModel],
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
...cfg,
|
|
110
|
+
agents: {
|
|
111
|
+
...cfg.agents,
|
|
112
|
+
defaults: {
|
|
113
|
+
...cfg.agents?.defaults,
|
|
114
|
+
models,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
models: {
|
|
118
|
+
mode: cfg.models?.mode ?? "merge",
|
|
119
|
+
providers,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
65
123
|
export function applyVercelAiGatewayConfig(cfg) {
|
|
66
124
|
const next = applyVercelAiGatewayProviderConfig(cfg);
|
|
67
125
|
const existingModel = next.agents?.defaults?.model;
|
|
@@ -83,6 +141,27 @@ export function applyVercelAiGatewayConfig(cfg) {
|
|
|
83
141
|
},
|
|
84
142
|
};
|
|
85
143
|
}
|
|
144
|
+
export function applyCloudflareAiGatewayConfig(cfg, params) {
|
|
145
|
+
const next = applyCloudflareAiGatewayProviderConfig(cfg, params);
|
|
146
|
+
const existingModel = next.agents?.defaults?.model;
|
|
147
|
+
return {
|
|
148
|
+
...next,
|
|
149
|
+
agents: {
|
|
150
|
+
...next.agents,
|
|
151
|
+
defaults: {
|
|
152
|
+
...next.agents?.defaults,
|
|
153
|
+
model: {
|
|
154
|
+
...(existingModel && "fallbacks" in existingModel
|
|
155
|
+
? {
|
|
156
|
+
fallbacks: existingModel.fallbacks,
|
|
157
|
+
}
|
|
158
|
+
: undefined),
|
|
159
|
+
primary: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
86
165
|
export function applyOpenrouterConfig(cfg) {
|
|
87
166
|
const next = applyOpenrouterProviderConfig(cfg);
|
|
88
167
|
const existingModel = next.agents?.defaults?.model;
|
|
@@ -105,10 +184,16 @@ export function applyOpenrouterConfig(cfg) {
|
|
|
105
184
|
};
|
|
106
185
|
}
|
|
107
186
|
export function applyMoonshotProviderConfig(cfg) {
|
|
187
|
+
return applyMoonshotProviderConfigWithBaseUrl(cfg, MOONSHOT_BASE_URL);
|
|
188
|
+
}
|
|
189
|
+
export function applyMoonshotProviderConfigCn(cfg) {
|
|
190
|
+
return applyMoonshotProviderConfigWithBaseUrl(cfg, MOONSHOT_CN_BASE_URL);
|
|
191
|
+
}
|
|
192
|
+
function applyMoonshotProviderConfigWithBaseUrl(cfg, baseUrl) {
|
|
108
193
|
const models = { ...cfg.agents?.defaults?.models };
|
|
109
194
|
models[MOONSHOT_DEFAULT_MODEL_REF] = {
|
|
110
195
|
...models[MOONSHOT_DEFAULT_MODEL_REF],
|
|
111
|
-
alias: models[MOONSHOT_DEFAULT_MODEL_REF]?.alias ?? "Kimi
|
|
196
|
+
alias: models[MOONSHOT_DEFAULT_MODEL_REF]?.alias ?? "Kimi",
|
|
112
197
|
};
|
|
113
198
|
const providers = { ...cfg.models?.providers };
|
|
114
199
|
const existingProvider = providers.moonshot;
|
|
@@ -121,7 +206,7 @@ export function applyMoonshotProviderConfig(cfg) {
|
|
|
121
206
|
const normalizedApiKey = resolvedApiKey?.trim();
|
|
122
207
|
providers.moonshot = {
|
|
123
208
|
...existingProviderRest,
|
|
124
|
-
baseUrl
|
|
209
|
+
baseUrl,
|
|
125
210
|
api: "openai-completions",
|
|
126
211
|
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
127
212
|
models: mergedModels.length > 0 ? mergedModels : [defaultModel],
|
|
@@ -162,27 +247,32 @@ export function applyMoonshotConfig(cfg) {
|
|
|
162
247
|
},
|
|
163
248
|
};
|
|
164
249
|
}
|
|
250
|
+
export function applyMoonshotConfigCn(cfg) {
|
|
251
|
+
const next = applyMoonshotProviderConfigCn(cfg);
|
|
252
|
+
const existingModel = next.agents?.defaults?.model;
|
|
253
|
+
return {
|
|
254
|
+
...next,
|
|
255
|
+
agents: {
|
|
256
|
+
...next.agents,
|
|
257
|
+
defaults: {
|
|
258
|
+
...next.agents?.defaults,
|
|
259
|
+
model: {
|
|
260
|
+
...(existingModel && "fallbacks" in existingModel
|
|
261
|
+
? {
|
|
262
|
+
fallbacks: existingModel.fallbacks,
|
|
263
|
+
}
|
|
264
|
+
: undefined),
|
|
265
|
+
primary: MOONSHOT_DEFAULT_MODEL_REF,
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
}
|
|
165
271
|
export function applyKimiCodeProviderConfig(cfg) {
|
|
166
272
|
const models = { ...cfg.agents?.defaults?.models };
|
|
167
|
-
models[
|
|
168
|
-
...models[
|
|
169
|
-
alias: models[
|
|
170
|
-
};
|
|
171
|
-
const providers = { ...cfg.models?.providers };
|
|
172
|
-
const existingProvider = providers["kimi-code"];
|
|
173
|
-
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
174
|
-
const defaultModel = buildKimiCodeModelDefinition();
|
|
175
|
-
const hasDefaultModel = existingModels.some((model) => model.id === KIMI_CODE_MODEL_ID);
|
|
176
|
-
const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
|
|
177
|
-
const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
|
|
178
|
-
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
179
|
-
const normalizedApiKey = resolvedApiKey?.trim();
|
|
180
|
-
providers["kimi-code"] = {
|
|
181
|
-
...existingProviderRest,
|
|
182
|
-
baseUrl: KIMI_CODE_BASE_URL,
|
|
183
|
-
api: "openai-completions",
|
|
184
|
-
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
185
|
-
models: mergedModels.length > 0 ? mergedModels : [defaultModel],
|
|
273
|
+
models[KIMI_CODING_MODEL_REF] = {
|
|
274
|
+
...models[KIMI_CODING_MODEL_REF],
|
|
275
|
+
alias: models[KIMI_CODING_MODEL_REF]?.alias ?? "Kimi K2.5",
|
|
186
276
|
};
|
|
187
277
|
return {
|
|
188
278
|
...cfg,
|
|
@@ -193,10 +283,6 @@ export function applyKimiCodeProviderConfig(cfg) {
|
|
|
193
283
|
models,
|
|
194
284
|
},
|
|
195
285
|
},
|
|
196
|
-
models: {
|
|
197
|
-
mode: cfg.models?.mode ?? "merge",
|
|
198
|
-
providers,
|
|
199
|
-
},
|
|
200
286
|
};
|
|
201
287
|
}
|
|
202
288
|
export function applyKimiCodeConfig(cfg) {
|
|
@@ -214,7 +300,7 @@ export function applyKimiCodeConfig(cfg) {
|
|
|
214
300
|
fallbacks: existingModel.fallbacks,
|
|
215
301
|
}
|
|
216
302
|
: undefined),
|
|
217
|
-
primary:
|
|
303
|
+
primary: KIMI_CODING_MODEL_REF,
|
|
218
304
|
},
|
|
219
305
|
},
|
|
220
306
|
},
|
|
@@ -280,6 +366,69 @@ export function applySyntheticConfig(cfg) {
|
|
|
280
366
|
},
|
|
281
367
|
};
|
|
282
368
|
}
|
|
369
|
+
export function applyXiaomiProviderConfig(cfg) {
|
|
370
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
371
|
+
models[XIAOMI_DEFAULT_MODEL_REF] = {
|
|
372
|
+
...models[XIAOMI_DEFAULT_MODEL_REF],
|
|
373
|
+
alias: models[XIAOMI_DEFAULT_MODEL_REF]?.alias ?? "Xiaomi",
|
|
374
|
+
};
|
|
375
|
+
const providers = { ...cfg.models?.providers };
|
|
376
|
+
const existingProvider = providers.xiaomi;
|
|
377
|
+
const defaultProvider = buildXiaomiProvider();
|
|
378
|
+
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
379
|
+
const defaultModels = defaultProvider.models ?? [];
|
|
380
|
+
const hasDefaultModel = existingModels.some((model) => model.id === XIAOMI_DEFAULT_MODEL_ID);
|
|
381
|
+
const mergedModels = existingModels.length > 0
|
|
382
|
+
? hasDefaultModel
|
|
383
|
+
? existingModels
|
|
384
|
+
: [...existingModels, ...defaultModels]
|
|
385
|
+
: defaultModels;
|
|
386
|
+
const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
|
|
387
|
+
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
388
|
+
const normalizedApiKey = resolvedApiKey?.trim();
|
|
389
|
+
providers.xiaomi = {
|
|
390
|
+
...existingProviderRest,
|
|
391
|
+
baseUrl: defaultProvider.baseUrl,
|
|
392
|
+
api: defaultProvider.api,
|
|
393
|
+
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
394
|
+
models: mergedModels.length > 0 ? mergedModels : defaultProvider.models,
|
|
395
|
+
};
|
|
396
|
+
return {
|
|
397
|
+
...cfg,
|
|
398
|
+
agents: {
|
|
399
|
+
...cfg.agents,
|
|
400
|
+
defaults: {
|
|
401
|
+
...cfg.agents?.defaults,
|
|
402
|
+
models,
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
models: {
|
|
406
|
+
mode: cfg.models?.mode ?? "merge",
|
|
407
|
+
providers,
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
export function applyXiaomiConfig(cfg) {
|
|
412
|
+
const next = applyXiaomiProviderConfig(cfg);
|
|
413
|
+
const existingModel = next.agents?.defaults?.model;
|
|
414
|
+
return {
|
|
415
|
+
...next,
|
|
416
|
+
agents: {
|
|
417
|
+
...next.agents,
|
|
418
|
+
defaults: {
|
|
419
|
+
...next.agents?.defaults,
|
|
420
|
+
model: {
|
|
421
|
+
...(existingModel && "fallbacks" in existingModel
|
|
422
|
+
? {
|
|
423
|
+
fallbacks: existingModel.fallbacks,
|
|
424
|
+
}
|
|
425
|
+
: undefined),
|
|
426
|
+
primary: XIAOMI_DEFAULT_MODEL_REF,
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
};
|
|
431
|
+
}
|
|
283
432
|
/**
|
|
284
433
|
* Apply Venice provider configuration without changing the default model.
|
|
285
434
|
* Registers Venice models and sets up the provider, but preserves existing model selection.
|
|
@@ -348,6 +497,132 @@ export function applyVeniceConfig(cfg) {
|
|
|
348
497
|
},
|
|
349
498
|
};
|
|
350
499
|
}
|
|
500
|
+
/**
|
|
501
|
+
* Apply Together provider configuration without changing the default model.
|
|
502
|
+
* Registers Together models and sets up the provider, but preserves existing model selection.
|
|
503
|
+
*/
|
|
504
|
+
export function applyTogetherProviderConfig(cfg) {
|
|
505
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
506
|
+
models[TOGETHER_DEFAULT_MODEL_REF] = {
|
|
507
|
+
...models[TOGETHER_DEFAULT_MODEL_REF],
|
|
508
|
+
alias: models[TOGETHER_DEFAULT_MODEL_REF]?.alias ?? "Together AI",
|
|
509
|
+
};
|
|
510
|
+
const providers = { ...cfg.models?.providers };
|
|
511
|
+
const existingProvider = providers.together;
|
|
512
|
+
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
513
|
+
const togetherModels = TOGETHER_MODEL_CATALOG.map(buildTogetherModelDefinition);
|
|
514
|
+
const mergedModels = [
|
|
515
|
+
...existingModels,
|
|
516
|
+
...togetherModels.filter((model) => !existingModels.some((existing) => existing.id === model.id)),
|
|
517
|
+
];
|
|
518
|
+
const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
|
|
519
|
+
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
520
|
+
const normalizedApiKey = resolvedApiKey?.trim();
|
|
521
|
+
providers.together = {
|
|
522
|
+
...existingProviderRest,
|
|
523
|
+
baseUrl: TOGETHER_BASE_URL,
|
|
524
|
+
api: "openai-completions",
|
|
525
|
+
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
526
|
+
models: mergedModels.length > 0 ? mergedModels : togetherModels,
|
|
527
|
+
};
|
|
528
|
+
return {
|
|
529
|
+
...cfg,
|
|
530
|
+
agents: {
|
|
531
|
+
...cfg.agents,
|
|
532
|
+
defaults: {
|
|
533
|
+
...cfg.agents?.defaults,
|
|
534
|
+
models,
|
|
535
|
+
},
|
|
536
|
+
},
|
|
537
|
+
models: {
|
|
538
|
+
mode: cfg.models?.mode ?? "merge",
|
|
539
|
+
providers,
|
|
540
|
+
},
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Apply Together provider configuration AND set Together as the default model.
|
|
545
|
+
* Use this when Together is the primary provider choice during onboarding.
|
|
546
|
+
*/
|
|
547
|
+
export function applyTogetherConfig(cfg) {
|
|
548
|
+
const next = applyTogetherProviderConfig(cfg);
|
|
549
|
+
const existingModel = next.agents?.defaults?.model;
|
|
550
|
+
return {
|
|
551
|
+
...next,
|
|
552
|
+
agents: {
|
|
553
|
+
...next.agents,
|
|
554
|
+
defaults: {
|
|
555
|
+
...next.agents?.defaults,
|
|
556
|
+
model: {
|
|
557
|
+
...(existingModel && "fallbacks" in existingModel
|
|
558
|
+
? {
|
|
559
|
+
fallbacks: existingModel.fallbacks,
|
|
560
|
+
}
|
|
561
|
+
: undefined),
|
|
562
|
+
primary: TOGETHER_DEFAULT_MODEL_REF,
|
|
563
|
+
},
|
|
564
|
+
},
|
|
565
|
+
},
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
export function applyXaiProviderConfig(cfg) {
|
|
569
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
570
|
+
models[XAI_DEFAULT_MODEL_REF] = {
|
|
571
|
+
...models[XAI_DEFAULT_MODEL_REF],
|
|
572
|
+
alias: models[XAI_DEFAULT_MODEL_REF]?.alias ?? "Grok",
|
|
573
|
+
};
|
|
574
|
+
const providers = { ...cfg.models?.providers };
|
|
575
|
+
const existingProvider = providers.xai;
|
|
576
|
+
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
577
|
+
const defaultModel = buildXaiModelDefinition();
|
|
578
|
+
const hasDefaultModel = existingModels.some((model) => model.id === XAI_DEFAULT_MODEL_ID);
|
|
579
|
+
const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
|
|
580
|
+
const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
|
|
581
|
+
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
582
|
+
const normalizedApiKey = resolvedApiKey?.trim();
|
|
583
|
+
providers.xai = {
|
|
584
|
+
...existingProviderRest,
|
|
585
|
+
baseUrl: XAI_BASE_URL,
|
|
586
|
+
api: "openai-completions",
|
|
587
|
+
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
588
|
+
models: mergedModels.length > 0 ? mergedModels : [defaultModel],
|
|
589
|
+
};
|
|
590
|
+
return {
|
|
591
|
+
...cfg,
|
|
592
|
+
agents: {
|
|
593
|
+
...cfg.agents,
|
|
594
|
+
defaults: {
|
|
595
|
+
...cfg.agents?.defaults,
|
|
596
|
+
models,
|
|
597
|
+
},
|
|
598
|
+
},
|
|
599
|
+
models: {
|
|
600
|
+
mode: cfg.models?.mode ?? "merge",
|
|
601
|
+
providers,
|
|
602
|
+
},
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
export function applyXaiConfig(cfg) {
|
|
606
|
+
const next = applyXaiProviderConfig(cfg);
|
|
607
|
+
const existingModel = next.agents?.defaults?.model;
|
|
608
|
+
return {
|
|
609
|
+
...next,
|
|
610
|
+
agents: {
|
|
611
|
+
...next.agents,
|
|
612
|
+
defaults: {
|
|
613
|
+
...next.agents?.defaults,
|
|
614
|
+
model: {
|
|
615
|
+
...(existingModel && "fallbacks" in existingModel
|
|
616
|
+
? {
|
|
617
|
+
fallbacks: existingModel.fallbacks,
|
|
618
|
+
}
|
|
619
|
+
: undefined),
|
|
620
|
+
primary: XAI_DEFAULT_MODEL_REF,
|
|
621
|
+
},
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
};
|
|
625
|
+
}
|
|
351
626
|
export function applyAuthProfileConfig(cfg, params) {
|
|
352
627
|
const profiles = {
|
|
353
628
|
...cfg.auth?.profiles,
|
|
@@ -384,3 +659,66 @@ export function applyAuthProfileConfig(cfg, params) {
|
|
|
384
659
|
},
|
|
385
660
|
};
|
|
386
661
|
}
|
|
662
|
+
export function applyQianfanProviderConfig(cfg) {
|
|
663
|
+
const models = { ...cfg.agents?.defaults?.models };
|
|
664
|
+
models[QIANFAN_DEFAULT_MODEL_REF] = {
|
|
665
|
+
...models[QIANFAN_DEFAULT_MODEL_REF],
|
|
666
|
+
alias: models[QIANFAN_DEFAULT_MODEL_REF]?.alias ?? "QIANFAN",
|
|
667
|
+
};
|
|
668
|
+
const providers = { ...cfg.models?.providers };
|
|
669
|
+
const existingProvider = providers.qianfan;
|
|
670
|
+
const defaultProvider = buildQianfanProvider();
|
|
671
|
+
const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
|
|
672
|
+
const defaultModels = defaultProvider.models ?? [];
|
|
673
|
+
const hasDefaultModel = existingModels.some((model) => model.id === QIANFAN_DEFAULT_MODEL_ID);
|
|
674
|
+
const mergedModels = existingModels.length > 0
|
|
675
|
+
? hasDefaultModel
|
|
676
|
+
? existingModels
|
|
677
|
+
: [...existingModels, ...defaultModels]
|
|
678
|
+
: defaultModels;
|
|
679
|
+
const { apiKey: existingApiKey, baseUrl: existingBaseUrl, api: existingApi, ...existingProviderRest } = (existingProvider ?? {});
|
|
680
|
+
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
681
|
+
const normalizedApiKey = resolvedApiKey?.trim();
|
|
682
|
+
providers.qianfan = {
|
|
683
|
+
...existingProviderRest,
|
|
684
|
+
baseUrl: existingBaseUrl ?? QIANFAN_BASE_URL,
|
|
685
|
+
api: existingApi ?? "openai-completions",
|
|
686
|
+
...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
|
|
687
|
+
models: mergedModels.length > 0 ? mergedModels : defaultProvider.models,
|
|
688
|
+
};
|
|
689
|
+
return {
|
|
690
|
+
...cfg,
|
|
691
|
+
agents: {
|
|
692
|
+
...cfg.agents,
|
|
693
|
+
defaults: {
|
|
694
|
+
...cfg.agents?.defaults,
|
|
695
|
+
models,
|
|
696
|
+
},
|
|
697
|
+
},
|
|
698
|
+
models: {
|
|
699
|
+
mode: cfg.models?.mode ?? "merge",
|
|
700
|
+
providers,
|
|
701
|
+
},
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
export function applyQianfanConfig(cfg) {
|
|
705
|
+
const next = applyQianfanProviderConfig(cfg);
|
|
706
|
+
const existingModel = next.agents?.defaults?.model;
|
|
707
|
+
return {
|
|
708
|
+
...next,
|
|
709
|
+
agents: {
|
|
710
|
+
...next.agents,
|
|
711
|
+
defaults: {
|
|
712
|
+
...next.agents?.defaults,
|
|
713
|
+
model: {
|
|
714
|
+
...(existingModel && "fallbacks" in existingModel
|
|
715
|
+
? {
|
|
716
|
+
fallbacks: existingModel.fallbacks,
|
|
717
|
+
}
|
|
718
|
+
: undefined),
|
|
719
|
+
primary: QIANFAN_DEFAULT_MODEL_REF,
|
|
720
|
+
},
|
|
721
|
+
},
|
|
722
|
+
},
|
|
723
|
+
};
|
|
724
|
+
}
|