@dotobokuri/fleet-console 1.39.0 → 1.41.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 (71) hide show
  1. package/README.md +2 -3
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.mjs +152 -1182
  4. package/dist/client/assets/{_baseUniq-BDfju2rW.js → _baseUniq-CImzMrtU.js} +1 -1
  5. package/dist/client/assets/{arc-DWcMv-ui.js → arc-CKb0rHjN.js} +1 -1
  6. package/dist/client/assets/{architectureDiagram-Q4EWVU46-DhPv_Uba.js → architectureDiagram-Q4EWVU46-BaZipXSe.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-DXYQGD6D-D7RYcNDP.js → blockDiagram-DXYQGD6D-D4sS9TjR.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-AHTNJAMY-9_4dQBo3.js → c4Diagram-AHTNJAMY-DvjpMsKx.js} +1 -1
  9. package/dist/client/assets/channel-dSuGhtYS.js +1 -0
  10. package/dist/client/assets/{chunk-4BX2VUAB-CQf5x2mT.js → chunk-4BX2VUAB-B47BryhY.js} +1 -1
  11. package/dist/client/assets/{chunk-4TB4RGXK-eeG8BKQB.js → chunk-4TB4RGXK-DKIhSC52.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-1dkBlsDt.js → chunk-55IACEB6-B3Gvpef7.js} +1 -1
  13. package/dist/client/assets/{chunk-EDXVE4YY-C5vcF-lT.js → chunk-EDXVE4YY-C4gFtvU8.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-CGelAuwP.js → chunk-FMBD7UC4-BADPieOa.js} +1 -1
  15. package/dist/client/assets/{chunk-OYMX7WX6-CbKgVyop.js → chunk-OYMX7WX6-BUdtWGUY.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-CT0ppG8R.js → chunk-QZHKN3VN-CMxkeGnM.js} +1 -1
  17. package/dist/client/assets/{chunk-YZCP3GAM-BEf8DhxB.js → chunk-YZCP3GAM-Br6N7t8d.js} +1 -1
  18. package/dist/client/assets/classDiagram-6PBFFD2Q-DEN4mh7x.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-HSJHXN6E-DEN4mh7x.js +1 -0
  20. package/dist/client/assets/clone-BbTnmCoq.js +1 -0
  21. package/dist/client/assets/{cose-bilkent-S5V4N54A-C6GtvpYi.js → cose-bilkent-S5V4N54A-D1Uw7i5_.js} +1 -1
  22. package/dist/client/assets/{dagre-KV5264BT-DvrU2BgH.js → dagre-KV5264BT-kop0bHkM.js} +1 -1
  23. package/dist/client/assets/{diagram-5BDNPKRD-Cy1qKKqt.js → diagram-5BDNPKRD-B9e41qNA.js} +1 -1
  24. package/dist/client/assets/{diagram-G4DWMVQ6-C4GGKnnD.js → diagram-G4DWMVQ6-Wew8X03k.js} +1 -1
  25. package/dist/client/assets/{diagram-MMDJMWI5-By7JFsIw.js → diagram-MMDJMWI5-DGBb5Oqa.js} +1 -1
  26. package/dist/client/assets/{diagram-TYMM5635-YwzVWpID.js → diagram-TYMM5635-CiVNsAz6.js} +1 -1
  27. package/dist/client/assets/{erDiagram-SMLLAGMA-CDsNlmLk.js → erDiagram-SMLLAGMA-BdemYTgC.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-DWJPFMVM-BuUpIzTa.js → flowDiagram-DWJPFMVM-CXC6yxhU.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-Dqv9t2x8.js → ganttDiagram-T4ZO3ILL-SMUpaiUg.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DApQn2c7.js → gitGraphDiagram-UUTBAWPF-UaFgTHEh.js} +1 -1
  31. package/dist/client/assets/{graph-CyX-IC4n.js → graph-Ch8F0gMI.js} +1 -1
  32. package/dist/client/assets/index-D38r12i5.css +1 -0
  33. package/dist/client/assets/index-DkTcJcbj.js +452 -0
  34. package/dist/client/assets/{infoDiagram-42DDH7IO-DIf3qelw.js → infoDiagram-42DDH7IO-BHBzw0bu.js} +1 -1
  35. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-CU3QtNdx.js → ishikawaDiagram-UXIWVN3A-CnDea8bw.js} +1 -1
  36. package/dist/client/assets/{journeyDiagram-VCZTEJTY-Dfq4OBhW.js → journeyDiagram-VCZTEJTY-CI91m8BP.js} +1 -1
  37. package/dist/client/assets/{kanban-definition-6JOO6SKY-CWSe3eh7.js → kanban-definition-6JOO6SKY-D-rn-rG2.js} +1 -1
  38. package/dist/client/assets/{layout-CfdpDpEB.js → layout-Cd9zpG94.js} +1 -1
  39. package/dist/client/assets/{linear-BQA5wLDW.js → linear-Cucr1ojd.js} +1 -1
  40. package/dist/client/assets/{mermaid.core-BwJS5O4y.js → mermaid.core-G36P12JZ.js} +4 -4
  41. package/dist/client/assets/{min-Cg-Q6TB5.js → min-CzfCLG7v.js} +1 -1
  42. package/dist/client/assets/{mindmap-definition-QFDTVHPH-BNXT0q7L.js → mindmap-definition-QFDTVHPH-4e1VjBV7.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-DEJITSTG-Cot4WNe7.js → pieDiagram-DEJITSTG-m2CGbU51.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-_YW3nZwc.js → quadrantDiagram-34T5L4WZ-BKNPGqMc.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-MS252O5E-didEilrX.js → requirementDiagram-MS252O5E-D2BMwnpz.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-XADWPNL6-CIpzp5Ep.js → sankeyDiagram-XADWPNL6-Bm6hTqEh.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-FGHM5R23-CqvwD_CI.js → sequenceDiagram-FGHM5R23-Ds2FEGPj.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-FHFEXIEX-D492KgCG.js → stateDiagram-FHFEXIEX-CrXn2Tb7.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BbzpXIlW.js +1 -0
  50. package/dist/client/assets/{timeline-definition-GMOUNBTQ-BpAwqH0H.js → timeline-definition-GMOUNBTQ-mw053fb5.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-DHZGUBPP-DDMPO_HG.js → vennDiagram-DHZGUBPP-CAws0Vt2.js} +1 -1
  52. package/dist/client/assets/{wardley-RL74JXVD-TKEj0wFU.js → wardley-RL74JXVD-DGad2cmz.js} +1 -1
  53. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CLjBh2KA.js → wardleyDiagram-NUSXRM2D-BlIyft8I.js} +1 -1
  54. package/dist/client/assets/{xychartDiagram-5P7HB3ND-DEn2Z9lG.js → xychartDiagram-5P7HB3ND-DHmSULAI.js} +1 -1
  55. package/dist/client/index.html +2 -2
  56. package/dist/client/theme-boot.js +5 -4
  57. package/dist/fleet-plugins/file-explorer/routes.mjs +484 -56
  58. package/dist/fleet-plugins/ledger/routes.mjs +56 -80
  59. package/dist/fleet-plugins/quota/routes.mjs +19806 -0
  60. package/dist/fleet-plugins/repository/routes.mjs +274 -17
  61. package/dist/fleet-plugins/scuttlebutt/routes.mjs +6 -431
  62. package/dist/fleet-plugins/skills/routes.mjs +1 -79
  63. package/dist/fleet-plugins/terminal/routes.mjs +12449 -2974
  64. package/package.json +1 -1
  65. package/dist/client/assets/channel-Cjiuj1tM.js +0 -1
  66. package/dist/client/assets/classDiagram-6PBFFD2Q-B-_6FtAZ.js +0 -1
  67. package/dist/client/assets/classDiagram-v2-HSJHXN6E-B-_6FtAZ.js +0 -1
  68. package/dist/client/assets/clone-BF2H_qSP.js +0 -1
  69. package/dist/client/assets/index-RzoF0XVt.js +0 -452
  70. package/dist/client/assets/index-bog2t8Rz.css +0 -1
  71. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DUe9CEL6.js +0 -1
