@kenkaiiii/gg-core 5.69.0 → 5.71.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/dist/index.d.cts CHANGED
@@ -1,9 +1,17 @@
1
1
  import { ModelInfo } from './model-registry.cjs';
2
- export { ContextWindowOptions, DEFAULT_MAX_VIDEO_BYTES, MODELS, clearRuntimeModels, getAllModels, getAuthStorageKey, getAuthStorageKeys, getContextWindow, getDefaultModel, getDefaultThinkingLevel, getFastModel, getMaxThinkingLevel, getModel, getModelsForProvider, getSummaryModel, getToolResultCharLimit, getVideoByteLimit, registerRuntimeModels, usesOpenAICodexTransport } from './model-registry.cjs';
2
+ export { ContextWindowOptions, DEFAULT_MAX_VIDEO_BYTES, MODELS, clearRuntimeModels, getAllModels, getAuthStorageKey, getAuthStorageKeys, getContextWindow, getDefaultModel, getDefaultThinkingLevel, getMaxThinkingLevel, getModel, getModelsForProvider, getSummaryModel, getToolResultCharLimit, getVideoByteLimit, registerRuntimeModels, usesOpenAICodexTransport } from './model-registry.cjs';
3
3
  import { ThinkingLevel, Provider } from '@kenkaiiii/gg-ai';
4
4
  export { AppPaths, getAppPaths } from './paths.cjs';
5
5
 
6
6
  declare function getSupportedThinkingLevels(provider: Provider, model: string): readonly ThinkingLevel[];
7
+ /**
8
+ * The lowest effort `model` accepts — the first rung of its ladder, never
9
+ * "off". Used for background work (compaction summaries, `model: fast`
10
+ * agents) that runs on the active model but doesn't need deep reasoning.
11
+ * Undefined only when the model cannot reason at all, since sending it any
12
+ * effort would be rejected.
13
+ */
14
+ declare function getLowestThinkingLevel(provider: Provider, model: string): ThinkingLevel | undefined;
7
15
  declare function isThinkingLevelSupported(provider: Provider, model: string, level: ThinkingLevel): boolean;
8
16
  declare function getNextThinkingLevel(provider: Provider, model: string, current: ThinkingLevel | undefined): ThinkingLevel | undefined;
9
17
  /**
@@ -656,6 +664,8 @@ declare class TelegramBot {
656
664
  private allowedUserId;
657
665
  private offset;
658
666
  private running;
667
+ /** Aborts the in-flight long poll so stop() takes effect immediately. */
668
+ private pollAbort;
659
669
  private onMessage;
660
670
  private onVoiceMessage;
661
671
  private onCallback;
@@ -749,4 +759,4 @@ interface AutoUpdater {
749
759
  }
750
760
  declare function createAutoUpdater(config: AutoUpdateConfig): AutoUpdater;
751
761
 
