@dotobokuri/fleet-console 1.61.0 → 1.62.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/README.md +1 -1
- package/dist/cli.mjs +182 -11
- package/dist/client/assets/{_baseUniq-9W447fNf.js → _baseUniq-B6CLI4cf.js} +1 -1
- package/dist/client/assets/{arc-hoitnVWi.js → arc-r3CRqUQ5.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-DYd58Vfc.js → architectureDiagram-Q4EWVU46-CJfgw2eJ.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-kuFqPdP_.js → blockDiagram-DXYQGD6D-CkBuOBUs.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-C7n41zCn.js → c4Diagram-AHTNJAMY-Ln5TenJL.js} +1 -1
- package/dist/client/assets/channel-DBCxCWtI.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DrHeb54-.js → chunk-4BX2VUAB-BiYTw90k.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-DFjT6kwT.js → chunk-4TB4RGXK-nPQaGu1w.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-DxEzuA7W.js → chunk-55IACEB6-BU2oCJkl.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-aAlF0YEo.js → chunk-EDXVE4YY-Ej7y6KOv.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DwqRMFL1.js → chunk-FMBD7UC4-hOkBpfhE.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-DCkUlaRi.js → chunk-OYMX7WX6-Cv43HwvT.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-B1Dx8Zhl.js → chunk-QZHKN3VN-Bi7AEJxb.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-J2bgJmn-.js → chunk-YZCP3GAM-CBwmJdga.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-QQSWiJjR.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-QQSWiJjR.js +1 -0
- package/dist/client/assets/clone-vom5rXcJ.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BxzLzyJp.js → cose-bilkent-S5V4N54A-ERDn7bly.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-D1ixDJxZ.js → dagre-KV5264BT-DapcbnEu.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-DZPIz1Pa.js → diagram-5BDNPKRD-DbRBVaVH.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-Pbcr-a5H.js → diagram-G4DWMVQ6-CLP0MwBH.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-CBssBmPY.js → diagram-MMDJMWI5-BMZ9AsEI.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-cVQUs6jp.js → diagram-TYMM5635-DtPPkZ2y.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-ChMSAXos.js → erDiagram-SMLLAGMA-DIvbhhTb.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-FEIrU5mu.js → flowDiagram-DWJPFMVM-C_R3RpTk.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-D6ELHTJY.js → ganttDiagram-T4ZO3ILL-eaIqpHsY.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DTJ6HgV4.js → gitGraphDiagram-UUTBAWPF-CYCsHY_E.js} +1 -1
- package/dist/client/assets/{graph-uscjDdHm.js → graph-HfvOsgk2.js} +1 -1
- package/dist/client/assets/index-C2erdgSj.css +1 -0
- package/dist/client/assets/index-CrEYBugN.js +465 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-C2AlA___.js → infoDiagram-42DDH7IO-rmDH5YRZ.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-BZGfIhBp.js → ishikawaDiagram-UXIWVN3A-EAZO3mIY.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-DnGNMdvj.js → journeyDiagram-VCZTEJTY-4vWYlXOF.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-BkuplZGR.js → kanban-definition-6JOO6SKY-CkkSfsbD.js} +1 -1
- package/dist/client/assets/{layout-BBayH8iU.js → layout-DWbhbrdO.js} +1 -1
- package/dist/client/assets/{linear-BQvaHed0.js → linear-BjRBsqi0.js} +1 -1
- package/dist/client/assets/{mermaid.core-CO0f3d6Y.js → mermaid.core-RuG-kUU2.js} +4 -4
- package/dist/client/assets/{min-B610GdeY.js → min-D--jZrv5.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-gwkhgCyj.js → mindmap-definition-QFDTVHPH-fLwhQBcX.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-DYU2zgk8.js → pieDiagram-DEJITSTG-DJkWnAQK.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-B5Vkk65i.js → quadrantDiagram-34T5L4WZ-Kd4q9kEz.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-D4EcF7kq.js → requirementDiagram-MS252O5E-Bgrtq8Kh.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-DFk-RMV4.js → sankeyDiagram-XADWPNL6-BW9BdQ-8.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-B-beo9e0.js → sequenceDiagram-FGHM5R23-KpgcxIJb.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-VDT0TOd7.js → stateDiagram-FHFEXIEX-CNaCHtL2.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-D3k4sLJ4.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-By4DMNqG.js → timeline-definition-GMOUNBTQ-MGPKEXGI.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-DzlBrijd.js → vennDiagram-DHZGUBPP-bDOCVDJ1.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-BHSHTMU6.js → wardley-RL74JXVD-DuvLJQPg.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-COB-cWHQ.js → wardleyDiagram-NUSXRM2D-BdBIEtIl.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-C-GVSBHd.js → xychartDiagram-5P7HB3ND-vycMI6c3.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/ledger/routes.mjs +19834 -428
- package/dist/fleet-plugins/quota/routes.mjs +206 -3
- package/dist/fleet-plugins/scuttlebutt/routes.mjs +182 -11
- package/dist/fleet-plugins/terminal/routes.mjs +7016 -5834
- package/dist/fleet.mjs +6317 -5874
- package/package.json +2 -2
- package/dist/client/assets/channel-D2TsEFjE.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DhjJiPic.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-DhjJiPic.js +0 -1
- package/dist/client/assets/clone-DwVC2-Mi.js +0 -1
- package/dist/client/assets/index-DMjY1OQ0.js +0 -465
- package/dist/client/assets/index-Ec4RaE0g.css +0 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-wHPBl_p1.js +0 -1
- /package/{AGENTS.md → CLAUDE.md} +0 -0
|
@@ -18530,6 +18530,115 @@ var models_default = {
|
|
|
18530
18530
|
}
|
|
18531
18531
|
]
|
|
18532
18532
|
}
|
|
18533
|
+
},
|
|
18534
|
+
pricing: {
|
|
18535
|
+
source: "openrouter",
|
|
18536
|
+
observedAt: "2026-08-16T00:00:00Z",
|
|
18537
|
+
models: {
|
|
18538
|
+
"openai/gpt-5.6-sol": {
|
|
18539
|
+
inputCostPerToken: 5e-6,
|
|
18540
|
+
outputCostPerToken: 3e-5,
|
|
18541
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18542
|
+
cacheCreationInputTokenCost: 625e-8,
|
|
18543
|
+
aliases: [
|
|
18544
|
+
"gpt-5.6-sol"
|
|
18545
|
+
]
|
|
18546
|
+
},
|
|
18547
|
+
"openai/gpt-5.6-terra": {
|
|
18548
|
+
inputCostPerToken: 1e-6,
|
|
18549
|
+
outputCostPerToken: 6e-6,
|
|
18550
|
+
cacheReadInputTokenCost: 1e-7,
|
|
18551
|
+
cacheCreationInputTokenCost: 125e-8,
|
|
18552
|
+
aliases: [
|
|
18553
|
+
"gpt-5.6-terra"
|
|
18554
|
+
]
|
|
18555
|
+
},
|
|
18556
|
+
"openai/gpt-5.6-luna": {
|
|
18557
|
+
inputCostPerToken: 1e-7,
|
|
18558
|
+
outputCostPerToken: 6e-7,
|
|
18559
|
+
cacheReadInputTokenCost: 1e-8,
|
|
18560
|
+
cacheCreationInputTokenCost: 125e-9,
|
|
18561
|
+
aliases: [
|
|
18562
|
+
"gpt-5.6-luna"
|
|
18563
|
+
]
|
|
18564
|
+
},
|
|
18565
|
+
"x-ai/grok-4.5": {
|
|
18566
|
+
inputCostPerToken: 2e-6,
|
|
18567
|
+
outputCostPerToken: 6e-6,
|
|
18568
|
+
cacheReadInputTokenCost: 3e-7,
|
|
18569
|
+
aliases: [
|
|
18570
|
+
"grok-4.5"
|
|
18571
|
+
]
|
|
18572
|
+
},
|
|
18573
|
+
"x-ai/grok-4.6": {
|
|
18574
|
+
inputCostPerToken: 2e-6,
|
|
18575
|
+
outputCostPerToken: 6e-6,
|
|
18576
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18577
|
+
aliases: [
|
|
18578
|
+
"grok-4.6"
|
|
18579
|
+
]
|
|
18580
|
+
},
|
|
18581
|
+
"anthropic/claude-opus-5": {
|
|
18582
|
+
inputCostPerToken: 5e-6,
|
|
18583
|
+
outputCostPerToken: 25e-6,
|
|
18584
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18585
|
+
cacheCreationInputTokenCost: 625e-8,
|
|
18586
|
+
aliases: [
|
|
18587
|
+
"claude-opus-5"
|
|
18588
|
+
]
|
|
18589
|
+
},
|
|
18590
|
+
"anthropic/claude-fable-5": {
|
|
18591
|
+
inputCostPerToken: 1e-5,
|
|
18592
|
+
outputCostPerToken: 5e-5,
|
|
18593
|
+
cacheReadInputTokenCost: 1e-6,
|
|
18594
|
+
cacheCreationInputTokenCost: 125e-7,
|
|
18595
|
+
aliases: [
|
|
18596
|
+
"claude-fable-5"
|
|
18597
|
+
]
|
|
18598
|
+
},
|
|
18599
|
+
"moonshotai/kimi-k3": {
|
|
18600
|
+
inputCostPerToken: 3e-6,
|
|
18601
|
+
outputCostPerToken: 15e-6,
|
|
18602
|
+
cacheReadInputTokenCost: 3e-7,
|
|
18603
|
+
aliases: [
|
|
18604
|
+
"k3",
|
|
18605
|
+
"kimi-k3"
|
|
18606
|
+
]
|
|
18607
|
+
},
|
|
18608
|
+
"qwen/qwen3.8-max": {
|
|
18609
|
+
inputCostPerToken: 2e-6,
|
|
18610
|
+
outputCostPerToken: 6e-6,
|
|
18611
|
+
cacheReadInputTokenCost: 25e-8,
|
|
18612
|
+
cacheCreationInputTokenCost: 25e-7,
|
|
18613
|
+
aliases: [
|
|
18614
|
+
"qwen3.8-max"
|
|
18615
|
+
]
|
|
18616
|
+
},
|
|
18617
|
+
"deepseek/deepseek-v4-flash": {
|
|
18618
|
+
inputCostPerToken: 14e-8,
|
|
18619
|
+
outputCostPerToken: 28e-8,
|
|
18620
|
+
cacheReadInputTokenCost: 28e-10,
|
|
18621
|
+
aliases: [
|
|
18622
|
+
"deepseek-v4-flash"
|
|
18623
|
+
]
|
|
18624
|
+
},
|
|
18625
|
+
"deepseek/deepseek-v4-pro": {
|
|
18626
|
+
inputCostPerToken: 435e-9,
|
|
18627
|
+
outputCostPerToken: 87e-8,
|
|
18628
|
+
cacheReadInputTokenCost: 3625e-12,
|
|
18629
|
+
aliases: [
|
|
18630
|
+
"deepseek-v4-pro"
|
|
18631
|
+
]
|
|
18632
|
+
},
|
|
18633
|
+
"z-ai/glm-5.2": {
|
|
18634
|
+
inputCostPerToken: 14e-7,
|
|
18635
|
+
outputCostPerToken: 44e-7,
|
|
18636
|
+
cacheReadInputTokenCost: 26e-8,
|
|
18637
|
+
aliases: [
|
|
18638
|
+
"glm-5.2"
|
|
18639
|
+
]
|
|
18640
|
+
}
|
|
18641
|
+
}
|
|
18533
18642
|
}
|
|
18534
18643
|
};
|
|
18535
18644
|
var KIMI_AUTH_PROVIDER_ID = "Claude Code with Moonshot Kimi";
|
|
@@ -18594,6 +18703,18 @@ var GatewayBenchmarksRegistrySchema = external_exports.object({
|
|
|
18594
18703
|
sources: external_exports.record(external_exports.string().min(1), GatewayBenchmarkSourceSchema),
|
|
18595
18704
|
models: external_exports.record(external_exports.string().min(1), GatewayBenchmarkModelEntrySchema)
|
|
18596
18705
|
}).strict();
|
|
18706
|
+
var GatewayModelPricingSchema = external_exports.object({
|
|
18707
|
+
inputCostPerToken: external_exports.number().nonnegative(),
|
|
18708
|
+
outputCostPerToken: external_exports.number().nonnegative(),
|
|
18709
|
+
cacheReadInputTokenCost: external_exports.number().nonnegative(),
|
|
18710
|
+
cacheCreationInputTokenCost: external_exports.number().nonnegative().optional(),
|
|
18711
|
+
aliases: external_exports.array(external_exports.string().min(1)).min(1)
|
|
18712
|
+
}).strict();
|
|
18713
|
+
var GatewayPricingRegistrySchema = external_exports.object({
|
|
18714
|
+
source: external_exports.literal("openrouter"),
|
|
18715
|
+
observedAt: external_exports.iso.datetime(),
|
|
18716
|
+
models: external_exports.record(external_exports.string().min(1), GatewayModelPricingSchema)
|
|
18717
|
+
}).strict();
|
|
18597
18718
|
var GatewayModelEntrySchema = external_exports.object({
|
|
18598
18719
|
modelId: external_exports.string().min(1),
|
|
18599
18720
|
name: external_exports.string().min(1),
|
|
@@ -18624,7 +18745,8 @@ var GatewayModelsRegistrySchema = external_exports.object({
|
|
|
18624
18745
|
kimi: GatewayProviderSchema,
|
|
18625
18746
|
opencode: GatewayProviderSchema,
|
|
18626
18747
|
xai: GatewayProviderSchema
|
|
18627
|
-
}).strict()
|
|
18748
|
+
}).strict(),
|
|
18749
|
+
pricing: GatewayPricingRegistrySchema
|
|
18628
18750
|
}).strict();
|
|
18629
18751
|
var UNSUPPORTED_GATEWAY_MODEL_EFFORT = Object.freeze({ supported: false });
|
|
18630
18752
|
var benchmarksRegistry = parseGatewayBenchmarksRegistry(benchmarks_default);
|
|
@@ -18648,6 +18770,15 @@ var registry2 = (() => {
|
|
|
18648
18770
|
return parsed;
|
|
18649
18771
|
})();
|
|
18650
18772
|
registry2.updatedAt;
|
|
18773
|
+
registry2.pricing.observedAt;
|
|
18774
|
+
Object.freeze(
|
|
18775
|
+
Object.fromEntries(
|
|
18776
|
+
Object.entries(registry2.pricing.models).map(([modelId, pricing]) => [
|
|
18777
|
+
modelId,
|
|
18778
|
+
Object.freeze({ ...pricing, aliases: Object.freeze([...pricing.aliases]) })
|
|
18779
|
+
])
|
|
18780
|
+
)
|
|
18781
|
+
);
|
|
18651
18782
|
Object.entries(benchmarksRegistry.sources).map(([sourceId, source]) => `${sourceId}:${source.observedAt}`).sort().join("|");
|
|
18652
18783
|
Object.freeze(
|
|
18653
18784
|
Object.fromEntries(
|
|
@@ -19091,6 +19222,9 @@ async function postJson(fetchImpl, url2, headers) {
|
|
|
19091
19222
|
function expired(error51) {
|
|
19092
19223
|
return error51 instanceof ProviderHttpError && (error51.statusCode === 401 || error51.statusCode === 403) ? { status: "expired" } : null;
|
|
19093
19224
|
}
|
|
19225
|
+
function providerHttpStatus(error51) {
|
|
19226
|
+
return error51 instanceof ProviderHttpError ? error51.statusCode : void 0;
|
|
19227
|
+
}
|
|
19094
19228
|
function sanitizeProviderError(error51) {
|
|
19095
19229
|
if (error51 instanceof ProviderResponseTooLargeError) return "Provider response too large";
|
|
19096
19230
|
if (error51 instanceof DOMException && error51.name === "AbortError") return "Provider request timed out";
|
|
@@ -19634,6 +19768,71 @@ async function fetchKimiUsage(deps = {}) {
|
|
|
19634
19768
|
throw error51;
|
|
19635
19769
|
}
|
|
19636
19770
|
}
|
|
19771
|
+
var OPENCODE_AUTH_PROVIDER_ID = "Claude Code with OpenCode Go";
|
|
19772
|
+
var OPENCODE_GO_API_BASE_URL = "https://opencode.ai/zen/go";
|
|
19773
|
+
var OPENCODE_GO_USAGE_URL = `${OPENCODE_GO_API_BASE_URL}/v1/usage`;
|
|
19774
|
+
var OPENCODE_SESSION_MS = 5 * HOUR_MS;
|
|
19775
|
+
var OPENCODE_MONTH_MS = 30 * 24 * HOUR_MS;
|
|
19776
|
+
var WINDOWS = [
|
|
19777
|
+
{ field: "rolling", id: "session", durationMs: OPENCODE_SESSION_MS },
|
|
19778
|
+
{ field: "weekly", id: "weekly", durationMs: WEEK_MS },
|
|
19779
|
+
{ field: "monthly", id: "cycle", durationMs: OPENCODE_MONTH_MS }
|
|
19780
|
+
];
|
|
19781
|
+
function windowPercent(row) {
|
|
19782
|
+
const value = row.percent;
|
|
19783
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
|
|
19784
|
+
return percent(value);
|
|
19785
|
+
}
|
|
19786
|
+
function parseOpencodeUsage(payload) {
|
|
19787
|
+
const usage4 = object2(object2(payload)?.usage);
|
|
19788
|
+
if (!usage4) return null;
|
|
19789
|
+
const windows = [];
|
|
19790
|
+
for (const spec of WINDOWS) {
|
|
19791
|
+
const row = object2(usage4[spec.field]);
|
|
19792
|
+
if (!row) return null;
|
|
19793
|
+
const usedPercent = windowPercent(row);
|
|
19794
|
+
if (usedPercent === void 0) return null;
|
|
19795
|
+
const resetsAt = safeTimestamp(row.resetsAt);
|
|
19796
|
+
const period = windowPeriod(spec.durationMs, "catalog", resetsAt);
|
|
19797
|
+
windows.push({
|
|
19798
|
+
id: spec.id,
|
|
19799
|
+
usedPercent,
|
|
19800
|
+
...resetsAt !== void 0 ? { resetsAt } : {},
|
|
19801
|
+
...period ? { period } : {}
|
|
19802
|
+
});
|
|
19803
|
+
}
|
|
19804
|
+
return {
|
|
19805
|
+
windows,
|
|
19806
|
+
cycleDays: Math.round(OPENCODE_MONTH_MS / 864e5)
|
|
19807
|
+
};
|
|
19808
|
+
}
|
|
19809
|
+
async function fetchOpencodeUsage(deps = {}) {
|
|
19810
|
+
if (deps.authService === void 0) {
|
|
19811
|
+
throw new Error("authService is required to probe OpenCode Go usage; pass it via createAiGatewayQuotaCollectors");
|
|
19812
|
+
}
|
|
19813
|
+
const apiKey = await deps.authService.getApiKey(OPENCODE_AUTH_PROVIDER_ID);
|
|
19814
|
+
if (!apiKey) return { status: "signed_out" };
|
|
19815
|
+
try {
|
|
19816
|
+
const usage4 = parseOpencodeUsage(await getJson(
|
|
19817
|
+
deps.fetch ?? fetch,
|
|
19818
|
+
OPENCODE_GO_USAGE_URL,
|
|
19819
|
+
{ Authorization: `Bearer ${apiKey}`, Accept: "application/json" }
|
|
19820
|
+
));
|
|
19821
|
+
if (!usage4) throw new Error("Provider response invalid");
|
|
19822
|
+
return {
|
|
19823
|
+
status: "ok",
|
|
19824
|
+
plan: "Go",
|
|
19825
|
+
cycleDays: usage4.cycleDays,
|
|
19826
|
+
windows: usage4.windows,
|
|
19827
|
+
fetchedAt: (deps.now ?? Date.now)()
|
|
19828
|
+
};
|
|
19829
|
+
} catch (error51) {
|
|
19830
|
+
if (providerHttpStatus(error51) === 403) return { status: "no_subscription" };
|
|
19831
|
+
const result = expired(error51);
|
|
19832
|
+
if (result) return result;
|
|
19833
|
+
throw error51;
|
|
19834
|
+
}
|
|
19835
|
+
}
|
|
19637
19836
|
var XAI_OIDC_ISSUER = "https://auth.x.ai";
|
|
19638
19837
|
var XAI_CLI_REFRESH_URL = "https://auth.x.ai/oauth2/token";
|
|
19639
19838
|
var XAI_CLI_DEFAULT_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
|
|
@@ -19921,6 +20120,7 @@ function createAiGatewayQuotaCollectors(deps) {
|
|
|
19921
20120
|
fetchCodex: () => fetchCodexUsage(providerDeps),
|
|
19922
20121
|
fetchCursor: () => fetchCursorUsage(providerDeps),
|
|
19923
20122
|
fetchKimi: () => fetchKimiUsage(providerDeps),
|
|
20123
|
+
fetchOpencode: () => fetchOpencodeUsage(providerDeps),
|
|
19924
20124
|
fetchXai: () => fetchXaiUsage(providerDeps)
|
|
19925
20125
|
};
|
|
19926
20126
|
}
|
|
@@ -19934,6 +20134,7 @@ function createQuotaService(deps) {
|
|
|
19934
20134
|
codex: deps.fetchCodex,
|
|
19935
20135
|
cursor: deps.fetchCursor,
|
|
19936
20136
|
kimi: deps.fetchKimi,
|
|
20137
|
+
opencode: deps.fetchOpencode,
|
|
19937
20138
|
xai: deps.fetchXai ?? (async () => ({ status: "signed_out" }))
|
|
19938
20139
|
};
|
|
19939
20140
|
const cache = /* @__PURE__ */ new Map();
|
|
@@ -19977,11 +20178,12 @@ function createQuotaService(deps) {
|
|
|
19977
20178
|
}
|
|
19978
20179
|
return {
|
|
19979
20180
|
async getSummary(options = {}) {
|
|
19980
|
-
const [claude, codex, cursor, kimi, xai] = await Promise.all([
|
|
20181
|
+
const [claude, codex, cursor, kimi, opencode, xai] = await Promise.all([
|
|
19981
20182
|
load("claude", options.force === true || options.forceProvider === "claude"),
|
|
19982
20183
|
load("codex", options.force === true || options.forceProvider === "codex"),
|
|
19983
20184
|
load("cursor", options.force === true || options.forceProvider === "cursor"),
|
|
19984
20185
|
load("kimi", options.force === true || options.forceProvider === "kimi"),
|
|
20186
|
+
load("opencode", options.force === true || options.forceProvider === "opencode"),
|
|
19985
20187
|
load("xai", options.force === true || options.forceProvider === "xai")
|
|
19986
20188
|
]);
|
|
19987
20189
|
return {
|
|
@@ -19990,6 +20192,7 @@ function createQuotaService(deps) {
|
|
|
19990
20192
|
codex: withRisk(codex),
|
|
19991
20193
|
cursor: withRisk(cursor),
|
|
19992
20194
|
kimi: withRisk(kimi),
|
|
20195
|
+
opencode: withRisk(opencode),
|
|
19993
20196
|
xai: withRisk(xai)
|
|
19994
20197
|
}
|
|
19995
20198
|
};
|
|
@@ -20856,7 +21059,7 @@ messageDesc(cursorAgentFile, 70);
|
|
|
20856
21059
|
new Set(REASONING_EFFORTS);
|
|
20857
21060
|
|
|
20858
21061
|
// ../fleet-plugins/quota/provider-order.ts
|
|
20859
|
-
var PROVIDER_ORDER_DEFAULT = ["claude", "codex", "xai", "cursor", "kimi"];
|
|
21062
|
+
var PROVIDER_ORDER_DEFAULT = ["claude", "codex", "xai", "cursor", "opencode", "kimi"];
|
|
20860
21063
|
function isProviderId(value) {
|
|
20861
21064
|
return PROVIDER_ORDER_DEFAULT.includes(value);
|
|
20862
21065
|
}
|
|
@@ -18207,6 +18207,115 @@ var models_default = {
|
|
|
18207
18207
|
}
|
|
18208
18208
|
]
|
|
18209
18209
|
}
|
|
18210
|
+
},
|
|
18211
|
+
pricing: {
|
|
18212
|
+
source: "openrouter",
|
|
18213
|
+
observedAt: "2026-08-16T00:00:00Z",
|
|
18214
|
+
models: {
|
|
18215
|
+
"openai/gpt-5.6-sol": {
|
|
18216
|
+
inputCostPerToken: 5e-6,
|
|
18217
|
+
outputCostPerToken: 3e-5,
|
|
18218
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18219
|
+
cacheCreationInputTokenCost: 625e-8,
|
|
18220
|
+
aliases: [
|
|
18221
|
+
"gpt-5.6-sol"
|
|
18222
|
+
]
|
|
18223
|
+
},
|
|
18224
|
+
"openai/gpt-5.6-terra": {
|
|
18225
|
+
inputCostPerToken: 1e-6,
|
|
18226
|
+
outputCostPerToken: 6e-6,
|
|
18227
|
+
cacheReadInputTokenCost: 1e-7,
|
|
18228
|
+
cacheCreationInputTokenCost: 125e-8,
|
|
18229
|
+
aliases: [
|
|
18230
|
+
"gpt-5.6-terra"
|
|
18231
|
+
]
|
|
18232
|
+
},
|
|
18233
|
+
"openai/gpt-5.6-luna": {
|
|
18234
|
+
inputCostPerToken: 1e-7,
|
|
18235
|
+
outputCostPerToken: 6e-7,
|
|
18236
|
+
cacheReadInputTokenCost: 1e-8,
|
|
18237
|
+
cacheCreationInputTokenCost: 125e-9,
|
|
18238
|
+
aliases: [
|
|
18239
|
+
"gpt-5.6-luna"
|
|
18240
|
+
]
|
|
18241
|
+
},
|
|
18242
|
+
"x-ai/grok-4.5": {
|
|
18243
|
+
inputCostPerToken: 2e-6,
|
|
18244
|
+
outputCostPerToken: 6e-6,
|
|
18245
|
+
cacheReadInputTokenCost: 3e-7,
|
|
18246
|
+
aliases: [
|
|
18247
|
+
"grok-4.5"
|
|
18248
|
+
]
|
|
18249
|
+
},
|
|
18250
|
+
"x-ai/grok-4.6": {
|
|
18251
|
+
inputCostPerToken: 2e-6,
|
|
18252
|
+
outputCostPerToken: 6e-6,
|
|
18253
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18254
|
+
aliases: [
|
|
18255
|
+
"grok-4.6"
|
|
18256
|
+
]
|
|
18257
|
+
},
|
|
18258
|
+
"anthropic/claude-opus-5": {
|
|
18259
|
+
inputCostPerToken: 5e-6,
|
|
18260
|
+
outputCostPerToken: 25e-6,
|
|
18261
|
+
cacheReadInputTokenCost: 5e-7,
|
|
18262
|
+
cacheCreationInputTokenCost: 625e-8,
|
|
18263
|
+
aliases: [
|
|
18264
|
+
"claude-opus-5"
|
|
18265
|
+
]
|
|
18266
|
+
},
|
|
18267
|
+
"anthropic/claude-fable-5": {
|
|
18268
|
+
inputCostPerToken: 1e-5,
|
|
18269
|
+
outputCostPerToken: 5e-5,
|
|
18270
|
+
cacheReadInputTokenCost: 1e-6,
|
|
18271
|
+
cacheCreationInputTokenCost: 125e-7,
|
|
18272
|
+
aliases: [
|
|
18273
|
+
"claude-fable-5"
|
|
18274
|
+
]
|
|
18275
|
+
},
|
|
18276
|
+
"moonshotai/kimi-k3": {
|
|
18277
|
+
inputCostPerToken: 3e-6,
|
|
18278
|
+
outputCostPerToken: 15e-6,
|
|
18279
|
+
cacheReadInputTokenCost: 3e-7,
|
|
18280
|
+
aliases: [
|
|
18281
|
+
"k3",
|
|
18282
|
+
"kimi-k3"
|
|
18283
|
+
]
|
|
18284
|
+
},
|
|
18285
|
+
"qwen/qwen3.8-max": {
|
|
18286
|
+
inputCostPerToken: 2e-6,
|
|
18287
|
+
outputCostPerToken: 6e-6,
|
|
18288
|
+
cacheReadInputTokenCost: 25e-8,
|
|
18289
|
+
cacheCreationInputTokenCost: 25e-7,
|
|
18290
|
+
aliases: [
|
|
18291
|
+
"qwen3.8-max"
|
|
18292
|
+
]
|
|
18293
|
+
},
|
|
18294
|
+
"deepseek/deepseek-v4-flash": {
|
|
18295
|
+
inputCostPerToken: 14e-8,
|
|
18296
|
+
outputCostPerToken: 28e-8,
|
|
18297
|
+
cacheReadInputTokenCost: 28e-10,
|
|
18298
|
+
aliases: [
|
|
18299
|
+
"deepseek-v4-flash"
|
|
18300
|
+
]
|
|
18301
|
+
},
|
|
18302
|
+
"deepseek/deepseek-v4-pro": {
|
|
18303
|
+
inputCostPerToken: 435e-9,
|
|
18304
|
+
outputCostPerToken: 87e-8,
|
|
18305
|
+
cacheReadInputTokenCost: 3625e-12,
|
|
18306
|
+
aliases: [
|
|
18307
|
+
"deepseek-v4-pro"
|
|
18308
|
+
]
|
|
18309
|
+
},
|
|
18310
|
+
"z-ai/glm-5.2": {
|
|
18311
|
+
inputCostPerToken: 14e-7,
|
|
18312
|
+
outputCostPerToken: 44e-7,
|
|
18313
|
+
cacheReadInputTokenCost: 26e-8,
|
|
18314
|
+
aliases: [
|
|
18315
|
+
"glm-5.2"
|
|
18316
|
+
]
|
|
18317
|
+
}
|
|
18318
|
+
}
|
|
18210
18319
|
}
|
|
18211
18320
|
};
|
|
18212
18321
|
var GATEWAY_PROVIDERS = ["codex", "xai", "cursor", "opencode", "kimi"];
|
|
@@ -18269,6 +18378,18 @@ var GatewayBenchmarksRegistrySchema = external_exports.object({
|
|
|
18269
18378
|
sources: external_exports.record(external_exports.string().min(1), GatewayBenchmarkSourceSchema),
|
|
18270
18379
|
models: external_exports.record(external_exports.string().min(1), GatewayBenchmarkModelEntrySchema)
|
|
18271
18380
|
}).strict();
|
|
18381
|
+
var GatewayModelPricingSchema = external_exports.object({
|
|
18382
|
+
inputCostPerToken: external_exports.number().nonnegative(),
|
|
18383
|
+
outputCostPerToken: external_exports.number().nonnegative(),
|
|
18384
|
+
cacheReadInputTokenCost: external_exports.number().nonnegative(),
|
|
18385
|
+
cacheCreationInputTokenCost: external_exports.number().nonnegative().optional(),
|
|
18386
|
+
aliases: external_exports.array(external_exports.string().min(1)).min(1)
|
|
18387
|
+
}).strict();
|
|
18388
|
+
var GatewayPricingRegistrySchema = external_exports.object({
|
|
18389
|
+
source: external_exports.literal("openrouter"),
|
|
18390
|
+
observedAt: external_exports.iso.datetime(),
|
|
18391
|
+
models: external_exports.record(external_exports.string().min(1), GatewayModelPricingSchema)
|
|
18392
|
+
}).strict();
|
|
18272
18393
|
var GatewayModelEntrySchema = external_exports.object({
|
|
18273
18394
|
modelId: external_exports.string().min(1),
|
|
18274
18395
|
name: external_exports.string().min(1),
|
|
@@ -18299,7 +18420,8 @@ var GatewayModelsRegistrySchema = external_exports.object({
|
|
|
18299
18420
|
kimi: GatewayProviderSchema,
|
|
18300
18421
|
opencode: GatewayProviderSchema,
|
|
18301
18422
|
xai: GatewayProviderSchema
|
|
18302
|
-
}).strict()
|
|
18423
|
+
}).strict(),
|
|
18424
|
+
pricing: GatewayPricingRegistrySchema
|
|
18303
18425
|
}).strict();
|
|
18304
18426
|
var UNSUPPORTED_GATEWAY_MODEL_EFFORT = Object.freeze({ supported: false });
|
|
18305
18427
|
var benchmarksRegistry = parseGatewayBenchmarksRegistry(benchmarks_default);
|
|
@@ -18323,6 +18445,15 @@ var registry2 = (() => {
|
|
|
18323
18445
|
return parsed;
|
|
18324
18446
|
})();
|
|
18325
18447
|
var GATEWAY_MODELS_UPDATED_AT = registry2.updatedAt;
|
|
18448
|
+
registry2.pricing.observedAt;
|
|
18449
|
+
Object.freeze(
|
|
18450
|
+
Object.fromEntries(
|
|
18451
|
+
Object.entries(registry2.pricing.models).map(([modelId, pricing]) => [
|
|
18452
|
+
modelId,
|
|
18453
|
+
Object.freeze({ ...pricing, aliases: Object.freeze([...pricing.aliases]) })
|
|
18454
|
+
])
|
|
18455
|
+
)
|
|
18456
|
+
);
|
|
18326
18457
|
Object.entries(benchmarksRegistry.sources).map(([sourceId, source]) => `${sourceId}:${source.observedAt}`).sort().join("|");
|
|
18327
18458
|
Object.freeze(
|
|
18328
18459
|
Object.fromEntries(
|
|
@@ -19522,6 +19653,7 @@ var CLAUDE_GATEWAY_TURN_KEYS = Object.freeze([
|
|
|
19522
19653
|
"allowedTools",
|
|
19523
19654
|
"disallowedTools",
|
|
19524
19655
|
"permissionMode",
|
|
19656
|
+
"canUseTool",
|
|
19525
19657
|
"mcpServers",
|
|
19526
19658
|
"servedMcpServers",
|
|
19527
19659
|
"includePartialMessages",
|
|
@@ -19537,8 +19669,10 @@ function claudeGatewayLaunchEnv(inherited, options) {
|
|
|
19537
19669
|
if (value !== void 0) env[key] = value;
|
|
19538
19670
|
}
|
|
19539
19671
|
env.ANTHROPIC_BASE_URL = options.baseUrl;
|
|
19540
|
-
|
|
19541
|
-
|
|
19672
|
+
if (options.homeKind !== "shared") {
|
|
19673
|
+
env.CLAUDE_CONFIG_DIR = options.configDir;
|
|
19674
|
+
env.CLAUDE_SECURESTORAGE_CONFIG_DIR = "";
|
|
19675
|
+
}
|
|
19542
19676
|
env.CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY = "1";
|
|
19543
19677
|
env.ENABLE_TOOL_SEARCH = "true";
|
|
19544
19678
|
env.CLAUDE_CODE_AUTO_COMPACT_WINDOW ??= "1000000";
|
|
@@ -19553,6 +19687,18 @@ function claudeGatewayModelCache(options) {
|
|
|
19553
19687
|
}
|
|
19554
19688
|
|
|
19555
19689
|
// ../../packages/core-agent/src/claude/config-dir.ts
|
|
19690
|
+
function createSharedClaudeConfigHome(configDir) {
|
|
19691
|
+
if (typeof configDir !== "string" || !path3__default.isAbsolute(configDir)) {
|
|
19692
|
+
throw new TypeError("A shared Claude config home requires an absolute config directory path.");
|
|
19693
|
+
}
|
|
19694
|
+
return {
|
|
19695
|
+
path: configDir,
|
|
19696
|
+
async writeModelCache() {
|
|
19697
|
+
},
|
|
19698
|
+
async dispose() {
|
|
19699
|
+
}
|
|
19700
|
+
};
|
|
19701
|
+
}
|
|
19556
19702
|
async function createIsolatedClaudeConfigDir(tempRoot = tmpdir()) {
|
|
19557
19703
|
const root = await mkdtemp(path3__default.join(tempRoot, "core-agent-claude-"));
|
|
19558
19704
|
const cachePath = path3__default.join(root, CLAUDE_GATEWAY_MODEL_CACHE_RELPATH);
|
|
@@ -19609,7 +19755,7 @@ async function createClaudeGatewaySdk(options) {
|
|
|
19609
19755
|
const accepted = resolveModels(options.models);
|
|
19610
19756
|
const catalogModels = accepted.filter((entry) => entry.kind === "catalog").map((entry) => entry.model);
|
|
19611
19757
|
const inherited = options.env ?? process.env;
|
|
19612
|
-
const configDir = await createIsolatedClaudeConfigDir(options.tempRoot);
|
|
19758
|
+
const configDir = options.home?.kind === "shared" ? createSharedClaudeConfigHome(options.home.configDir) : await createIsolatedClaudeConfigDir(options.tempRoot);
|
|
19613
19759
|
let disposed = false;
|
|
19614
19760
|
let active = null;
|
|
19615
19761
|
const sdk = {
|
|
@@ -19624,19 +19770,27 @@ async function createClaudeGatewaySdk(options) {
|
|
|
19624
19770
|
}
|
|
19625
19771
|
const model = resolveTurnModel(turn.model, accepted);
|
|
19626
19772
|
await configDir.writeModelCache({ baseUrl, models: catalogModels, fetchedAt: Date.now() });
|
|
19627
|
-
const env = claudeGatewayLaunchEnv(inherited, {
|
|
19773
|
+
const env = claudeGatewayLaunchEnv(inherited, {
|
|
19774
|
+
baseUrl,
|
|
19775
|
+
configDir: configDir.path,
|
|
19776
|
+
homeKind: options.home?.kind === "shared" ? "shared" : "isolated"
|
|
19777
|
+
});
|
|
19628
19778
|
const run = runVendorQuery({
|
|
19629
19779
|
prompt: turn.prompt,
|
|
19630
19780
|
options: {
|
|
19631
19781
|
env,
|
|
19632
19782
|
model,
|
|
19633
19783
|
...turn.systemPrompt === void 0 ? {} : { systemPrompt: vendorSystemPrompt(turn.systemPrompt) },
|
|
19634
|
-
// 패키지가 스스로 지어내는 지시는
|
|
19635
|
-
//
|
|
19636
|
-
// CLAUDE.md를 끄고, `strictMcpConfig
|
|
19637
|
-
//
|
|
19638
|
-
settingSources: [],
|
|
19639
|
-
strictMcpConfig: true,
|
|
19784
|
+
// 패키지가 스스로 지어내는 지시는 없다 — 여기 실리는 것은 전부 호출자가 고른 것이고,
|
|
19785
|
+
// 고르지 않으면 아무것도 붙지 않는다. 두 기본값이 그 규율을 구조로 만든다:
|
|
19786
|
+
// `settingSources: []`가 사용자·프로젝트 설정과 CLAUDE.md를 끄고, `strictMcpConfig`가
|
|
19787
|
+
// 그와 별개인 ambient .mcp.json·플러그인 MCP를 막는다.
|
|
19788
|
+
settingSources: options.settingSources ? [...options.settingSources] : [],
|
|
19789
|
+
strictMcpConfig: options.allowAmbientMcpServers !== true,
|
|
19790
|
+
// 플러그인의 MCP 선언은 읽지 않는다 — 좌표는 호출자가 이미 소유한다.
|
|
19791
|
+
...options.plugins && options.plugins.length > 0 ? { plugins: options.plugins.map((plugin) => ({ type: "local", path: plugin.path, skipMcpDiscovery: true })) } : {},
|
|
19792
|
+
// `--settings`와 같은 자리다. flag 소스로 병합되므로 사용자·프로젝트 설정을 대체하지 않는다.
|
|
19793
|
+
...options.skillOverrides && Object.keys(options.skillOverrides).length > 0 ? { settings: { skillOverrides: { ...options.skillOverrides } } } : {},
|
|
19640
19794
|
...turn.effort === void 0 ? {} : { effort: turn.effort },
|
|
19641
19795
|
...turn.cwd === void 0 ? {} : { cwd: turn.cwd },
|
|
19642
19796
|
...turn.resume === void 0 ? {} : { resume: turn.resume },
|
|
@@ -19646,6 +19800,7 @@ async function createClaudeGatewaySdk(options) {
|
|
|
19646
19800
|
...turn.allowedTools === void 0 ? {} : { allowedTools: [...turn.allowedTools] },
|
|
19647
19801
|
...turn.disallowedTools === void 0 ? {} : { disallowedTools: [...turn.disallowedTools] },
|
|
19648
19802
|
...turn.permissionMode === void 0 ? {} : { permissionMode: turn.permissionMode },
|
|
19803
|
+
...turn.canUseTool === void 0 ? {} : { canUseTool: vendorCanUseTool(turn.canUseTool) },
|
|
19649
19804
|
...turn.mcpServers === void 0 && turn.servedMcpServers === void 0 ? {} : { mcpServers: { ...turn.mcpServers, ...vendorServedMcpServers(turn.servedMcpServers) } },
|
|
19650
19805
|
...turn.includePartialMessages === void 0 ? {} : { includePartialMessages: turn.includePartialMessages },
|
|
19651
19806
|
...turn.abortController === void 0 ? {} : { abortController: turn.abortController },
|
|
@@ -19741,6 +19896,22 @@ function resolveTurnModel(requested, accepted) {
|
|
|
19741
19896
|
}
|
|
19742
19897
|
return entry.id;
|
|
19743
19898
|
}
|
|
19899
|
+
function vendorCanUseTool(canUseTool) {
|
|
19900
|
+
return async (toolName, input, options) => {
|
|
19901
|
+
try {
|
|
19902
|
+
const decision = await canUseTool(toolName, input, {
|
|
19903
|
+
toolUseId: typeof options.toolUseID === "string" ? options.toolUseID : "",
|
|
19904
|
+
signal: options.signal instanceof AbortSignal ? options.signal : new AbortController().signal
|
|
19905
|
+
});
|
|
19906
|
+
if (decision.behavior === "allow") {
|
|
19907
|
+
return decision.updatedInput === void 0 ? { behavior: "allow", updatedInput: input } : { behavior: "allow", updatedInput: { ...decision.updatedInput } };
|
|
19908
|
+
}
|
|
19909
|
+
return { behavior: "deny", message: decision.message };
|
|
19910
|
+
} catch (error51) {
|
|
19911
|
+
return { behavior: "deny", message: error51 instanceof Error ? error51.message : String(error51) };
|
|
19912
|
+
}
|
|
19913
|
+
};
|
|
19914
|
+
}
|
|
19744
19915
|
function vendorSystemPrompt(systemPrompt) {
|
|
19745
19916
|
const text = systemPrompt?.text;
|
|
19746
19917
|
if (typeof text !== "string" || text.length === 0) {
|