scrollback 0.1.0__py3-none-any.whl

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 (69) hide show
  1. scrollback/__init__.py +8 -0
  2. scrollback/assets/icon-256.png +0 -0
  3. scrollback/assets/icon.icns +0 -0
  4. scrollback/cli.py +1139 -0
  5. scrollback/clipboard.py +34 -0
  6. scrollback/export.py +293 -0
  7. scrollback/fts.py +307 -0
  8. scrollback/highlight.py +128 -0
  9. scrollback/katexbundle.py +81 -0
  10. scrollback/launcher_install.py +209 -0
  11. scrollback/launchers/scrollback.bat +19 -0
  12. scrollback/launchers/scrollback.command +19 -0
  13. scrollback/launchers/scrollback.desktop +10 -0
  14. scrollback/launchers/scrollback.sh +12 -0
  15. scrollback/mathspan.py +180 -0
  16. scrollback/minimd.py +205 -0
  17. scrollback/models.py +135 -0
  18. scrollback/serialize.py +83 -0
  19. scrollback/serverconfig.py +66 -0
  20. scrollback/sources/__init__.py +6 -0
  21. scrollback/sources/aider.py +244 -0
  22. scrollback/sources/base.py +117 -0
  23. scrollback/sources/claudecode.py +631 -0
  24. scrollback/sources/codex.py +281 -0
  25. scrollback/sources/opencode.py +357 -0
  26. scrollback/sources/registry.py +39 -0
  27. scrollback/store.py +384 -0
  28. scrollback/termrender.py +170 -0
  29. scrollback/web/__init__.py +1 -0
  30. scrollback/web/app.py +359 -0
  31. scrollback/web/static/app.js +1245 -0
  32. scrollback/web/static/apple-touch-icon.png +0 -0
  33. scrollback/web/static/favicon.png +0 -0
  34. scrollback/web/static/favicon.svg +41 -0
  35. scrollback/web/static/index.html +75 -0
  36. scrollback/web/static/style.css +628 -0
  37. scrollback/web/static/vendor/highlight.min.js +1213 -0
  38. scrollback/web/static/vendor/hljs-dark.min.css +10 -0
  39. scrollback/web/static/vendor/hljs-light.min.css +10 -0
  40. scrollback/web/static/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  41. scrollback/web/static/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  42. scrollback/web/static/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  43. scrollback/web/static/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  44. scrollback/web/static/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  45. scrollback/web/static/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  46. scrollback/web/static/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  47. scrollback/web/static/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  48. scrollback/web/static/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  49. scrollback/web/static/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  50. scrollback/web/static/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  51. scrollback/web/static/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  52. scrollback/web/static/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  53. scrollback/web/static/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  54. scrollback/web/static/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  55. scrollback/web/static/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  56. scrollback/web/static/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  57. scrollback/web/static/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  58. scrollback/web/static/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  59. scrollback/web/static/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  60. scrollback/web/static/vendor/katex/katex.min.css +1 -0
  61. scrollback/web/static/vendor/katex/katex.min.js +1 -0
  62. scrollback/web/static/vendor/marked.min.js +6 -0
  63. scrollback/web/static/vendor/purify.min.js +3 -0
  64. scrollback/webopen.py +96 -0
  65. scrollback-0.1.0.dist-info/METADATA +391 -0
  66. scrollback-0.1.0.dist-info/RECORD +69 -0
  67. scrollback-0.1.0.dist-info/WHEEL +4 -0
  68. scrollback-0.1.0.dist-info/entry_points.txt +4 -0
  69. scrollback-0.1.0.dist-info/licenses/LICENSE +21 -0