752
- export { AuthStorage, type AutoUpdateConfig, type AutoUpdater, DEFAULT_LOCAL_ENDPOINTS, type DiscoverOptions, type DiscoveryResult, type DualAuthProvider, FALLBACK_CONTEXT_WINDOW, type InlineButton, LOCAL_API_KEY_PLACEHOLDER, LOCAL_AUTH_KEY_PREFIX, type LocalEndpoint, type LocalEndpointKind, type LocalEndpointProbe, type LocalModel, type LogLevel, MOONSHOT_OAUTH_KEY, ModelInfo, NotLoggedInError, type OAuthCredentials, type OAuthLoginCallbacks, PLAN_MODE_THINKING_CAP, type ProbeOptions, type ProgressCallback, SubscriptionUsageError, type SubscriptionUsageProvider, type SubscriptionUsageSnapshot, type SubscriptionUsageWindow, TelegramBot, type TelegramConfig, type TelegramMessage, type TelegramUpdate, type TelegramVoiceMessage, XAI_OAUTH_KEY, XIAOMI_CREDITS_KEY, clampThinkingForPlanMode, clearLocalDiscoveryCache, closeLogger, createAutoUpdater, decodeOggOpus, discoverLocalModels, downmixToMono, dualAuthProvider, dualAuthProviderByOAuthKey, endpointRoot, fetchSubscriptionUsage, findProbedModel, formatLocalModelId, generatePKCE, getClaudeCliUserAgent, getClaudeCodeVersion, getNextThinkingLevel, getSessionId, getSupportedThinkingLevels, grokCliBaseUrl, grokCliHeaders, isGrokCliEndpoint, isKimiCodingEndpoint, isLocalModelId, isLoggerOpen, isModelLoaded, isThinkingLevelSupported, kimiCodeBaseUrl, kimiCodingHeaders, localAuthStorageKey, log, loginAnthropic, loginGemini, loginKimi, loginOpenAI, loginXai, oauthStorageKey, openLog, parseLocalModelId, probeEndpoint, providerStorageKeys, readStoredBaseUrlSync, refreshAnthropicToken, refreshGeminiToken, refreshKimiToken, refreshOpenAIToken, refreshXaiToken, registerLogCleanup, resample, setProgressCallback, toModelInfo, transcribeVoice, withFileLock };
762
+ export { AuthStorage, type AutoUpdateConfig, type AutoUpdater, DEFAULT_LOCAL_ENDPOINTS, type DiscoverOptions, type DiscoveryResult, type DualAuthProvider, FALLBACK_CONTEXT_WINDOW, type InlineButton, LOCAL_API_KEY_PLACEHOLDER, LOCAL_AUTH_KEY_PREFIX, type LocalEndpoint, type LocalEndpointKind, type LocalEndpointProbe, type LocalModel, type LogLevel, MOONSHOT_OAUTH_KEY, ModelInfo, NotLoggedInError, type OAuthCredentials, type OAuthLoginCallbacks, PLAN_MODE_THINKING_CAP, type ProbeOptions, type ProgressCallback, SubscriptionUsageError, type SubscriptionUsageProvider, type SubscriptionUsageSnapshot, type SubscriptionUsageWindow, TelegramBot, type TelegramConfig, type TelegramMessage, type TelegramUpdate, type TelegramVoiceMessage, XAI_OAUTH_KEY, XIAOMI_CREDITS_KEY, clampThinkingForPlanMode, clearLocalDiscoveryCache, closeLogger, createAutoUpdater, decodeOggOpus, discoverLocalModels, downmixToMono, dualAuthProvider, dualAuthProviderByOAuthKey, endpointRoot, fetchSubscriptionUsage, findProbedModel, formatLocalModelId, generatePKCE, getClaudeCliUserAgent, getClaudeCodeVersion, getLowestThinkingLevel, getNextThinkingLevel, getSessionId, getSupportedThinkingLevels, grokCliBaseUrl, grokCliHeaders, isGrokCliEndpoint, isKimiCodingEndpoint, isLocalModelId, isLoggerOpen, isModelLoaded, isThinkingLevelSupported, kimiCodeBaseUrl, kimiCodingHeaders, localAuthStorageKey, log, loginAnthropic, loginGemini, loginKimi, loginOpenAI, loginXai, oauthStorageKey, openLog, parseLocalModelId, probeEndpoint, providerStorageKeys, readStoredBaseUrlSync, refreshAnthropicToken, refreshGeminiToken, refreshKimiToken, refreshOpenAIToken, refreshXaiToken, registerLogCleanup, resample, setProgressCallback, toModelInfo, transcribeVoice, withFileLock };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,17 @@
1
1
  import { ModelInfo } from './model-registry.js';
2
- export { ContextWindowOptions, DEFAULT_MAX_VIDEO_BYTES, MODELS, clearRuntimeModels, getAllModels, getAuthStorageKey, getAuthStorageKeys, getContextWindow, getDefaultModel, getDefaultThinkingLevel, getFastModel, getMaxThinkingLevel, getModel, getModelsForProvider, getSummaryModel, getToolResultCharLimit, getVideoByteLimit, registerRuntimeModels, usesOpenAICodexTransport } from './model-registry.js';
2
+ export { ContextWindowOptions, DEFAULT_MAX_VIDEO_BYTES, MODELS, clearRuntimeModels, getAllModels, getAuthStorageKey, getAuthStorageKeys, getContextWindow, getDefaultModel, getDefaultThinkingLevel, getMaxThinkingLevel, getModel, getModelsForProvider, getSummaryModel, getToolResultCharLimit, getVideoByteLimit, registerRuntimeModels, usesOpenAICodexTransport } from './model-registry.js';
3
3
  import { ThinkingLevel, Provider } from '@kenkaiiii/gg-ai';
