fleetlens 0.11.0 → 0.11.2
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/app/apps/web/.next/BUILD_ID +1 -1
- package/app/apps/web/.next/app-path-routes-manifest.json +2 -0
- package/app/apps/web/.next/build-manifest.json +5 -5
- package/app/apps/web/.next/prerender-manifest.json +3 -3
- package/app/apps/web/.next/routes-manifest.json +12 -0
- package/app/apps/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/_global-error.html +1 -1
- package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/_not-found/page.js +1 -1
- package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/month-index/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/week-index/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/settings/route.js +3 -3
- package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/team-config/route/app-paths-manifest.json +3 -0
- package/app/apps/web/.next/server/app/api/team-config/route/build-manifest.json +9 -0
- package/app/apps/web/.next/server/app/api/team-config/route/server-reference-manifest.json +4 -0
- package/app/apps/web/.next/server/app/api/team-config/route.js +8 -0
- package/app/apps/web/.next/server/app/api/team-config/route.js.map +5 -0
- package/app/apps/web/.next/server/app/api/team-config/route.js.nft.json +1 -0
- package/app/apps/web/.next/server/app/api/team-config/route_client-reference-manifest.js +3 -0
- package/app/apps/web/.next/server/app/changelog/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/changelog/page.js +1 -1
- package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/day/[date]/page.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/day/page.js +1 -1
- package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/digest/[date]/page.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/digest/page.js +1 -1
- package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/insights/[key]/page.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/insights/page.js +1 -1
- package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/page.js +2 -2
- package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/parallelism/page.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/projects/[slug]/page.js +2 -2
- package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/projects/page.js +1 -1
- package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/runs/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/runs/page.js +1 -1
- package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/sessions/[id]/page.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/sessions/page.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/settings/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/settings/page.js +1 -1
- package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/team/page/app-paths-manifest.json +3 -0
- package/app/apps/web/.next/server/app/team/page/build-manifest.json +17 -0
- package/app/apps/web/.next/server/app/team/page/next-font-manifest.json +6 -0
- package/app/apps/web/.next/server/app/team/page/react-loadable-manifest.json +1 -0
- package/app/apps/web/.next/server/app/team/page/server-reference-manifest.json +4 -0
- package/app/apps/web/.next/server/app/team/page.js +17 -0
- package/app/apps/web/.next/server/app/team/page.js.map +5 -0
- package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -0
- package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +3 -0
- package/app/apps/web/.next/server/app/usage/page/build-manifest.json +2 -2
- package/app/apps/web/.next/server/app/usage/page.js +1 -1
- package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app-paths-manifest.json +2 -0
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0atn.dt._.js +3 -0
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0b.b7~1._.js +3 -0
- package/app/apps/web/.next/server/chunks/_0euqdko._.js +49 -0
- package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_team-config_route_actions_0ad2gak.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0_xpuh7._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0exckd4._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__10~b4bf._.js → [root-of-the-server]__0o03ymy._.js} +2 -2
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0q9qy0z._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__08l86e-._.js → [root-of-the-server]__0z7mg0b._.js} +2 -2
- package/app/apps/web/.next/server/chunks/ssr/_0xu2pvc._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_team_page_actions_0i26.dg.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/apps_web_app_team_team-sync-form_tsx_0choz0h._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0txtsv5._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_0af94gl._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/{node_modules_0yrkyef._.js → node_modules_next_dist_0t-hj0x._.js} +2 -2
- package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rx8oz.js +4 -0
- package/app/apps/web/.next/server/functions-config-manifest.json +1 -0
- package/app/apps/web/.next/server/middleware-build-manifest.js +5 -5
- package/app/apps/web/.next/server/pages/500.html +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/app/apps/web/.next/static/chunks/{0e-wrhqh4h3r5.js → 0gblp_v.kiu-..js} +1 -1
- package/app/apps/web/.next/static/chunks/0s4eyofh28l~u.js +1 -0
- package/app/apps/web/.next/static/chunks/0~e7pnd7ot84w.js +14 -0
- package/app/apps/web/.next/static/chunks/12jvvc_w.cb45.css +1 -0
- package/app/apps/web/.next/static/chunks/14joqbsr9ihhu.js +1 -0
- package/app/apps/web/.next/static/chunks/{turbopack-04ud5x25hbc_4.js → turbopack-0lb9w090w5ezx.js} +1 -1
- package/app/apps/web/app/api/team-config/route.ts +39 -0
- package/app/apps/web/app/team/page.tsx +191 -0
- package/app/apps/web/app/team/team-sync-form.tsx +144 -0
- package/app/apps/web/components/sidebar.tsx +8 -0
- package/app/apps/web/lib/changelog-data.generated.ts +1 -1
- package/app/apps/web/lib/team-config.ts +52 -0
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/daemon-worker.js +436 -283
- package/dist/index.js +191 -26
- package/package.json +1 -1
- package/app/apps/web/.next/server/chunks/[externals]__0o43ejh._.js +0 -3
- package/app/apps/web/.next/server/chunks/node_modules_next_036my~r._.js +0 -49
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0yv0m0q._.js +0 -3
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__100.ck7._.js +0 -3
- package/app/apps/web/.next/static/chunks/0bjcz5~ugoonp.js +0 -14
- package/app/apps/web/.next/static/chunks/0o5m5g1dfx4ev.css +0 -1
- package/app/apps/web/.next/static/chunks/10wg31hnd6phg.js +0 -1
- /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_ssgManifest.js +0 -0
package/dist/index.js
CHANGED
|
@@ -3022,12 +3022,22 @@ var init_team_config = __esm({
|
|
|
3022
3022
|
}
|
|
3023
3023
|
});
|
|
3024
3024
|
|
|
3025
|
+
// ../parser/dist/team-wire.js
|
|
3026
|
+
var RICH_ROLLUP_SCHEMA_VERSION;
|
|
3027
|
+
var init_team_wire = __esm({
|
|
3028
|
+
"../parser/dist/team-wire.js"() {
|
|
3029
|
+
"use strict";
|
|
3030
|
+
RICH_ROLLUP_SCHEMA_VERSION = 2;
|
|
3031
|
+
}
|
|
3032
|
+
});
|
|
3033
|
+
|
|
3025
3034
|
// ../parser/dist/fs.js
|
|
3026
3035
|
var fs_exports = {};
|
|
3027
3036
|
__export(fs_exports, {
|
|
3028
3037
|
DEFAULT_CODEX_ROOT: () => DEFAULT_CODEX_ROOT,
|
|
3029
3038
|
DEFAULT_GEMINI_ROOT: () => DEFAULT_GEMINI_ROOT,
|
|
3030
3039
|
DEFAULT_ROOT: () => DEFAULT_ROOT,
|
|
3040
|
+
RICH_ROLLUP_SCHEMA_VERSION: () => RICH_ROLLUP_SCHEMA_VERSION,
|
|
3031
3041
|
agentSources: () => agentSources,
|
|
3032
3042
|
buildCalibrationCurve: () => buildCalibrationCurve,
|
|
3033
3043
|
cacheStats: () => cacheStats,
|
|
@@ -3327,6 +3337,7 @@ var init_fs = __esm({
|
|
|
3327
3337
|
init_codex();
|
|
3328
3338
|
init_gemini();
|
|
3329
3339
|
init_team_config();
|
|
3340
|
+
init_team_wire();
|
|
3330
3341
|
codexSource = {
|
|
3331
3342
|
...CODEX_METADATA,
|
|
3332
3343
|
defaultRoot: DEFAULT_CODEX_ROOT,
|
|
@@ -3765,9 +3776,9 @@ Installed: ${PACKAGE_NAME}@${verify.installedVersion} at ${verify.installedPath
|
|
|
3765
3776
|
console.warn(
|
|
3766
3777
|
` \u2022 reinstall in the correct Node env: 'npm install -g ${PACKAGE_NAME}@latest'`
|
|
3767
3778
|
);
|
|
3768
|
-
} else if (verify.installedVersion !== "0.11.
|
|
3779
|
+
} else if (verify.installedVersion !== "0.11.2") {
|
|
3769
3780
|
console.log(
|
|
3770
|
-
` \u2192 This process is still running ${"0.11.
|
|
3781
|
+
` \u2192 This process is still running ${"0.11.2"}. Next invocation will use ${verify.installedVersion}.`
|
|
3771
3782
|
);
|
|
3772
3783
|
}
|
|
3773
3784
|
}
|
|
@@ -3802,14 +3813,14 @@ async function getUpdateAvailability() {
|
|
|
3802
3813
|
if (isDevMode()) return null;
|
|
3803
3814
|
const latest = await fetchLatestVersion();
|
|
3804
3815
|
if (latest === null) return {
|
|
3805
|
-
current: "0.11.
|
|
3816
|
+
current: "0.11.2",
|
|
3806
3817
|
latest: null,
|
|
3807
3818
|
updateAvailable: false
|
|
3808
3819
|
};
|
|
3809
3820
|
return {
|
|
3810
|
-
current: "0.11.
|
|
3821
|
+
current: "0.11.2",
|
|
3811
3822
|
latest,
|
|
3812
|
-
updateAvailable: shouldUpdate("0.11.
|
|
3823
|
+
updateAvailable: shouldUpdate("0.11.2", latest)
|
|
3813
3824
|
};
|
|
3814
3825
|
}
|
|
3815
3826
|
async function checkForUpdate() {
|
|
@@ -3899,7 +3910,7 @@ async function restartServices(state) {
|
|
|
3899
3910
|
}
|
|
3900
3911
|
async function forceUpdate() {
|
|
3901
3912
|
const latest = await fetchLatestVersion();
|
|
3902
|
-
const current = "0.11.
|
|
3913
|
+
const current = "0.11.2";
|
|
3903
3914
|
if (latest === null) {
|
|
3904
3915
|
console.error("Could not reach npm registry. Check your network.");
|
|
3905
3916
|
process.exit(1);
|
|
@@ -3944,7 +3955,7 @@ __export(start_exports, {
|
|
|
3944
3955
|
async function start(args2) {
|
|
3945
3956
|
const portFlag = args2.indexOf("--port");
|
|
3946
3957
|
const port = portFlag !== -1 ? parseInt(args2[portFlag + 1], 10) : void 0;
|
|
3947
|
-
const
|
|
3958
|
+
const open = args2.includes("--open");
|
|
3948
3959
|
const noDaemon = args2.includes("--no-daemon");
|
|
3949
3960
|
try {
|
|
3950
3961
|
await checkForUpdate();
|
|
@@ -3979,7 +3990,12 @@ async function start(args2) {
|
|
|
3979
3990
|
console.warn(`Daemon: failed to start \u2014 ${daemon2.error}`);
|
|
3980
3991
|
}
|
|
3981
3992
|
}
|
|
3982
|
-
if (
|
|
3993
|
+
if (open) {
|
|
3994
|
+
openBrowser(serverUrl);
|
|
3995
|
+
} else {
|
|
3996
|
+
console.log(`
|
|
3997
|
+
Open ${serverUrl} in your browser, or re-run with --open to launch it automatically.`);
|
|
3998
|
+
}
|
|
3983
3999
|
}
|
|
3984
4000
|
var init_start = __esm({
|
|
3985
4001
|
"src/commands/start.ts"() {
|
|
@@ -4069,15 +4085,19 @@ __export(web_exports, {
|
|
|
4069
4085
|
web: () => web
|
|
4070
4086
|
});
|
|
4071
4087
|
async function web(args2) {
|
|
4072
|
-
const
|
|
4088
|
+
const open = args2.includes("--open");
|
|
4073
4089
|
const positional = args2.filter((a) => !a.startsWith("--"));
|
|
4074
4090
|
const rawPath = positional[0] ?? "";
|
|
4075
4091
|
const path5 = rawPath.startsWith("/") ? rawPath : rawPath ? `/${rawPath}` : "";
|
|
4076
4092
|
const status2 = getServerStatus();
|
|
4077
4093
|
if (status2.running) {
|
|
4078
4094
|
const url = `http://localhost:${status2.port}${path5}`;
|
|
4079
|
-
|
|
4080
|
-
|
|
4095
|
+
if (open) {
|
|
4096
|
+
console.log(`Opening ${url}`);
|
|
4097
|
+
openBrowser(url);
|
|
4098
|
+
} else {
|
|
4099
|
+
console.log(`Dashboard ready at ${url} (re-run with --open to launch it automatically).`);
|
|
4100
|
+
}
|
|
4081
4101
|
return;
|
|
4082
4102
|
}
|
|
4083
4103
|
console.log("fleetlens is not running. Starting server...");
|
|
@@ -4085,7 +4105,11 @@ async function web(args2) {
|
|
|
4085
4105
|
const result = await startServer({});
|
|
4086
4106
|
const url = `http://localhost:${result.port}${path5}`;
|
|
4087
4107
|
console.log(`fleetlens running on ${url} (PID ${result.pid})`);
|
|
4088
|
-
if (
|
|
4108
|
+
if (open) {
|
|
4109
|
+
openBrowser(url);
|
|
4110
|
+
} else {
|
|
4111
|
+
console.log(`Open ${url} in your browser, or re-run with --open to launch it automatically.`);
|
|
4112
|
+
}
|
|
4089
4113
|
} catch (err) {
|
|
4090
4114
|
console.error(`Failed to start: ${err.message}`);
|
|
4091
4115
|
process.exit(1);
|
|
@@ -14706,14 +14730,142 @@ function buildRollupsForRange(sessions, sinceDay) {
|
|
|
14706
14730
|
sessions: startCounts.get(b.date) ?? 0
|
|
14707
14731
|
}));
|
|
14708
14732
|
}
|
|
14709
|
-
function
|
|
14733
|
+
function dayBoundsMs(day2) {
|
|
14734
|
+
const [y, m, d] = day2.split("-").map(Number);
|
|
14735
|
+
return {
|
|
14736
|
+
startMs: new Date(y, m - 1, d, 0, 0, 0, 0).getTime(),
|
|
14737
|
+
endMs: new Date(y, m - 1, d + 1, 0, 0, 0, 0).getTime()
|
|
14738
|
+
};
|
|
14739
|
+
}
|
|
14740
|
+
function clipSegmentsToDay(segments, bounds) {
|
|
14741
|
+
if (!segments || segments.length === 0) return [];
|
|
14742
|
+
const out = [];
|
|
14743
|
+
for (const seg of segments) {
|
|
14744
|
+
const s = Math.max(seg.startMs, bounds.startMs);
|
|
14745
|
+
const e = Math.min(seg.endMs, bounds.endMs);
|
|
14746
|
+
if (e > s) out.push({ startMs: s, endMs: e });
|
|
14747
|
+
}
|
|
14748
|
+
return out;
|
|
14749
|
+
}
|
|
14750
|
+
function sessionTouchesDay(s, day2) {
|
|
14751
|
+
const bounds = dayBoundsMs(day2);
|
|
14752
|
+
if (s.activeSegments && s.activeSegments.length > 0) {
|
|
14753
|
+
return s.activeSegments.some((seg) => seg.endMs > bounds.startMs && seg.startMs < bounds.endMs);
|
|
14754
|
+
}
|
|
14755
|
+
return sessionDay(s) === day2;
|
|
14756
|
+
}
|
|
14757
|
+
function buildRichRollupBlocks(day2, daySessions, entries2, privateProjects) {
|
|
14758
|
+
const bounds = dayBoundsMs(day2);
|
|
14759
|
+
const clippedSessions = [];
|
|
14760
|
+
for (const s of daySessions) {
|
|
14761
|
+
const clipped = clipSegmentsToDay(s.activeSegments, bounds);
|
|
14762
|
+
if (clipped.length === 0) continue;
|
|
14763
|
+
clippedSessions.push({ ...s, activeSegments: clipped });
|
|
14764
|
+
}
|
|
14765
|
+
const bursts = computeBurstsFromSessions(clippedSessions);
|
|
14766
|
+
const stats = summarizeBursts(bursts);
|
|
14767
|
+
const projects = /* @__PURE__ */ new Map();
|
|
14768
|
+
for (const s of clippedSessions) {
|
|
14769
|
+
const name = canonicalProjectName(s.projectName);
|
|
14770
|
+
if (privateProjects.has(name)) continue;
|
|
14771
|
+
const ms = s.activeSegments.reduce((sum, seg) => sum + (seg.endMs - seg.startMs), 0);
|
|
14772
|
+
const cur = projects.get(name) ?? { agentTimeMs: 0, sessions: 0 };
|
|
14773
|
+
cur.agentTimeMs += ms;
|
|
14774
|
+
cur.sessions += 1;
|
|
14775
|
+
projects.set(name, cur);
|
|
14776
|
+
}
|
|
14777
|
+
const workingShapes = /* @__PURE__ */ new Map();
|
|
14778
|
+
const skills = /* @__PURE__ */ new Map();
|
|
14779
|
+
const subagents = /* @__PURE__ */ new Map();
|
|
14780
|
+
let toolErrors = 0;
|
|
14781
|
+
let brainstorm = 0;
|
|
14782
|
+
let planMode = 0;
|
|
14783
|
+
let prs = 0;
|
|
14784
|
+
let commits = 0;
|
|
14785
|
+
let pushes = 0;
|
|
14786
|
+
let longCount = 0;
|
|
14787
|
+
let longTotalMin = 0;
|
|
14788
|
+
let longMaxSingleMin = 0;
|
|
14789
|
+
for (const e of entries2) {
|
|
14790
|
+
if (privateProjects.has(e.project)) continue;
|
|
14791
|
+
const shape = e.signals?.working_shape ?? null;
|
|
14792
|
+
if (shape) {
|
|
14793
|
+
const cur = workingShapes.get(shape) ?? { sessions: 0, agentTimeMs: 0 };
|
|
14794
|
+
cur.sessions += 1;
|
|
14795
|
+
cur.agentTimeMs += e.numbers.active_min * 6e4;
|
|
14796
|
+
workingShapes.set(shape, cur);
|
|
14797
|
+
}
|
|
14798
|
+
for (const [name, count] of Object.entries(e.skills)) {
|
|
14799
|
+
if (count > 0) skills.set(name, (skills.get(name) ?? 0) + 1);
|
|
14800
|
+
}
|
|
14801
|
+
for (const sa of e.subagents) {
|
|
14802
|
+
subagents.set(sa.type, (subagents.get(sa.type) ?? 0) + 1);
|
|
14803
|
+
}
|
|
14804
|
+
toolErrors += e.numbers.tool_errors;
|
|
14805
|
+
if (e.signals?.brainstorm_warmup) brainstorm += 1;
|
|
14806
|
+
if (e.numbers.exit_plan_calls > 0) planMode += 1;
|
|
14807
|
+
prs += e.numbers.prs;
|
|
14808
|
+
commits += e.numbers.commits;
|
|
14809
|
+
pushes += e.numbers.pushes;
|
|
14810
|
+
if (e.flags.includes("long_autonomous")) {
|
|
14811
|
+
longCount += 1;
|
|
14812
|
+
longTotalMin += e.numbers.active_min;
|
|
14813
|
+
if (e.numbers.active_min > longMaxSingleMin) longMaxSingleMin = e.numbers.active_min;
|
|
14814
|
+
}
|
|
14815
|
+
}
|
|
14816
|
+
return {
|
|
14817
|
+
projects: Array.from(projects.entries()).map(([project, v]) => ({ project, ...v })).sort((a, b) => b.agentTimeMs - a.agentTimeMs),
|
|
14818
|
+
workingShapes: Array.from(workingShapes.entries()).map(([shape, v]) => ({ shape, ...v })).sort((a, b) => b.sessions - a.sessions),
|
|
14819
|
+
concurrencyPeak: stats.peakConcurrent,
|
|
14820
|
+
parallelMinutes: Math.round(stats.totalParallelMs / 6e4),
|
|
14821
|
+
longAutonomous: { count: longCount, totalMin: longTotalMin, maxSingleMin: longMaxSingleMin },
|
|
14822
|
+
toolErrors,
|
|
14823
|
+
skillsLoaded: Array.from(skills.entries()).map(([name, sessions]) => ({ name, sessions })).sort((a, b) => b.sessions - a.sessions),
|
|
14824
|
+
subagentsDispatched: Array.from(subagents.entries()).map(([type, count]) => ({ type, count })).sort((a, b) => b.count - a.count),
|
|
14825
|
+
brainstormWarmupSessions: brainstorm,
|
|
14826
|
+
planModeUsed: planMode,
|
|
14827
|
+
prs,
|
|
14828
|
+
commits,
|
|
14829
|
+
pushes
|
|
14830
|
+
};
|
|
14831
|
+
}
|
|
14832
|
+
function buildEnrichedExtras(entries2) {
|
|
14833
|
+
const outcomeMix = {};
|
|
14834
|
+
const helpfulnessMix = {};
|
|
14835
|
+
const goalMix = {};
|
|
14836
|
+
for (const e of entries2) {
|
|
14837
|
+
if (e.enrichment.status !== "done") continue;
|
|
14838
|
+
if (e.enrichment.outcome) {
|
|
14839
|
+
outcomeMix[e.enrichment.outcome] = (outcomeMix[e.enrichment.outcome] ?? 0) + 1;
|
|
14840
|
+
}
|
|
14841
|
+
if (e.enrichment.claude_helpfulness) {
|
|
14842
|
+
helpfulnessMix[e.enrichment.claude_helpfulness] = (helpfulnessMix[e.enrichment.claude_helpfulness] ?? 0) + 1;
|
|
14843
|
+
}
|
|
14844
|
+
for (const [cat, mins] of Object.entries(e.enrichment.goal_categories)) {
|
|
14845
|
+
if (typeof mins === "number") goalMix[cat] = (goalMix[cat] ?? 0) + mins;
|
|
14846
|
+
}
|
|
14847
|
+
}
|
|
14848
|
+
return { outcomeMix, helpfulnessMix, goalMix };
|
|
14849
|
+
}
|
|
14850
|
+
function buildRichBlocksForDay(day2, daySessions, privateProjects, enrichmentOptIn) {
|
|
14851
|
+
const entries2 = listEntriesForDay(day2);
|
|
14852
|
+
if (entries2.length === 0) return void 0;
|
|
14853
|
+
const rich = buildRichRollupBlocks(day2, daySessions, entries2, privateProjects);
|
|
14854
|
+
const enriched = enrichmentOptIn ? buildEnrichedExtras(entries2) : void 0;
|
|
14855
|
+
return enriched ? { rich, enriched } : { rich };
|
|
14856
|
+
}
|
|
14857
|
+
function buildIngestPayload(inputs) {
|
|
14858
|
+
const richRollup = inputs.rollup && inputs.richExtras ? { ...inputs.rollup, ...inputs.richExtras } : void 0;
|
|
14710
14859
|
return {
|
|
14711
14860
|
ingestId: randomUUID2(),
|
|
14712
14861
|
observedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
14713
|
-
...
|
|
14714
|
-
...
|
|
14715
|
-
...
|
|
14716
|
-
...
|
|
14862
|
+
...richRollup || inputs.enrichedExtras ? { schemaVersion: RICH_ROLLUP_SCHEMA_VERSION } : {},
|
|
14863
|
+
...inputs.rollup ? { dailyRollup: inputs.rollup } : {},
|
|
14864
|
+
...richRollup ? { richRollup } : {},
|
|
14865
|
+
...inputs.enrichedExtras ? { enrichedExtras: inputs.enrichedExtras } : {},
|
|
14866
|
+
...inputs.usageSnapshot ? { usageSnapshot: inputs.usageSnapshot } : {},
|
|
14867
|
+
...inputs.planTier ? { planTier: inputs.planTier } : {},
|
|
14868
|
+
...inputs.cyclePeaks ? { cyclePeaks: inputs.cyclePeaks } : {}
|
|
14717
14869
|
};
|
|
14718
14870
|
}
|
|
14719
14871
|
async function pushToTeamServer(config, payload) {
|
|
@@ -14734,6 +14886,8 @@ var init_push = __esm({
|
|
|
14734
14886
|
"src/team/push.ts"() {
|
|
14735
14887
|
"use strict";
|
|
14736
14888
|
init_dist();
|
|
14889
|
+
init_fs();
|
|
14890
|
+
init_fs2();
|
|
14737
14891
|
init_storage();
|
|
14738
14892
|
SNAPSHOT_FRESHNESS_MS = 10 * 60 * 1e3;
|
|
14739
14893
|
POST_TIMEOUT_MS = 15e3;
|
|
@@ -15103,7 +15257,7 @@ async function runActivityBackfill(command2, config, log) {
|
|
|
15103
15257
|
}
|
|
15104
15258
|
let pushed = 0;
|
|
15105
15259
|
for (const rollup of rollups) {
|
|
15106
|
-
const payload = buildIngestPayload(rollup);
|
|
15260
|
+
const payload = buildIngestPayload({ rollup });
|
|
15107
15261
|
const result = await pushToTeamServer(config, payload);
|
|
15108
15262
|
if (!result.ok) {
|
|
15109
15263
|
return {
|
|
@@ -15202,7 +15356,7 @@ async function runTeamSync(log = noopLog2, configOverride, options = {}) {
|
|
|
15202
15356
|
if (usageBackfill.sentSnapshots === 0) log("info", "team push: nothing to sync");
|
|
15203
15357
|
return { paired: true, pushed: 0, queued: 0, queuedDrained: 0, usageBackfill };
|
|
15204
15358
|
}
|
|
15205
|
-
const payload = buildIngestPayload(
|
|
15359
|
+
const payload = buildIngestPayload({ usageSnapshot, planTier, cyclePeaks });
|
|
15206
15360
|
const result = await pushToTeamServer(config, payload);
|
|
15207
15361
|
if (!result.ok) {
|
|
15208
15362
|
const errLine = `team push failed (${result.status})`;
|
|
@@ -15232,17 +15386,28 @@ async function runTeamSync(log = noopLog2, configOverride, options = {}) {
|
|
|
15232
15386
|
let queued = 0;
|
|
15233
15387
|
let failedDay;
|
|
15234
15388
|
let lastPushedDay;
|
|
15389
|
+
const privateProjects = new Set(config.privateProjects ?? []);
|
|
15390
|
+
const enrichmentOptIn = !!config.enrichmentOptIn;
|
|
15235
15391
|
for (let i = 0; i < rollups.length; i++) {
|
|
15236
15392
|
const rollup = rollups[i];
|
|
15237
15393
|
const isLatest = i === rollups.length - 1;
|
|
15238
|
-
const
|
|
15394
|
+
const daySessions = sessions.filter((s) => sessionTouchesDay(s, rollup.day));
|
|
15395
|
+
const richBlocks = buildRichBlocksForDay(
|
|
15396
|
+
rollup.day,
|
|
15397
|
+
daySessions,
|
|
15398
|
+
privateProjects,
|
|
15399
|
+
enrichmentOptIn
|
|
15400
|
+
);
|
|
15401
|
+
const payload = buildIngestPayload({
|
|
15239
15402
|
rollup,
|
|
15240
|
-
|
|
15403
|
+
richExtras: richBlocks?.rich,
|
|
15404
|
+
enrichedExtras: richBlocks?.enriched,
|
|
15405
|
+
usageSnapshot: isLatest ? usageSnapshot : void 0,
|
|
15241
15406
|
planTier,
|
|
15242
15407
|
// Same rationale as usageSnapshot — current cycle data only on the
|
|
15243
15408
|
// latest rollup so older days don't get tagged with today's peaks.
|
|
15244
|
-
isLatest ? cyclePeaks : void 0
|
|
15245
|
-
);
|
|
15409
|
+
cyclePeaks: isLatest ? cyclePeaks : void 0
|
|
15410
|
+
});
|
|
15246
15411
|
const result = await pushToTeamServer(config, payload);
|
|
15247
15412
|
if (!result.ok) {
|
|
15248
15413
|
const errLine = `team push failed on ${rollup.day} (${result.status})`;
|
|
@@ -16039,7 +16204,7 @@ async function main() {
|
|
|
16039
16204
|
case "version":
|
|
16040
16205
|
case "--version":
|
|
16041
16206
|
case "-v":
|
|
16042
|
-
console.log(`fleetlens ${"0.11.
|
|
16207
|
+
console.log(`fleetlens ${"0.11.2"}`);
|
|
16043
16208
|
break;
|
|
16044
16209
|
case "help":
|
|
16045
16210
|
case "--help":
|
|
@@ -16047,7 +16212,7 @@ async function main() {
|
|
|
16047
16212
|
console.log(`Usage: fleetlens <command>
|
|
16048
16213
|
|
|
16049
16214
|
Common:
|
|
16050
|
-
start [--port N] [--
|
|
16215
|
+
start [--port N] [--open] Start dashboard + usage daemon (prints URL; pass --open to also launch browser)
|
|
16051
16216
|
stop Stop dashboard + usage daemon
|
|
16052
16217
|
status Show server + daemon + latest snapshot
|
|
16053
16218
|
update Update to the latest version
|
|
@@ -16062,7 +16227,7 @@ Terminal:
|
|
|
16062
16227
|
runs [--watch] [--json] [--since 24h] Live LLM call activity + token spend
|
|
16063
16228
|
|
|
16064
16229
|
Advanced:
|
|
16065
|
-
web [page] [--
|
|
16230
|
+
web [page] [--open] Print dashboard URL without auto-starting daemon (pass --open to also launch browser)
|
|
16066
16231
|
start --no-daemon Start only the web server (no daemon)
|
|
16067
16232
|
daemon <start|stop|status|logs> Manage the usage daemon by itself
|
|
16068
16233
|
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[18622,(e,r,t)=>{r.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},93695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},70406,(e,r,t)=>{r.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},50227,(e,r,t)=>{r.exports=e.x("node:path",()=>require("node:path"))},2157,(e,r,t)=>{r.exports=e.x("node:fs",()=>require("node:fs"))},60526,(e,r,t)=>{r.exports=e.x("node:os",()=>require("node:os"))},66680,(e,r,t)=>{r.exports=e.x("node:crypto",()=>require("node:crypto"))},74533,(e,r,t)=>{r.exports=e.x("node:child_process",()=>require("node:child_process"))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Bexternals%5D__0o43ejh._.js.map
|