fleetlens 0.16.1 → 0.16.3

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/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/build-manifest.json +3 -3
  3. package/app/apps/web/.next/prerender-manifest.json +3 -3
  4. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/app/apps/web/.next/server/app/agent/page_client-reference-manifest.js +1 -1
  13. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  14. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  15. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  16. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  17. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  18. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  19. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  20. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  21. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  22. package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
  23. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  24. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  25. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  26. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  28. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  29. package/app/apps/web/.next/server/app/team/onboarding/page_client-reference-manifest.js +1 -1
  30. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
  31. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  32. package/app/apps/web/.next/server/chunks/[root-of-the-server]__02faosk._.js +3 -3
  33. package/app/apps/web/.next/server/chunks/[root-of-the-server]__09cgmam._.js +2 -2
  34. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0tk8p3d._.js +2 -2
  35. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0u6pamj._.js +2 -2
  36. package/app/apps/web/.next/server/chunks/[root-of-the-server]__12jomao._.js +2 -2
  37. package/app/apps/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0sr4wr_.js +1 -1
  38. package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
  39. package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
  40. package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
  41. package/app/apps/web/.next/server/chunks/ssr/apps_web_0epqfet._.js +1 -1
  42. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_[id]_session-view_tsx_0-9t5~.._.js +1 -1
  43. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_sessions-grid_tsx_0bri5x.._.js +1 -1
  44. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
  45. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
  46. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +1 -1
  47. package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
  48. package/app/apps/web/.next/server/middleware-manifest.json +5 -5
  49. package/app/apps/web/.next/server/pages/500.html +1 -1
  50. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  51. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  52. package/app/apps/web/.next/static/chunks/{07bzlfv97o1ig.js → 0p5ee8wje3zi~.js} +1 -1
  53. package/app/apps/web/.next/static/chunks/0pt-1~k9ei92l.js +14 -0
  54. package/app/apps/web/.next/static/chunks/{0awkd5df28gvj.js → 0~uugvb4izjd2.js} +1 -1
  55. package/app/apps/web/app/sessions/[id]/session-view.tsx +6 -2
  56. package/app/apps/web/app/sessions/sessions-grid.tsx +5 -1
  57. package/app/apps/web/app/usage/page.tsx +27 -1
  58. package/app/apps/web/lib/agent/run.ts +24 -5
  59. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  60. package/app/apps/web/package.json +1 -1
  61. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  62. package/dist/daemon-worker.js +182 -34
  63. package/dist/index.js +187 -41
  64. package/menubar/FleetlensMenubar.app/Contents/Info.plist +2 -2
  65. package/menubar/FleetlensMenubar.app/Contents/MacOS/FleetlensMenubar +0 -0
  66. package/package.json +1 -1
  67. package/app/apps/web/.next/static/chunks/0at6brbse8wn2.js +0 -14
  68. /package/app/apps/web/.next/static/{d1mwRtSMG-R7wb8o9KxM3 → DoQvoHgeMQRMU3tniT_DK}/_buildManifest.js +0 -0
  69. /package/app/apps/web/.next/static/{d1mwRtSMG-R7wb8o9KxM3 → DoQvoHgeMQRMU3tniT_DK}/_clientMiddlewareManifest.js +0 -0
  70. /package/app/apps/web/.next/static/{d1mwRtSMG-R7wb8o9KxM3 → DoQvoHgeMQRMU3tniT_DK}/_ssgManifest.js +0 -0