Binary file
@@ -0,0 +1,41 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ scrollback app icon.
4
+ Identity: the terminal prompt (>_) from the brand mark + transcript lines
5
+ (a "scroll" of messages) + the amber->clay source-rail spine that
6
+ color-codes sources in the UI. Deep-slate ground matches the dark theme.
7
+ -->
8
+ <svg width="1024" height="1024" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
9
+ <defs>
10
+ <linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
11
+ <stop offset="0" stop-color="#1b1f27"/>
12
+ <stop offset="1" stop-color="#11141a"/>
13
+ </linearGradient>
14
+ <linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
15
+ <stop offset="0" stop-color="#e7b163"/>
16
+ <stop offset="1" stop-color="#c2674a"/>
17
+ </linearGradient>
18
+ </defs>
19
+
20
+ <!-- rounded-square ground (macOS-style squircle proportions) -->
21
+ <rect x="96" y="96" width="832" height="832" rx="196" fill="url(#bg)"/>
22
+ <rect x="97.5" y="97.5" width="829" height="829" rx="194.5"
23
+ fill="none" stroke="#2d333f" stroke-width="3"/>
24
+
25
+ <!-- content group, balanced around centre -->
26
+ <!-- source-rail spine: the app's signature element -->
27
+ <rect x="292" y="300" width="36" height="424" rx="18" fill="url(#rail)"/>
28
+
29
+ <!-- terminal prompt mark: >_ (cyan accent, the brand colour) -->
30
+ <g stroke="#5fb3c4" stroke-width="46" stroke-linecap="round" stroke-linejoin="round" fill="none">
31
+ <polyline points="392,364 478,418 392,472"/>
32
+ <line x1="520" y1="472" x2="616" y2="472"/>
33
+ </g>
34
+
35
+ <!-- transcript lines (the "scroll" of messages), varying lengths -->
36
+ <g fill="#cfcdc4">
37
+ <rect x="392" y="566" width="300" height="32" rx="16"/>
38
+ <rect x="392" y="636" width="368" height="32" rx="16" opacity="0.82"/>
39
+ <rect x="392" y="706" width="232" height="32" rx="16" opacity="0.62"/>
40
+ </g>
41
+ </svg>
@@ -0,0 +1,75 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>scrollback</title>
7
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
8
+ <link rel="icon" type="image/png" sizes="32x32" href="/favicon.png" />
9
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
10
+ <!-- highlight.js themes; only one is enabled at a time (see app.js) -->
11
+ <link rel="stylesheet" href="/vendor/hljs-dark.min.css" id="hljs-dark" />
12
+ <link rel="stylesheet" href="/vendor/hljs-light.min.css" id="hljs-light" disabled />
13
+ <link rel="stylesheet" href="/vendor/katex/katex.min.css" />
14
+ <link rel="stylesheet" href="/style.css" />
15
+ <script src="/vendor/marked.min.js" defer></script>
16
+ <script src="/vendor/highlight.min.js" defer></script>
17
+ <script src="/vendor/purify.min.js" defer></script>
18
+ <script src="/vendor/katex/katex.min.js" defer></script>
19
+ </head>
20
+ <body>
21
+ <header class="bar">
22
+ <div class="brand" id="brand" title="Home (reset everything)">
23
+ <span class="brand-mark">&gt;_</span>
24
+ <span class="brand-name">scrollback</span>
25
+ </div>
26
+ <div class="search">
27
+ <input id="search-input" type="search" autocomplete="off" spellcheck="false"
28
+ placeholder="search&hellip;" />
29
+ <div class="search-scope" role="group" aria-label="Search scope">
30
+ <button id="scope-titles" class="scope-btn" aria-pressed="true"
31
+ title="Match the session title">titles</button>
32
+ <button id="scope-contents" class="scope-btn" aria-pressed="false"
33
+ title="Search inside message text across sessions">contents</button>
34
+ </div>
35
+ </div>
36
+ <div class="bar-right">
37
+ <button id="home-btn" class="icon-btn" title="Reset: clear search, filters, and close the open session">&#8962; home</button>
38
+ <button id="theme-toggle" class="icon-btn" title="Toggle light / dark">&#9681;</button>
39
+ </div>
40
+ </header>
41
+
42
+ <div class="filters">
43
+ <span class="filters-label">showing</span>
44
+ <div class="srcfilter" id="srcfilter"></div>
45
+ <div class="date-filters">
46
+ <label for="since">since</label>
47
+ <input id="since" type="date" />
48
+ <label for="until">until</label>
49
+ <input id="until" type="date" />
50
+ </div>
51
+ </div>
52
+
53
+ <main class="layout">
54
+ <aside class="rail" id="rail">
55
+ <div class="rail-head">
56
+ <span id="count" class="count">&mdash;</span>
57
+ <span class="rail-hint">newest first</span>
58
+ </div>
59
+ <ul class="sessions" id="sessions"></ul>
60
+ </aside>
61
+
62
+ <section class="reader" id="reader">
63
+ <div class="empty" id="empty">
64
+ <div class="empty-mark">&gt;_</div>
65
+ <p>Pick a session on the left, or search to dig through everything.</p>
66
+ <p class="empty-sub">Reading is local and read-only &mdash; nothing here writes to your agents.</p>
67
+ </div>
68
+ <article class="transcript" id="transcript" hidden></article>
69
+ </section>
70
+ </main>
71
+
72
+ <div class="toast" id="toast" hidden></div>
73
+ <script src="/app.js"></script>
74
+ </body>
75
+ </html>