@dotobokuri/fleet-console 1.40.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 (70) hide show
  1. package/README.md +2 -3
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.mjs +151 -134
  4. package/dist/client/assets/{_baseUniq-Bao5GOIa.js → _baseUniq-CImzMrtU.js} +1 -1
  5. package/dist/client/assets/{arc-DnhHMLy9.js → arc-CKb0rHjN.js} +1 -1
  6. package/dist/client/assets/{architectureDiagram-Q4EWVU46-DAbURr0a.js → architectureDiagram-Q4EWVU46-BaZipXSe.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-DXYQGD6D-DE1raZQ6.js → blockDiagram-DXYQGD6D-D4sS9TjR.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-AHTNJAMY-beLZlUB3.js → c4Diagram-AHTNJAMY-DvjpMsKx.js} +1 -1
  9. package/dist/client/assets/channel-dSuGhtYS.js +1 -0
  10. package/dist/client/assets/{chunk-4BX2VUAB-DEqdunZS.js → chunk-4BX2VUAB-B47BryhY.js} +1 -1
  11. package/dist/client/assets/{chunk-4TB4RGXK-D8i5nx4L.js → chunk-4TB4RGXK-DKIhSC52.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-eM3-fH_e.js → chunk-55IACEB6-B3Gvpef7.js} +1 -1
  13. package/dist/client/assets/{chunk-EDXVE4YY-nQoyt_Pd.js → chunk-EDXVE4YY-C4gFtvU8.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-D8Wq8CYj.js → chunk-FMBD7UC4-BADPieOa.js} +1 -1
  15. package/dist/client/assets/{chunk-OYMX7WX6-Cx4Wr2ZT.js → chunk-OYMX7WX6-BUdtWGUY.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-BM2v7Krr.js → chunk-QZHKN3VN-CMxkeGnM.js} +1 -1
  17. package/dist/client/assets/{chunk-YZCP3GAM-zTniPxm7.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-B5pl2A_p.js → cose-bilkent-S5V4N54A-D1Uw7i5_.js} +1 -1
  22. package/dist/client/assets/{dagre-KV5264BT-KHPgW9C2.js → dagre-KV5264BT-kop0bHkM.js} +1 -1
  23. package/dist/client/assets/{diagram-5BDNPKRD-DCv28c7S.js → diagram-5BDNPKRD-B9e41qNA.js} +1 -1
  24. package/dist/client/assets/{diagram-G4DWMVQ6-mT5WQ415.js → diagram-G4DWMVQ6-Wew8X03k.js} +1 -1
  25. package/dist/client/assets/{diagram-MMDJMWI5-iKYfjiRC.js → diagram-MMDJMWI5-DGBb5Oqa.js} +1 -1
  26. package/dist/client/assets/{diagram-TYMM5635-_uqBP7vH.js → diagram-TYMM5635-CiVNsAz6.js} +1 -1
  27. package/dist/client/assets/{erDiagram-SMLLAGMA-DxNN1WhN.js → erDiagram-SMLLAGMA-BdemYTgC.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-DWJPFMVM-DGTsrBvM.js → flowDiagram-DWJPFMVM-CXC6yxhU.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-C17hg4lr.js → ganttDiagram-T4ZO3ILL-SMUpaiUg.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-CeJ25hAd.js → gitGraphDiagram-UUTBAWPF-UaFgTHEh.js} +1 -1
  31. package/dist/client/assets/{graph-BQvb-BfT.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-BctsofOZ.js → infoDiagram-42DDH7IO-BHBzw0bu.js} +1 -1
  35. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-PiPmxcg9.js → ishikawaDiagram-UXIWVN3A-CnDea8bw.js} +1 -1
  36. package/dist/client/assets/{journeyDiagram-VCZTEJTY-BwkjYq3n.js → journeyDiagram-VCZTEJTY-CI91m8BP.js} +1 -1
  37. package/dist/client/assets/{kanban-definition-6JOO6SKY-CSV4dYfF.js → kanban-definition-6JOO6SKY-D-rn-rG2.js} +1 -1
  38. package/dist/client/assets/{layout-DdReLJnP.js → layout-Cd9zpG94.js} +1 -1
  39. package/dist/client/assets/{linear-B54euy_k.js → linear-Cucr1ojd.js} +1 -1
  40. package/dist/client/assets/{mermaid.core-CF92I5mT.js → mermaid.core-G36P12JZ.js} +4 -4
  41. package/dist/client/assets/{min-BcETQ2qJ.js → min-CzfCLG7v.js} +1 -1
  42. package/dist/client/assets/{mindmap-definition-QFDTVHPH-CrmVPycO.js → mindmap-definition-QFDTVHPH-4e1VjBV7.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-DEJITSTG-B5d4jR0H.js → pieDiagram-DEJITSTG-m2CGbU51.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-DlgCNExa.js → quadrantDiagram-34T5L4WZ-BKNPGqMc.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-MS252O5E-CeuVib_X.js → requirementDiagram-MS252O5E-D2BMwnpz.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-XADWPNL6-Bzxv73ik.js → sankeyDiagram-XADWPNL6-Bm6hTqEh.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-FGHM5R23-B0Ondg0u.js → sequenceDiagram-FGHM5R23-Ds2FEGPj.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-FHFEXIEX-CuNHg5DJ.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-DXcye6z7.js → timeline-definition-GMOUNBTQ-mw053fb5.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-DHZGUBPP-CL4rbpzL.js → vennDiagram-DHZGUBPP-CAws0Vt2.js} +1 -1
  52. package/dist/client/assets/{wardley-RL74JXVD-rVZBTA_R.js → wardley-RL74JXVD-DGad2cmz.js} +1 -1
  53. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-Cb8Arj1F.js → wardleyDiagram-NUSXRM2D-BlIyft8I.js} +1 -1
  54. package/dist/client/assets/{xychartDiagram-5P7HB3ND-C-qp4Say.js → xychartDiagram-5P7HB3ND-DHmSULAI.js} +1 -1
  55. package/dist/client/index.html +2 -2
  56. package/dist/fleet-plugins/file-explorer/routes.mjs +484 -56
  57. package/dist/fleet-plugins/ledger/routes.mjs +56 -47
  58. package/dist/fleet-plugins/quota/routes.mjs +19252 -118
  59. package/dist/fleet-plugins/repository/routes.mjs +274 -17
  60. package/dist/fleet-plugins/scuttlebutt/routes.mjs +6 -81
  61. package/dist/fleet-plugins/skills/routes.mjs +1 -46
  62. package/dist/fleet-plugins/terminal/routes.mjs +12090 -1060
  63. package/package.json +1 -1
  64. package/dist/client/assets/channel-Bn1wyUhs.js +0 -1
  65. package/dist/client/assets/classDiagram-6PBFFD2Q-DBE3Ix3c.js +0 -1
  66. package/dist/client/assets/classDiagram-v2-HSJHXN6E-DBE3Ix3c.js +0 -1
  67. package/dist/client/assets/clone-COL47Wy_.js +0 -1
  68. package/dist/client/assets/index-Ca6HkGPQ.css +0 -1
  69. package/dist/client/assets/index-Cr3Xq85X.js +0 -452
  70. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BVPbUfrG.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",
