@steipete/oracle 0.21.1 → 0.21.2

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 (39) hide show
  1. package/dist/bin/oracle-cli.js +6 -10
  2. package/dist/src/browser/profileState.js +2 -0
  3. package/package.json +10 -10
  4. package/dist/docs-site/.nojekyll +0 -0
  5. package/dist/docs-site/CNAME +0 -1
  6. package/dist/docs-site/RELEASING.html +0 -403
  7. package/dist/docs-site/advisor.html +0 -317
  8. package/dist/docs-site/agents.html +0 -375
  9. package/dist/docs-site/anthropic.html +0 -368
  10. package/dist/docs-site/bridge.html +0 -421
  11. package/dist/docs-site/browser-mode.html +0 -637
  12. package/dist/docs-site/chromium-forks.html +0 -355
  13. package/dist/docs-site/cli-reference.html +0 -347
  14. package/dist/docs-site/configuration.html +0 -464
  15. package/dist/docs-site/favicon.svg +0 -14
  16. package/dist/docs-site/followup.html +0 -375
  17. package/dist/docs-site/gemini.html +0 -388
  18. package/dist/docs-site/grok.html +0 -325
  19. package/dist/docs-site/index.html +0 -360
  20. package/dist/docs-site/install.html +0 -335
  21. package/dist/docs-site/linux.html +0 -321
  22. package/dist/docs-site/llms.txt +0 -44
  23. package/dist/docs-site/manual-tests.html +0 -621
  24. package/dist/docs-site/mcp.html +0 -412
  25. package/dist/docs-site/multimodel.html +0 -364
  26. package/dist/docs-site/mythical-pro-agents.html +0 -360
  27. package/dist/docs-site/notifier.html +0 -338
  28. package/dist/docs-site/openai-endpoints.html +0 -417
  29. package/dist/docs-site/openrouter.html +0 -344
  30. package/dist/docs-site/quickstart.html +0 -369
  31. package/dist/docs-site/refactor/ux.html +0 -321
  32. package/dist/docs-site/sessions.html +0 -397
  33. package/dist/docs-site/social-card.png +0 -0
  34. package/dist/docs-site/social-card.svg +0 -79
  35. package/dist/docs-site/spec.html +0 -363
  36. package/dist/docs-site/testing.html +0 -323
  37. package/dist/docs-site/tui-debug.html +0 -326
  38. package/dist/docs-site/windows-work.html +0 -348
  39. package/dist/docs-site/windows.html +0 -320
