@code-yeongyu/senpi 2026.9.6 → 2026.9.7
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/CHANGELOG.md +19 -0
- package/dist/core/agent-session.d.ts +12 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +50 -26
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/stuck-overflow.d.ts +11 -0
- package/dist/core/compaction/stuck-overflow.d.ts.map +1 -0
- package/dist/core/compaction/stuck-overflow.js +17 -0
- package/dist/core/compaction/stuck-overflow.js.map +1 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts +1 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation-recovery.js +2 -0
- package/dist/core/extensions/builtin/goal/continuation-recovery.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts +3 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +4 -0
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +14 -3
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +2 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.js +42 -13
- package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
- package/dist/core/package-identity.d.ts +12 -0
- package/dist/core/package-identity.d.ts.map +1 -0
- package/dist/core/package-identity.js +57 -0
- package/dist/core/package-identity.js.map +1 -0
- package/dist/core/resource-loader.d.ts +0 -2
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -60
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/compaction-guide.md +2 -2
- package/docs/compaction.md +2 -2
- package/docs/rpc.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/kernel.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/kernel.ts +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/runtime-asset.ts +40 -14
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
package/docs/compaction-guide.md
CHANGED
|
@@ -136,7 +136,7 @@ Configure compaction in `~/.senpi/agent/settings.json` (global) or `.senpi/setti
|
|
|
136
136
|
|
|
137
137
|
| Setting | Default | Description |
|
|
138
138
|
|---------|---------|-------------|
|
|
139
|
-
| `compaction.enabled` | `true` | Enable auto-compaction.
|
|
139
|
+
| `compaction.enabled` | `true` | Enable proactive auto-compaction. `false` leaves threshold compaction to you; a provider-rejected context overflow still runs the one-shot compact-and-retry recovery. |
|
|
140
140
|
| `compaction.reserveTokens` | `16384` | Tokens reserved for the LLM's response. Lower values allow more context but risk truncation. |
|
|
141
141
|
| `compaction.keepRecentTokens` | `20000` | How much recent conversation to keep uncompressed. Higher values preserve more context but trigger compaction sooner. |
|
|
142
142
|
|
|
@@ -221,7 +221,7 @@ For technical details, see:
|
|
|
221
221
|
|
|
222
222
|
### "I want to disable auto-compaction"
|
|
223
223
|
|
|
224
|
-
Set `compaction.enabled: false` in your settings. Use `/compact` manually when you want to compact.
|
|
224
|
+
Set `compaction.enabled: false` in your settings. Use `/compact` manually when you want to compact. Threshold compaction stays off, but a context the provider rejects as too large is still compacted once and retried so the session does not stall. The RPC `set_auto_compaction` command and OmO Desktop's per-thread toggle change only that session; they do not write this setting.
|
|
225
225
|
|
|
226
226
|
### "How do I see what was compacted?"
|
|
227
227
|
|
package/docs/compaction.md
CHANGED
|
@@ -411,8 +411,8 @@ Configure compaction in `~/.senpi/agent/settings.json` or `<project-dir>/.senpi/
|
|
|
411
411
|
|
|
412
412
|
| Setting | Default | Description |
|
|
413
413
|
|---------|---------|-------------|
|
|
414
|
-
| `enabled` | `true` | Enable auto-compaction |
|
|
414
|
+
| `enabled` | `true` | Enable proactive (threshold) auto-compaction; provider-overflow recovery stays armed |
|
|
415
415
|
| `reserveTokens` | `16384` | Tokens to reserve for LLM response |
|
|
416
416
|
| `keepRecentTokens` | `20000` | Recent tokens to keep (not summarized) |
|
|
417
417
|
|
|
418
|
-
Disable auto-compaction with `"enabled": false`. You can still compact manually with `/compact
|
|
418
|
+
Disable proactive auto-compaction with `"enabled": false`. You can still compact manually with `/compact`, and a context the provider rejects as too large is still compacted once and retried automatically.
|
package/docs/rpc.md
CHANGED
|
@@ -795,7 +795,7 @@ Response:
|
|
|
795
795
|
|
|
796
796
|
#### set_auto_compaction
|
|
797
797
|
|
|
798
|
-
Enable or disable automatic compaction when context is nearly full.
|
|
798
|
+
Enable or disable automatic compaction when context is nearly full for this session only. The persisted `compaction.enabled` setting is left untouched, and `get_state` reports the effective value. Disabling it stops proactive threshold compaction; a provider-rejected context overflow still triggers the one-shot compact-and-retry recovery.
|
|
799
799
|
|
|
800
800
|
```json
|
|
801
801
|
{"type": "set_auto_compaction", "enabled": true}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-yeongyu/senpi-codemode",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.7",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Source-only senpi extension package for codemode evaluation tools",
|
|
6
6
|
"type": "module",
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/parser": "8.0.4",
|
|
34
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.
|
|
34
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.7",
|
|
35
35
|
"typebox": "1.3.18"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
38
|
+
"@code-yeongyu/senpi": "2026.9.7"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
41
|
+
"@code-yeongyu/senpi": "2026.9.7"
|
|
42
42
|
},
|
|
43
43
|
"keywords": [
|
|
44
44
|
"senpi",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import type { BridgeConnectionConfig, KernelToHostMessage } from "../../bridge/protocol.ts";
|
|
3
|
-
import { type CodemodeRuntimeAssetEnvironment,
|
|
3
|
+
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
4
4
|
import { SubprocessKernel, type SubprocessSpawn } from "../shared/subprocess-kernel.ts";
|
|
5
5
|
|
|
6
6
|
export interface JuliaKernelStartOptions {
|
|
@@ -17,7 +17,7 @@ export interface JuliaRunnerPathOptions extends CodemodeRuntimeAssetEnvironment
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function resolveJuliaRunnerPath(options: JuliaRunnerPathOptions = {}): string {
|
|
20
|
-
return
|
|
20
|
+
return requireCodemodeRuntimeAsset(
|
|
21
21
|
options.localPath ?? join(import.meta.dirname, "runner.jl"),
|
|
22
22
|
join("kernels", "jl", "runner.jl"),
|
|
23
23
|
options,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { dirname, join } from "node:path";
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
3
|
import type { HostToKernelMessage, KernelToHostMessage } from "../../bridge/protocol.ts";
|
|
4
|
-
import { type CodemodeRuntimeAssetEnvironment,
|
|
4
|
+
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
5
5
|
import type { JavaScriptKernelMode } from "./kernel-contract.ts";
|
|
6
6
|
import { spawnNodeWorker } from "./worker-host.ts";
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ export interface JavaScriptInlineWorkerEntryUrlOptions extends CodemodeRuntimeAs
|
|
|
12
12
|
export function resolveInlineWorkerEntryUrl(options: JavaScriptInlineWorkerEntryUrlOptions = {}): URL {
|
|
13
13
|
const localPath = options.localPath ?? join(dirname(fileURLToPath(import.meta.url)), "inline-worker-entry.js");
|
|
14
14
|
return pathToFileURL(
|
|
15
|
-
|
|
15
|
+
requireCodemodeRuntimeAsset(localPath, join("kernels", "js", "inline-worker-entry.js"), options),
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dirname, join } from "node:path";
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
-
import { type CodemodeRuntimeAssetEnvironment,
|
|
3
|
+
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
4
4
|
import { createInlineWorker, type WorkerLike } from "./inline-worker.ts";
|
|
5
5
|
import { type JavaScriptKernelOptions, localBridgeConnection } from "./local-module-loader.ts";
|
|
6
6
|
import { spawnNodeWorker, WorkerStartupCancelledError, waitForReady } from "./worker-host.ts";
|
|
@@ -11,7 +11,7 @@ export interface JavaScriptWorkerEntryUrlOptions extends CodemodeRuntimeAssetEnv
|
|
|
11
11
|
|
|
12
12
|
export function resolveJsWorkerEntryUrl(options: JavaScriptWorkerEntryUrlOptions = {}): URL {
|
|
13
13
|
const localPath = options.localPath ?? join(dirname(fileURLToPath(import.meta.url)), "worker-entry.js");
|
|
14
|
-
return pathToFileURL(
|
|
14
|
+
return pathToFileURL(requireCodemodeRuntimeAsset(localPath, join("kernels", "js", "worker-entry.js"), options));
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export interface WorkerStartupHooks {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
isKernelToHostMessage,
|
|
9
9
|
type KernelToHostMessage,
|
|
10
10
|
} from "../../bridge/protocol.ts";
|
|
11
|
-
import { type CodemodeRuntimeAssetEnvironment,
|
|
11
|
+
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
12
12
|
import {
|
|
13
13
|
defaultSpawn,
|
|
14
14
|
hardKill,
|
|
@@ -53,7 +53,7 @@ export interface PythonPreludePathOptions extends CodemodeRuntimeAssetEnvironmen
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export function resolvePythonPreludePath(options: PythonPreludePathOptions = {}): string {
|
|
56
|
-
return
|
|
56
|
+
return requireCodemodeRuntimeAsset(
|
|
57
57
|
options.localPath ?? join(dirname(fileURLToPath(import.meta.url)), "prelude.py"),
|
|
58
58
|
join("kernels", "py", "prelude.py"),
|
|
59
59
|
options,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import type { BridgeConnectionConfig, KernelToHostMessage } from "../../bridge/protocol.ts";
|
|
3
|
-
import { type CodemodeRuntimeAssetEnvironment,
|
|
3
|
+
import { type CodemodeRuntimeAssetEnvironment, requireCodemodeRuntimeAsset } from "../shared/runtime-asset.ts";
|
|
4
4
|
import { SubprocessKernel, type SubprocessSpawn } from "../shared/subprocess-kernel.ts";
|
|
5
5
|
|
|
6
6
|
export interface RubyKernelStartOptions {
|
|
@@ -17,7 +17,7 @@ export interface RubyRunnerPathOptions extends CodemodeRuntimeAssetEnvironment {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function resolveRubyRunnerPath(options: RubyRunnerPathOptions = {}): string {
|
|
20
|
-
return
|
|
20
|
+
return requireCodemodeRuntimeAsset(
|
|
21
21
|
options.localPath ?? join(import.meta.dirname, "runner.rb"),
|
|
22
22
|
join("kernels", "rb", "runner.rb"),
|
|
23
23
|
options,
|
|
@@ -6,26 +6,52 @@ export interface CodemodeRuntimeAssetEnvironment {
|
|
|
6
6
|
readonly executablePath?: string;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
export class CodemodeRuntimeAssetMissingError extends Error {
|
|
10
|
+
readonly packageRelativePath: string;
|
|
11
|
+
readonly localPath: string;
|
|
12
|
+
readonly sidecarPath: string;
|
|
13
|
+
readonly executablePath: string;
|
|
14
|
+
|
|
15
|
+
constructor(packageRelativePath: string, localPath: string, sidecarPath: string, executablePath: string) {
|
|
16
|
+
super(
|
|
17
|
+
`codemode runtime asset ${packageRelativePath} is unavailable: module-relative path ${localPath} is not readable and the codemode sidecar is missing beside the executable ${executablePath} (expected ${sidecarPath}). Ship node_modules/@code-yeongyu/senpi-codemode next to the executable.`,
|
|
18
|
+
);
|
|
19
|
+
this.name = "CodemodeRuntimeAssetMissingError";
|
|
20
|
+
this.packageRelativePath = packageRelativePath;
|
|
21
|
+
this.localPath = localPath;
|
|
22
|
+
this.sidecarPath = sidecarPath;
|
|
23
|
+
this.executablePath = executablePath;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function isBunVirtualPath(path: string): boolean {
|
|
28
|
+
return path.includes("/$bunfs/") || path.includes("~BUN") || path.includes("%7EBUN");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function sidecarPathFor(packageRelativePath: string, executablePath: string): string {
|
|
32
|
+
return join(dirname(executablePath), "node_modules", "@code-yeongyu", "senpi-codemode", "src", packageRelativePath);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function requireCodemodeRuntimeAsset(
|
|
36
|
+
localPath: string,
|
|
37
|
+
packageRelativePath: string,
|
|
38
|
+
{ executablePath = process.execPath }: CodemodeRuntimeAssetEnvironment = {},
|
|
39
|
+
): string {
|
|
40
|
+
const sidecarPath = sidecarPathFor(packageRelativePath, executablePath);
|
|
41
|
+
if (!isBunVirtualPath(localPath) && existsSync(localPath)) return localPath;
|
|
42
|
+
if (existsSync(sidecarPath)) return sidecarPath;
|
|
43
|
+
throw new CodemodeRuntimeAssetMissingError(packageRelativePath, localPath, sidecarPath, executablePath);
|
|
44
|
+
}
|
|
45
|
+
|
|
9
46
|
export function resolveCodemodeRuntimeAsset(
|
|
10
47
|
localPath: string,
|
|
11
48
|
packageRelativePath: string,
|
|
12
49
|
{ bunVersion = process.versions.bun, executablePath = process.execPath }: CodemodeRuntimeAssetEnvironment = {},
|
|
13
50
|
): string {
|
|
14
|
-
if (existsSync(localPath))
|
|
15
|
-
return localPath;
|
|
16
|
-
}
|
|
51
|
+
if (existsSync(localPath)) return localPath;
|
|
17
52
|
if (bunVersion) {
|
|
18
|
-
const sidecarPath =
|
|
19
|
-
|
|
20
|
-
"node_modules",
|
|
21
|
-
"@code-yeongyu",
|
|
22
|
-
"senpi-codemode",
|
|
23
|
-
"src",
|
|
24
|
-
packageRelativePath,
|
|
25
|
-
);
|
|
26
|
-
if (existsSync(sidecarPath)) {
|
|
27
|
-
return sidecarPath;
|
|
28
|
-
}
|
|
53
|
+
const sidecarPath = sidecarPathFor(packageRelativePath, executablePath);
|
|
54
|
+
if (existsSync(sidecarPath)) return sidecarPath;
|
|
29
55
|
}
|
|
30
56
|
return localPath;
|
|
31
57
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@earendil-works/pi-agent-core",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.7",
|
|
4
4
|
"description": "General-purpose agent with transport abstraction, state management, and attachment support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"prepublishOnly": "npm run build"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.
|
|
39
|
-
"@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.
|
|
38
|
+
"@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.7",
|
|
39
|
+
"@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.7",
|
|
40
40
|
"diff": "9.0.0",
|
|
41
41
|
"ignore": "7.0.6",
|
|
42
42
|
"typebox": "1.3.18",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":3,"generatedAt":"2026-09-
|
|
1
|
+
{"schemaVersion":3,"generatedAt":"2026-09-07T03:20:06.581Z","structureHash":"0df417387a91858721a7ba94c027b8e9f68edc0e934ee8c397db4e6c72ab27a3","files":{"alibaba-token-plan.json":"9f9e8f88b1faa2e4134a0d8bcda600531d4d044d64b7ec3d2373f1db46dcf452","amazon-bedrock.json":"7f870508a8a7afecf85037af6242762ebdc7774fe29061b9b39d7754f528ec1d","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"e9d883ee35d94dba963320b5496bd7dd368d226cbafcf134bfec66a0a24b3b7f","azure-openai-responses.json":"55583de57e514dd5b8de570eaf1ba86345ea2a4cb3335b47b15435df497e4dd0","baseten.json":"8f7430af599249a01f446b5b717856dd58d484e76f5dbccf86c0ec7b6661468d","cerebras.json":"9eaa554e1b02f3665f8f63e6432d253bf81351af7c72001054dd8108aa528a52","cloudflare-ai-gateway.json":"244d98311e81b5f33fa736688d135b29add6a8acee466aa3a5988ac5b022d1eb","cloudflare-workers-ai.json":"07ef63208ff7517fd1a80962f18143e21de399640423329490b157f459ccf995","deepseek.json":"e3106724723fd82d48a3ff685da9908a3a7b7b4fd84cc3cfe97a6a23067b6029","fireworks.json":"0b480dcad5ff4072ef299d887f27ed3ed96e2246aa57ffa3bac02ecee9aee331","github-copilot.json":"6a584201b123c1dcc2a0e2543c5c77af2420f46f32571ee61edffcba762cce7a","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"3a004b58d3f801077a81f5be5cdf40c59ce1070c9c68f279e8d6c8902d441b19","kimi-coding.json":"88150f8970f83e17968b02f3b33fac803b96ebf1474e76437689b7d0f1b69363","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"e3a109306644bf2f2fa38fece50b2d3ce1dbe3b87b1f1b9e2d70cce7eb5c0ea1","moonshotai-cn.json":"c4e1801b5dfd61bebcaa33cbfc5ed0c69df14a3bee37da218a558668d817864e","moonshotai.json":"3dab637e7e2648792c786157f85f29026b93393f7098b77593c1180928d371c9","nvidia.json":"7e5d6e027f61e36f8d806d0af311cda93a40e75920b8a0645eddf0ab9f058033","openai-codex.json":"f99162aea3e92ede2b3885b3b38915e460ec4f0de466c908191ae9acc9998e49","openai.json":"38274fc8c53ce99b03a86f6439307118d8dee02de57b135c51dd05b11fd7cc63","opencode-go.json":"07285c7abbc2e4c8d136aa381254a0e7148ee26912ab18cf2316c9b1c10e5816","opencode.json":"0cf12754175821b33613a438a8e83aa17900dddbc35e7665836bcf4c5abdbe15","opengateway.json":"b4a6a22444054baad8c8ccffa23465e7805a292e942865385d8eef1925254fc5","openrouter.json":"77bee5f3743c7336351dcb1a1ad20960a6e5d9062bb6863aedea1087fe2d3376","qwen-token-plan-cn.json":"e62dde34edb603376a1dc60b2a74a9c2605b9e81d81df55cc259796c45aa4793","qwen-token-plan-individual.json":"5649fd4075ada766ec65a7a162cd65f096a7ecc29960ace04b2e6a6a4a995a41","qwen-token-plan.json":"fe914313157ff41ab2f71977f0fdcfedb3a8a205d1092e3180f6799e5d7942fd","together.json":"6010980c9b0af72c60965ae325dbdb21e67c91844a7f7f6f7d71d363f1325f56","vercel-ai-gateway.json":"d70b8860fbc120ef42d10c884521246b2d6d352edb3f90c9ade4c8b651f135ae","xai.json":"9973aae022723732b8a7ea12107e6fb8b3f1d0e087ec6bbc2ee18f0820595e19","xiaomi-token-plan-ams.json":"568b9992cf320536a65826e26a414afa5c0d17f083a01af4bd96658d9dd3e705","xiaomi-token-plan-cn.json":"c423857d0bbb0b126394eaf1ebb2a91bf2d1193cc5a4fe77843ff0f4536a0a80","xiaomi-token-plan-sgp.json":"008f1eb41037e93c5ae478f12815cd67bac1978f131ffefa602775bb60b63fea","xiaomi.json":"37acf451bb4364bdca2ecea6b7d962590d9974a87e80cfe34bb800be6a95c13b","zai-coding-cn.json":"d3c969020a7ab978497837a3301c7bca364d704082832221cfe61e6596333e56","zai.json":"f42790c77fb4681a656897a9d860b939916c0ddf979a5f16856bce9573cdf64e"}}
|