4
4
  export { AppPaths, getAppPaths } from './paths.js';
5
5
 
6
6
  declare function getSupportedThinkingLevels(provider: Provider, model: string): readonly ThinkingLevel[];
7
+ /**
8
+ * The lowest effort `model` accepts — the first rung of its ladder, never
9
+ * "off". Used for background work (compaction summaries, `model: fast`
10
+ * agents) that runs on the active model but doesn't need deep reasoning.
11
+ * Undefined only when the model cannot reason at all, since sending it any
12
+ * effort would be rejected.
13
+ */
14
+ declare function getLowestThinkingLevel(provider: Provider, model: string): ThinkingLevel | undefined;
7
15
  declare function isThinkingLevelSupported(provider: Provider, model: string, level: ThinkingLevel): boolean;
8
16
  declare function getNextThinkingLevel(provider: Provider, model: string, current: ThinkingLevel | undefined): ThinkingLevel | undefined;
9
17
  /**
@@ -656,6 +664,8 @@ declare class TelegramBot {
656
664
  private allowedUserId;
657
665
  private offset;
658
666
  private running;
667
+ /** Aborts the in-flight long poll so stop() takes effect immediately. */
668
+ private pollAbort;
659
669
  private onMessage;
660
670
  private onVoiceMessage;
661
671
  private onCallback;
@@ -749,4 +759,4 @@ interface AutoUpdater {
749
759
  }
750
760
  declare function createAutoUpdater(config: AutoUpdateConfig): AutoUpdater;
751
761
 