@@ -16402,22 +16402,6 @@ var models_default = {
16402
16402
  { modelId: "claude-opus-4-8[1m]", name: "Claude Opus 4.8 [1M]", effort: { supported: true, levels: ["low", "medium", "high", "xhigh", "max"], default: "high" } }
16403
16403
  ]
16404
16404
  },
16405
- "claude-kimi": {
16406
- name: "Kimi via Claude Code",
16407
- defaultModel: "kimi-for-coding",
16408
- models: [
16409
- { modelId: "kimi-for-coding", name: "Kimi for Coding", description: "Available on every Kimi Code membership tier (262K context)", effort: { supported: false }, contextWindow: 262144 },
16410
- { modelId: "k3", name: "Kimi K3", description: "Available on Moderato and higher tiers (262K context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 262144 },
16411
- { modelId: "k3[1m]", name: "Kimi K3 [1M]", description: "Available on Allegretto and higher tiers (1M context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 1048576 },
16412
- { modelId: "kimi-for-coding-highspeed", name: "Kimi for Coding Highspeed", description: "Available on Allegretto and higher tiers (262K context)", effort: { supported: false }, contextWindow: 262144 }
16413
- ],
16414
- modelsMapping: {
16415
- haiku: "kimi-for-coding",
16416
- sonnet: "kimi-for-coding",
16417
- opus: "kimi-for-coding",
16418
- fable: "kimi-for-coding"
16419
- }
16420
- },
16421
16405
  codex: {
16422
16406
  name: "Codex",
16423
16407
  defaultModel: "gpt-5.6-sol",
@@ -16432,23 +16416,6 @@ var models_default = {
16432
16416
  { modelId: "gpt-5.5-fast", name: "GPT-5.5 Fast", providerModelId: "gpt-5.5", serviceTier: "priority", effort: { supported: true, levels: ["low", "medium", "high", "xhigh"], default: "high" } }
16433
16417
  ]
16434
16418
  },
16435
- "opencode-go": {
16436
- name: "OpenCode Go",
16437
- defaultModel: "opencode-go/deepseek-v4-flash",
16438
- models: [
16439
- { modelId: "opencode-go/deepseek-v4-flash", name: "DeepSeek V4 Flash", effort: { supported: false } },
16440
- { modelId: "opencode-go/deepseek-v4-pro", name: "DeepSeek V4 Pro", effort: { supported: false } },
16441
- { modelId: "opencode-go/glm-5.2", name: "GLM-5.2", effort: { supported: false } },
16442
- { modelId: "opencode-go/grok-4.5", name: "Grok 4.5", effort: { supported: false } },
16443
- { modelId: "opencode-go/kimi-k3", name: "Kimi K3", effort: { supported: false } },
16444
- { modelId: "opencode-go/kimi-k2.7-code", name: "Kimi K2.7 Code", effort: { supported: false } },
16445
- { modelId: "opencode-go/mimo-v2.5", name: "MiMo V2.5", effort: { supported: false } },
16446
- { modelId: "opencode-go/mimo-v2.5-pro", name: "MiMo V2.5 Pro", effort: { supported: false } },
16447
- { modelId: "opencode-go/minimax-m3", name: "MiniMax M3", effort: { supported: false } },
16448
- { modelId: "opencode-go/qwen3.7-max", name: "Qwen3.7 Max", effort: { supported: false } },
16449
- { modelId: "opencode-go/qwen3.7-plus", name: "Qwen3.7 Plus", effort: { supported: false } }
16450
- ]
16451
- },
16452
16419
  cursor: {
16453
16420
  name: "Cursor Agent",
16454
16421
  defaultModel: "auto",
@@ -16550,16 +16517,13 @@ var ModelEntrySchema = external_exports.object({
16550
16517
  });
16551
16518
  }
16552
16519
  });
