fleetlens 0.2.9 → 0.3.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/app/apps/web/.next/BUILD_ID +1 -1
- package/app/apps/web/.next/build-manifest.json +3 -3
- package/app/apps/web/.next/prerender-manifest.json +3 -3
- 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.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/page.js +3 -3
- 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.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.js +3 -3
- 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.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/sessions/[id]/page.js +3 -2
- 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.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/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/chunks/[root-of-the-server]__0op9af~._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__00z7zlm._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__05lbtny._.js +12 -0
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ms7h0~._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__08cr2u9._.js → [root-of-the-server]__0p~g4m6._.js} +2 -2
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0w52fbc._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0wvzyl7._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/_09n75_5._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/_0ph19-k._.js +12 -0
- package/app/apps/web/.next/server/chunks/ssr/_0u29mdd._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/_0xies90._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_components_06j3c.0._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0-jvt~a._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_analytics_0k4dgst.js +1 -1
- package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
- 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/03.mv4y4.w-vb.js +6 -0
- package/app/apps/web/.next/static/chunks/08983lz4~hffx.js +6 -0
- package/app/apps/web/.next/static/chunks/0fc6dk2qtokwh.js +1 -0
- package/app/apps/web/.next/static/chunks/0p1lpoh02zh8h.js +10 -0
- package/app/apps/web/.next/static/chunks/{03fw7f2obcvq~.js → 14q3xsfpkvuef.js} +2 -2
- package/app/apps/web/app/layout.tsx +2 -0
- package/app/apps/web/app/projects/[slug]/page.tsx +2 -0
- package/app/apps/web/app/sessions/[id]/page.tsx +27 -1
- package/app/apps/web/app/sessions/[id]/session-view.tsx +372 -793
- package/app/apps/web/app/sessions/[id]/team-tab/adapter.ts +633 -0
- package/app/apps/web/app/sessions/[id]/team-tab/format.ts +20 -0
- package/app/apps/web/app/sessions/[id]/team-tab/team-minimap.tsx +682 -0
- package/app/apps/web/app/sessions/[id]/team-tab/team-tab-client.tsx +78 -0
- package/app/apps/web/app/sessions/[id]/team-tab/team-table.tsx +796 -0
- package/app/apps/web/app/sessions/[id]/team-tab/turn-drawer.tsx +805 -0
- package/app/apps/web/app/sessions/[id]/tool-cards.tsx +461 -0
- package/app/apps/web/app/sessions/[id]/turn-steps.tsx +306 -0
- package/app/apps/web/app/sessions/sessions-grid.tsx +36 -5
- package/app/apps/web/components/live-sessions-widget.tsx +20 -6
- package/app/apps/web/components/team-badge.tsx +90 -0
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/index.js +71 -13
- package/package.json +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0b..h_8._.js +0 -3
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0cdd~8n._.js +0 -3
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0~a~v00._.js +0 -3
- package/app/apps/web/.next/server/chunks/ssr/_0zv~jv-._.js +0 -12
- package/app/apps/web/.next/server/chunks/ssr/_12dtryh._.js +0 -12
- package/app/apps/web/.next/static/chunks/07oyxajlp3dvb.js +0 -6
- package/app/apps/web/.next/static/chunks/0a24elrqoqqep.js +0 -10
- package/app/apps/web/.next/static/chunks/0i4zodv86~~~i.js +0 -1
- package/app/apps/web/.next/static/chunks/0rbm60-qyshdm.js +0 -6
- /package/app/apps/web/.next/static/{2rEsiJssG30QsuNT0Lp9S → 0fPDRTdMQ-Y62h6fHNJXL}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{2rEsiJssG30QsuNT0Lp9S → 0fPDRTdMQ-Y62h6fHNJXL}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{2rEsiJssG30QsuNT0Lp9S → 0fPDRTdMQ-Y62h6fHNJXL}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,52535,e=>{"use strict";var t=e.i(18050),s=e.i(71645);e.s(["LiveBadge",0,function({mtimeIso:e,size:i="sm"}){let[l,
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,52535,e=>{"use strict";var t=e.i(18050),s=e.i(71645);e.s(["LiveBadge",0,function({mtimeIso:e,size:i="sm"}){let[l,n]=(0,s.useState)(()=>Date.now());if((0,s.useEffect)(()=>{let e=setInterval(()=>n(Date.now()),1e4);return()=>clearInterval(e)},[]),!e)return null;let r=Date.parse(e);if(Number.isNaN(r)||l-r>45e3)return null;let a="md"===i?8:6;return(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:5,fontSize:"md"===i?10:9,fontWeight:700,letterSpacing:"0.04em",padding:"md"===i?"3px 9px":"2px 7px",borderRadius:100,background:"rgba(239, 68, 68, 0.12)",color:"#ef4444",textTransform:"uppercase"},title:`Last updated ${new Date(r).toLocaleTimeString()}`,children:[(0,t.jsx)("span",{style:{display:"inline-block",width:a,height:a,borderRadius:"50%",background:"#ef4444",animation:"cs-live-pulse 1.6s ease-in-out infinite"}}),"LIVE",(0,t.jsx)("style",{children:`
|
|
2
2
|
@keyframes cs-live-pulse {
|
|
3
3
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
4
4
|
50% { opacity: 0.4; transform: scale(0.85); }
|
|
5
5
|
}
|
|
6
|
-
`})]})}])},64659,63059,e=>{"use strict";var t=e.i(75254);let s=(0,t.default)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",0,s],64659);let i=(0,t.default)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",0,i],63059)},37727,e=>{"use strict";let t=(0,e.i(75254).default)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",0,t],37727)},25063,e=>{"use strict";let t=(0,e.i(75254).default)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,t],25063)},3116,e=>{"use strict";let t=(0,e.i(75254).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);e.s(["Clock",0,t],3116)},95116,e=>{"use strict";let t=(0,e.i(75254).default)("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);e.s(["Wrench",0,t],95116)},98572,e=>{"use strict";let t=/gh\s+pr\s+create\b/i,
|
|
6
|
+
`})]})}])},64659,63059,e=>{"use strict";var t=e.i(75254);let s=(0,t.default)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",0,s],64659);let i=(0,t.default)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",0,i],63059)},37727,e=>{"use strict";let t=(0,e.i(75254).default)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",0,t],37727)},25063,e=>{"use strict";let t=(0,e.i(75254).default)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,t],25063)},3116,e=>{"use strict";let t=(0,e.i(75254).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);e.s(["Clock",0,t],3116)},95116,e=>{"use strict";let t=(0,e.i(75254).default)("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);e.s(["Wrench",0,t],95116)},98572,e=>{"use strict";let t=["/.claude/worktrees/","/.worktrees/"],s=/gh\s+pr\s+create\b/i,i=/#(\d+)/,l=/--title\s+["']([^"']+)["']/;e.s(["canonicalProjectName",0,function(e){let s=function(e){for(let s of t){let t=e.lastIndexOf(s);if(t>=0)return{idx:t,marker:s}}return null}(e);return s?e.slice(0,s.idx):e},"detectPrMarkers",0,function(e){let t=[],n=e.durationMs??0;for(let r of e.events){if("tool-call"!==r.role||"Bash"!==r.toolName)continue;let a=r.blocks.find(e=>e&&"type"in e&&"tool_use"===e.type);if(!a||"tool_use"!==a.type)continue;let o=a.input,c="string"==typeof o?.command?o.command:"";if(!s.test(c))continue;let u=c.match(l),d=c.match(i);t.push({sessionId:e.id,timestamp:r.timestamp??e.firstTimestamp??"",tOffsetMs:r.tOffsetMs,positionInSession:n>0&&void 0!==r.tOffsetMs?Math.min(1,Math.max(0,r.tOffsetMs/n)):void 0,command:c.slice(0,300),prNumber:d?Number(d[1]):void 0,title:u?.[1]})}return t}])}]);
|
|
@@ -36,6 +36,8 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
|
|
36
36
|
lastAgentPreview: s.lastAgentPreview,
|
|
37
37
|
firstTimestamp: s.firstTimestamp,
|
|
38
38
|
lastTimestamp: s.lastTimestamp,
|
|
39
|
+
teamName: s.teamName,
|
|
40
|
+
agentName: s.agentName,
|
|
39
41
|
}));
|
|
40
42
|
|
|
41
43
|
// Read the theme cookie set by the client-side ThemeToggle.
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "@claude-lens/parser";
|
|
9
9
|
import { DashboardView } from "@/components/dashboard-view";
|
|
10
10
|
import { LiveBadge } from "@/components/live-badge";
|
|
11
|
+
import { TeamBadge } from "@/components/team-badge";
|
|
11
12
|
import { formatDuration, formatRelative, prettyProjectName } from "@/lib/format";
|
|
12
13
|
import { ArrowLeft } from "lucide-react";
|
|
13
14
|
|
|
@@ -219,6 +220,7 @@ export default async function ProjectDetail({ params }: { params: Promise<{ slug
|
|
|
219
220
|
<em style={{ color: "var(--af-text-tertiary)" }}>(no user message)</em>
|
|
220
221
|
)}
|
|
221
222
|
</span>
|
|
223
|
+
<TeamBadge session={s} linkable={false} />
|
|
222
224
|
</div>
|
|
223
225
|
</div>
|
|
224
226
|
<div
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { notFound } from "next/navigation";
|
|
2
2
|
import { getSession } from "@/lib/data";
|
|
3
|
+
import { loadTeamForSession, findTeamLead } from "@claude-lens/parser/fs";
|
|
4
|
+
import {
|
|
5
|
+
teamViewToTimelineData,
|
|
6
|
+
type TimelineData,
|
|
7
|
+
} from "./team-tab/adapter";
|
|
3
8
|
import { SessionView } from "./session-view";
|
|
4
9
|
|
|
5
10
|
export const dynamic = "force-dynamic";
|
|
@@ -13,6 +18,27 @@ export default async function SessionDetailPage({
|
|
|
13
18
|
const session = await getSession(id);
|
|
14
19
|
if (!session) return notFound();
|
|
15
20
|
|
|
21
|
+
// Only attempt the team load when this session is actually orchestrating
|
|
22
|
+
// a team. A bare teamName tag (without TeamCreate or outbound SendMessage)
|
|
23
|
+
// is just an environmental artifact and shouldn't surface a Team tab.
|
|
24
|
+
let teamProps: (TimelineData & { teamName: string }) | null = null;
|
|
25
|
+
if (session.isTeamLead) {
|
|
26
|
+
const result = await loadTeamForSession(id);
|
|
27
|
+
if (result) {
|
|
28
|
+
teamProps = {
|
|
29
|
+
...teamViewToTimelineData(result.view, result.details),
|
|
30
|
+
teamName: result.view.teamName,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// For team member sessions, find the lead so we can show a "back to
|
|
36
|
+
// team lead" navigation link.
|
|
37
|
+
let teamLeadInfo: { leadSessionId: string; teamName: string; agentName: string } | null = null;
|
|
38
|
+
if (!session.isTeamLead && session.teamName && session.agentName) {
|
|
39
|
+
teamLeadInfo = await findTeamLead(id);
|
|
40
|
+
}
|
|
41
|
+
|
|
16
42
|
// Strip the `raw` field from every event before serializing to the
|
|
17
43
|
// client. The parser keeps `raw` around for the Debug tab, but it's a
|
|
18
44
|
// full verbatim copy of the JSONL line — for an 8.7 MB session file
|
|
@@ -24,5 +50,5 @@ export default async function SessionDetailPage({
|
|
|
24
50
|
events: session.events.map((e) => ({ ...e, raw: undefined })),
|
|
25
51
|
};
|
|
26
52
|
|
|
27
|
-
return <SessionView session={stripped} />;
|
|
53
|
+
return <SessionView session={stripped} team={teamProps} teamLead={teamLeadInfo} />;
|
|
28
54
|
}
|