752
- export { AuthStorage, type AutoUpdateConfig, type AutoUpdater, DEFAULT_LOCAL_ENDPOINTS, type DiscoverOptions, type DiscoveryResult, type DualAuthProvider, FALLBACK_CONTEXT_WINDOW, type InlineButton, LOCAL_API_KEY_PLACEHOLDER, LOCAL_AUTH_KEY_PREFIX, type LocalEndpoint, type LocalEndpointKind, type LocalEndpointProbe, type LocalModel, type LogLevel, MOONSHOT_OAUTH_KEY, ModelInfo, NotLoggedInError, type OAuthCredentials, type OAuthLoginCallbacks, PLAN_MODE_THINKING_CAP, type ProbeOptions, type ProgressCallback, SubscriptionUsageError, type SubscriptionUsageProvider, type SubscriptionUsageSnapshot, type SubscriptionUsageWindow, TelegramBot, type TelegramConfig, type TelegramMessage, type TelegramUpdate, type TelegramVoiceMessage, XAI_OAUTH_KEY, XIAOMI_CREDITS_KEY, clampThinkingForPlanMode, clearLocalDiscoveryCache, closeLogger, createAutoUpdater, decodeOggOpus, discoverLocalModels, downmixToMono, dualAuthProvider, dualAuthProviderByOAuthKey, endpointRoot, fetchSubscriptionUsage, findProbedModel, formatLocalModelId, generatePKCE, getClaudeCliUserAgent, getClaudeCodeVersion, getNextThinkingLevel, getSessionId, getSupportedThinkingLevels, grokCliBaseUrl, grokCliHeaders, isGrokCliEndpoint, isKimiCodingEndpoint, isLocalModelId, isLoggerOpen, isModelLoaded, isThinkingLevelSupported, kimiCodeBaseUrl, kimiCodingHeaders, localAuthStorageKey, log, loginAnthropic, loginGemini, loginKimi, loginOpenAI, loginXai, oauthStorageKey, openLog, parseLocalModelId, probeEndpoint, providerStorageKeys, readStoredBaseUrlSync, refreshAnthropicToken, refreshGeminiToken, refreshKimiToken, refreshOpenAIToken, refreshXaiToken, registerLogCleanup, resample, setProgressCallback, toModelInfo, transcribeVoice, withFileLock };
762
+ export { AuthStorage, type AutoUpdateConfig, type AutoUpdater, DEFAULT_LOCAL_ENDPOINTS, type DiscoverOptions, type DiscoveryResult, type DualAuthProvider, FALLBACK_CONTEXT_WINDOW, type InlineButton, LOCAL_API_KEY_PLACEHOLDER, LOCAL_AUTH_KEY_PREFIX, type LocalEndpoint, type LocalEndpointKind, type LocalEndpointProbe, type LocalModel, type LogLevel, MOONSHOT_OAUTH_KEY, ModelInfo, NotLoggedInError, type OAuthCredentials, type OAuthLoginCallbacks, PLAN_MODE_THINKING_CAP, type ProbeOptions, type ProgressCallback, SubscriptionUsageError, type SubscriptionUsageProvider, type SubscriptionUsageSnapshot, type SubscriptionUsageWindow, TelegramBot, type TelegramConfig, type TelegramMessage, type TelegramUpdate, type TelegramVoiceMessage, XAI_OAUTH_KEY, XIAOMI_CREDITS_KEY, clampThinkingForPlanMode, clearLocalDiscoveryCache, closeLogger, createAutoUpdater, decodeOggOpus, discoverLocalModels, downmixToMono, dualAuthProvider, dualAuthProviderByOAuthKey, endpointRoot, fetchSubscriptionUsage, findProbedModel, formatLocalModelId, generatePKCE, getClaudeCliUserAgent, getClaudeCodeVersion, getLowestThinkingLevel, getNextThinkingLevel, getSessionId, getSupportedThinkingLevels, grokCliBaseUrl, grokCliHeaders, isGrokCliEndpoint, isKimiCodingEndpoint, isLocalModelId, isLoggerOpen, isModelLoaded, isThinkingLevelSupported, kimiCodeBaseUrl, kimiCodingHeaders, localAuthStorageKey, log, loginAnthropic, loginGemini, loginKimi, loginOpenAI, loginXai, oauthStorageKey, openLog, parseLocalModelId, probeEndpoint, providerStorageKeys, readStoredBaseUrlSync, refreshAnthropicToken, refreshGeminiToken, refreshKimiToken, refreshOpenAIToken, refreshXaiToken, registerLogCleanup, resample, setProgressCallback, toModelInfo, transcribeVoice, withFileLock };
package/dist/index.js CHANGED
@@ -20,7 +20,6 @@ import {
20
20
  getContextWindow,
21
21
  getDefaultModel,
22
22
  getDefaultThinkingLevel,
23
- getFastModel,
24
23
  getMaxThinkingLevel,
25
24
  getModel,
26
25
  getModelsForProvider,
@@ -54,7 +53,7 @@ import {
54
53
  registerRuntimeModels,
55
54
  usesOpenAICodexTransport,
56
55
  withFileLock
57
- } from "./chunk-7WTRAERP.js";
56
+ } from "./chunk-Y3AHAB37.js";
58
57
  import {
59
58
  getAppPaths
60
59
  } from "./chunk-EAIPT76S.js";
@@ -146,6 +145,10 @@ function getSupportedThinkingLevels(provider, model) {
146
145
  if (maxIndex === -1) return ["medium"];
147
146
  return levels.slice(0, maxIndex + 1);
148
147
  }
148
+ function getLowestThinkingLevel(provider, model) {
149
+ if (getModel(model)?.supportsThinking === false) return void 0;
150
+ return getSupportedThinkingLevels(provider, model)[0];
151
+ }
149
152
  function isThinkingLevelSupported(provider, model, level) {
150
153
  return getSupportedThinkingLevels(provider, model).includes(level);
151
154
  }