16553
- var ModelsMappingSchema = external_exports.record(external_exports.string(), external_exports.string());
16554
16520
  var ProviderSchema = external_exports.object({
16555
16521
  /** 프로바이더 표시 이름 */
16556
16522
  name: external_exports.string(),
16557
16523
  /** 기본 모델 ID */
16558
16524
  defaultModel: external_exports.string(),
16559
16525
  /** 사용 가능한 모델 목록 */
16560
- models: external_exports.array(ModelEntrySchema).min(1),
16561
- /** modelId와 연관된 매핑 모델 (선택) */
16562
- modelsMapping: ModelsMappingSchema.optional()
16526
+ models: external_exports.array(ModelEntrySchema).min(1)
16563
16527
  }).check((ctx) => {
16564
16528
  const ids = new Set(ctx.value.models.map((m) => m.modelId));
16565
16529
  if (!ids.has(ctx.value.defaultModel)) {
@@ -16610,32 +16574,6 @@ var CLI_BACKENDS = {
16610
16574
  usesNpxBridge: true,
16611
16575
  defaultMaxTokens: 16384
16612
16576
  },
16613
- "claude-kimi": {
16614
- id: "claude-kimi",
16615
- cliCommand: "claude",
16616
- protocol: "acp",
16617
- authRequired: true,
16618
- npxPackage: "@agentclientprotocol/claude-agent-acp@0.33.1",
16619
- modes: [
16620
- { id: "default", label: "Default" },
16621
- { id: "plan", label: "Plan" },
16622
- { id: "bypassPermissions", label: "YOLO" }
16623
- ],
16624
- supportsSessionClose: true,
16625
- supportsSessionLoad: true,
16626
- requiresModelAtSpawn: false,
16627
- usesNpxBridge: true,
16628
- defaultMaxTokens: 262144,
16629
- defaultEnv: {
16630
- ANTHROPIC_BASE_URL: "https://api.kimi.com/coding/",
16631
- ANTHROPIC_MODEL: "kimi-for-coding",
16632
- ANTHROPIC_DEFAULT_HAIKU_MODEL: "kimi-for-coding",
16633
- ANTHROPIC_DEFAULT_SONNET_MODEL: "kimi-for-coding",
16634
- ANTHROPIC_DEFAULT_OPUS_MODEL: "kimi-for-coding",
16635
- CLAUDE_CODE_SUBAGENT_MODEL: "kimi-for-coding",
16636
- API_TIMEOUT_MS: "3000000"
16637
- }
16638
- },
16639
16577
  codex: {
16640
16578
  id: "codex",
16641
16579
  cliCommand: "codex",
@@ -16653,22 +16591,6 @@ var CLI_BACKENDS = {
16653
16591
  usesNpxBridge: false,
16654
16592
  defaultMaxTokens: 1e5
16655
16593
  },
16656
- "opencode-go": {
16657
- id: "opencode-go",
16658
- cliCommand: "opencode",
16659
- protocol: "acp",
16660
- authRequired: false,
16661
- acpArgs: ["acp"],
16662
- modes: [
16663
- { id: "build", label: "Build" },
16664
- { id: "plan", label: "Plan" }
16665
- ],
16666
- supportsSessionClose: true,
16667
- supportsSessionLoad: true,
16668
- requiresModelAtSpawn: true,
16669
- usesNpxBridge: false,
16670
- defaultMaxTokens: 128e3
16671
- },
16672
16594
  cursor: {
16673
16595
  id: "cursor",
16674
16596
  cliCommand: "cursor-agent",
@@ -16933,6 +16855,13 @@ function isRecord2(value) {
16933
16855
  function isNonNegativeSafeInteger(value) {
16934
16856
  return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
16935
16857
  }
16858
+ function isRepresentableTimestamp(value) {
16859
+ if (!isNonNegativeSafeInteger(value)) return false;
16860
+ const date5 = new Date(value);
16861
+ if (!Number.isFinite(date5.getTime())) return false;
16862
+ const localYear = date5.getFullYear();
16863
+ return localYear >= 0 && localYear <= 9999;
16864
+ }
16936
16865
  function isNonNegativeFinite(value) {
16937
16866
  return typeof value === "number" && Number.isFinite(value) && value >= 0;
16938
16867
  }
@@ -16948,7 +16877,7 @@ function sanitizeModels(value) {
16948
16877
  function parseSession(value) {
16949
16878
  if (!isRecord2(value)) return null;
16950
16879
  const models = value.models_used;
16951
- if (typeof value.session_id !== "string" || typeof value.client !== "string" || !isNonNegativeSafeInteger(value.created_at) || !isNonNegativeSafeInteger(value.last_active) || !isNonNegativeSafeInteger(value.total_input_tokens) || !isNonNegativeSafeInteger(value.total_output_tokens) || !isNonNegativeSafeInteger(value.total_cache_read) || !isNonNegativeFinite(value.total_cost) || !Array.isArray(models) || !isNonNegativeSafeInteger(value.message_count) || !isNonNegativeFinite(value.duration_minutes) || !isNullableString(value.title) || !isNullableString(value.task_category) || !isNullableString(value.description) || !isNullableString(value.complexity) || !isNullableString(value.task_group) || !isNullableString(value.summarized_at) || !isNullableString(value.fm_version)) return null;
16880
+ if (typeof value.session_id !== "string" || typeof value.client !== "string" || !isRepresentableTimestamp(value.created_at) || !isRepresentableTimestamp(value.last_active) || !isNonNegativeSafeInteger(value.total_input_tokens) || !isNonNegativeSafeInteger(value.total_output_tokens) || !isNonNegativeSafeInteger(value.total_cache_read) || !isNonNegativeFinite(value.total_cost) || !Array.isArray(models) || !isNonNegativeSafeInteger(value.message_count) || !isNonNegativeFinite(value.duration_minutes) || !isNullableString(value.title) || !isNullableString(value.task_category) || !isNullableString(value.description) || !isNullableString(value.complexity) || !isNullableString(value.task_group) || !isNullableString(value.summarized_at) || !isNullableString(value.fm_version)) return null;
16952
16881
  return {
16953
16882
  sessionId: value.session_id,
16954
16883
  client: sanitizeClient(value.client),
@@ -16982,6 +16911,7 @@ function parseTokscaleOutput(stdout) {
16982
16911
  // ../fleet-plugins/ledger/server/summary.ts
16983
16912
  var AggregateOverflowError = class extends Error {
16984
16913
  };
16914
+ var MAX_DAILY_DAYS = 366;
16985
16915
  function emptyAccumulator() {
16986
16916
  return { input: 0, output: 0, cacheRead: 0, costUsd: 0, messages: 0 };
16987
16917
  }
@@ -16997,6 +16927,45 @@ function addFinite(left, right) {
16997
16927
  if (!Number.isFinite(result)) throw new AggregateOverflowError("ledger aggregate overflow");
16998
16928
  return result;
16999
16929
  }
16930
+ function localDayKey(atMs) {
16931
+ const date5 = new Date(atMs);
16932
+ const year = String(date5.getFullYear()).padStart(4, "0");
16933
+ const month = String(date5.getMonth() + 1).padStart(2, "0");
16934
+ const day = String(date5.getDate()).padStart(2, "0");
16935
+ return `${year}-${month}-${day}`;
16936
+ }
16937
+ function localDateFromDayKey(day) {
16938
+ const date5 = /* @__PURE__ */ new Date(0);
16939
+ date5.setFullYear(Number(day.slice(0, 4)), Number(day.slice(5, 7)) - 1, Number(day.slice(8, 10)));
16940
+ date5.setHours(12, 0, 0, 0);
16941
+ return date5;
16942
+ }
16943
+ function derivedDailyRange(window, generatedAtMs) {
16944
+ const lastDay = localDayKey(generatedAtMs);
16945
+ const firstDate = localDateFromDayKey(lastDay);
16946
+ if (window === "week") firstDate.setDate(firstDate.getDate() - 6);
16947
+ if (window === "month") firstDate.setDate(1);
16948
+ return { firstDay: localDayKey(firstDate.getTime()), lastDay };
16949
+ }
16950
+ function fillDailyPoints(observed, derived) {
16951
+ if (observed.length === 0) return [];
16952
+ let firstDay = observed[0].day < derived.firstDay ? observed[0].day : derived.firstDay;
16953
+ const observedLastDay = observed[observed.length - 1].day;
16954
+ const lastDay = observedLastDay > derived.lastDay ? observedLastDay : derived.lastDay;
16955
+ const cutoffDate = localDateFromDayKey(lastDay);
16956
+ cutoffDate.setDate(cutoffDate.getDate() - (MAX_DAILY_DAYS - 1));
16957
+ const cutoffDay = localDayKey(cutoffDate.getTime());
16958
+ if (firstDay < cutoffDay) firstDay = cutoffDay;
16959
+ const costs = new Map(observed.map((point) => [point.day, point.costUsd]));
16960
+ const daily = [];
16961
+ const current = localDateFromDayKey(firstDay);
16962
+ while (true) {
16963
+ const day = localDayKey(current.getTime());
16964
+ daily.push({ day, costUsd: costs.get(day) ?? 0 });
16965
+ if (day === lastDay) return daily;
16966
+ current.setDate(current.getDate() + 1);
16967
+ }
16968
+ }
17000
16969
  function usageOf(value) {
17001
16970
  return { input: value.input, output: value.output, cacheRead: value.cacheRead };
17002
16971
  }
@@ -17040,6 +17009,7 @@ function buildSummary(sessions, operations, scope, status = "ok", generatedAtMs
17040
17009
  totals: { costUsd: 0, input: 0, output: 0, cacheRead: 0, messages: 0 },
17041
17010
  operations: [],
17042
17011
  clients: [],
17012
+ daily: [],
17043
17013
  source: {
17044
17014
  status: "unreadable",
17045
17015
  skippedSessions: skippedSessions + sessions.length
@@ -17089,11 +17059,14 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17089
17059
  totalValues.messages = addFinite(totalValues.messages, operation.messages);
17090
17060
  }
17091
17061
  const clientMap = /* @__PURE__ */ new Map();
17062
+ const dailyMap = /* @__PURE__ */ new Map();
17092
17063
  for (const session of sessions) {
17093
17064
  const client = clientMap.get(session.client) ?? { sessions: 0, totals: emptyAccumulator() };
17094
17065
  client.sessions = addFinite(client.sessions, 1);
17095
17066
  addSession(client.totals, session);
17096
17067
  clientMap.set(session.client, client);
17068
+ const day = localDayKey(session.lastActive);
17069
+ dailyMap.set(day, addFinite(dailyMap.get(day) ?? 0, session.costUsd));
17097
17070
  }
17098
17071
  const clients = [...clientMap.entries()].map(([client, value]) => ({
17099
17072
  client,
@@ -17101,6 +17074,8 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17101
17074
  usage: usageOf(value.totals),
17102
17075
  costUsd: value.totals.costUsd
17103
17076
  })).sort((a, b) => b.costUsd - a.costUsd || (a.client < b.client ? -1 : a.client > b.client ? 1 : 0));
17077
+ const observedDaily = [...dailyMap.entries()].map(([day, costUsd]) => ({ day, costUsd })).sort((a, b) => a.day < b.day ? -1 : a.day > b.day ? 1 : 0);
17078
+ const daily = fillDailyPoints(observedDaily, derivedDailyRange(scope.window, generatedAtMs));
17104
17079
  return {
17105
17080
  schemaVersion: 1,
17106
17081
  scope,
@@ -17108,6 +17083,7 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17108
17083
  totals: { ...usageOf(totalValues), costUsd: totalValues.costUsd, messages: totalValues.messages },
17109
17084
  operations: operationDtos,
17110
17085
  clients,
17086
+ daily,
17111
17087
  source: { status, skippedSessions }
17112
17088
  };
17113
17089
  }