llm-deep-trace 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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/bin/llm-deep-trace.js +24 -0
  4. package/next.config.ts +8 -0
  5. package/package.json +56 -0
  6. package/postcss.config.mjs +5 -0
  7. package/public/banner-v2.png +0 -0
  8. package/public/file.svg +1 -0
  9. package/public/globe.svg +1 -0
  10. package/public/logo.png +0 -0
  11. package/public/next.svg +1 -0
  12. package/public/vercel.svg +1 -0
  13. package/public/window.svg +1 -0
  14. package/src/app/api/agent-config/route.ts +31 -0
  15. package/src/app/api/all-sessions/route.ts +9 -0
  16. package/src/app/api/analytics/route.ts +379 -0
  17. package/src/app/api/detect-agents/route.ts +170 -0
  18. package/src/app/api/image/route.ts +73 -0
  19. package/src/app/api/search/route.ts +28 -0
  20. package/src/app/api/session-by-key/route.ts +21 -0
  21. package/src/app/api/sessions/[sessionId]/messages/route.ts +46 -0
  22. package/src/app/api/sse/route.ts +86 -0
  23. package/src/app/favicon.ico +0 -0
  24. package/src/app/globals.css +3518 -0
  25. package/src/app/icon.svg +4 -0
  26. package/src/app/layout.tsx +20 -0
  27. package/src/app/page.tsx +5 -0
  28. package/src/components/AnalyticsDashboard.tsx +393 -0
  29. package/src/components/App.tsx +243 -0
  30. package/src/components/CopyButton.tsx +42 -0
  31. package/src/components/Logo.tsx +20 -0
  32. package/src/components/MainPanel.tsx +1128 -0
  33. package/src/components/MessageRenderer.tsx +983 -0
  34. package/src/components/SessionTree.tsx +505 -0
  35. package/src/components/SettingsPanel.tsx +160 -0
  36. package/src/components/SetupView.tsx +206 -0
  37. package/src/components/Sidebar.tsx +714 -0
  38. package/src/components/ThemeToggle.tsx +54 -0
  39. package/src/lib/client-utils.ts +360 -0
  40. package/src/lib/normalizers.ts +371 -0
  41. package/src/lib/sessions.ts +1223 -0
  42. package/src/lib/store.ts +518 -0
  43. package/src/lib/types.ts +112 -0
  44. package/src/lib/useSSE.ts +81 -0
  45. package/tsconfig.json +34 -0
@@ -0,0 +1,42 @@
1
+ "use client";
2
+
3
+ import { useState, useCallback } from "react";
4
+ import { copyToClipboard } from "@/lib/client-utils";
5
+
6
+ const CopyIcon = () => (
7
+ <svg width="12" height="12" viewBox="0 0 16 16" fill="none">
8
+ <rect x="5" y="5" width="8" height="8" rx="1.5" stroke="currentColor" strokeWidth="1.4" />
9
+ <path d="M3 11V3h8" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round" />
10
+ </svg>
11
+ );
12
+
13
+ export default function CopyButton({
14
+ text,
15
+ label,
16
+ }: {
17
+ text: string;
18
+ label?: string;
19
+ }) {
20
+ const [copied, setCopied] = useState(false);
21
+
22
+ const handleCopy = useCallback(
23
+ (e: React.MouseEvent) => {
24
+ e.stopPropagation();
25
+ copyToClipboard(text, label).then(() => {
26
+ setCopied(true);
27
+ setTimeout(() => setCopied(false), 1600);
28
+ });
29
+ },
30
+ [text, label]
31
+ );
32
+
33
+ return (
34
+ <button
35
+ className={`copy-btn ${copied ? "copied" : ""}`}
36
+ onClick={handleCopy}
37
+ title={label || "Copy"}
38
+ >
39
+ <CopyIcon />
40
+ </button>
41
+ );
42
+ }
@@ -0,0 +1,20 @@
1
+ "use client";
2
+
3
+ const CIRCLES = "M896 384c0 35.2-28.8 64-64 64s-64-28.8-64-64 28.8-64 64-64 64 28.8 64 64z M240 352c-62.4 0-112-49.6-112-112s49.6-112 112-112 112 49.6 112 112-49.6 112-112 112z M544 688c-80 0-144-64-144-144s64-144 144-144 144 64 144 144-64 144-144 144z M320 832c0-35.2 28.8-64 64-64s64 28.8 64 64-28.8 64-64 64-64-28.8-64-64z M176 656c0-17.6 14.4-32 32-32s32 14.4 32 32-14.4 32-32 32-32-14.4-32-32z M624 216c0-22.4 17.6-40 40-40s40 17.6 40 40-17.6 40-40 40-40-17.6-40-40z M736 560c0-27.2 20.8-48 48-48s48 20.8 48 48-20.8 48-48 48-48-20.8-48-48z";
4
+
5
+ export function LogoMark({ size = 32 }: { size?: number }) {
6
+ return (
7
+ <svg width={size} height={size} viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
8
+ <path d={CIRCLES} fill="#9B72EF"/>
9
+ </svg>
10
+ );
11
+ }
12
+
13
+ export default function Logo({ className }: { className?: string }) {
14
+ return (
15
+ <div className={`app-logo ${className || ""}`}>
16
+ <LogoMark size={26} />
17
+ <span className="app-logo-name">deep trace</span>
18
+ </div>
19
+ );
20
+ }