package/dist/index.js CHANGED
@@ -2853,6 +2853,11 @@ function parseRollout(file, lines) {
2853
2853
  let lastUserPreview;
2854
2854
  let lastAgentPreview;
2855
2855
  const tsMs = [];
2856
+ let threadSource;
2857
+ let rootSessionId;
2858
+ let parentThreadId;
2859
+ let agentNickname;
2860
+ let agentPath;
2856
2861
  let idx = 0;
2857
2862
  for (const line of lines) {
2858
2863
  if (typeof line !== "object" || line === null)
@@ -2873,6 +2878,16 @@ function parseRollout(file, lines) {
2873
2878
  if (type === "session_meta") {
2874
2879
  if (typeof payload.cwd === "string")
2875
2880
  cwd = payload.cwd;
2881
+ if (threadSource === void 0 && typeof payload.thread_source === "string")
2882
+ threadSource = payload.thread_source;
2883
+ if (rootSessionId === void 0 && typeof payload.session_id === "string")
2884
+ rootSessionId = payload.session_id;
2885
+ if (parentThreadId === void 0 && typeof payload.parent_thread_id === "string")
2886
+ parentThreadId = payload.parent_thread_id;
2887
+ if (agentNickname === void 0 && typeof payload.agent_nickname === "string")
2888
+ agentNickname = payload.agent_nickname;
2889
+ if (agentPath === void 0 && typeof payload.agent_path === "string")
2890
+ agentPath = payload.agent_path;
2876
2891
  continue;
2877
2892
  }
2878
2893
  if (type === "turn_context") {
@@ -3076,7 +3091,7 @@ function parseRollout(file, lines) {
3076
3091
  airTimeMs,
3077
3092
  activeSegments
3078
3093
  };
3079
- return { meta, events };
3094
+ return { meta, events, threadSource, rootSessionId, parentThreadId, agentNickname, agentPath };
3080
3095
  }
3081
3096
  function numberOf(v) {
3082
3097
  return typeof v === "number" && Number.isFinite(v) ? v : void 0;
@@ -3114,28 +3129,112 @@ function clearCodexCaches() {
3114
3129
  metaCache2.clear();
3115
3130
  detailCache2.clear();
3116
3131
  }
3117
- async function listCodexSessions(opts = {}) {
3118
- const root = opts.root ?? DEFAULT_CODEX_ROOT;
3132
+ async function scanAllCodex(root) {
3119
3133
  const files = await listRolloutFiles(root);
3120
3134
  const out = [];
3121
3135
  for (const file of files) {
3122
3136
  const cached = metaCache2.get(file.filePath);
3123
3137
  if (cached && cached.mtimeMs === file.mtimeMs && cached.sizeBytes === file.sizeBytes) {
3124
- out.push(cached.meta);
3138
+ out.push({
3139
+ file,
3140
+ meta: cached.meta,
3141
+ threadSource: cached.threadSource,
3142
+ rootSessionId: cached.rootSessionId,
3143
+ parentThreadId: cached.parentThreadId,
3144
+ agentNickname: cached.agentNickname,
3145
+ agentPath: cached.agentPath
3146
+ });
3125
3147
  continue;
3126
3148
  }
3127
3149
  try {
3128
3150
  const lines = await readJsonl(file.filePath);
3129
- const { meta } = parseRollout(file, lines);
3151
+ const parsed = parseRollout(file, lines);
3130
3152
  metaCache2.set(file.filePath, {
3131
- meta,
3153
+ meta: parsed.meta,
3132
3154
  mtimeMs: file.mtimeMs,
3133
- sizeBytes: file.sizeBytes
3155
+ sizeBytes: file.sizeBytes,
3156
+ threadSource: parsed.threadSource,
3157
+ rootSessionId: parsed.rootSessionId,
3158
+ parentThreadId: parsed.parentThreadId,
3159
+ agentNickname: parsed.agentNickname,
3160
+ agentPath: parsed.agentPath
3161
+ });
3162
+ out.push({
3163
+ file,
3164
+ meta: parsed.meta,
3165
+ threadSource: parsed.threadSource,
3166
+ rootSessionId: parsed.rootSessionId,
3167
+ parentThreadId: parsed.parentThreadId,
3168
+ agentNickname: parsed.agentNickname,
3169
+ agentPath: parsed.agentPath
3134
3170
  });
3135
- out.push(meta);
3136
3171
  } catch {
3137
3172
  }
3138
3173
  }
3174
+ return out;
3175
+ }
3176
+ function buildSubagentRun(entry, parentStartMs) {
3177
+ const meta = entry.meta;
3178
+ const startMs = meta.firstTimestamp ? Date.parse(meta.firstTimestamp) : void 0;
3179
+ const endMs = meta.lastTimestamp ? Date.parse(meta.lastTimestamp) : void 0;
3180
+ const startOk = startMs !== void 0 && Number.isFinite(startMs) ? startMs : void 0;
3181
+ const endOk = endMs !== void 0 && Number.isFinite(endMs) ? endMs : void 0;
3182
+ return {
3183
+ agentId: meta.id,
3184
+ agentType: entry.agentNickname ?? entry.agentPath ?? "subagent",
3185
+ description: entry.agentPath ?? entry.agentNickname ?? meta.id,
3186
+ startMs: startOk,
3187
+ endMs: endOk,
3188
+ durationMs: meta.durationMs,
3189
+ startTOffsetMs: parentStartMs !== void 0 && startOk !== void 0 ? Math.max(0, startOk - parentStartMs) : void 0,
3190
+ endTOffsetMs: parentStartMs !== void 0 && endOk !== void 0 ? Math.max(0, endOk - parentStartMs) : void 0,
3191
+ eventCount: meta.eventCount,
3192
+ totalUsage: meta.totalUsage,
3193
+ model: meta.model,
3194
+ toolCallCount: meta.toolCallCount,
3195
+ finalPreview: meta.lastAgentPreview
3196
+ };
3197
+ }
3198
+ async function listCodexSessions(opts = {}) {
3199
+ const root = opts.root ?? DEFAULT_CODEX_ROOT;
3200
+ const all = await scanAllCodex(root);
3201
+ const subagentsByRoot = /* @__PURE__ */ new Map();
3202
+ for (const entry of all) {
3203
+ if (entry.threadSource !== "subagent" || !entry.rootSessionId)
3204
+ continue;
3205
+ const list = subagentsByRoot.get(entry.rootSessionId);
3206
+ if (list)
3207
+ list.push(entry);
3208
+ else
3209
+ subagentsByRoot.set(entry.rootSessionId, [entry]);
3210
+ }
3211
+ const out = [];
3212
+ for (const entry of all) {
3213
+ if (entry.threadSource === "subagent")
3214
+ continue;
3215
+ const children = subagentsByRoot.get(entry.meta.id);
3216
+ if (!children || children.length === 0) {
3217
+ out.push(entry.meta);
3218
+ continue;
3219
+ }
3220
+ const merged = {
3221
+ ...entry.meta,
3222
+ spawnedAgentCount: children.length,
3223
+ totalUsage: {
3224
+ input: entry.meta.totalUsage.input + children.reduce((s, c) => s + c.meta.totalUsage.input, 0),
3225
+ output: entry.meta.totalUsage.output + children.reduce((s, c) => s + c.meta.totalUsage.output, 0),
3226
+ cacheRead: entry.meta.totalUsage.cacheRead + children.reduce((s, c) => s + c.meta.totalUsage.cacheRead, 0),
3227
+ cacheWrite: entry.meta.totalUsage.cacheWrite + children.reduce((s, c) => s + c.meta.totalUsage.cacheWrite, 0)
3228
+ },
3229
+ toolCallCount: (entry.meta.toolCallCount ?? 0) + children.reduce((s, c) => s + (c.meta.toolCallCount ?? 0), 0)
3230
+ };
3231
+ for (const c of children) {
3232
+ if (c.meta.lastTimestamp && (!merged.lastTimestamp || c.meta.lastTimestamp > merged.lastTimestamp)) {
3233
+ merged.lastTimestamp = c.meta.lastTimestamp;
3234
+ }
3235
+ }
3236
+ out.push(merged);
3237
+ }
3139
3238
  out.sort((a, b) => (b.firstTimestamp ?? "").localeCompare(a.firstTimestamp ?? ""));
3140
3239
  if (opts.limit !== void 0)
3141
3240
  return out.slice(0, opts.limit);
@@ -3143,17 +3242,41 @@ async function listCodexSessions(opts = {}) {
3143
3242
  }
3144
3243
  async function getCodexSession(id, opts = {}) {
3145
3244
  const root = opts.root ?? DEFAULT_CODEX_ROOT;
3146
- const files = await listRolloutFiles(root);
3147
- const file = files.find((f) => f.sessionId === id);
3148
- if (!file)
3149
- return null;
3245
+ const all = await scanAllCodex(root);
3246
+ const rootEntry = all.find((a) => a.meta.id === id && a.threadSource !== "subagent");
3247
+ if (!rootEntry) {
3248
+ const direct = all.find((a) => a.meta.id === id);
3249
+ if (!direct)
3250
+ return null;
3251
+ const cached2 = detailCache2.get(direct.file.filePath);
3252
+ if (cached2 && cached2.mtimeMs === direct.file.mtimeMs && cached2.sizeBytes === direct.file.sizeBytes) {
3253
+ return cached2.detail;
3254
+ }
3255
+ const lines2 = await readJsonl(direct.file.filePath);
3256
+ const { meta: meta2, events: events2 } = parseRollout(direct.file, lines2);
3257
+ const detail2 = { ...meta2, events: events2 };
3258
+ detailCache2.set(direct.file.filePath, {
3259
+ detail: detail2,
3260
+ mtimeMs: direct.file.mtimeMs,
3261
+ sizeBytes: direct.file.sizeBytes
3262
+ });
3263
+ return detail2;
3264
+ }
3265
+ const file = rootEntry.file;
3150
3266
  const cached = detailCache2.get(file.filePath);
3151
3267
  if (cached && cached.mtimeMs === file.mtimeMs && cached.sizeBytes === file.sizeBytes) {
3152
3268
  return cached.detail;
3153
3269
  }
3154
3270
  const lines = await readJsonl(file.filePath);
3155
3271
  const { meta, events } = parseRollout(file, lines);
3156
- const detail = { ...meta, events };
3272
+ const children = all.filter((a) => a.threadSource === "subagent" && a.rootSessionId === id);
3273
+ const parentStartMs = meta.firstTimestamp ? Date.parse(meta.firstTimestamp) : void 0;
3274
+ const subagents = children.map((c) => buildSubagentRun(c, parentStartMs)).sort((a, b) => (a.startMs ?? 0) - (b.startMs ?? 0));
3275
+ const detail = {
3276
+ ...meta,
3277
+ events,
3278
+ ...subagents.length > 0 ? { subagents, spawnedAgentCount: subagents.length } : {}
3279
+ };
3157
3280
  detailCache2.set(file.filePath, {
3158
3281
  detail,
3159
3282
  mtimeMs: file.mtimeMs,
@@ -3164,6 +3287,15 @@ async function getCodexSession(id, opts = {}) {
3164
3287
  function hasUsableRateLimitWindows(primary, secondary) {
3165
3288
  return numberOf(primary?.used_percent) !== void 0 || numberOf(secondary?.used_percent) !== void 0;
3166
3289
  }
3290
+ function normalizeCodexWindow(raw, nowMs) {
3291
+ const usedPercent = numberOf(raw?.used_percent);
3292
+ const resetUnix = numberOf(raw?.resets_at);
3293
+ const expired = resetUnix !== void 0 && nowMs > resetUnix * 1e3;
3294
+ return {
3295
+ utilization: usedPercent === void 0 ? null : expired ? 0 : usedPercent,
3296
+ resets_at: resetUnix !== void 0 ? new Date(resetUnix * 1e3).toISOString() : null
3297
+ };
3298
+ }
3167
3299
  async function getLatestCodexUsage(opts = {}) {
3168
3300
  const root = opts.root ?? DEFAULT_CODEX_ROOT;
3169
3301
  const files = await listRolloutFiles(root);
@@ -3189,23 +3321,34 @@ async function getLatestCodexUsage(opts = {}) {
3189
3321
  const secondary = rl.secondary ?? null;
3190
3322
  if (!hasUsableRateLimitWindows(primary, secondary))
3191
3323
  continue;
3192
- const fivePct = numberOf(primary?.used_percent);
3193
- const sevenPct = numberOf(secondary?.used_percent);
3194
- const fiveResetUnix = numberOf(primary?.resets_at);
3195
- const sevenResetUnix = numberOf(secondary?.resets_at);
3196
3324
  const planType = typeof rl.plan_type === "string" ? rl.plan_type : null;
3197
3325
  const nowMs = Date.now();
3198
- const fiveExpired = fiveResetUnix !== void 0 && nowMs > fiveResetUnix * 1e3;
3199
- const sevenExpired = sevenResetUnix !== void 0 && nowMs > sevenResetUnix * 1e3;
3326
+ let fiveHour = null;
3327
+ let sevenDay = null;
3328
+ for (const candidate of [primary, secondary]) {
3329
+ if (!candidate)
3330
+ continue;
3331
+ const windowMinutes = numberOf(candidate.window_minutes);
3332
+ if (windowMinutes === FIVE_HOUR_WINDOW_MINUTES) {
3333
+ fiveHour = normalizeCodexWindow(candidate, nowMs);
3334
+ } else if (windowMinutes === SEVEN_DAY_WINDOW_MINUTES) {
3335
+ sevenDay = normalizeCodexWindow(candidate, nowMs);
3336
+ }
3337
+ }
3338
+ const unknownWindows = [primary, secondary].filter((candidate) => candidate !== null && numberOf(candidate.window_minutes) === void 0);
3339
+ if (!fiveHour && !sevenDay) {
3340
+ fiveHour = primary ? normalizeCodexWindow(primary, nowMs) : null;
3341
+ sevenDay = secondary ? normalizeCodexWindow(secondary, nowMs) : null;
3342
+ } else if (unknownWindows.length === 1) {
3343
+ const inferred = normalizeCodexWindow(unknownWindows[0], nowMs);
3344
+ if (!fiveHour)
3345
+ fiveHour = inferred;
3346
+ else if (!sevenDay)
3347
+ sevenDay = inferred;
3348
+ }
3200
3349
  return {
3201
- five_hour: {
3202
- utilization: fiveExpired ? 0 : fivePct ?? null,
3203
- resets_at: fiveResetUnix !== void 0 ? new Date(fiveResetUnix * 1e3).toISOString() : null
3204
- },
3205
- seven_day: {
3206
- utilization: sevenExpired ? 0 : sevenPct ?? null,
3207
- resets_at: sevenResetUnix !== void 0 ? new Date(sevenResetUnix * 1e3).toISOString() : null
3208
- },
3350
+ five_hour: fiveHour ?? { utilization: null, resets_at: null },
3351
+ seven_day: sevenDay ?? { utilization: null, resets_at: null },
3209
3352
  plan_type: planType,
3210
3353
  source_path: file.filePath
3211
3354
  };
@@ -3219,7 +3362,7 @@ function codexSessionLocalDay(meta) {
3219
3362
  const ms = Date.parse(meta.firstTimestamp);
3220
3363
  return Number.isFinite(ms) ? toLocalDay(ms) : void 0;
3221
3364
  }
3222
- var DEFAULT_CODEX_ROOT, ROLLOUT_RE, IDLE_GAP_MS, metaCache2, detailCache2;
3365
+ var DEFAULT_CODEX_ROOT, ROLLOUT_RE, IDLE_GAP_MS, metaCache2, detailCache2, FIVE_HOUR_WINDOW_MINUTES, SEVEN_DAY_WINDOW_MINUTES;
3223
3366
  var init_codex = __esm({
3224
3367
  "../parser/dist/codex.js"() {
3225
3368
  "use strict";
@@ -3231,6 +3374,8 @@ var init_codex = __esm({
3231
3374
  IDLE_GAP_MS = 3 * 60 * 1e3;
3232
3375
  metaCache2 = /* @__PURE__ */ new Map();
3233
3376
  detailCache2 = /* @__PURE__ */ new Map();
3377
+ FIVE_HOUR_WINDOW_MINUTES = 5 * 60;
3378
+ SEVEN_DAY_WINDOW_MINUTES = 7 * 24 * 60;
3234
3379
  }
3235
3380
  });
3236
3381
 
@@ -5576,7 +5721,8 @@ var init_fs = __esm({
5576
5721
  captured_at: (/* @__PURE__ */ new Date()).toISOString(),
5577
5722
  agent: "codex",
5578
5723
  five_hour: w.five_hour,
5579
- seven_day: w.seven_day
5724
+ seven_day: w.seven_day,
5725
+ plan_type: w.plan_type
5580
5726
  };
5581
5727
  }
5582
5728
  };
@@ -5663,9 +5809,9 @@ function onDiskVersion() {
5663
5809
  try {
5664
5810
  const here = dirname3(fileURLToPath(import.meta.url));
5665
5811
  const pkg = JSON.parse(readFileSync5(join3(here, "..", "package.json"), "utf8"));
5666
- return pkg.version ?? "0.16.1";
5812
+ return pkg.version ?? "0.16.3";
5667
5813
  } catch {
5668
- return "0.16.1";
5814
+ return "0.16.3";
5669
5815
  }
5670
5816
  }
5671
5817
  function getServerStatus() {
@@ -5677,7 +5823,7 @@ function getServerStatus() {
5677
5823
  return { running: false };
5678
5824
  }
5679
5825
  function isServerStale(status2) {
5680
- return status2.running === true && status2.version !== "0.16.1";
5826
+ return status2.running === true && status2.version !== "0.16.3";
5681
5827
  }
5682
5828
  async function ensureCurrentServer(opts = {}) {
5683
5829
  const status2 = getServerStatus();
@@ -6116,9 +6262,9 @@ Installed: ${PACKAGE_NAME}@${verify.installedVersion} at ${verify.installedPath
6116
6262
  console.warn(
6117
6263
  ` \u2022 reinstall in the correct Node env: 'npm install -g ${PACKAGE_NAME}@latest'`
6118
6264
  );
6119
- } else if (verify.installedVersion !== "0.16.1") {
6265
+ } else if (verify.installedVersion !== "0.16.3") {
6120
6266
  console.log(
6121
- ` \u2192 This process is still running ${"0.16.1"}. Next invocation will use ${verify.installedVersion}.`
6267
+ ` \u2192 This process is still running ${"0.16.3"}. Next invocation will use ${verify.installedVersion}.`
6122
6268
  );
6123
6269
  }
6124
6270
  }
@@ -6153,14 +6299,14 @@ async function getUpdateAvailability() {
6153
6299
  if (isDevMode()) return null;
6154
6300
  const latest = await fetchLatestVersion();
6155
6301
  if (latest === null) return {
6156
- current: "0.16.1",
6302
+ current: "0.16.3",
6157
6303
  latest: null,
6158
6304
  updateAvailable: false
6159
6305
  };
6160
6306
  return {
6161
- current: "0.16.1",
6307
+ current: "0.16.3",
6162
6308
  latest,
6163
- updateAvailable: shouldUpdate("0.16.1", latest)
6309
+ updateAvailable: shouldUpdate("0.16.3", latest)
6164
6310
  };
6165
6311
  }
6166
6312
  async function checkForUpdate() {
@@ -6250,7 +6396,7 @@ async function restartServices(state) {
6250
6396
  }
6251
6397
  async function forceUpdate() {
6252
6398
  const latest = await fetchLatestVersion();
6253
- const current = "0.16.1";
6399
+ const current = "0.16.3";
6254
6400
  if (latest === null) {
6255
6401
  console.error("Could not reach npm registry. Check your network.");
6256
6402
  process.exit(1);
@@ -6663,7 +6809,7 @@ async function status() {
6663
6809
  console.log(`Server: running on ${url} (PID ${server.pid}, v${ver})`);
6664
6810
  if (isServerStale(server)) {
6665
6811
  console.log(
6666
- ` \u26A0 serving stale ${ver} (CLI is ${"0.16.1"}) \u2014 run 'fleetlens start' to restart on the current version`
6812
+ ` \u26A0 serving stale ${ver} (CLI is ${"0.16.3"}) \u2014 run 'fleetlens start' to restart on the current version`
6667
6813
  );
6668
6814
  }
6669
6815
  } else {
@@ -18806,7 +18952,7 @@ function buildIngestPayload(inputs) {
18806
18952
  return {
18807
18953
  ingestId: randomUUID2(),
18808
18954
  observedAt: (/* @__PURE__ */ new Date()).toISOString(),
18809
- cliVersion: "0.16.1",
18955
+ cliVersion: "0.16.3",
18810
18956
  ...richRollup || inputs.enrichedExtras || inputs.artifactSignals ? { schemaVersion: RICH_ROLLUP_SCHEMA_VERSION } : {},
18811
18957
  ...inputs.rollup ? { dailyRollup: inputs.rollup } : {},
18812
18958
  ...richRollup ? { richRollup } : {},
@@ -20849,7 +20995,7 @@ async function main() {
20849
20995
  case "version":
20850
20996
  case "--version":
20851
20997
  case "-v":
20852
- console.log(`fleetlens ${"0.16.1"}`);
20998
+ console.log(`fleetlens ${"0.16.3"}`);
20853
20999
  break;
20854
21000
  case "help":
20855
21001
  case "--help":
@@ -10,8 +10,8 @@
10
10
  <key>CFBundleName</key><string>Fleetlens</string>
11
11
  <key>CFBundleDisplayName</key><string>Fleetlens Menu Bar</string>
12
12
  <key>CFBundlePackageType</key><string>APPL</string>
13
- <key>CFBundleShortVersionString</key><string>0.16.1</string>
14
- <key>CFBundleVersion</key><string>0.16.1</string>
13
+ <key>CFBundleShortVersionString</key><string>0.16.3</string>
14
+ <key>CFBundleVersion</key><string>0.16.3</string>
15
15
  <key>LSApplicationCategoryType</key><string>public.app-category.developer-tools</string>
16
16
  <key>LSMinimumSystemVersion</key><string>14.0</string>
17
17
  <key>LSUIElement</key><true/>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetlens",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "description": "fleetlens — local-only dashboard and usage tracker for Claude Code sessions and agent fleets",
5
5
  "license": "MIT",
6
6
  "repository": {