@@ -693,12 +696,16 @@ async function fetchSubscriptionUsage(provider, credentials, options = {}) {
693
696
 
694
697
  // src/telegram.ts
695
698
  var TELEGRAM_API = "https://api.telegram.org";
699
+ var LONG_POLL_SECONDS = 30;
700
+ var API_TIMEOUT_MS = 3e4;
696
701
  var MAX_MESSAGE_LENGTH = 4096;
697
702
  var TelegramBot = class {
698
703
  token;
699
704
  allowedUserId;
700
705
  offset = 0;
701
706
  running = false;
707
+ /** Aborts the in-flight long poll so stop() takes effect immediately. */
708
+ pollAbort = null;
702
709
  onMessage = null;
703
710
  onVoiceMessage = null;
704
711
  onCallback = null;
@@ -751,6 +758,7 @@ var TelegramBot = class {
751
758
  /** Stop long polling. */
752
759
  stop() {
753
760
  this.running = false;
761
+ this.pollAbort?.abort();
754
762
  }
755
763
  /** Send a text message to a specific chat. Converts markdown and splits long messages. */
756
764
  async send(chatId, text, buttons) {
@@ -797,12 +805,26 @@ var TelegramBot = class {
797
805
  }
798
806
  // ── Private ───────────────────────────────────────────
799
807
  async getUpdates() {
800
- const result = await this.apiCall("getUpdates", {
801
- offset: this.offset,
802
- timeout: 30,
803
- allowed_updates: ["message", "callback_query", "my_chat_member"]
804
- });
805
- if (!result.ok || !Array.isArray(result.result)) return [];
808
+ const poll = new AbortController();
809
+ this.pollAbort = poll;
810
+ let result;
811
+ try {
812
+ result = await this.apiCall(
813
+ "getUpdates",
814
+ {
815
+ offset: this.offset,
816
+ timeout: LONG_POLL_SECONDS,
817
+ allowed_updates: ["message", "callback_query", "my_chat_member"]
818
+ },
819
+ // A half-open socket would otherwise hang the poll forever.
820
+ AbortSignal.any([poll.signal, AbortSignal.timeout((LONG_POLL_SECONDS + 15) * 1e3)])
821
+ );
822
+ } finally {
823
+ if (this.pollAbort === poll) this.pollAbort = null;
824
+ }
825
+ if (!result.ok || !Array.isArray(result.result)) {
826
+ throw new Error(`getUpdates failed: ${JSON.stringify(result)}`);
827
+ }
806
828
  const updates = result.result;
807
829
  if (updates.length > 0) {
808
830
  this.offset = updates[updates.length - 1].update_id + 1;
@@ -850,12 +872,13 @@ var TelegramBot = class {
850
872
  }
851
873
  }
852
874
  }
853
- async apiCall(method, body) {
875
+ async apiCall(method, body, signal = AbortSignal.timeout(API_TIMEOUT_MS)) {
854
876
  const url = `${TELEGRAM_API}/bot${this.token}/${method}`;
855
877
  const response = await fetch(url, {
856
878
  method: "POST",
857
879
  headers: { "Content-Type": "application/json" },
858
- body: body ? JSON.stringify(body) : void 0
880
+ body: body ? JSON.stringify(body) : void 0,
881
+ signal
859
882
  });
860
883
  if (!response.ok) {
861
884
  return { ok: false };
@@ -988,7 +1011,7 @@ function isModelLoaded() {
988
1011
  return transcriber !== null;
989
1012
  }
990
1013
  async function transcribeVoice(fileUrl) {
991
- const response = await fetch(fileUrl);
1014
+ const response = await fetch(fileUrl, { signal: AbortSignal.timeout(6e4) });
992
1015
  if (!response.ok) throw new Error(`Failed to download voice file: ${response.status}`);
993
1016
  const buffer = new Uint8Array(await response.arrayBuffer());
994
1017
  const pcm = await decodeOggOpus(buffer);
@@ -1205,7 +1228,7 @@ export {
1205
1228
  getContextWindow,
1206
1229
  getDefaultModel,
1207
1230
  getDefaultThinkingLevel,
1208
- getFastModel,
1231
+ getLowestThinkingLevel,
1209
1232
  getMaxThinkingLevel,
1210
1233
  getModel,
1211
1234
  getModelsForProvider,