@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.
- package/README.md +2 -3
- package/dist/cli.d.ts +2 -1
- package/dist/cli.mjs +151 -134
- package/dist/client/assets/{_baseUniq-Bao5GOIa.js → _baseUniq-CImzMrtU.js} +1 -1
- package/dist/client/assets/{arc-DnhHMLy9.js → arc-CKb0rHjN.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-DAbURr0a.js → architectureDiagram-Q4EWVU46-BaZipXSe.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-DE1raZQ6.js → blockDiagram-DXYQGD6D-D4sS9TjR.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-beLZlUB3.js → c4Diagram-AHTNJAMY-DvjpMsKx.js} +1 -1
- package/dist/client/assets/channel-dSuGhtYS.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-DEqdunZS.js → chunk-4BX2VUAB-B47BryhY.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-D8i5nx4L.js → chunk-4TB4RGXK-DKIhSC52.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-eM3-fH_e.js → chunk-55IACEB6-B3Gvpef7.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-nQoyt_Pd.js → chunk-EDXVE4YY-C4gFtvU8.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-D8Wq8CYj.js → chunk-FMBD7UC4-BADPieOa.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-Cx4Wr2ZT.js → chunk-OYMX7WX6-BUdtWGUY.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BM2v7Krr.js → chunk-QZHKN3VN-CMxkeGnM.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-zTniPxm7.js → chunk-YZCP3GAM-Br6N7t8d.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DEN4mh7x.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-DEN4mh7x.js +1 -0
- package/dist/client/assets/clone-BbTnmCoq.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-B5pl2A_p.js → cose-bilkent-S5V4N54A-D1Uw7i5_.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-KHPgW9C2.js → dagre-KV5264BT-kop0bHkM.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-DCv28c7S.js → diagram-5BDNPKRD-B9e41qNA.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-mT5WQ415.js → diagram-G4DWMVQ6-Wew8X03k.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-iKYfjiRC.js → diagram-MMDJMWI5-DGBb5Oqa.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-_uqBP7vH.js → diagram-TYMM5635-CiVNsAz6.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-DxNN1WhN.js → erDiagram-SMLLAGMA-BdemYTgC.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-DGTsrBvM.js → flowDiagram-DWJPFMVM-CXC6yxhU.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-C17hg4lr.js → ganttDiagram-T4ZO3ILL-SMUpaiUg.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-CeJ25hAd.js → gitGraphDiagram-UUTBAWPF-UaFgTHEh.js} +1 -1
- package/dist/client/assets/{graph-BQvb-BfT.js → graph-Ch8F0gMI.js} +1 -1
- package/dist/client/assets/index-D38r12i5.css +1 -0
- package/dist/client/assets/index-DkTcJcbj.js +452 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-BctsofOZ.js → infoDiagram-42DDH7IO-BHBzw0bu.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-PiPmxcg9.js → ishikawaDiagram-UXIWVN3A-CnDea8bw.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-BwkjYq3n.js → journeyDiagram-VCZTEJTY-CI91m8BP.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-CSV4dYfF.js → kanban-definition-6JOO6SKY-D-rn-rG2.js} +1 -1
- package/dist/client/assets/{layout-DdReLJnP.js → layout-Cd9zpG94.js} +1 -1
- package/dist/client/assets/{linear-B54euy_k.js → linear-Cucr1ojd.js} +1 -1
- package/dist/client/assets/{mermaid.core-CF92I5mT.js → mermaid.core-G36P12JZ.js} +4 -4
- package/dist/client/assets/{min-BcETQ2qJ.js → min-CzfCLG7v.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-CrmVPycO.js → mindmap-definition-QFDTVHPH-4e1VjBV7.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-B5d4jR0H.js → pieDiagram-DEJITSTG-m2CGbU51.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-DlgCNExa.js → quadrantDiagram-34T5L4WZ-BKNPGqMc.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-CeuVib_X.js → requirementDiagram-MS252O5E-D2BMwnpz.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-Bzxv73ik.js → sankeyDiagram-XADWPNL6-Bm6hTqEh.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-B0Ondg0u.js → sequenceDiagram-FGHM5R23-Ds2FEGPj.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-CuNHg5DJ.js → stateDiagram-FHFEXIEX-CrXn2Tb7.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BbzpXIlW.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-DXcye6z7.js → timeline-definition-GMOUNBTQ-mw053fb5.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-CL4rbpzL.js → vennDiagram-DHZGUBPP-CAws0Vt2.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-rVZBTA_R.js → wardley-RL74JXVD-DGad2cmz.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-Cb8Arj1F.js → wardleyDiagram-NUSXRM2D-BlIyft8I.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-C-qp4Say.js → xychartDiagram-5P7HB3ND-DHmSULAI.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/file-explorer/routes.mjs +484 -56
- package/dist/fleet-plugins/ledger/routes.mjs +56 -47
- package/dist/fleet-plugins/quota/routes.mjs +19252 -118
- package/dist/fleet-plugins/repository/routes.mjs +274 -17
- package/dist/fleet-plugins/scuttlebutt/routes.mjs +6 -81
- package/dist/fleet-plugins/skills/routes.mjs +1 -46
- package/dist/fleet-plugins/terminal/routes.mjs +12090 -1060
- package/package.json +1 -1
- package/dist/client/assets/channel-Bn1wyUhs.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DBE3Ix3c.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-DBE3Ix3c.js +0 -1
- package/dist/client/assets/clone-COL47Wy_.js +0 -1
- package/dist/client/assets/index-Ca6HkGPQ.css +0 -1
- package/dist/client/assets/index-Cr3Xq85X.js +0 -452
- 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" || !
|
|
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
|
}
|