@@ -1,397 +0,0 @@
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>Sessions — oracle</title>
7
- <meta name="description" content="Every Oracle run is a stored session you can list, replay, follow up on, or prune. Background API runs detach by default; reattach later.">
8
- <link rel="canonical" href="https://askoracle.sh/sessions.html">
9
- <meta property="og:type" content="website">
10
- <meta property="og:site_name" content="oracle">
11
- <meta property="og:title" content="Sessions — oracle">
12
- <meta property="og:description" content="Every Oracle run is a stored session you can list, replay, follow up on, or prune. Background API runs detach by default; reattach later.">
13
- <meta property="og:url" content="https://askoracle.sh/sessions.html">
14
- <meta property="og:image" content="https://askoracle.sh/social-card.png">
15
- <meta property="og:image:width" content="1200">
16
- <meta property="og:image:height" content="630">
17
- <meta name="twitter:card" content="summary_large_image">
18
- <meta name="twitter:title" content="Sessions — oracle">
19
- <meta name="twitter:description" content="Every Oracle run is a stored session you can list, replay, follow up on, or prune. Background API runs detach by default; reattach later.">
20
- <meta name="twitter:image" content="https://askoracle.sh/social-card.png">
21
- <link rel="icon" href="favicon.svg" type="image/svg+xml">
22
- <link rel="preconnect" href="https://fonts.googleapis.com">
23
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
24
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
25
- <script>(function(){var s;try{s=localStorage.getItem('theme')}catch(e){}var d=window.matchMedia&&matchMedia('(prefers-color-scheme: dark)').matches;document.documentElement.dataset.theme=s||(d?'dark':'light')})();</script>
26
- <style>
27
- :root{
28
- --ink:#0e0a1f;
29
- --text:#1d1832;
30
- --muted:#6b6582;
31
- --subtle:#9c95b5;
32
- --bg:#fafaff;
33
- --paper:#ffffff;
34
- --accent:#7c3aed;
35
- --accent-soft:rgba(124,58,237,.10);
36
- --accent-strong:#5b21b6;
37
- --accent-2:#0ea5e9;
38
- --accent-glow:#a78bfa;
39
- --line:#e7e3f0;
40
- --line-soft:#f2eff8;
41
- --code-bg:#0c0a1a;
42
- --code-fg:#e9e6f5;
43
- --code-inline-fg:#1c1734;
44
- --pill-border:#dcd5ec;
45
- --shadow-card:0 4px 14px rgba(14,10,31,.08);
46
- --scrollbar:#cbc4dc;
47
- }
48
- :root[data-theme="dark"]{
49
- --ink:#f5f2ff;
50
- --text:#cec7e4;
51
- --muted:#9189a8;
52
- --subtle:#6a6383;
53
- --bg:#0a0815;
54
- --paper:#15102a;
55
- --accent:#a78bfa;
56
- --accent-soft:rgba(167,139,250,.18);
57
- --accent-strong:#c4b5fd;
58
- --accent-2:#38bdf8;
59
- --accent-glow:#c4b5fd;
60
- --line:#272140;
61
- --line-soft:#1c1734;
62
- --code-bg:#06040d;
63
- --code-fg:#e9e6f5;
64
- --code-inline-fg:#e9e6f5;
65
- --pill-border:#2c2549;
66
- --shadow-card:0 4px 18px rgba(0,0,0,.45);
67
- --scrollbar:#3a3358;
68
- }
69
- :root{color-scheme:light}
70
- :root[data-theme="dark"]{color-scheme:dark}
71
- *{box-sizing:border-box}
72
- html{scroll-behavior:smooth;scroll-padding-top:24px}
73
- body{margin:0;background:var(--bg);color:var(--text);font-family:"Inter",ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.65;overflow-x:hidden;-webkit-font-smoothing:antialiased;font-feature-settings:"cv02","cv03","cv04","cv11";transition:background-color .18s,color .18s}
74
- ::selection{background:var(--accent);color:#fff}
75
- a{color:var(--accent);text-decoration:none;transition:color .12s}
76
- a:hover{text-decoration:underline;text-underline-offset:.2em}
77
- .shell{display:grid;grid-template-columns:268px minmax(0,1fr);min-height:100vh}
78
- .sidebar{position:sticky;top:0;height:100vh;overflow:auto;padding:24px 22px;background:var(--paper);border-right:1px solid var(--line);scrollbar-width:thin;scrollbar-color:var(--line) transparent;transition:background-color .18s,border-color .18s}
79
- .sidebar::-webkit-scrollbar{width:6px}
80
- .sidebar::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}
81
- .sidebar-head{display:flex;align-items:center;gap:10px;margin-bottom:24px}
82
- .brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;flex:1;min-width:0}
83
- .brand:hover{text-decoration:none}
84
- .brand .mark{flex:0 0 30px;width:30px;height:30px;border-radius:50%;background:radial-gradient(circle at 32% 32%,#fff 0,#e0d4ff 22%,#7c3aed 60%,#1e1240 100%);box-shadow:0 0 0 1px rgba(124,58,237,.35),0 6px 18px rgba(124,58,237,.35);position:relative}
85
- .brand .mark::after{content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;border-radius:50%;background:#0c0820;transform:translate(-50%,-50%)}
86
- .brand strong{display:block;font-size:1.05rem;line-height:1.1;font-weight:600;letter-spacing:0;color:var(--ink)}
87
- .brand small{display:block;color:var(--muted);font-size:.74rem;margin-top:3px;font-weight:400}
88
- .theme-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--paper);color:var(--muted);cursor:pointer;padding:0;transition:border-color .15s,color .15s,background-color .15s,transform .12s}
89
- .theme-toggle:hover{border-color:var(--ink);color:var(--ink)}
90
- .theme-toggle:active{transform:scale(.94)}
91
- .theme-toggle svg{width:16px;height:16px;display:block}
92
- .theme-icon-sun{display:none}
93
- :root[data-theme="dark"] .theme-icon-sun{display:block}
94
- :root[data-theme="dark"] .theme-icon-moon{display:none}
95
- .search{display:block;margin:0 0 22px}
96
- .search span{display:block;color:var(--muted);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:0;margin-bottom:7px}
97
- .search input{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:8px;padding:9px 12px;font:inherit;font-size:.9rem;color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s,background-color .18s}
98
- .search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
99
- nav section{margin:0 0 18px}
100
- nav h2{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:0;margin:0 0 6px;font-weight:600}
101
- .nav-link{display:block;color:var(--text);text-decoration:none;border-radius:6px;padding:5px 10px;margin:1px 0;font-size:.9rem;line-height:1.4;transition:background .12s,color .12s}
102
- .nav-link:hover{background:var(--line-soft);color:var(--ink);text-decoration:none}
103
- .nav-link.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
104
- main{min-width:0;padding:32px clamp(20px,4.5vw,56px) 80px;max-width:1180px;margin:0 auto;width:100%}
105
- .hero{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;border-bottom:1px solid var(--line);padding:8px 0 22px;margin-bottom:8px;flex-wrap:wrap}
106
- .hero-text{min-width:0;flex:1 1 320px}
107
- .eyebrow{margin:0 0 8px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:0;font-size:.7rem}
108
- .hero h1{font-size:2.25rem;line-height:1.1;letter-spacing:0;margin:0;font-weight:700;color:var(--ink)}
109
- .hero-meta{display:flex;gap:8px;flex:0 0 auto;flex-wrap:wrap}
110
- .repo,.edit,.btn-ghost{border:1px solid var(--line);color:var(--text);text-decoration:none;border-radius:7px;padding:6px 11px;font-weight:500;font-size:.83rem;background:var(--paper);transition:border-color .15s,color .15s,background .15s}
111
- .repo:hover,.edit:hover,.btn-ghost:hover{border-color:var(--ink);color:var(--ink);text-decoration:none}
112
- .edit{color:var(--muted)}
113
- .home-hero{position:relative;padding:24px 0 32px;margin-bottom:8px;border-bottom:1px solid var(--line)}
114
- .home-hero>*{position:relative;z-index:1}
115
- .home-hero h1{font-size:3.4rem;line-height:1.04;letter-spacing:0;margin:0 0 .35em;font-weight:700;color:var(--ink);background:linear-gradient(135deg,var(--ink) 0,#7c3aed 60%,#0ea5e9 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
116
- :root[data-theme="dark"] .home-hero h1{background:linear-gradient(135deg,#f5f2ff 0,#c4b5fd 50%,#7dd3fc 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
117
- .home-hero .lede{font-size:1.18rem;line-height:1.55;color:var(--text);margin:0 0 1.2em;max-width:62ch}
118
- .home-cta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 18px}
119
- .home-cta .btn{display:inline-flex;align-items:center;gap:7px;border-radius:8px;padding:10px 16px;font-weight:600;font-size:.92rem;text-decoration:none;transition:background .15s,border-color .15s,color .15s,transform .12s}
120
- .home-cta .btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent-strong));color:#fff;border:1px solid var(--accent);box-shadow:0 4px 14px rgba(124,58,237,.35)}
121
- .home-cta .btn-primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);text-decoration:none;transform:translateY(-1px)}
122
- .home-cta .btn-ghost{padding:10px 16px}
123
- .home-install{display:flex;align-items:center;gap:12px;background:var(--code-bg);color:var(--code-fg);border-radius:8px;padding:10px 10px 10px 16px;font:500 .9rem/1.2 "JetBrains Mono","SF Mono",ui-monospace,monospace;max-width:34em;border:1px solid #1f1840}
124
- .home-install .prompt{color:#6f63a3;user-select:none;flex:0 0 auto}
125
- .home-install code{flex:1;background:transparent;border:0;color:var(--code-fg);font:inherit;padding:0;white-space:pre;overflow:hidden;text-overflow:ellipsis}
126
- .home-install .copy{flex:0 0 auto;background:rgba(255,255,255,.08);color:var(--code-fg);border:1px solid rgba(255,255,255,.16);border-radius:6px;padding:5px 11px;font:500 .72rem/1 "Inter",sans-serif;cursor:pointer;transition:background .15s,border-color .15s}
127
- .home-install .copy:hover{background:rgba(255,255,255,.16)}
128
- .home-install .copy.copied{background:var(--accent);border-color:var(--accent)}
129
- .home-services{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 18px}
130
- .home-services span{display:inline-block;padding:3px 10px;border:1px solid var(--pill-border);border-radius:999px;font-size:.78rem;color:var(--muted);background:var(--paper)}
131
- .home-services span.pill-pro{background:var(--accent-soft);color:var(--accent);border-color:transparent;font-weight:600}
132
- .home-visual{display:block;width:min(100%,620px);height:auto;margin:22px 0 0;border-radius:8px;border:1px solid var(--line);box-shadow:var(--shadow-card);background:var(--paper)}
133
- .doc-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:48px;margin-top:24px}
134
- .doc-grid-home{margin-top:8px}
135
- @media(min-width:1180px){.doc-grid{grid-template-columns:minmax(0,72ch) 200px;justify-content:start}.doc-grid-home{grid-template-columns:minmax(0,76ch);justify-content:start}}
136
- .doc{min-width:0;max-width:72ch;overflow-wrap:break-word}
137
- .doc-home{max-width:76ch}
138
- .doc h1{font-size:2.6rem;line-height:1.08;letter-spacing:0;margin:0 0 .4em;font-weight:700;color:var(--ink)}
139
- body:not(.home) .doc>h1:first-child{display:none}
140
- .doc h2{font-size:1.45rem;line-height:1.2;margin:2em 0 .5em;font-weight:600;letter-spacing:0;color:var(--ink);position:relative}
141
- .doc h3{font-size:1.1rem;margin:1.7em 0 .35em;position:relative;font-weight:600;color:var(--ink);letter-spacing:0}
142
- .doc h4{font-size:.98rem;margin:1.4em 0 .25em;color:var(--ink);position:relative;font-weight:600}
143
- .doc h2:first-child,.doc h3:first-child,.doc h4:first-child{margin-top:.2em}
144
- .doc :is(h2,h3,h4) .anchor{position:absolute;left:-1.05em;top:0;color:var(--subtle);opacity:0;text-decoration:none;font-weight:400;padding-right:.3em;transition:opacity .12s,color .12s}
145
- .doc :is(h2,h3,h4):hover .anchor{opacity:.7}
146
- .doc :is(h2,h3,h4) .anchor:hover{opacity:1;color:var(--accent);text-decoration:none}
147
- .doc p{margin:0 0 1.05em}
148
- .doc ul,.doc ol{padding-left:1.3rem;margin:0 0 1.15em}
149
- .doc li{margin:.25em 0}
150
- .doc li>p{margin:0 0 .4em}
151
- .doc strong{font-weight:600;color:var(--ink)}
152
- .doc em{font-style:italic}
153
- .doc code{font-family:"JetBrains Mono","SF Mono",ui-monospace,monospace;font-size:.84em;background:var(--line-soft);border:1px solid var(--line);border-radius:5px;padding:.08em .35em;color:var(--code-inline-fg)}
154
- .doc pre{position:relative;overflow:auto;background:var(--code-bg);color:var(--code-fg);border-radius:8px;padding:14px 18px;margin:1.3em 0;font-size:.85em;line-height:1.6;scrollbar-width:thin;scrollbar-color:#3a3358 transparent;border:1px solid #221c40}
155
- .doc pre.shiki{background:var(--code-bg)!important;color:var(--code-fg)!important}
156
- .doc pre::-webkit-scrollbar{height:8px;width:8px}
157
- .doc pre::-webkit-scrollbar-thumb{background:#3a3358;border-radius:8px}
158
- .doc pre code{display:block;background:transparent;border:0;color:inherit;padding:0;font-size:1em;white-space:pre}
159
- .doc pre code .line{display:block;min-height:1.6em}
160
- .doc pre .copy{position:absolute;top:8px;right:8px;background:rgba(255,255,255,.06);color:var(--code-fg);border:1px solid rgba(255,255,255,.16);border-radius:6px;padding:3px 9px;font:500 .7rem/1 "Inter",sans-serif;cursor:pointer;opacity:0;transition:opacity .15s,background .15s,border-color .15s}
161
- .doc pre:hover .copy,.doc pre .copy:focus{opacity:1}
162
- .doc pre .copy:hover{background:rgba(255,255,255,.12)}
163
- .doc pre .copy.copied{background:var(--accent);border-color:var(--accent);opacity:1}
164
- .doc blockquote{margin:1.4em 0;padding:10px 16px;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 8px 8px 0;color:var(--text)}
165
- .doc blockquote p:last-child{margin-bottom:0}
166
- .doc table{width:100%;border-collapse:collapse;margin:1.2em 0;font-size:.92em}
167
- .doc th,.doc td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:left;vertical-align:top}
168
- .doc th{font-weight:600;color:var(--ink);background:var(--line-soft);border-bottom:1px solid var(--line)}
169
- .doc hr{border:0;border-top:1px solid var(--line);margin:2.2em 0}
170
- .toc{position:sticky;top:24px;align-self:start;font-size:.84rem;padding-left:14px;border-left:1px solid var(--line);max-height:calc(100vh - 48px);overflow:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
171
- .toc::-webkit-scrollbar{width:5px}
172
- .toc::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}
173
- .toc h2{font-size:.66rem;color:var(--muted);text-transform:uppercase;letter-spacing:0;margin:0 0 10px;font-weight:600}
174
- .toc a{display:block;color:var(--muted);text-decoration:none;padding:4px 0 4px 10px;line-height:1.35;border-left:2px solid transparent;margin-left:-12px;transition:color .12s,border-color .12s}
175
- .toc a:hover{color:var(--ink);text-decoration:none}
176
- .toc a.active{color:var(--accent);border-left-color:var(--accent);font-weight:500}
177
- .toc-l3{padding-left:22px!important;font-size:.94em}
178
- @media(max-width:1179px){.toc{display:none}}
179
- .page-nav{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:48px;border-top:1px solid var(--line);padding-top:20px}
180
- .page-nav>a{display:block;border:1px solid var(--line);background:var(--paper);border-radius:9px;padding:13px 16px;text-decoration:none;color:var(--text);transition:border-color .15s,transform .15s,box-shadow .15s,background-color .18s}
181
- .page-nav>a:hover{border-color:var(--accent);text-decoration:none;color:var(--ink)}
182
- .page-nav small{display:block;color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:0;margin-bottom:5px;font-weight:600}
183
- .page-nav span{display:block;font-weight:600;line-height:1.3;color:var(--ink)}
184
- .page-nav-prev{text-align:left}
185
- .page-nav-next{text-align:right;grid-column:2}
186
- .page-nav-prev:only-child{grid-column:1}
187
- .nav-toggle{display:none;position:fixed;top:14px;right:14px;top:calc(14px + env(safe-area-inset-top, 0px));right:calc(14px + env(safe-area-inset-right, 0px));z-index:20;width:40px;height:40px;border-radius:9px;background:var(--paper);border:1px solid var(--line);color:var(--ink);cursor:pointer;padding:10px 9px;flex-direction:column;align-items:stretch;justify-content:space-between;box-shadow:var(--shadow-card)}
188
- .nav-toggle span{display:block;width:100%;height:2px;flex:0 0 2px;background:currentColor;border-radius:2px;transition:transform .2s,opacity .2s}
189
- .nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(8px) rotate(45deg)}
190
- .nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
191
- .nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-8px) rotate(-45deg)}
192
- @media(max-width:900px){
193
- .shell{display:block}
194
- .sidebar{position:fixed;inset:0 30% 0 0;max-width:320px;height:100vh;z-index:15;transform:translateX(-100%);transition:transform .25s ease,background-color .18s,border-color .18s;box-shadow:0 18px 40px rgba(0,0,0,.18);background:var(--paper);pointer-events:none}
195
- .sidebar.open{transform:translateX(0);pointer-events:auto}
196
- .nav-toggle{display:flex}
197
- main{padding:64px 18px 56px}
198
- .hero{padding-top:6px}
199
- .hero h1{font-size:1.8rem}
200
- .home-hero h1{font-size:2.45rem}
201
- .doc h1{font-size:2.1rem}
202
- .hero-meta{width:100%;justify-content:flex-start}
203
- .home-hero{padding-top:8px}
204
- .home-visual{margin-top:18px}
205
- .doc{padding:0}
206
- .doc-grid{margin-top:18px;gap:24px}
207
- .doc :is(h2,h3,h4) .anchor{display:none}
208
- }
209
- @media(max-width:520px){
210
- main{padding:60px 14px 48px}
211
- .doc pre{margin-left:-14px;margin-right:-14px;border-radius:0;border-left:0;border-right:0}
212
- .home-install{flex-wrap:wrap}
213
- }
214
- </style>
215
- </head>
216
- <body>
217
- <button class="nav-toggle" type="button" aria-label="Toggle navigation" aria-expanded="false">
218
- <span aria-hidden="true"></span><span aria-hidden="true"></span><span aria-hidden="true"></span>
219
- </button>
220
- <div class="shell">
221
- <aside class="sidebar">
222
- <div class="sidebar-head">
223
- <a class="brand" href="./" aria-label="oracle docs home">
224
- <span class="mark" aria-hidden="true"></span>
225
- <span><strong>oracle</strong><small>askoracle.sh</small></span>
226
- </a>
227
- <button class="theme-toggle" type="button" aria-label="Toggle dark mode" aria-pressed="false" data-theme-toggle>
228
- <svg class="theme-icon-moon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.6 12.1A6.5 6.5 0 0 1 7.4 2.7a6.5 6.5 0 1 0 7.2 9.4z" fill="currentColor"/></svg>
229
- <svg class="theme-icon-sun" viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="10" y1="2" x2="10" y2="4"/><line x1="10" y1="16" x2="10" y2="18"/><line x1="2" y1="10" x2="4" y2="10"/><line x1="16" y1="10" x2="18" y2="10"/><line x1="4.2" y1="4.2" x2="5.6" y2="5.6"/><line x1="14.4" y1="14.4" x2="15.8" y2="15.8"/><line x1="4.2" y1="15.8" x2="5.6" y2="14.4"/><line x1="14.4" y1="5.6" x2="15.8" y2="4.2"/></g></svg>
230
- </button>
231
- </div>
232
- <label class="search"><span>Search</span><input id="doc-search" type="search" placeholder="browser, mcp, sessions"></label>
233
- <nav><section><h2>Start</h2><a class="nav-link" href="./">Overview</a><a class="nav-link" href="install.html">Install</a><a class="nav-link" href="quickstart.html">Quickstart</a><a class="nav-link" href="configuration.html">Local configuration (JSON5)</a></section><section><h2>Mythical Pro Agents</h2><a class="nav-link" href="mythical-pro-agents.html">Mythical Pro Agents</a><a class="nav-link" href="openai-endpoints.html">OpenAI-Compatible Endpoints</a><a class="nav-link" href="anthropic.html">Anthropic (Claude) Integration Plan</a><a class="nav-link" href="gemini.html">Gemini Integration</a><a class="nav-link" href="openrouter.html">OpenRouter</a><a class="nav-link" href="grok.html">Grok 4.1 (xAI) Support</a></section><section><h2>Browser Mode</h2><a class="nav-link" href="browser-mode.html">Browser Mode</a><a class="nav-link" href="chromium-forks.html">Chromium-based browsers (Chromium, Edge, Brave variants)</a><a class="nav-link" href="linux.html">Linux Notes</a><a class="nav-link" href="windows.html">Windows compatibility notes</a><a class="nav-link" href="windows-work.html">Windows Work</a><a class="nav-link" href="bridge.html">Bridge (Windows-hosted ChatGPT session → Linux clients)</a></section><section><h2>Agents &amp; MCP</h2><a class="nav-link" href="agents.html">Coding Agents</a><a class="nav-link" href="mcp.html">MCP Server</a></section><section><h2>Workflows</h2><a class="nav-link active" href="sessions.html">Sessions</a><a class="nav-link" href="followup.html">Followups &amp; Lineage</a><a class="nav-link" href="multimodel.html">Multi-Model Execution</a></section><section><h2>Reference</h2><a class="nav-link" href="cli-reference.html">CLI Reference</a><a class="nav-link" href="spec.html">Spec</a><a class="nav-link" href="notifier.html">Session completion notifications</a><a class="nav-link" href="tui-debug.html">TUI navigation crash notes (2025-11-19)</a><a class="nav-link" href="manual-tests.html">Manual Test Suite (Browser Mode + Live API)</a><a class="nav-link" href="testing.html">Testing quickstart</a><a class="nav-link" href="RELEASING.html">Release Checklist (npm + Homebrew)</a></section></nav>
234
- </aside>
235
- <main>
236
- <header class="hero">
237
- <div class="hero-text">
238
- <p class="eyebrow">Workflows</p>
239
- <h1>Sessions</h1>
240
- </div>
241
- <div class="hero-meta">
242
- <a class="repo" href="https://github.com/steipete/oracle" rel="noopener">GitHub</a>
243
- <a class="edit" href="https://github.com/steipete/oracle/edit/main/docs/sessions.md" rel="noopener">Edit page</a>
244
- </div>
245
- </header>
246
- <div class="doc-grid">
247
- <article class="doc"><p>Every Oracle run gets an id, a slug, and a folder. You can list runs, render the prompts you sent, replay the answer, and continue from any of them. This page is the lifecycle reference.</p>
248
- <h2 id="where-sessions-live"><a class="anchor" href="#where-sessions-live" aria-label="Anchor link">#</a>Where sessions live</h2>
249
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-text"><span class="line"><span>~/.oracle/sessions/&#x3C;id>/</span></span>
250
- <span class="line"><span>├── meta.json # status, model(s), cost, lineage</span></span>
251
- <span class="line"><span>├── prompt.md # assembled bundle (what was sent)</span></span>
252
- <span class="line"><span>├── response.md # the model's answer (when complete)</span></span>
253
- <span class="line"><span>├── log.jsonl # per-event log</span></span>
254
- <span class="line"><span>└── artifacts/ # browser-only: transcript, generated images/files, deep-research-report.md</span></span></code></pre>
255
- <p>Override the root with <code>ORACLE_HOME_DIR=/some/path</code>.</p>
256
- <h2 id="listing"><a class="anchor" href="#listing" aria-label="Anchor link">#</a>Listing</h2>
257
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> status</span><span style="color:#768390"> # last 20 sessions</span></span>
258
- <span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> status</span><span style="color:#6CB6FF"> --hours</span><span style="color:#6CB6FF"> 168</span><span style="color:#768390"> # last week</span></span></code></pre>
259
- <p><code>status</code> shows status, model, mode, timestamp, character count, cost, and slug — with a tree of <code>--followup</code> lineage:</p>
260
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-text"><span class="line"><span>Recent Sessions</span></span>
261
- <span class="line"><span>Status Model Mode Timestamp Chars Cost Slug</span></span>
262
- <span class="line"><span>completed gpt-5.2-pro api 03/01 09:00 AM 1800 $2.110 architecture-review-parent</span></span>
263
- <span class="line"><span>completed gpt-5.2-pro api 03/01 09:14 AM 2200 $2.980 ├─ architecture-review-followup</span></span>
264
- <span class="line"><span>running gpt-5.2-pro api 03/01 09:22 AM 1400 - │ └─ implementation-pass</span></span>
265
- <span class="line"><span>pending gpt-5.2-pro api 03/01 09:25 AM 900 - └─ risk-check</span></span></code></pre>
266
- <h2 id="replaying"><a class="anchor" href="#replaying" aria-label="Anchor link">#</a>Replaying</h2>
267
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> session</span><span style="color:#F47067"> &#x3C;</span><span style="color:#96D0FF">i</span><span style="color:#ADBAC7">d</span><span style="color:#F47067">></span><span style="color:#768390"> # print metadata + answer</span></span>
268
- <span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> session</span><span style="color:#F47067"> &#x3C;</span><span style="color:#96D0FF">i</span><span style="color:#ADBAC7">d</span><span style="color:#F47067">></span><span style="color:#6CB6FF"> --render</span><span style="color:#768390"> # print the prompt that was sent</span></span></code></pre>
269
- <p>Use the slug or a unique id prefix; Oracle resolves both.</p>
270
- <h2 id="reattach"><a class="anchor" href="#reattach" aria-label="Anchor link">#</a>Reattach</h2>
271
- <p>GPT-5.x Pro answers can take 10–60 minutes. API runs detach by default — Oracle returns the session id, you reattach later:</p>
272
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> status</span><span style="color:#768390"> # find the running one</span></span>
273
- <span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> session</span><span style="color:#F47067"> &#x3C;</span><span style="color:#96D0FF">i</span><span style="color:#ADBAC7">d</span><span style="color:#F47067">></span><span style="color:#768390"> # blocks until done, then prints the answer</span></span></code></pre>
274
- <p>Every new run prints a lifecycle block so foreground and detached behavior is explicit:</p>
275
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-text"><span class="line"><span>Session: 20260515-name-panel</span></span>
276
- <span class="line"><span>Mode: api background</span></span>
277
- <span class="line"><span>Models: 3 parallel</span></span>
278
- <span class="line"><span>Detach: yes, polling</span></span>
279
- <span class="line"><span>Reattach: oracle session 20260515-name-panel</span></span></code></pre>
280
- <p><code>oracle status</code> uses compact mode labels such as <code>api/fg</code>, <code>api/bg</code>, <code>br/fg</code>, and <code>br/bg</code>; <code>oracle session &lt;id&gt;</code> shows the persisted execution state.</p>
281
- <p>To keep the original CLI attached until completion, pass <code>--wait</code>:</p>
282
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#6CB6FF"> --wait</span><span style="color:#6CB6FF"> --model</span><span style="color:#96D0FF"> gpt-5.5-pro</span><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "Long architecture review"</span><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/**"</span></span></code></pre>
283
- <p>For API runs, <code>--wait</code> executes the request in the foreground. Local Pro browser runs use a detached worker even with <code>--wait</code>, while the original CLI stays attached to the session log. This lets the browser worker capture and save the answer if the foreground CLI exits unexpectedly. Pressing Ctrl-C still cancels the worker and exits with code 130.</p>
284
- <p>MCP callers can make the same ownership split explicit for any local run: call <code>consult</code> with <code>waitForCompletion:false</code>, then call <code>wait</code> with the returned session id. <code>wait.timeoutMs</code> bounds only the caller&#39;s wait; timeout, request cancellation, or MCP transport closure does not cancel the detached worker. Omit the timeout to wait until a terminal status, or use <code>0</code> for an immediate snapshot.</p>
285
- <p>Reattachment recognizes prompt echoes even when spacing or line breaks differ, and keeps waiting for assistant content instead of treating the echoed prompt as an answer.</p>
286
- <p>For browser runs, ChatGPT sometimes redirects mid-page-load. The auto-reattach flags poll the existing tab without manual intervention:</p>
287
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#6CB6FF"> --engine</span><span style="color:#96D0FF"> browser</span><span style="color:#F47067"> \</span></span>
288
- <span class="line"><span style="color:#6CB6FF"> --browser-timeout</span><span style="color:#96D0FF"> 6m</span><span style="color:#F47067"> \</span></span>
289
- <span class="line"><span style="color:#6CB6FF"> --browser-auto-reattach-delay</span><span style="color:#96D0FF"> 30s</span><span style="color:#F47067"> \</span></span>
290
- <span class="line"><span style="color:#6CB6FF"> --browser-auto-reattach-interval</span><span style="color:#96D0FF"> 2m</span><span style="color:#F47067"> \</span></span>
291
- <span class="line"><span style="color:#6CB6FF"> --browser-auto-reattach-timeout</span><span style="color:#96D0FF"> 2m</span><span style="color:#F47067"> \</span></span>
292
- <span class="line"><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "Long UI audit"</span><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/**"</span></span></code></pre>
293
- <p>See <a href="browser-mode.html">Browser Mode</a> for the full set.</p>
294
- <h2 id="restart"><a class="anchor" href="#restart" aria-label="Anchor link">#</a>Restart</h2>
295
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> restart</span><span style="color:#F47067"> &#x3C;</span><span style="color:#96D0FF">i</span><span style="color:#ADBAC7">d</span><span style="color:#F47067">></span><span style="color:#768390"> # re-run with the same prompt + files</span></span></code></pre>
296
- <p>Useful when a transient browser/API error truncated the answer. Restart copies the bundle, opens a new session, and links lineage back.</p>
297
- <h2 id="follow-up"><a class="anchor" href="#follow-up" aria-label="Anchor link">#</a>Follow up</h2>
298
- <p>Continue a saved ChatGPT browser conversation or an OpenAI / Azure Responses API session with new context:</p>
299
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#6CB6FF"> --followup</span><span style="color:#F47067"> &#x3C;</span><span style="color:#96D0FF">i</span><span style="color:#ADBAC7">d</span><span style="color:#F47067">></span><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "Re-evaluate with these files"</span><span style="color:#F47067"> \</span></span>
300
- <span class="line"><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/migrations/**"</span></span></code></pre>
301
- <p>Browser followup reopens the exact saved conversation and inherits its browser configuration and model. For multi-model API parents, pick the lineage with <code>--followup-model</code>. See <a href="followup.html">Followup</a> for the full flow and the formats <code>--followup</code> accepts (session ids, slugs, or <code>resp_…</code> response ids).</p>
302
- <h2 id="background-mode"><a class="anchor" href="#background-mode" aria-label="Anchor link">#</a>Background mode</h2>
303
- <p>Force a Responses API run into background mode (create + retrieve) regardless of model defaults:</p>
304
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#6CB6FF"> --background</span><span style="color:#6CB6FF"> --model</span><span style="color:#96D0FF"> gpt-5.5-pro</span><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "..."</span><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/**"</span></span>
305
- <span class="line"><span style="color:#F69D50">oracle</span><span style="color:#6CB6FF"> --no-background</span><span style="color:#6CB6FF"> --model</span><span style="color:#96D0FF"> gpt-5.5</span><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "..."</span><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/**"</span></span></code></pre>
306
- <p>GPT-5.x Pro defaults to background; non-Pro models block by default. Override per-run when needed.</p>
307
- <h2 id="pruning"><a class="anchor" href="#pruning" aria-label="Anchor link">#</a>Pruning</h2>
308
- <pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#96D0FF"> status</span><span style="color:#6CB6FF"> --clear</span><span style="color:#6CB6FF"> --hours</span><span style="color:#6CB6FF"> 168</span><span style="color:#768390"> # delete sessions older than a week</span></span></code></pre>
309
- <p><code>--clear</code> is destructive — preview without it first. Sessions are local files, so <code>rm -rf ~/.oracle/sessions/&lt;id&gt;</code> works too.</p>
310
- <h2 id="stale-zombie-detection"><a class="anchor" href="#stale-zombie-detection" aria-label="Anchor link">#</a>Stale / zombie detection</h2>
311
- <p><code>oracle status</code> flags stale sessions (process gone, no recent log activity). Tune with:</p>
312
- <ul>
313
- <li><code>--zombie-timeout &lt;ms|s|m|h&gt;</code> — cutoff for &quot;stale.&quot;</li>
314
- <li><code>--zombie-last-activity</code> — use last log entry instead of session start.</li>
315
- </ul>
316
- <h2 id="slugs"><a class="anchor" href="#slugs" aria-label="Anchor link">#</a>Slugs</h2>
317
- <p>Every run gets a default slug derived from the prompt. Override with <code>--slug &quot;my-thing&quot;</code> for stable names you can reference later (<code>oracle session my-thing</code>).</p>
318
- <h2 id="browser-harvest-identity"><a class="anchor" href="#browser-harvest-identity" aria-label="Anchor link">#</a>Browser harvest identity</h2>
319
- <p><code>oracle session &lt;id&gt; --harvest</code> and <code>--live</code> reuse the saved Chrome transport, including the browser WebSocket endpoint and approval wait for attach-running sessions. This supports Chrome configurations without HTTP target discovery. If the saved tab is gone, recovery reopens the saved conversation through the same endpoint. Keep Chrome running with remote debugging enabled and allow its connection prompt when requested; transport failures identify the operation and endpoint instead of displaying an empty error. Transient ChatGPT status notices appended outside the user content do not invalidate the submitted prompt hash; the stable user message ID and exact prompt text must still match.</p>
320
- <p>Browser harvest and live-tail compare the observed conversation with saved runtime, archive, artifact-source, and transcript-header identities. A mismatch is retained under <code>browser.harvest.integrity</code> and shown as a browser warning; an implicit harvest fails with <code>conversation-identity-mismatch</code> before exporting the newly harvested answer. Existing transcripts and answer logs are preserved.</p>
321
- <p>Implicit harvest also waits for an assistant answer paired with the latest user turn, up to the saved browser input timeout. New browser sessions record a fingerprint of each rendered, committed user turn and its stable message ID before waiting for its answer, including repeated follow-ups. A mismatch preserves the original output; an unconfirmed submission requires waiting or explicit tab inspection.</p>
322
- <p>Older sessions without a fingerprint retain their existing recovery behavior, with a warning that only latest user/assistant pairing can be checked. Their submitted file context cannot be reconstructed reliably from saved metadata.</p>
323
- <p>An explicit <code>--browser-tab</code> override still permits inspecting another target, but records the mismatch and does not reassign the original capture. Unavailable recorded transcript headers or unreadable recorded conversation URLs are marked <code>unverified</code>. Matching known conversation IDs does not by itself prove that an answer belongs to the original prompt.</p>
324
- <h2 id="naming-conventions"><a class="anchor" href="#naming-conventions" aria-label="Anchor link">#</a>Naming conventions</h2>
325
- <p>Pair <code>--slug</code> with conventional prefixes for browseability:</p>
326
- <ul>
327
- <li><code>arch-…</code> — architecture / design review</li>
328
- <li><code>bug-…</code> — debugging session</li>
329
- <li><code>refactor-…</code> — refactor cross-check</li>
330
- <li><code>plan-…</code> — planning consult</li>
331
- <li><code>dr-…</code> — Deep Research run</li>
332
- </ul>
333
- <p>Then <code>oracle status --hours 720 | grep arch-</code> shows your last month of architecture work.</p><nav class="page-nav" aria-label="Pager"><a class="page-nav-prev" href="mcp.html"><small>Previous</small><span>MCP Server</span></a><a class="page-nav-next" href="followup.html"><small>Next</small><span>Followups &amp; Lineage</span></a></nav></article>
334
- <nav class="toc" aria-label="On this page"><h2>On this page</h2><a class="toc-l2" href="#where-sessions-live">Where sessions live</a><a class="toc-l2" href="#listing">Listing</a><a class="toc-l2" href="#replaying">Replaying</a><a class="toc-l2" href="#reattach">Reattach</a><a class="toc-l2" href="#restart">Restart</a><a class="toc-l2" href="#follow-up">Follow up</a><a class="toc-l2" href="#background-mode">Background mode</a><a class="toc-l2" href="#pruning">Pruning</a><a class="toc-l2" href="#stale-zombie-detection">Stale / zombie detection</a><a class="toc-l2" href="#slugs">Slugs</a><a class="toc-l2" href="#browser-harvest-identity">Browser harvest identity</a><a class="toc-l2" href="#naming-conventions">Naming conventions</a></nav>
335
- </div>
336
- </main>
337
- </div>
338
- <script>
339
- const themeRoot=document.documentElement;
340
- function applyTheme(mode){themeRoot.dataset.theme=mode;document.querySelectorAll('[data-theme-toggle]').forEach(b=>b.setAttribute('aria-pressed',mode==='dark'?'true':'false'))}
341
- function storedTheme(){try{return localStorage.getItem('theme')}catch(e){return null}}
342
- function persistTheme(mode){try{localStorage.setItem('theme',mode)}catch(e){}}
343
- applyTheme(themeRoot.dataset.theme==='dark'?'dark':'light');
344
- document.querySelectorAll('[data-theme-toggle]').forEach(btn=>{btn.addEventListener('click',()=>{const next=themeRoot.dataset.theme==='dark'?'light':'dark';applyTheme(next);persistTheme(next)})});
345
- const systemDark=window.matchMedia&&matchMedia('(prefers-color-scheme: dark)');
346
- function onSystemChange(e){if(storedTheme())return;applyTheme(e.matches?'dark':'light')}
347
- if(systemDark){if(systemDark.addEventListener)systemDark.addEventListener('change',onSystemChange);else if(systemDark.addListener)systemDark.addListener(onSystemChange)}
348
- const sidebar=document.querySelector('.sidebar');
349
- const toggle=document.querySelector('.nav-toggle');
350
- const mobileNav=window.matchMedia('(max-width: 900px)');
351
- const sidebarFocusable='a[href],button,input,select,textarea,[tabindex]';
352
- function setSidebarFocusable(enabled){
353
- sidebar?.querySelectorAll(sidebarFocusable).forEach((el)=>{
354
- if(enabled){
355
- if(el.dataset.sidebarTabindex!==undefined){
356
- if(el.dataset.sidebarTabindex)el.setAttribute('tabindex',el.dataset.sidebarTabindex);
357
- else el.removeAttribute('tabindex');
358
- delete el.dataset.sidebarTabindex;
359
- }
360
- }else if(el.dataset.sidebarTabindex===undefined){
361
- el.dataset.sidebarTabindex=el.getAttribute('tabindex')??'';
362
- el.setAttribute('tabindex','-1');
363
- }
364
- });
365
- }
366
- function setSidebarOpen(open){
367
- if(!sidebar||!toggle)return;
368
- sidebar.classList.toggle('open',open);
369
- toggle.setAttribute('aria-expanded',open?'true':'false');
370
- if(mobileNav.matches){
371
- sidebar.inert=!open;
372
- if(open)sidebar.removeAttribute('aria-hidden');
373
- else sidebar.setAttribute('aria-hidden','true');
374
- setSidebarFocusable(open);
375
- }else{
376
- sidebar.inert=false;
377
- sidebar.removeAttribute('aria-hidden');
378
- setSidebarFocusable(true);
379
- }
380
- }
381
- setSidebarOpen(false);
382
- toggle?.addEventListener('click',()=>setSidebarOpen(!sidebar?.classList.contains('open')));
383
- document.addEventListener('click',(e)=>{if(!sidebar?.classList.contains('open'))return;if(sidebar.contains(e.target)||toggle?.contains(e.target))return;setSidebarOpen(false)});
384
- document.addEventListener('keydown',(e)=>{if(e.key==='Escape')setSidebarOpen(false)});
385
- const syncSidebarForViewport=()=>setSidebarOpen(sidebar?.classList.contains('open')??false);
386
- if(mobileNav.addEventListener)mobileNav.addEventListener('change',syncSidebarForViewport);
387
- else mobileNav.addListener?.(syncSidebarForViewport);
388
- const input=document.getElementById('doc-search');
389
- input?.addEventListener('input',()=>{const q=input.value.trim().toLowerCase();document.querySelectorAll('nav section').forEach(sec=>{let any=false;sec.querySelectorAll('.nav-link').forEach(a=>{const m=!q||a.textContent.toLowerCase().includes(q);a.style.display=m?'block':'none';if(m)any=true});sec.style.display=any?'block':'none'})});
390
- function attachCopy(target,getText){const btn=document.createElement('button');btn.type='button';btn.className='copy';btn.textContent='Copy';btn.addEventListener('click',async()=>{try{await navigator.clipboard.writeText(getText());btn.textContent='Copied';btn.classList.add('copied');setTimeout(()=>{btn.textContent='Copy';btn.classList.remove('copied')},1400)}catch{btn.textContent='Failed';setTimeout(()=>{btn.textContent='Copy'},1400)}});target.appendChild(btn)}
391
- document.querySelectorAll('.doc pre').forEach(pre=>attachCopy(pre,()=>pre.querySelector('code')?.textContent??''));
392
- document.querySelectorAll('.home-install').forEach(el=>attachCopy(el,()=>el.querySelector('code')?.textContent??''));
393
- const tocLinks=document.querySelectorAll('.toc a');
394
- if(tocLinks.length){const map=new Map();tocLinks.forEach(a=>{const id=a.getAttribute('href').slice(1);const el=document.getElementById(id);if(el)map.set(el,a)});const setActive=l=>{tocLinks.forEach(x=>x.classList.remove('active'));l.classList.add('active')};const obs=new IntersectionObserver(entries=>{const visible=entries.filter(e=>e.isIntersecting).sort((a,b)=>a.boundingClientRect.top-b.boundingClientRect.top);if(visible.length){const link=map.get(visible[0].target);if(link)setActive(link)}},{rootMargin:'-15% 0px -65% 0px',threshold:0});map.forEach((_,el)=>obs.observe(el))}
395
- </script>
396
- </body>
397
- </html>
Binary file
@@ -1,79 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-label="Oracle — askoracle.sh">
2
- <defs>
3
- <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
4
- <stop offset="0" stop-color="#0a0815"/>
5
- <stop offset="0.55" stop-color="#1a0f3d"/>
6
- <stop offset="1" stop-color="#0e0420"/>
7
- </linearGradient>
8
- <radialGradient id="orb" cx="35%" cy="32%" r="65%">
9
- <stop offset="0" stop-color="#ffffff"/>
10
- <stop offset="0.16" stop-color="#e9defc"/>
11
- <stop offset="0.52" stop-color="#7c3aed"/>
12
- <stop offset="0.88" stop-color="#3b1374"/>
13
- <stop offset="1" stop-color="#1a0936"/>
14
- </radialGradient>
15
- <radialGradient id="haze" cx="50%" cy="50%" r="50%">
16
- <stop offset="0" stop-color="#a78bfa" stop-opacity="0.55"/>
17
- <stop offset="0.6" stop-color="#7c3aed" stop-opacity="0.18"/>
18
- <stop offset="1" stop-color="#7c3aed" stop-opacity="0"/>
19
- </radialGradient>
20
- <linearGradient id="text-grad" x1="0" y1="0" x2="1" y2="0">
21
- <stop offset="0" stop-color="#ffffff"/>
22
- <stop offset="0.45" stop-color="#c4b5fd"/>
23
- <stop offset="1" stop-color="#7dd3fc"/>
24
- </linearGradient>
25
- <filter id="orb-shadow" x="-30%" y="-30%" width="160%" height="160%">
26
- <feGaussianBlur stdDeviation="22" />
27
- </filter>
28
- </defs>
29
-
30
- <rect width="1200" height="630" fill="url(#bg)"/>
31
-
32
- <!-- ambient haze behind orb -->
33
- <circle cx="900" cy="305" r="320" fill="url(#haze)"/>
34
-
35
- <!-- orbital rings -->
36
- <g stroke="#7c3aed" stroke-opacity="0.22" fill="none" stroke-width="1.4">
37
- <ellipse cx="900" cy="305" rx="280" ry="80" transform="rotate(-18 900 305)"/>
38
- <ellipse cx="900" cy="305" rx="320" ry="115" transform="rotate(8 900 305)"/>
39
- <ellipse cx="900" cy="305" rx="240" ry="60" transform="rotate(28 900 305)"/>
40
- </g>
41
-
42
- <!-- orb -->
43
- <circle cx="900" cy="305" r="200" fill="#1a0936" filter="url(#orb-shadow)" opacity="0.6"/>
44
- <circle cx="900" cy="305" r="180" fill="url(#orb)"/>
45
- <circle cx="900" cy="305" r="46" fill="#0a0510"/>
46
- <circle cx="956" cy="262" r="22" fill="#ffffff" opacity="0.85"/>
47
- <circle cx="978" cy="248" r="9" fill="#ffffff" opacity="0.95"/>
48
-
49
- <!-- decorative star flecks -->
50
- <g fill="#c4b5fd" opacity="0.7">
51
- <circle cx="120" cy="540" r="2"/>
52
- <circle cx="180" cy="92" r="1.6"/>
53
- <circle cx="240" cy="500" r="1.4"/>
54
- <circle cx="80" cy="380" r="1.6"/>
55
- <circle cx="540" cy="540" r="2.2"/>
56
- <circle cx="40" cy="120" r="1.2"/>
57
- <circle cx="600" cy="80" r="1.4"/>
58
- <circle cx="700" cy="540" r="1.4"/>
59
- <circle cx="1140" cy="80" r="2"/>
60
- <circle cx="1100" cy="560" r="1.6"/>
61
- </g>
62
-
63
- <!-- text block -->
64
- <g font-family="Inter, ui-sans-serif, -apple-system, system-ui, sans-serif">
65
- <text x="80" y="166" font-size="22" font-weight="600" fill="#a78bfa" letter-spacing="6">ASK · ORACLE · DEV</text>
66
-
67
- <text x="80" y="284" font-size="98" font-weight="700" fill="url(#text-grad)" letter-spacing="-2">oracle</text>
68
-
69
- <text x="80" y="350" font-size="34" font-weight="600" fill="#ece9fb">Whisper your prompt</text>
70
- <text x="80" y="394" font-size="34" font-weight="600" fill="#ece9fb">to a mythical pro agent.</text>
71
-
72
- <text x="80" y="470" font-size="22" font-weight="500" fill="#9d8fd1">GPT-5.5 Pro · Gemini 3 Pro · Claude Opus · Deep Research</text>
73
-
74
- <g font-family="JetBrains Mono, SF Mono, ui-monospace, monospace" font-size="20" fill="#cdc1f0">
75
- <rect x="78" y="510" width="540" height="64" rx="10" fill="#0c0820" stroke="#2a1d56"/>
76
- <text x="100" y="552"><tspan fill="#7c5cd6">$</tspan> brew install steipete/tap/oracle</text>
77
- </g>
78
- </g>
79
- </svg>