@@ -16533,16 +16517,13 @@ var ModelEntrySchema = external_exports.object({
16533
16517
  });
16534
16518
  }
16535
16519
  });
16536
- var ModelsMappingSchema = external_exports.record(external_exports.string(), external_exports.string());
16537
16520
  var ProviderSchema = external_exports.object({
16538
16521
  /** 프로바이더 표시 이름 */
16539
16522
  name: external_exports.string(),
16540
16523
  /** 기본 모델 ID */
16541
16524
  defaultModel: external_exports.string(),
16542
16525
  /** 사용 가능한 모델 목록 */
16543
- models: external_exports.array(ModelEntrySchema).min(1),
16544
- /** modelId와 연관된 매핑 모델 (선택) */
16545
- modelsMapping: ModelsMappingSchema.optional()
16526
+ models: external_exports.array(ModelEntrySchema).min(1)
16546
16527
  }).check((ctx) => {
16547
16528
  const ids = new Set(ctx.value.models.map((m) => m.modelId));
16548
16529
  if (!ids.has(ctx.value.defaultModel)) {
@@ -16593,32 +16574,6 @@ var CLI_BACKENDS = {
16593
16574
  usesNpxBridge: true,
16594
16575
  defaultMaxTokens: 16384
16595
16576
  },
16596
- "claude-kimi": {
16597
- id: "claude-kimi",
16598
- cliCommand: "claude",
16599
- protocol: "acp",
16600
- authRequired: true,
16601
- npxPackage: "@agentclientprotocol/claude-agent-acp@0.33.1",
16602
- modes: [
16603
- { id: "default", label: "Default" },
16604
- { id: "plan", label: "Plan" },
16605
- { id: "bypassPermissions", label: "YOLO" }
16606
- ],
16607
- supportsSessionClose: true,
16608
- supportsSessionLoad: true,
16609
- requiresModelAtSpawn: false,
16610
- usesNpxBridge: true,
16611
- defaultMaxTokens: 262144,
16612
- defaultEnv: {
16613
- ANTHROPIC_BASE_URL: "https://api.kimi.com/coding/",
16614
- ANTHROPIC_MODEL: "kimi-for-coding",
16615
- ANTHROPIC_DEFAULT_HAIKU_MODEL: "kimi-for-coding",
16616
- ANTHROPIC_DEFAULT_SONNET_MODEL: "kimi-for-coding",
16617
- ANTHROPIC_DEFAULT_OPUS_MODEL: "kimi-for-coding",
16618
- CLAUDE_CODE_SUBAGENT_MODEL: "kimi-for-coding",
16619
- API_TIMEOUT_MS: "3000000"
16620
- }
16621
- },
16622
16577
  codex: {
16623
16578
  id: "codex",
16624
16579
  cliCommand: "codex",
@@ -16900,6 +16855,13 @@ function isRecord2(value) {
16900
16855
  function isNonNegativeSafeInteger(value) {
16901
16856
  return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
16902
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
+ }
16903
16865
  function isNonNegativeFinite(value) {
16904
16866
  return typeof value === "number" && Number.isFinite(value) && value >= 0;
16905
16867
  }
@@ -16915,7 +16877,7 @@ function sanitizeModels(value) {
16915
16877
  function parseSession(value) {
16916
16878
  if (!isRecord2(value)) return null;
16917
16879
  const models = value.models_used;
16918
- 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;
16919
16881
  return {
16920
16882
  sessionId: value.session_id,
16921
16883
  client: sanitizeClient(value.client),
@@ -16949,6 +16911,7 @@ function parseTokscaleOutput(stdout) {
16949
16911
  // ../fleet-plugins/ledger/server/summary.ts
16950
16912
  var AggregateOverflowError = class extends Error {
16951
16913
  };
16914
+ var MAX_DAILY_DAYS = 366;
16952
16915
  function emptyAccumulator() {
16953
16916
  return { input: 0, output: 0, cacheRead: 0, costUsd: 0, messages: 0 };
16954
16917
  }
@@ -16964,6 +16927,45 @@ function addFinite(left, right) {
16964
16927
  if (!Number.isFinite(result)) throw new AggregateOverflowError("ledger aggregate overflow");
16965
16928
  return result;
16966
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
+ }
16967
16969
  function usageOf(value) {
16968
16970
  return { input: value.input, output: value.output, cacheRead: value.cacheRead };
16969
16971
  }
@@ -17007,6 +17009,7 @@ function buildSummary(sessions, operations, scope, status = "ok", generatedAtMs
17007
17009
  totals: { costUsd: 0, input: 0, output: 0, cacheRead: 0, messages: 0 },
17008
17010
  operations: [],
17009
17011
  clients: [],
17012
+ daily: [],
17010
17013
  source: {
17011
17014
  status: "unreadable",
17012
17015
  skippedSessions: skippedSessions + sessions.length
@@ -17056,11 +17059,14 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17056
17059
  totalValues.messages = addFinite(totalValues.messages, operation.messages);
17057
17060
  }
17058
17061
  const clientMap = /* @__PURE__ */ new Map();
17062
+ const dailyMap = /* @__PURE__ */ new Map();
17059
17063
  for (const session of sessions) {
17060
17064
  const client = clientMap.get(session.client) ?? { sessions: 0, totals: emptyAccumulator() };
17061
17065
  client.sessions = addFinite(client.sessions, 1);
17062
17066
  addSession(client.totals, session);
17063
17067
  clientMap.set(session.client, client);
17068
+ const day = localDayKey(session.lastActive);
17069
+ dailyMap.set(day, addFinite(dailyMap.get(day) ?? 0, session.costUsd));
17064
17070
  }
17065
17071
  const clients = [...clientMap.entries()].map(([client, value]) => ({
17066
17072
  client,
@@ -17068,6 +17074,8 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17068
17074
  usage: usageOf(value.totals),
17069
17075
  costUsd: value.totals.costUsd
17070
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));
17071
17079
  return {
17072
17080
  schemaVersion: 1,
17073
17081
  scope,
@@ -17075,6 +17083,7 @@ function buildSummaryUnchecked(sessions, operations, scope, status, generatedAtM
17075
17083
  totals: { ...usageOf(totalValues), costUsd: totalValues.costUsd, messages: totalValues.messages },
17076
17084
  operations: operationDtos,
17077
17085
  clients,
17086
+ daily,
17078
17087
  source: { status, skippedSessions }
17079
17088
  };
17080
17089
  }