@dotobokuri/fleet-console 1.61.0 → 1.63.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.
Files changed (68) hide show
  1. package/README.md +2 -1
  2. package/dist/cli.mjs +242 -29
  3. package/dist/client/assets/{_baseUniq-9W447fNf.js → _baseUniq-CVUU389k.js} +1 -1
  4. package/dist/client/assets/{arc-hoitnVWi.js → arc-Fg3WjPoW.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-Q4EWVU46-DYd58Vfc.js → architectureDiagram-Q4EWVU46-gAB_QWIv.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-DXYQGD6D-kuFqPdP_.js → blockDiagram-DXYQGD6D-DCY_3CSv.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-AHTNJAMY-C7n41zCn.js → c4Diagram-AHTNJAMY-2ai4d9rg.js} +1 -1
  8. package/dist/client/assets/channel-DlA1BRCV.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-DrHeb54-.js → chunk-4BX2VUAB-C-sjgNCE.js} +1 -1
  10. package/dist/client/assets/{chunk-4TB4RGXK-DFjT6kwT.js → chunk-4TB4RGXK-Co7w9KaD.js} +1 -1
  11. package/dist/client/assets/{chunk-55IACEB6-DxEzuA7W.js → chunk-55IACEB6-Dspr2174.js} +1 -1
  12. package/dist/client/assets/{chunk-EDXVE4YY-aAlF0YEo.js → chunk-EDXVE4YY-UzzG0ax3.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-DwqRMFL1.js → chunk-FMBD7UC4-DKXcUQqJ.js} +1 -1
  14. package/dist/client/assets/{chunk-OYMX7WX6-DCkUlaRi.js → chunk-OYMX7WX6-vW--qrkP.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-B1Dx8Zhl.js → chunk-QZHKN3VN-DyE-yBhf.js} +1 -1
  16. package/dist/client/assets/{chunk-YZCP3GAM-J2bgJmn-.js → chunk-YZCP3GAM-C7LLTO2-.js} +1 -1
  17. package/dist/client/assets/classDiagram-6PBFFD2Q-rBpGSdtk.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-HSJHXN6E-rBpGSdtk.js +1 -0
  19. package/dist/client/assets/clone-_1aYWCbr.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-BxzLzyJp.js → cose-bilkent-S5V4N54A-BkDNeJiw.js} +1 -1
  21. package/dist/client/assets/{dagre-KV5264BT-D1ixDJxZ.js → dagre-KV5264BT-DqeN9oF3.js} +1 -1
  22. package/dist/client/assets/{diagram-5BDNPKRD-DZPIz1Pa.js → diagram-5BDNPKRD-BXzt4-3Y.js} +1 -1
  23. package/dist/client/assets/{diagram-G4DWMVQ6-Pbcr-a5H.js → diagram-G4DWMVQ6-DbzDYVOf.js} +1 -1
  24. package/dist/client/assets/{diagram-MMDJMWI5-CBssBmPY.js → diagram-MMDJMWI5-wPQu3o7B.js} +1 -1
  25. package/dist/client/assets/{diagram-TYMM5635-cVQUs6jp.js → diagram-TYMM5635-C-vwFwzf.js} +1 -1
  26. package/dist/client/assets/{erDiagram-SMLLAGMA-ChMSAXos.js → erDiagram-SMLLAGMA-CcukuTgN.js} +1 -1
  27. package/dist/client/assets/{flowDiagram-DWJPFMVM-FEIrU5mu.js → flowDiagram-DWJPFMVM-BT8ZNr2Y.js} +1 -1
  28. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-D6ELHTJY.js → ganttDiagram-T4ZO3ILL-B_wNcZrL.js} +1 -1
  29. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DTJ6HgV4.js → gitGraphDiagram-UUTBAWPF-dUwwvDSd.js} +1 -1
  30. package/dist/client/assets/{graph-uscjDdHm.js → graph-C4i_jr7e.js} +1 -1
  31. package/dist/client/assets/index-BXtDpU36.js +465 -0
  32. package/dist/client/assets/index-CLb_APbh.css +1 -0
  33. package/dist/client/assets/{infoDiagram-42DDH7IO-C2AlA___.js → infoDiagram-42DDH7IO-Bf2KPu0t.js} +1 -1
  34. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-BZGfIhBp.js → ishikawaDiagram-UXIWVN3A-DjHChg2o.js} +1 -1
  35. package/dist/client/assets/{journeyDiagram-VCZTEJTY-DnGNMdvj.js → journeyDiagram-VCZTEJTY-B08epGYF.js} +1 -1
  36. package/dist/client/assets/{kanban-definition-6JOO6SKY-BkuplZGR.js → kanban-definition-6JOO6SKY-BFasXRgc.js} +1 -1
  37. package/dist/client/assets/{layout-BBayH8iU.js → layout-Q_W10VzL.js} +1 -1
  38. package/dist/client/assets/{linear-BQvaHed0.js → linear-Dy4fc5kq.js} +1 -1
  39. package/dist/client/assets/{mermaid.core-CO0f3d6Y.js → mermaid.core-OtTy8N5f.js} +4 -4
  40. package/dist/client/assets/{min-B610GdeY.js → min-DODD7JTz.js} +1 -1
  41. package/dist/client/assets/{mindmap-definition-QFDTVHPH-gwkhgCyj.js → mindmap-definition-QFDTVHPH-DMhpsiYD.js} +1 -1
  42. package/dist/client/assets/{pieDiagram-DEJITSTG-DYU2zgk8.js → pieDiagram-DEJITSTG-C5usaVgs.js} +1 -1
  43. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-B5Vkk65i.js → quadrantDiagram-34T5L4WZ-B-b2NvBz.js} +1 -1
  44. package/dist/client/assets/{requirementDiagram-MS252O5E-D4EcF7kq.js → requirementDiagram-MS252O5E-D6_4jY3n.js} +1 -1
  45. package/dist/client/assets/{sankeyDiagram-XADWPNL6-DFk-RMV4.js → sankeyDiagram-XADWPNL6-B6imEhCV.js} +1 -1
  46. package/dist/client/assets/{sequenceDiagram-FGHM5R23-B-beo9e0.js → sequenceDiagram-FGHM5R23-BRHNnuqK.js} +1 -1
  47. package/dist/client/assets/{stateDiagram-FHFEXIEX-VDT0TOd7.js → stateDiagram-FHFEXIEX-RiIddIHL.js} +1 -1
  48. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-CsHfIgMa.js +1 -0
  49. package/dist/client/assets/{timeline-definition-GMOUNBTQ-By4DMNqG.js → timeline-definition-GMOUNBTQ-BhP14Blt.js} +1 -1
  50. package/dist/client/assets/{vennDiagram-DHZGUBPP-DzlBrijd.js → vennDiagram-DHZGUBPP-CtzwrBNs.js} +1 -1
  51. package/dist/client/assets/{wardley-RL74JXVD-BHSHTMU6.js → wardley-RL74JXVD-TXsee18-.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-COB-cWHQ.js → wardleyDiagram-NUSXRM2D-CrJP7pf7.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-5P7HB3ND-C-GVSBHd.js → xychartDiagram-5P7HB3ND-rB-PigjI.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/fleet-plugins/ledger/routes.mjs +19829 -428
  56. package/dist/fleet-plugins/quota/routes.mjs +213 -15
  57. package/dist/fleet-plugins/scuttlebutt/routes.mjs +226 -26
  58. package/dist/fleet-plugins/terminal/routes.mjs +7324 -5930
  59. package/dist/fleet.mjs +6710 -6046
  60. package/package.json +2 -2
  61. package/dist/client/assets/channel-D2TsEFjE.js +0 -1
  62. package/dist/client/assets/classDiagram-6PBFFD2Q-DhjJiPic.js +0 -1
  63. package/dist/client/assets/classDiagram-v2-HSJHXN6E-DhjJiPic.js +0 -1
  64. package/dist/client/assets/clone-DwVC2-Mi.js +0 -1
  65. package/dist/client/assets/index-DMjY1OQ0.js +0 -465
  66. package/dist/client/assets/index-Ec4RaE0g.css +0 -1
  67. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-wHPBl_p1.js +0 -1
  68. /package/{AGENTS.md → CLAUDE.md} +0 -0
@@ -17709,12 +17709,12 @@ var benchmarks_default = {
17709
17709
  };
17710
17710
  var models_default = {
17711
17711
  version: 1,
17712
- updatedAt: "2026-08-15T00:00:00Z",
17712
+ updatedAt: "2026-08-17T00:00:00Z",
17713
17713
  providers: {
17714
17714
  codex: {
17715
17715
  name: "Codex",
17716
17716
  defaultModel: "gpt-5.6-sol",
17717
- source: "codex app-server model/list (codex-cli 0.147.0, 2026-08-11 \u2014 ultra advertised for sol/sol-wm/terra, luna stops at max) for model/effort/service-tier; contextWindow=272000 is codex debug models context_window/max_context_window (codex-cli 0.146.0, 2026-08-02)",
17717
+ source: "codex app-server model/list (codex-cli 0.147.0, observed 2026-08-11) for model/effort/service-tier; Fleet catalog effort ladders are capped at max because harness launch capabilities are not model rungs; contextWindow=272000 is codex debug models context_window/max_context_window (codex-cli 0.146.0, observed 2026-08-02)",
17718
17718
  models: [
17719
17719
  {
17720
17720
  modelId: "gpt-5.6-sol",
@@ -17728,8 +17728,7 @@ var models_default = {
17728
17728
  "medium",
17729
17729
  "high",
17730
17730
  "xhigh",
17731
- "max",
17732
- "ultra"
17731
+ "max"
17733
17732
  ]
17734
17733
  },
17735
17734
  aliases: [
@@ -17751,8 +17750,7 @@ var models_default = {
17751
17750
  "medium",
17752
17751
  "high",
17753
17752
  "xhigh",
17754
- "max",
17755
- "ultra"
17753
+ "max"
17756
17754
  ]
17757
17755
  },
17758
17756
  aliases: [
@@ -17772,8 +17770,7 @@ var models_default = {
17772
17770
  "medium",
17773
17771
  "high",
17774
17772
  "xhigh",
17775
- "max",
17776
- "ultra"
17773
+ "max"
17777
17774
  ]
17778
17775
  },
17779
17776
  aliases: [
@@ -17795,8 +17792,7 @@ var models_default = {
17795
17792
  "medium",
17796
17793
  "high",
17797
17794
  "xhigh",
17798
- "max",
17799
- "ultra"
17795
+ "max"
17800
17796
  ]
17801
17797
  },
17802
17798
  aliases: [
@@ -18207,6 +18203,115 @@ var models_default = {
18207
18203
  }
18208
18204
  ]
18209
18205
  }
18206
+ },
18207
+ pricing: {
18208
+ source: "openrouter",
18209
+ observedAt: "2026-08-16T00:00:00Z",
18210
+ models: {
18211
+ "openai/gpt-5.6-sol": {
18212
+ inputCostPerToken: 5e-6,
18213
+ outputCostPerToken: 3e-5,
18214
+ cacheReadInputTokenCost: 5e-7,
18215
+ cacheCreationInputTokenCost: 625e-8,
18216
+ aliases: [
18217
+ "gpt-5.6-sol"
18218
+ ]
18219
+ },
18220
+ "openai/gpt-5.6-terra": {
18221
+ inputCostPerToken: 1e-6,
18222
+ outputCostPerToken: 6e-6,
18223
+ cacheReadInputTokenCost: 1e-7,
18224
+ cacheCreationInputTokenCost: 125e-8,
18225
+ aliases: [
18226
+ "gpt-5.6-terra"
18227
+ ]
18228
+ },
18229
+ "openai/gpt-5.6-luna": {
18230
+ inputCostPerToken: 1e-7,
18231
+ outputCostPerToken: 6e-7,
18232
+ cacheReadInputTokenCost: 1e-8,
18233
+ cacheCreationInputTokenCost: 125e-9,
18234
+ aliases: [
18235
+ "gpt-5.6-luna"
18236
+ ]
18237
+ },
18238
+ "x-ai/grok-4.5": {
18239
+ inputCostPerToken: 2e-6,
18240
+ outputCostPerToken: 6e-6,
18241
+ cacheReadInputTokenCost: 3e-7,
18242
+ aliases: [
18243
+ "grok-4.5"
18244
+ ]
18245
+ },
18246
+ "x-ai/grok-4.6": {
18247
+ inputCostPerToken: 2e-6,
18248
+ outputCostPerToken: 6e-6,
18249
+ cacheReadInputTokenCost: 5e-7,
18250
+ aliases: [
18251
+ "grok-4.6"
18252
+ ]
18253
+ },
18254
+ "anthropic/claude-opus-5": {
18255
+ inputCostPerToken: 5e-6,
18256
+ outputCostPerToken: 25e-6,
18257
+ cacheReadInputTokenCost: 5e-7,
18258
+ cacheCreationInputTokenCost: 625e-8,
18259
+ aliases: [
18260
+ "claude-opus-5"
18261
+ ]
18262
+ },
18263
+ "anthropic/claude-fable-5": {
18264
+ inputCostPerToken: 1e-5,
18265
+ outputCostPerToken: 5e-5,
18266
+ cacheReadInputTokenCost: 1e-6,
18267
+ cacheCreationInputTokenCost: 125e-7,
18268
+ aliases: [
18269
+ "claude-fable-5"
18270
+ ]
18271
+ },
18272
+ "moonshotai/kimi-k3": {
18273
+ inputCostPerToken: 3e-6,
18274
+ outputCostPerToken: 15e-6,
18275
+ cacheReadInputTokenCost: 3e-7,
18276
+ aliases: [
18277
+ "k3",
18278
+ "kimi-k3"
18279
+ ]
18280
+ },
18281
+ "qwen/qwen3.8-max": {
18282
+ inputCostPerToken: 2e-6,
18283
+ outputCostPerToken: 6e-6,
18284
+ cacheReadInputTokenCost: 25e-8,
18285
+ cacheCreationInputTokenCost: 25e-7,
18286
+ aliases: [
18287
+ "qwen3.8-max"
18288
+ ]
18289
+ },
18290
+ "deepseek/deepseek-v4-flash": {
18291
+ inputCostPerToken: 14e-8,
18292
+ outputCostPerToken: 28e-8,
18293
+ cacheReadInputTokenCost: 28e-10,
18294
+ aliases: [
18295
+ "deepseek-v4-flash"
18296
+ ]
18297
+ },
18298
+ "deepseek/deepseek-v4-pro": {
18299
+ inputCostPerToken: 435e-9,
18300
+ outputCostPerToken: 87e-8,
18301
+ cacheReadInputTokenCost: 3625e-12,
18302
+ aliases: [
18303
+ "deepseek-v4-pro"
18304
+ ]
18305
+ },
18306
+ "z-ai/glm-5.2": {
18307
+ inputCostPerToken: 14e-7,
18308
+ outputCostPerToken: 44e-7,
18309
+ cacheReadInputTokenCost: 26e-8,
18310
+ aliases: [
18311
+ "glm-5.2"
18312
+ ]
18313
+ }
18314
+ }
18210
18315
  }
18211
18316
  };
18212
18317
  var GATEWAY_PROVIDERS = ["codex", "xai", "cursor", "opencode", "kimi"];
@@ -18216,8 +18321,7 @@ var GATEWAY_REASONING_EFFORTS = [
18216
18321
  "medium",
18217
18322
  "high",
18218
18323
  "xhigh",
18219
- "max",
18220
- "ultra"
18324
+ "max"
18221
18325
  ];
18222
18326
  var GatewayEffortUpstreamModelIdsSchema = external_exports.partialRecord(
18223
18327
  external_exports.enum(GATEWAY_REASONING_EFFORTS),
@@ -18269,6 +18373,18 @@ var GatewayBenchmarksRegistrySchema = external_exports.object({
18269
18373
  sources: external_exports.record(external_exports.string().min(1), GatewayBenchmarkSourceSchema),
18270
18374
  models: external_exports.record(external_exports.string().min(1), GatewayBenchmarkModelEntrySchema)
18271
18375
  }).strict();
18376
+ var GatewayModelPricingSchema = external_exports.object({
18377
+ inputCostPerToken: external_exports.number().nonnegative(),
18378
+ outputCostPerToken: external_exports.number().nonnegative(),
18379
+ cacheReadInputTokenCost: external_exports.number().nonnegative(),
18380
+ cacheCreationInputTokenCost: external_exports.number().nonnegative().optional(),
18381
+ aliases: external_exports.array(external_exports.string().min(1)).min(1)
18382
+ }).strict();
18383
+ var GatewayPricingRegistrySchema = external_exports.object({
18384
+ source: external_exports.literal("openrouter"),
18385
+ observedAt: external_exports.iso.datetime(),
18386
+ models: external_exports.record(external_exports.string().min(1), GatewayModelPricingSchema)
18387
+ }).strict();
18272
18388
  var GatewayModelEntrySchema = external_exports.object({
18273
18389
  modelId: external_exports.string().min(1),
18274
18390
  name: external_exports.string().min(1),
@@ -18299,7 +18415,8 @@ var GatewayModelsRegistrySchema = external_exports.object({
18299
18415
  kimi: GatewayProviderSchema,
18300
18416
  opencode: GatewayProviderSchema,
18301
18417
  xai: GatewayProviderSchema
18302
- }).strict()
18418
+ }).strict(),
18419
+ pricing: GatewayPricingRegistrySchema
18303
18420
  }).strict();
18304
18421
  var UNSUPPORTED_GATEWAY_MODEL_EFFORT = Object.freeze({ supported: false });
18305
18422
  var benchmarksRegistry = parseGatewayBenchmarksRegistry(benchmarks_default);
@@ -18323,6 +18440,15 @@ var registry2 = (() => {
18323
18440
  return parsed;
18324
18441
  })();
18325
18442
  var GATEWAY_MODELS_UPDATED_AT = registry2.updatedAt;
18443
+ registry2.pricing.observedAt;
18444
+ Object.freeze(
18445
+ Object.fromEntries(
18446
+ Object.entries(registry2.pricing.models).map(([modelId, pricing]) => [
18447
+ modelId,
18448
+ Object.freeze({ ...pricing, aliases: Object.freeze([...pricing.aliases]) })
18449
+ ])
18450
+ )
18451
+ );
18326
18452
  Object.entries(benchmarksRegistry.sources).map(([sourceId, source]) => `${sourceId}:${source.observedAt}`).sort().join("|");
18327
18453
  Object.freeze(
18328
18454
  Object.fromEntries(
@@ -18583,8 +18709,7 @@ var ANTHROPIC_EFFORT_RUNGS = /* @__PURE__ */ new Set([
18583
18709
  "medium",
18584
18710
  "high",
18585
18711
  "xhigh",
18586
- "max",
18587
- "ultra"
18712
+ "max"
18588
18713
  ]);
18589
18714
  function freezeGatewayModelEffort(effort) {
18590
18715
  if (!effort?.supported) return UNSUPPORTED_GATEWAY_MODEL_EFFORT;
@@ -19522,6 +19647,7 @@ var CLAUDE_GATEWAY_TURN_KEYS = Object.freeze([
19522
19647
  "allowedTools",
19523
19648
  "disallowedTools",
19524
19649
  "permissionMode",
19650
+ "canUseTool",
19525
19651
  "mcpServers",
19526
19652
  "servedMcpServers",
19527
19653
  "includePartialMessages",
@@ -19537,8 +19663,10 @@ function claudeGatewayLaunchEnv(inherited, options) {
19537
19663
  if (value !== void 0) env[key] = value;
19538
19664
  }
19539
19665
  env.ANTHROPIC_BASE_URL = options.baseUrl;
19540
- env.CLAUDE_CONFIG_DIR = options.configDir;
19541
- env.CLAUDE_SECURESTORAGE_CONFIG_DIR = "";
19666
+ if (options.homeKind !== "shared") {
19667
+ env.CLAUDE_CONFIG_DIR = options.configDir;
19668
+ env.CLAUDE_SECURESTORAGE_CONFIG_DIR = "";
19669
+ }
19542
19670
  env.CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY = "1";
19543
19671
  env.ENABLE_TOOL_SEARCH = "true";
19544
19672
  env.CLAUDE_CODE_AUTO_COMPACT_WINDOW ??= "1000000";
@@ -19553,6 +19681,18 @@ function claudeGatewayModelCache(options) {
19553
19681
  }
19554
19682
 
19555
19683
  // ../../packages/core-agent/src/claude/config-dir.ts
19684
+ function createSharedClaudeConfigHome(configDir) {
19685
+ if (typeof configDir !== "string" || !path3__default.isAbsolute(configDir)) {
19686
+ throw new TypeError("A shared Claude config home requires an absolute config directory path.");
19687
+ }
19688
+ return {
19689
+ path: configDir,
19690
+ async writeModelCache() {
19691
+ },
19692
+ async dispose() {
19693
+ }
19694
+ };
19695
+ }
19556
19696
  async function createIsolatedClaudeConfigDir(tempRoot = tmpdir()) {
19557
19697
  const root = await mkdtemp(path3__default.join(tempRoot, "core-agent-claude-"));
19558
19698
  const cachePath = path3__default.join(root, CLAUDE_GATEWAY_MODEL_CACHE_RELPATH);
@@ -19574,6 +19714,32 @@ async function createIsolatedClaudeConfigDir(tempRoot = tmpdir()) {
19574
19714
  }
19575
19715
  };
19576
19716
  }
19717
+ function readVendorContextUsage(response) {
19718
+ if (typeof response !== "object" || response === null) return null;
19719
+ const usage = response;
19720
+ if (typeof usage.totalTokens !== "number" || typeof usage.maxTokens !== "number") return null;
19721
+ const rows = Array.isArray(usage.categories) ? usage.categories : [];
19722
+ const memory = Array.isArray(usage.memoryFiles) ? usage.memoryFiles : [];
19723
+ const mcp = Array.isArray(usage.mcpTools) ? usage.mcpTools : [];
19724
+ return {
19725
+ total: usage.totalTokens,
19726
+ max: usage.maxTokens,
19727
+ model: typeof usage.model === "string" ? usage.model : "",
19728
+ compactAt: usage.isAutoCompactEnabled === true && typeof usage.autoCompactThreshold === "number" ? usage.autoCompactThreshold : null,
19729
+ categories: rows.flatMap((row) => {
19730
+ const entry = row;
19731
+ return typeof entry?.name === "string" && typeof entry.tokens === "number" ? [{ name: entry.name, tokens: entry.tokens, deferred: entry.isDeferred === true }] : [];
19732
+ }),
19733
+ memoryFiles: memory.flatMap((row) => {
19734
+ const entry = row;
19735
+ return typeof entry?.path === "string" && typeof entry.tokens === "number" ? [{ path: entry.path, tokens: entry.tokens }] : [];
19736
+ }),
19737
+ mcpTools: mcp.flatMap((row) => {
19738
+ const entry = row;
19739
+ return typeof entry?.name === "string" && typeof entry.tokens === "number" ? [{ name: entry.name, server: typeof entry.serverName === "string" ? entry.serverName : "", tokens: entry.tokens }] : [];
19740
+ })
19741
+ };
19742
+ }
19577
19743
  function runVendorQuery(input) {
19578
19744
  const run = query({
19579
19745
  prompt: input.prompt,
@@ -19581,6 +19747,14 @@ function runVendorQuery(input) {
19581
19747
  });
19582
19748
  let closed = false;
19583
19749
  return {
19750
+ async getContextUsage() {
19751
+ if (closed || typeof run.getContextUsage !== "function") return null;
19752
+ try {
19753
+ return readVendorContextUsage(await run.getContextUsage());
19754
+ } catch {
19755
+ return null;
19756
+ }
19757
+ },
19584
19758
  [Symbol.asyncIterator]() {
19585
19759
  const iterator = run[Symbol.asyncIterator]();
19586
19760
  return {
@@ -19609,7 +19783,7 @@ async function createClaudeGatewaySdk(options) {
19609
19783
  const accepted = resolveModels(options.models);
19610
19784
  const catalogModels = accepted.filter((entry) => entry.kind === "catalog").map((entry) => entry.model);
19611
19785
  const inherited = options.env ?? process.env;
19612
- const configDir = await createIsolatedClaudeConfigDir(options.tempRoot);
19786
+ const configDir = options.home?.kind === "shared" ? createSharedClaudeConfigHome(options.home.configDir) : await createIsolatedClaudeConfigDir(options.tempRoot);
19613
19787
  let disposed = false;
19614
19788
  let active = null;
19615
19789
  const sdk = {
@@ -19624,19 +19798,27 @@ async function createClaudeGatewaySdk(options) {
19624
19798
  }
19625
19799
  const model = resolveTurnModel(turn.model, accepted);
19626
19800
  await configDir.writeModelCache({ baseUrl, models: catalogModels, fetchedAt: Date.now() });
19627
- const env = claudeGatewayLaunchEnv(inherited, { baseUrl, configDir: configDir.path });
19801
+ const env = claudeGatewayLaunchEnv(inherited, {
19802
+ baseUrl,
19803
+ configDir: configDir.path,
19804
+ homeKind: options.home?.kind === "shared" ? "shared" : "isolated"
19805
+ });
19628
19806
  const run = runVendorQuery({
19629
19807
  prompt: turn.prompt,
19630
19808
  options: {
19631
19809
  env,
19632
19810
  model,
19633
19811
  ...turn.systemPrompt === void 0 ? {} : { systemPrompt: vendorSystemPrompt(turn.systemPrompt) },
19634
- // 패키지가 스스로 지어내는 지시는 없다. systemPrompt는 호출자가 것을 그대로 옮긴
19635
- // 것뿐이고, 주지 않으면 아무것도 붙지 않는다. `settingSources: []`는 사용자·프로젝트 설정과
19636
- // CLAUDE.md를 끄고, `strictMcpConfig`는 그와 별개인 ambient .mcp.json을 막는다 — 둘 다
19637
- // 세워야 호출자가 쓰지 않은 지시가 새지 않는다.
19638
- settingSources: [],
19639
- strictMcpConfig: true,
19812
+ // 패키지가 스스로 지어내는 지시는 없다 여기 실리는 것은 전부 호출자가 고른 것이고,
19813
+ // 고르지 않으면 아무것도 붙지 않는다. 기본값이 규율을 구조로 만든다:
19814
+ // `settingSources: []`가 사용자·프로젝트 설정과 CLAUDE.md를 끄고, `strictMcpConfig`가
19815
+ // 그와 별개인 ambient .mcp.json·플러그인 MCP를 막는다.
19816
+ settingSources: options.settingSources ? [...options.settingSources] : [],
19817
+ strictMcpConfig: options.allowAmbientMcpServers !== true,
19818
+ // 플러그인의 MCP 선언은 읽지 않는다 — 좌표는 호출자가 이미 소유한다.
19819
+ ...options.plugins && options.plugins.length > 0 ? { plugins: options.plugins.map((plugin) => ({ type: "local", path: plugin.path, skipMcpDiscovery: true })) } : {},
19820
+ // `--settings`와 같은 자리다. flag 소스로 병합되므로 사용자·프로젝트 설정을 대체하지 않는다.
19821
+ ...options.skillOverrides && Object.keys(options.skillOverrides).length > 0 ? { settings: { skillOverrides: { ...options.skillOverrides } } } : {},
19640
19822
  ...turn.effort === void 0 ? {} : { effort: turn.effort },
19641
19823
  ...turn.cwd === void 0 ? {} : { cwd: turn.cwd },
19642
19824
  ...turn.resume === void 0 ? {} : { resume: turn.resume },
@@ -19646,6 +19828,7 @@ async function createClaudeGatewaySdk(options) {
19646
19828
  ...turn.allowedTools === void 0 ? {} : { allowedTools: [...turn.allowedTools] },
19647
19829
  ...turn.disallowedTools === void 0 ? {} : { disallowedTools: [...turn.disallowedTools] },
19648
19830
  ...turn.permissionMode === void 0 ? {} : { permissionMode: turn.permissionMode },
19831
+ ...turn.canUseTool === void 0 ? {} : { canUseTool: vendorCanUseTool(turn.canUseTool) },
19649
19832
  ...turn.mcpServers === void 0 && turn.servedMcpServers === void 0 ? {} : { mcpServers: { ...turn.mcpServers, ...vendorServedMcpServers(turn.servedMcpServers) } },
19650
19833
  ...turn.includePartialMessages === void 0 ? {} : { includePartialMessages: turn.includePartialMessages },
19651
19834
  ...turn.abortController === void 0 ? {} : { abortController: turn.abortController },
@@ -19672,7 +19855,8 @@ async function createClaudeGatewaySdk(options) {
19672
19855
  } finally {
19673
19856
  release();
19674
19857
  }
19675
- }
19858
+ },
19859
+ getContextUsage: () => run.getContextUsage()
19676
19860
  };
19677
19861
  active = tracked;
19678
19862
  return tracked;
@@ -19741,6 +19925,22 @@ function resolveTurnModel(requested, accepted) {
19741
19925
  }
19742
19926
  return entry.id;
19743
19927
  }
19928
+ function vendorCanUseTool(canUseTool) {
19929
+ return async (toolName, input, options) => {
19930
+ try {
19931
+ const decision = await canUseTool(toolName, input, {
19932
+ toolUseId: typeof options.toolUseID === "string" ? options.toolUseID : "",
19933
+ signal: options.signal instanceof AbortSignal ? options.signal : new AbortController().signal
19934
+ });
19935
+ if (decision.behavior === "allow") {
19936
+ return decision.updatedInput === void 0 ? { behavior: "allow", updatedInput: input } : { behavior: "allow", updatedInput: { ...decision.updatedInput } };
19937
+ }
19938
+ return { behavior: "deny", message: decision.message };
19939
+ } catch (error51) {
19940
+ return { behavior: "deny", message: error51 instanceof Error ? error51.message : String(error51) };
19941
+ }
19942
+ };
19943
+ }
19744
19944
  function vendorSystemPrompt(systemPrompt) {
19745
19945
  const text = systemPrompt?.text;
19746
19946
  if (typeof text !== "string" || text.length === 0) {