@kenkaiiii/gg-boss 4.13.2 → 4.14.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.
@@ -65898,6 +65898,7 @@ var PROVIDER_DISPLAY = {
65898
65898
  moonshot: "Moonshot",
65899
65899
  deepseek: "DeepSeek",
65900
65900
  openrouter: "OpenRouter",
65901
+ sakana: "Sakana",
65901
65902
  xiaomi: "Xiaomi (MiMo)",
65902
65903
  minimax: "MiniMax"
65903
65904
  };
@@ -66789,8 +66790,12 @@ function toOpenAIToolChoice(choice) {
66789
66790
  if (choice === "required") return "required";
66790
66791
  return { type: "function", function: { name: choice.name } };
66791
66792
  }
66792
- function toOpenAIReasoningEffort(level, _model) {
66793
- return level === "max" ? "xhigh" : level;
66793
+ function toOpenAIReasoningEffort(level, model) {
66794
+ const effort = level === "max" ? "xhigh" : level;
66795
+ if (model.startsWith("fugu") && (effort === "low" || effort === "medium")) {
66796
+ return "high";
66797
+ }
66798
+ return effort;
66794
66799
  }
66795
66800
  function normalizeAnthropicStopReason(reason) {
66796
66801
  switch (reason) {
@@ -68913,6 +68918,16 @@ providerRegistry.register("openrouter", {
68913
68918
  baseUrl: options.baseUrl ?? "https://openrouter.ai/api/v1"
68914
68919
  })
68915
68920
  });
68921
+ providerRegistry.register("sakana", {
68922
+ // Sakana Fugu is a multi-agent system exposed as a standard LLM through the
68923
+ // OpenAI-compatible Sakana API. We ride the Chat Completions transport (the
68924
+ // Responses API is also offered). Fugu models only accept "high"/"xhigh"
68925
+ // reasoning effort — clamped centrally in toOpenAIReasoningEffort.
68926
+ stream: (options) => streamOpenAI({
68927
+ ...options,
68928
+ baseUrl: options.baseUrl ?? "https://api.sakana.ai/v1"
68929
+ })
68930
+ });
68916
68931
  providerRegistry.register("minimax", {
68917
68932
  stream: (options) => streamAnthropic({
68918
68933
  ...options,
@@ -69245,6 +69260,9 @@ async function* agentLoop(messages, options) {
69245
69260
  const STREAM_THINKING_IDLE_TIMEOUT_MS = 3e5;
69246
69261
  const STREAM_THINKING_HARD_TIMEOUT_MS = 6e5;
69247
69262
  const NON_STREAMING_HARD_TIMEOUT_MS = 3e5;
69263
+ const isSakana = options.provider === "sakana";
69264
+ const firstEventTimeoutMs = isSakana ? STREAM_THINKING_IDLE_TIMEOUT_MS : STREAM_FIRST_EVENT_TIMEOUT_MS;
69265
+ const initialHardTimeoutMs = isSakana ? STREAM_THINKING_HARD_TIMEOUT_MS : STREAM_HARD_TIMEOUT_MS;
69248
69266
  const MAX_TOOLCALL_DELTA_CHARS = 1e6;
69249
69267
  const MAX_TOOLCALL_DELTA_EVENTS = 2e4;
69250
69268
  try {
@@ -69316,7 +69334,7 @@ async function* agentLoop(messages, options) {
69316
69334
  const resetIdleTimer = () => {
69317
69335
  if (useNonStreamingFallback) return;
69318
69336
  if (idleTimer) clearTimeout(idleTimer);
69319
- const timeoutMs = hasReceivedEvent ? STREAM_IDLE_TIMEOUT_MS : hasReceivedThinking ? STREAM_THINKING_IDLE_TIMEOUT_MS : STREAM_FIRST_EVENT_TIMEOUT_MS;
69337
+ const timeoutMs = hasReceivedEvent ? STREAM_IDLE_TIMEOUT_MS : hasReceivedThinking ? STREAM_THINKING_IDLE_TIMEOUT_MS : firstEventTimeoutMs;
69320
69338
  idleTimer = setTimeout(() => {
69321
69339
  diag("idle_timeout_fired", {
69322
69340
  events: streamEventCount,
@@ -69330,7 +69348,7 @@ async function* agentLoop(messages, options) {
69330
69348
  streamController.abort();
69331
69349
  }, timeoutMs);
69332
69350
  };
69333
- let hardTimeoutMs = useNonStreamingFallback ? NON_STREAMING_HARD_TIMEOUT_MS : STREAM_HARD_TIMEOUT_MS;
69351
+ let hardTimeoutMs = useNonStreamingFallback ? NON_STREAMING_HARD_TIMEOUT_MS : initialHardTimeoutMs;
69334
69352
  hardTimer = setTimeout(() => {
69335
69353
  diag("hard_timeout_fired", {
69336
69354
  events: typeof streamEventCount !== "undefined" ? streamEventCount : 0,
@@ -70334,7 +70352,7 @@ var Agent = class {
70334
70352
  }
70335
70353
  };
70336
70354
 
70337
- // ../gg-core/dist/chunk-RVK5N64M.js
70355
+ // ../gg-core/dist/chunk-7GQQLIPG.js
70338
70356
  init_esm_shims();
70339
70357
  var MODELS = [
70340
70358
  // ── Anthropic ──────────────────────────────────────────
@@ -70456,6 +70474,36 @@ var MODELS = [
70456
70474
  costTier: "high",
70457
70475
  maxThinkingLevel: "xhigh"
70458
70476
  },
70477
+ // ── Sakana (Fugu) ──────────────────────────────────────
70478
+ // Sakana Fugu is a multi-agent system surfaced as a standard LLM via the
70479
+ // OpenAI-compatible Sakana API (https://api.sakana.ai/v1). Both models take
70480
+ // text + image input and only accept "high"/"xhigh" reasoning effort, so the
70481
+ // top tier is `xhigh`. `fugu` routes across all providers; `fugu-ultra` is
70482
+ // the heavier tier (may need larger client timeouts on complex tasks).
70483
+ {
70484
+ id: "fugu",
70485
+ name: "Fugu",
70486
+ provider: "sakana",
70487
+ contextWindow: 1e6,
70488
+ maxOutputTokens: 128e3,
70489
+ supportsThinking: true,
70490
+ supportsImages: true,
70491
+ supportsVideo: false,
70492
+ costTier: "medium",
70493
+ maxThinkingLevel: "xhigh"
70494
+ },
70495
+ {
70496
+ id: "fugu-ultra",
70497
+ name: "Fugu Ultra",
70498
+ provider: "sakana",
70499
+ contextWindow: 1e6,
70500
+ maxOutputTokens: 128e3,
70501
+ supportsThinking: true,
70502
+ supportsImages: true,
70503
+ supportsVideo: false,
70504
+ costTier: "high",
70505
+ maxThinkingLevel: "xhigh"
70506
+ },
70459
70507
  // ── Gemini ─────────────────────────────────────────────
70460
70508
  {
70461
70509
  id: "gemini-3.1-flash-lite-preview",
@@ -70654,6 +70702,7 @@ function getDefaultModel(provider) {
70654
70702
  if (provider === "minimax") return MODELS.find((m) => m.id === "MiniMax-M3");
70655
70703
  if (provider === "deepseek") return MODELS.find((m) => m.id === "deepseek-v4-pro");
70656
70704
  if (provider === "openrouter") return MODELS.find((m) => m.id === "qwen/qwen3.6-plus");
70705
+ if (provider === "sakana") return MODELS.find((m) => m.id === "fugu");
70657
70706
  return MODELS.find((m) => m.id === "claude-sonnet-4-6");
70658
70707
  }
70659
70708
  function usesOpenAICodexTransport(options) {
@@ -70725,6 +70774,7 @@ import { spawn } from "child_process";
70725
70774
  import fs5 from "fs";
70726
70775
  import path42 from "path";
70727
70776
  var OPENAI_GPT_THINKING_LEVELS = ["medium", "high", "xhigh"];
70777
+ var SAKANA_THINKING_LEVELS = ["high", "xhigh"];
70728
70778
  var ANTHROPIC_OPUS_48_47_THINKING_LEVELS = [
70729
70779
  "low",
70730
70780
  "medium",
@@ -70741,6 +70791,9 @@ var ANTHROPIC_ADAPTIVE_THINKING_LEVELS = [
70741
70791
  function isOpenAIGptModel(provider, model) {
70742
70792
  return provider === "openai" && model.startsWith("gpt-");
70743
70793
  }
70794
+ function isSakanaModel(provider) {
70795
+ return provider === "sakana";
70796
+ }
70744
70797
  function isAnthropicOpus48Or47Model(provider, model) {
70745
70798
  return provider === "anthropic" && /opus-4-8|opus-4-7/.test(model);
70746
70799
  }
@@ -70755,6 +70808,11 @@ function getSupportedThinkingLevels(provider, model) {
70755
70808
  if (maxIndex2 === -1) return ["low", "medium", "high"];
70756
70809
  return levels.slice(0, maxIndex2 + 1);
70757
70810
  }
70811
+ if (isSakanaModel(provider)) {
70812
+ const maxIndex2 = SAKANA_THINKING_LEVELS.indexOf(maxLevel);
70813
+ if (maxIndex2 === -1) return SAKANA_THINKING_LEVELS;
70814
+ return SAKANA_THINKING_LEVELS.slice(0, maxIndex2 + 1);
70815
+ }
70758
70816
  if (!isOpenAIGptModel(provider, model)) return [maxLevel];
70759
70817
  const maxIndex = OPENAI_GPT_THINKING_LEVELS.indexOf(maxLevel);
70760
70818
  if (maxIndex === -1) return ["medium"];
@@ -70765,7 +70823,7 @@ function isThinkingLevelSupported(provider, model, level) {
70765
70823
  }
70766
70824
  function getNextThinkingLevel(provider, model, current) {
70767
70825
  const supportedLevels = getSupportedThinkingLevels(provider, model);
70768
- const shouldCycleLevels = isOpenAIGptModel(provider, model) || isAnthropicAdaptiveModel(provider, model);
70826
+ const shouldCycleLevels = isOpenAIGptModel(provider, model) || isAnthropicAdaptiveModel(provider, model) || isSakanaModel(provider);
70769
70827
  if (!shouldCycleLevels) {
70770
70828
  return current ? void 0 : supportedLevels[0];
70771
70829
  }
@@ -71259,7 +71317,8 @@ var STATIC_API_KEY_PROVIDERS = /* @__PURE__ */ new Set([
71259
71317
  "xiaomi",
71260
71318
  "minimax",
71261
71319
  "deepseek",
71262
- "openrouter"
71320
+ "openrouter",
71321
+ "sakana"
71263
71322
  ]);
71264
71323
  var AuthStorage = class {
71265
71324
  data = {};
@@ -78928,7 +78987,8 @@ var SettingsSchema = external_exports.object({
78928
78987
  "minimax",
78929
78988
  "xiaomi",
78930
78989
  "deepseek",
78931
- "openrouter"
78990
+ "openrouter",
78991
+ "sakana"
78932
78992
  ]).default("anthropic"),
78933
78993
  defaultModel: external_exports.string().optional(),
78934
78994
  maxTokens: external_exports.number().int().min(256).default(16384),
@@ -120381,4 +120441,4 @@ react/cjs/react-jsx-runtime.development.js:
120381
120441
  * LICENSE file in the root directory of this source tree.
120382
120442
  *)
120383
120443
  */
120384
- //# sourceMappingURL=chunk-U5XLJ7ME.js.map
120444
+ //# sourceMappingURL=chunk-4AOKOUTE.js.map