agent-replay 0.1.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 (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/bin/agent-replay.js +20 -0
  4. package/build/client/_app/immutable/assets/0.D9-tUsfl.css +1 -0
  5. package/build/client/_app/immutable/assets/0.D9-tUsfl.css.br +0 -0
  6. package/build/client/_app/immutable/assets/0.D9-tUsfl.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/2.Ch4de4ty.css +1 -0
  8. package/build/client/_app/immutable/assets/2.Ch4de4ty.css.br +0 -0
  9. package/build/client/_app/immutable/assets/2.Ch4de4ty.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/3.BP1aEJ1A.css +1 -0
  11. package/build/client/_app/immutable/assets/3.BP1aEJ1A.css.br +0 -0
  12. package/build/client/_app/immutable/assets/3.BP1aEJ1A.css.gz +0 -0
  13. package/build/client/_app/immutable/chunks/8LyLqy0e.js +1 -0
  14. package/build/client/_app/immutable/chunks/8LyLqy0e.js.br +3 -0
  15. package/build/client/_app/immutable/chunks/8LyLqy0e.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/BmaMsIzI.js +3 -0
  17. package/build/client/_app/immutable/chunks/BmaMsIzI.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BmaMsIzI.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/BoUXsunA.js +1 -0
  20. package/build/client/_app/immutable/chunks/BoUXsunA.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/BoUXsunA.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/CCa20sJM.js +1 -0
  23. package/build/client/_app/immutable/chunks/CCa20sJM.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/CCa20sJM.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/CP-o74wi.js +2 -0
  26. package/build/client/_app/immutable/chunks/CP-o74wi.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/CP-o74wi.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/CZWwZlGk.js +1 -0
  29. package/build/client/_app/immutable/chunks/CZWwZlGk.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/CZWwZlGk.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/D6SnDtAs.js +1 -0
  32. package/build/client/_app/immutable/chunks/D6SnDtAs.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/D6SnDtAs.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/DApgqo7x.js +1 -0
  35. package/build/client/_app/immutable/chunks/DApgqo7x.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/DApgqo7x.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/DCcb0kkP.js +1 -0
  38. package/build/client/_app/immutable/chunks/DCcb0kkP.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/DCcb0kkP.js.gz +0 -0
  40. package/build/client/_app/immutable/entry/app.CelDjTDX.js +2 -0
  41. package/build/client/_app/immutable/entry/app.CelDjTDX.js.br +0 -0
  42. package/build/client/_app/immutable/entry/app.CelDjTDX.js.gz +0 -0
  43. package/build/client/_app/immutable/entry/start.Bo8U6P_2.js +1 -0
  44. package/build/client/_app/immutable/entry/start.Bo8U6P_2.js.br +2 -0
  45. package/build/client/_app/immutable/entry/start.Bo8U6P_2.js.gz +0 -0
  46. package/build/client/_app/immutable/nodes/0.DdgnJbSm.js +1 -0
  47. package/build/client/_app/immutable/nodes/0.DdgnJbSm.js.br +0 -0
  48. package/build/client/_app/immutable/nodes/0.DdgnJbSm.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/1.DUCL1Cc_.js +1 -0
  50. package/build/client/_app/immutable/nodes/1.DUCL1Cc_.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/1.DUCL1Cc_.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/2.FNRc_Nvw.js +1 -0
  53. package/build/client/_app/immutable/nodes/2.FNRc_Nvw.js.br +0 -0
  54. package/build/client/_app/immutable/nodes/2.FNRc_Nvw.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/3.CaEmUkA2.js +29 -0
  56. package/build/client/_app/immutable/nodes/3.CaEmUkA2.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/3.CaEmUkA2.js.gz +0 -0
  58. package/build/client/_app/version.json +1 -0
  59. package/build/client/_app/version.json.br +0 -0
  60. package/build/client/_app/version.json.gz +0 -0
  61. package/build/client/favicon.svg +13 -0
  62. package/build/client/favicon.svg.br +0 -0
  63. package/build/client/favicon.svg.gz +0 -0
  64. package/build/client/robots.txt +3 -0
  65. package/build/client/screenshot.png +0 -0
  66. package/build/env.js +94 -0
  67. package/build/handler.js +1494 -0
  68. package/build/index.js +345 -0
  69. package/build/server/chunks/0-CkGitm9W.js +9 -0
  70. package/build/server/chunks/0-CkGitm9W.js.map +1 -0
  71. package/build/server/chunks/1-BU8Hl3FY.js +9 -0
  72. package/build/server/chunks/1-BU8Hl3FY.js.map +1 -0
  73. package/build/server/chunks/2-DenZJmTh.js +27 -0
  74. package/build/server/chunks/2-DenZJmTh.js.map +1 -0
  75. package/build/server/chunks/3-Df2VKXDy.js +73 -0
  76. package/build/server/chunks/3-Df2VKXDy.js.map +1 -0
  77. package/build/server/chunks/_layout.svelte-BK7oCPlN.js +26 -0
  78. package/build/server/chunks/_layout.svelte-BK7oCPlN.js.map +1 -0
  79. package/build/server/chunks/_page.svelte-BMqbzglq.js +178 -0
  80. package/build/server/chunks/_page.svelte-BMqbzglq.js.map +1 -0
  81. package/build/server/chunks/_page.svelte-C2kNC2pi.js +504 -0
  82. package/build/server/chunks/_page.svelte-C2kNC2pi.js.map +1 -0
  83. package/build/server/chunks/context-JUYyv6NC.js +74 -0
  84. package/build/server/chunks/context-JUYyv6NC.js.map +1 -0
  85. package/build/server/chunks/error.svelte-Epasb48G.js +46 -0
  86. package/build/server/chunks/error.svelte-Epasb48G.js.map +1 -0
  87. package/build/server/chunks/escaping-CqgfEcN3.js +19 -0
  88. package/build/server/chunks/escaping-CqgfEcN3.js.map +1 -0
  89. package/build/server/chunks/exports-CURVw3-F.js +303 -0
  90. package/build/server/chunks/exports-CURVw3-F.js.map +1 -0
  91. package/build/server/chunks/format-dOzJq-yD.js +59 -0
  92. package/build/server/chunks/format-dOzJq-yD.js.map +1 -0
  93. package/build/server/chunks/index-C0L7m6Jv.js +1497 -0
  94. package/build/server/chunks/index-C0L7m6Jv.js.map +1 -0
  95. package/build/server/chunks/index-CoD1IJuy.js +190 -0
  96. package/build/server/chunks/index-CoD1IJuy.js.map +1 -0
  97. package/build/server/chunks/index2-f44F-4KW.js +614 -0
  98. package/build/server/chunks/index2-f44F-4KW.js.map +1 -0
  99. package/build/server/chunks/shared-server-DaWdgxVh.js +11 -0
  100. package/build/server/chunks/shared-server-DaWdgxVh.js.map +1 -0
  101. package/build/server/index.js +8152 -0
  102. package/build/server/index.js.map +1 -0
  103. package/build/server/manifest.js +54 -0
  104. package/build/server/manifest.js.map +1 -0
  105. package/build/shims.js +32 -0
  106. package/package.json +71 -0
  107. package/static/favicon.svg +13 -0
  108. package/static/robots.txt +3 -0
  109. package/static/screenshot.png +0 -0
@@ -0,0 +1,178 @@
1
+ import { N as head, O as attr, P as ensure_array_like, Q as attr_class, T as stringify } from './index-C0L7m6Jv.js';
2
+ import { s as shortModel, f as formatDate, a as formatDurationBetween, b as formatNumber, c as formatCostWithPlan } from './format-dOzJq-yD.js';
3
+ import { e as escape_html } from './escaping-CqgfEcN3.js';
4
+ import './context-JUYyv6NC.js';
5
+
6
+ function SessionCard($$renderer, $$props) {
7
+ $$renderer.component(($$renderer2) => {
8
+ let { session } = $$props;
9
+ function getModelBadge(model) {
10
+ if (model.includes("opus")) return "bg-purple-500/15 text-purple-300 border border-purple-500/30";
11
+ if (model.includes("sonnet")) return "bg-blue-500/15 text-blue-300 border border-blue-500/30";
12
+ if (model.includes("haiku")) return "bg-green-500/15 text-green-300 border border-green-500/30";
13
+ return "bg-surface-800 text-surface-400 border border-surface-700";
14
+ }
15
+ function buildHref(s) {
16
+ const base = `/sessions/${s.sessionId}`;
17
+ if (s.provider === "cursor" && s.providerMeta) {
18
+ const params = new URLSearchParams({ provider: "cursor", ...s.providerMeta, project: s.project });
19
+ return `${base}?${params}`;
20
+ }
21
+ return `${base}?project=${encodeURIComponent(s.project)}&file=${encodeURIComponent(s.filePath)}`;
22
+ }
23
+ const providerBadge = {
24
+ "claude-code": {
25
+ label: "CC",
26
+ cls: "bg-orange-500/15 text-orange-300 border-orange-500/30"
27
+ },
28
+ "cursor": {
29
+ label: "Cursor",
30
+ cls: "bg-sky-500/15 text-sky-300 border-sky-500/30"
31
+ }
32
+ };
33
+ $$renderer2.push(`<a${attr("href", buildHref(session))} class="block bg-surface-900 border border-surface-800 rounded-lg p-4 hover:border-surface-600 hover:bg-surface-800/80 transition-all group" style="container-type: inline-size;"><div class="flex items-start justify-between gap-3 mb-3"><div class="min-w-0"><h3 class="text-surface-100 font-medium truncate group-hover:text-white transition-colors">${escape_html(session.slug || session.sessionId.slice(0, 8))}</h3> <p class="text-surface-500 text-xs mt-0.5 truncate">${escape_html(session.project)}</p></div> <span class="text-surface-500 text-xs whitespace-nowrap">${escape_html(formatDate(session.startedAt))}</span></div> <div class="session-card-meta flex items-center gap-2 text-xs text-surface-400 flex-wrap svelte-yfumhu">`);
34
+ if (session.provider && session.provider !== "claude-code") {
35
+ $$renderer2.push("<!--[-->");
36
+ $$renderer2.push(`<span${attr_class(`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium border ${stringify(providerBadge[session.provider]?.cls || "bg-surface-800 text-surface-400 border-surface-700")}`, "svelte-yfumhu")}>${escape_html(providerBadge[session.provider]?.label || session.provider)}</span>`);
37
+ } else {
38
+ $$renderer2.push("<!--[!-->");
39
+ }
40
+ $$renderer2.push(`<!--]--> <span${attr_class(`inline-flex items-center px-2 py-0.5 rounded-full text-[11px] font-medium ${stringify(getModelBadge(session.model))}`, "svelte-yfumhu")}>${escape_html(shortModel(session.model))}</span> <span class="meta-sep text-surface-700 svelte-yfumhu">|</span> <span class="text-cyan-400/80">${escape_html(session.toolCallCount)} tools</span> <span class="meta-sep text-surface-700 svelte-yfumhu">|</span> <span>${escape_html(formatDurationBetween(session.startedAt, session.lastActiveAt))}</span> <span class="meta-sep text-surface-700 svelte-yfumhu">|</span> <span>${escape_html(formatNumber(session.outputTokens))} out</span> <span${attr_class(`ml-auto ${stringify(session.estimatedCost > 0 ? "text-emerald-400" : "text-surface-500")}`)}${attr("title", "Estimated API cost")}>${escape_html(formatCostWithPlan(session.estimatedCost))}`);
41
+ {
42
+ $$renderer2.push("<!--[!-->");
43
+ }
44
+ $$renderer2.push(`<!--]--></span></div></a>`);
45
+ });
46
+ }
47
+ function SessionList($$renderer, $$props) {
48
+ $$renderer.component(($$renderer2) => {
49
+ let { sessions } = $$props;
50
+ let search = "";
51
+ let sortBy = "date";
52
+ let providerFilter = "all";
53
+ let visibleCount = 50;
54
+ let availableProviders = [...new Set(sessions.map((s) => s.provider).filter(Boolean))];
55
+ function getDuration(s) {
56
+ return new Date(s.lastActiveAt).getTime() - new Date(s.startedAt).getTime();
57
+ }
58
+ let filtered = sessions.filter((s) => {
59
+ return true;
60
+ });
61
+ let sorted = [...filtered].sort((a, b) => {
62
+ let cmp = 0;
63
+ switch (sortBy) {
64
+ case "date":
65
+ cmp = new Date(a.lastActiveAt).getTime() - new Date(b.lastActiveAt).getTime();
66
+ break;
67
+ case "model":
68
+ cmp = shortModel(a.model).localeCompare(shortModel(b.model));
69
+ break;
70
+ case "cost":
71
+ cmp = a.estimatedCost - b.estimatedCost;
72
+ break;
73
+ case "duration":
74
+ cmp = getDuration(a) - getDuration(b);
75
+ break;
76
+ case "tokens":
77
+ cmp = a.outputTokens - b.outputTokens;
78
+ break;
79
+ }
80
+ return -cmp;
81
+ });
82
+ let visibleSessions = sorted.slice(0, visibleCount);
83
+ let hasMore = visibleCount < sorted.length;
84
+ const sortOptions = [
85
+ { key: "date", label: "Date" },
86
+ { key: "model", label: "Model" },
87
+ { key: "cost", label: "Cost" },
88
+ { key: "duration", label: "Duration" },
89
+ { key: "tokens", label: "Output" }
90
+ ];
91
+ $$renderer2.push(`<div class="space-y-4"><div class="relative"><input type="text" placeholder="Search sessions by project, slug..."${attr(
92
+ "value",
93
+ // IntersectionObserver for infinite scroll
94
+ search
95
+ )} class="w-full bg-surface-900 border border-surface-800 rounded-lg px-4 py-2.5 text-sm text-surface-200 placeholder:text-surface-600 focus:outline-none focus:border-surface-600 transition-colors"/> `);
96
+ {
97
+ $$renderer2.push("<!--[!-->");
98
+ }
99
+ $$renderer2.push(`<!--]--></div> <div class="flex flex-wrap items-center gap-1.5"><!--[-->`);
100
+ const each_array = ensure_array_like(sortOptions);
101
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
102
+ let { key, label } = each_array[$$index];
103
+ $$renderer2.push(`<button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(sortBy === key ? "bg-surface-800 text-surface-200" : "text-surface-500 hover:text-surface-300")}`)}>${escape_html(label)} `);
104
+ if (sortBy === key) {
105
+ $$renderer2.push("<!--[-->");
106
+ $$renderer2.push(`<span class="ml-0.5">${escape_html("↓")}</span>`);
107
+ } else {
108
+ $$renderer2.push("<!--[!-->");
109
+ }
110
+ $$renderer2.push(`<!--]--></button>`);
111
+ }
112
+ $$renderer2.push(`<!--]--> `);
113
+ if (availableProviders.length > 1) {
114
+ $$renderer2.push("<!--[-->");
115
+ $$renderer2.push(`<span class="text-surface-700 mx-1">|</span> <button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(
116
+ "bg-surface-800 text-surface-200"
117
+ )}`)}>All</button> <!--[-->`);
118
+ const each_array_1 = ensure_array_like(availableProviders);
119
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
120
+ let p = each_array_1[$$index_1];
121
+ $$renderer2.push(`<button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(providerFilter === p ? "bg-surface-800 text-surface-200" : "text-surface-500 hover:text-surface-300")}`)}>${escape_html(p === "claude-code" ? "Claude Code" : "Cursor")}</button>`);
122
+ }
123
+ $$renderer2.push(`<!--]-->`);
124
+ } else {
125
+ $$renderer2.push("<!--[!-->");
126
+ }
127
+ $$renderer2.push(`<!--]--></div> <div class="text-xs text-surface-500">`);
128
+ if (hasMore) {
129
+ $$renderer2.push("<!--[-->");
130
+ $$renderer2.push(`Showing ${escape_html(visibleCount)} of ${escape_html(sorted.length)} sessions`);
131
+ } else {
132
+ $$renderer2.push("<!--[!-->");
133
+ $$renderer2.push(`${escape_html(sorted.length)} session${escape_html(sorted.length !== 1 ? "s" : "")}`);
134
+ }
135
+ $$renderer2.push(`<!--]--></div> <div class="grid gap-3"><!--[-->`);
136
+ const each_array_2 = ensure_array_like(visibleSessions);
137
+ for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
138
+ let session = each_array_2[$$index_2];
139
+ SessionCard($$renderer2, { session });
140
+ }
141
+ $$renderer2.push(`<!--]--> `);
142
+ if (filtered.length === 0) {
143
+ $$renderer2.push("<!--[-->");
144
+ $$renderer2.push(`<div class="text-center py-12 text-surface-500">`);
145
+ {
146
+ $$renderer2.push("<!--[!-->");
147
+ $$renderer2.push(`No sessions found. Make sure Claude Code sessions exist in ~/.claude/projects/`);
148
+ }
149
+ $$renderer2.push(`<!--]--></div>`);
150
+ } else {
151
+ $$renderer2.push("<!--[!-->");
152
+ }
153
+ $$renderer2.push(`<!--]--> `);
154
+ if (hasMore) {
155
+ $$renderer2.push("<!--[-->");
156
+ $$renderer2.push(`<div class="h-1"></div>`);
157
+ } else {
158
+ $$renderer2.push("<!--[!-->");
159
+ }
160
+ $$renderer2.push(`<!--]--></div></div>`);
161
+ });
162
+ }
163
+ function _page($$renderer, $$props) {
164
+ $$renderer.component(($$renderer2) => {
165
+ let { data } = $$props;
166
+ head("1uha8ag", $$renderer2, ($$renderer3) => {
167
+ $$renderer3.title(($$renderer4) => {
168
+ $$renderer4.push(`<title>Agent Replay — Dashboard</title>`);
169
+ });
170
+ });
171
+ $$renderer2.push(`<div class="max-w-4xl mx-auto px-3 py-4 sm:px-4 sm:py-8"><div class="mb-6 sm:mb-8"><h1 class="text-xl sm:text-2xl font-bold text-surface-100 mb-2">Sessions</h1> <p class="text-surface-500 text-sm">Browse and replay your Claude Code agent sessions</p></div> `);
172
+ SessionList($$renderer2, { sessions: data.sessions });
173
+ $$renderer2.push(`<!----></div>`);
174
+ });
175
+ }
176
+
177
+ export { _page as default };
178
+ //# sourceMappingURL=_page.svelte-BMqbzglq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_page.svelte-BMqbzglq.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_page.svelte.js"],"sourcesContent":["import { w as attr, x as attr_class, y as stringify, z as ensure_array_like, F as head } from \"../../chunks/index.js\";\nimport { f as formatDate, s as shortModel, a as formatDurationBetween, b as formatNumber, c as formatCostWithPlan } from \"../../chunks/format.js\";\nimport { i as isIncludedPlan, P as PLAN_LABELS, g as getPlan } from \"../../chunks/plan.svelte.js\";\nimport { e as escape_html } from \"../../chunks/escaping.js\";\nfunction SessionCard($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { session } = $$props;\n function getModelBadge(model) {\n if (model.includes(\"opus\")) return \"bg-purple-500/15 text-purple-300 border border-purple-500/30\";\n if (model.includes(\"sonnet\")) return \"bg-blue-500/15 text-blue-300 border border-blue-500/30\";\n if (model.includes(\"haiku\")) return \"bg-green-500/15 text-green-300 border border-green-500/30\";\n return \"bg-surface-800 text-surface-400 border border-surface-700\";\n }\n function buildHref(s) {\n const base = `/sessions/${s.sessionId}`;\n if (s.provider === \"cursor\" && s.providerMeta) {\n const params = new URLSearchParams({ provider: \"cursor\", ...s.providerMeta, project: s.project });\n return `${base}?${params}`;\n }\n return `${base}?project=${encodeURIComponent(s.project)}&file=${encodeURIComponent(s.filePath)}`;\n }\n const providerBadge = {\n \"claude-code\": {\n label: \"CC\",\n cls: \"bg-orange-500/15 text-orange-300 border-orange-500/30\"\n },\n \"cursor\": {\n label: \"Cursor\",\n cls: \"bg-sky-500/15 text-sky-300 border-sky-500/30\"\n }\n };\n $$renderer2.push(`<a${attr(\"href\", buildHref(session))} class=\"block bg-surface-900 border border-surface-800 rounded-lg p-4 hover:border-surface-600 hover:bg-surface-800/80 transition-all group\" style=\"container-type: inline-size;\"><div class=\"flex items-start justify-between gap-3 mb-3\"><div class=\"min-w-0\"><h3 class=\"text-surface-100 font-medium truncate group-hover:text-white transition-colors\">${escape_html(session.slug || session.sessionId.slice(0, 8))}</h3> <p class=\"text-surface-500 text-xs mt-0.5 truncate\">${escape_html(session.project)}</p></div> <span class=\"text-surface-500 text-xs whitespace-nowrap\">${escape_html(formatDate(session.startedAt))}</span></div> <div class=\"session-card-meta flex items-center gap-2 text-xs text-surface-400 flex-wrap svelte-yfumhu\">`);\n if (session.provider && session.provider !== \"claude-code\") {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<span${attr_class(`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium border ${stringify(providerBadge[session.provider]?.cls || \"bg-surface-800 text-surface-400 border-surface-700\")}`, \"svelte-yfumhu\")}>${escape_html(providerBadge[session.provider]?.label || session.provider)}</span>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <span${attr_class(`inline-flex items-center px-2 py-0.5 rounded-full text-[11px] font-medium ${stringify(getModelBadge(session.model))}`, \"svelte-yfumhu\")}>${escape_html(shortModel(session.model))}</span> <span class=\"meta-sep text-surface-700 svelte-yfumhu\">|</span> <span class=\"text-cyan-400/80\">${escape_html(session.toolCallCount)} tools</span> <span class=\"meta-sep text-surface-700 svelte-yfumhu\">|</span> <span>${escape_html(formatDurationBetween(session.startedAt, session.lastActiveAt))}</span> <span class=\"meta-sep text-surface-700 svelte-yfumhu\">|</span> <span>${escape_html(formatNumber(session.outputTokens))} out</span> <span${attr_class(`ml-auto ${stringify(isIncludedPlan() ? \"text-surface-500\" : session.estimatedCost > 0 ? \"text-emerald-400\" : \"text-surface-500\")}`)}${attr(\"title\", isIncludedPlan() ? `Estimated API cost — included in your ${PLAN_LABELS[getPlan()]} subscription` : \"Estimated API cost\")}>${escape_html(formatCostWithPlan(session.estimatedCost, isIncludedPlan()))}`);\n if (isIncludedPlan()) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<span class=\"text-[10px] text-surface-600\">included</span>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></span></div></a>`);\n });\n}\nfunction SessionList($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { sessions } = $$props;\n let search = \"\";\n let sortBy = \"date\";\n let providerFilter = \"all\";\n let visibleCount = 50;\n let availableProviders = [...new Set(sessions.map((s) => s.provider).filter(Boolean))];\n function getDuration(s) {\n return new Date(s.lastActiveAt).getTime() - new Date(s.startedAt).getTime();\n }\n let filtered = sessions.filter((s) => {\n return true;\n });\n let sorted = [...filtered].sort((a, b) => {\n let cmp = 0;\n switch (sortBy) {\n case \"date\":\n cmp = new Date(a.lastActiveAt).getTime() - new Date(b.lastActiveAt).getTime();\n break;\n case \"model\":\n cmp = shortModel(a.model).localeCompare(shortModel(b.model));\n break;\n case \"cost\":\n cmp = a.estimatedCost - b.estimatedCost;\n break;\n case \"duration\":\n cmp = getDuration(a) - getDuration(b);\n break;\n case \"tokens\":\n cmp = a.outputTokens - b.outputTokens;\n break;\n }\n return -cmp;\n });\n let visibleSessions = sorted.slice(0, visibleCount);\n let hasMore = visibleCount < sorted.length;\n const sortOptions = [\n { key: \"date\", label: \"Date\" },\n { key: \"model\", label: \"Model\" },\n { key: \"cost\", label: \"Cost\" },\n { key: \"duration\", label: \"Duration\" },\n { key: \"tokens\", label: \"Output\" }\n ];\n $$renderer2.push(`<div class=\"space-y-4\"><div class=\"relative\"><input type=\"text\" placeholder=\"Search sessions by project, slug...\"${attr(\n \"value\",\n // IntersectionObserver for infinite scroll\n search\n )} class=\"w-full bg-surface-900 border border-surface-800 rounded-lg px-4 py-2.5 text-sm text-surface-200 placeholder:text-surface-600 focus:outline-none focus:border-surface-600 transition-colors\"/> `);\n {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div> <div class=\"flex flex-wrap items-center gap-1.5\"><!--[-->`);\n const each_array = ensure_array_like(sortOptions);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let { key, label } = each_array[$$index];\n $$renderer2.push(`<button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(sortBy === key ? \"bg-surface-800 text-surface-200\" : \"text-surface-500 hover:text-surface-300\")}`)}>${escape_html(label)} `);\n if (sortBy === key) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<span class=\"ml-0.5\">${escape_html(\"↓\")}</span>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></button>`);\n }\n $$renderer2.push(`<!--]--> `);\n if (availableProviders.length > 1) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<span class=\"text-surface-700 mx-1\">|</span> <button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(\n \"bg-surface-800 text-surface-200\"\n )}`)}>All</button> <!--[-->`);\n const each_array_1 = ensure_array_like(availableProviders);\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let p = each_array_1[$$index_1];\n $$renderer2.push(`<button${attr_class(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors ${stringify(providerFilter === p ? \"bg-surface-800 text-surface-200\" : \"text-surface-500 hover:text-surface-300\")}`)}>${escape_html(p === \"claude-code\" ? \"Claude Code\" : \"Cursor\")}</button>`);\n }\n $$renderer2.push(`<!--]-->`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div> <div class=\"text-xs text-surface-500\">`);\n if (hasMore) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`Showing ${escape_html(visibleCount)} of ${escape_html(sorted.length)} sessions`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`${escape_html(sorted.length)} session${escape_html(sorted.length !== 1 ? \"s\" : \"\")}`);\n }\n $$renderer2.push(`<!--]--></div> <div class=\"grid gap-3\"><!--[-->`);\n const each_array_2 = ensure_array_like(visibleSessions);\n for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n let session = each_array_2[$$index_2];\n SessionCard($$renderer2, { session });\n }\n $$renderer2.push(`<!--]--> `);\n if (filtered.length === 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"text-center py-12 text-surface-500\">`);\n {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`No sessions found. Make sure Claude Code sessions exist in ~/.claude/projects/`);\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (hasMore) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"h-1\"></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div></div>`);\n });\n}\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { data } = $$props;\n head(\"1uha8ag\", $$renderer2, ($$renderer3) => {\n $$renderer3.title(($$renderer4) => {\n $$renderer4.push(`<title>Agent Replay — Dashboard</title>`);\n });\n });\n $$renderer2.push(`<div class=\"max-w-4xl mx-auto px-3 py-4 sm:px-4 sm:py-8\"><div class=\"mb-6 sm:mb-8\"><h1 class=\"text-xl sm:text-2xl font-bold text-surface-100 mb-2\">Sessions</h1> <p class=\"text-surface-500 text-sm\">Browse and replay your Claude Code agent sessions</p></div> `);\n SessionList($$renderer2, { sessions: data.sessions });\n $$renderer2.push(`<!----></div>`);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}