34 lines
13 KiB
HTML
34 lines
13 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="description" content="An offline editor for one exploratory span of an agent transcript. Keep the context. Carry the conclusion.">
|
||
<title>Context Curator — Keep the finding.</title>
|
||
<style>
|
||
@font-face{font-family:Curator Serif;font-style:normal;font-weight:400;font-display:swap;src:url("/*__FONT_REGULAR__*/") format("woff2")}@font-face{font-family:Curator Serif;font-style:italic;font-weight:400;font-display:swap;src:url("/*__FONT_ITALIC__*/") format("woff2")}
|
||
:root{--paper:#f3efe4;--ink:#202f2b;--muted:#54605a;--red:#a33624;--rule:#a7aa9e;--light:#fcf9f0}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Curator Serif',Georgia,serif;font-size:18px;line-height:1.5}body:before{content:'';position:fixed;inset:0;pointer-events:none;opacity:.13;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath filter='url(%23n)' opacity='.22' d='M0 0h120v120H0z'/%3E%3C/svg%3E")}a{color:inherit;text-underline-offset:4px}a:hover{color:var(--red)}main,.masthead,footer{max-width:1220px;margin:auto;padding:0 44px}.masthead{padding-top:23px}.edition,.eyebrow,label,button,.utility,summary,select,input,textarea,.measure{font-family:Arial,Helvetica,sans-serif}.edition{display:flex;justify-content:space-between;gap:15px;font-size:11px;text-transform:uppercase;letter-spacing:1.8px;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);padding:8px 0}.mast-title{display:flex;justify-content:space-between;align-items:baseline;border-bottom:5px double var(--ink);padding:15px 0 12px}.name{font-size:clamp(30px,4.4vw,58px);font-weight:bold;letter-spacing:-2px}.issue{font-style:italic;font-size:16px}.lead{display:grid;grid-template-columns:2fr 1fr;gap:40px;padding:40px 0 38px;border-bottom:1px solid var(--ink)}.eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:2px;font-weight:bold;color:var(--red);margin:0 0 17px}h1{font-size:clamp(50px,6.2vw,78px);line-height:.98;letter-spacing:-3px;font-weight:normal;margin:0 0 25px}h1 em{color:var(--red)}.dek{max-width:590px;font-size:22px;line-height:1.4;margin:0 0 24px}.cta{display:inline-block;padding:13px 22px;background:var(--ink);color:var(--light);font:bold 14px Arial,Helvetica,sans-serif;text-decoration:none}.cta:hover{background:var(--red);color:white}.lead aside{border-left:1px solid var(--rule);padding-left:30px}.lead aside h2{font-size:27px;line-height:1.2;margin-top:0}.lead aside p{font-size:17px}.margin-note{font-style:italic;color:var(--muted)}.section-head{display:flex;justify-content:space-between;gap:24px;align-items:baseline;padding:27px 0 16px}.section-head h2{font-weight:normal;font-size:34px;margin:0;letter-spacing:-1px}.utility{font-size:12px;color:var(--muted)}.tool{border-top:4px solid var(--ink)}.workbench{display:grid;grid-template-columns:1fr 1.3fr;gap:32px;padding-bottom:22px}.editor{border-right:1px solid var(--rule);padding-right:30px}label{display:block;font-size:12px;font-weight:bold;margin:15px 0 6px}textarea,input,select{font-size:14px;line-height:1.45;color:var(--ink);background:var(--light);border:1px solid var(--rule);padding:10px;width:100%;border-radius:0}textarea{resize:vertical}select{min-width:0}.range{display:grid;grid-template-columns:1fr 1fr;gap:12px}.actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}button{font-size:12px;font-weight:bold;border:1px solid var(--ink);color:var(--ink);background:transparent;padding:10px 13px;cursor:pointer;min-height:40px}button:hover{background:var(--ink);color:var(--light)}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--ink);color:var(--light)}:focus-visible{outline:3px solid var(--red);outline-offset:3px}pre{font:12px/1.6 'Courier New',monospace;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;max-height:440px;overflow:auto;background:var(--light);padding:17px;border:1px solid var(--rule)}.measure{padding:12px 0;font-size:14px;font-weight:bold;color:var(--red);border-bottom:1px solid var(--rule)}.diff-key{font-size:14px;color:var(--muted)}#status{font:13px/1.5 Arial,Helvetica,sans-serif;min-height:40px}summary{cursor:pointer;font-size:13px;padding:12px 0}details pre{max-height:300px}input[type=file]{font-size:12px}.notes{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;padding:27px 0 35px;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink)}.notes article+article{border-left:1px solid var(--rule);padding-left:25px}.notes h3{font-size:23px;font-weight:normal;margin:0 0 12px}.notes p{font-size:16px;margin:0}.number{font-style:italic;color:var(--red)}.price-row{display:grid;grid-template-columns:170px 1fr 1.4fr;border-top:1px solid var(--rule);gap:25px;padding:18px 0;font-size:16px}.price-row strong{font-size:21px;font-weight:normal}.join{display:grid;grid-template-columns:1fr 1.2fr;gap:45px;border-top:4px solid var(--ink);padding:25px 0 35px;margin-top:25px}.join h2{font-size:38px;line-height:1.1;font-weight:normal;margin:0 0 17px}.join p{font-size:17px}.small{font-size:13px!important;color:var(--muted)}#thanks{border-left:3px solid var(--red);padding-left:20px}footer{padding-top:18px;padding-bottom:28px;border-top:1px solid var(--ink);font-size:13px;display:flex;justify-content:space-between;gap:20px}[hidden]{display:none!important}@media(max-width:700px){main,.masthead,footer{padding-left:20px;padding-right:20px}.edition{font-size:9px;letter-spacing:1px}.issue{display:none}.name{letter-spacing:-1px}.lead{grid-template-columns:1fr;gap:25px;padding-top:28px}h1{font-size:49px}.dek{font-size:20px}.lead aside{border-left:0;border-top:1px solid var(--rule);padding:20px 0 0}.lead aside h2{font-size:25px}.section-head{display:block}.workbench,.join{grid-template-columns:1fr;gap:25px}.editor{padding-right:0;border-right:0}.section-head h2{font-size:29px}.notes{grid-template-columns:1fr;gap:22px}.notes article+article{border-left:0;border-top:1px solid var(--rule);padding:18px 0 0}.price-row{grid-template-columns:1fr;gap:6px}footer{display:block}pre{max-height:360px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="masthead"><div class="edition"><span>A notplanned publication · No. 003</span><span>Local tools / better handoffs</span></div><div class="mast-title"><span class="name">Context Curator</span><span class="issue">A field guide to carrying less.</span></div></header>
|
||
<main>
|
||
<section class="lead"><div><p class="eyebrow">For developers with a long conversation behind them</p><h1>Keep the finding.<br><em>Cut the detour.</em></h1><p class="dek">Your agent explored six dead ends. The next session needs the conclusion — and everything that still matters around it.</p><a class="cta" href="#join">Join the early access list →</a><p class="small">Free local editor below. No account needed.</p></div><aside><h2>A smaller handoff,<br>with the evidence in view.</h2><p>Select one stretch of a JSON transcript. Write the conclusion yourself. Compare every message, then download a Markdown continuation packet.</p><p class="margin-note">The original stays intact. Undo is one click. Your transcript never leaves this browser.</p><p class="small">Inspired by <a href="https://github.com/openai/codex/issues/14747">openai/codex #14747</a>, closed as “not planned.” This is a manual, standalone workaround, not native session compaction.</p></aside></section>
|
||
<section class="tool" id="editor" aria-labelledby="editor-title"><div class="section-head"><h2 id="editor-title">The working edition</h2><span class="utility">Illustrative debugging transcript · editable, not a benchmark</span></div>
|
||
<div class="workbench"><div class="editor"><p class="small">The sample removes messages 3–8, retaining the requirements and next task. Try your own transcript using the documented version 1 format.</p><label for="file">Open a JSON transcript (2 MiB / 500 messages maximum)</label><input id="file" type="file" accept=".json,application/json">
|
||
<details><summary>Paste JSON / inspect the sample format</summary><label for="source">Transcript JSON</label><textarea id="source" rows="10" spellcheck="false"></textarea><button id="load" type="button">Load this JSON</button><p class="small">Required: <code>{"version":1,"messages":[{"id":"m1","role":"user","content":"…"}]}</code>. Roles: system, user, assistant, tool. Unique string IDs. Extra metadata is retained.</p></details>
|
||
<div class="range"><div><label for="first">First message (inclusive)</label><select id="first"></select></div><div><label for="last">Last message (inclusive)</label><select id="last"></select></div></div>
|
||
<label for="conclusion">Your replacement conclusion</label><textarea id="conclusion" rows="7" maxlength="100000" spellcheck="false"></textarea>
|
||
<div class="actions"><button class="primary" id="apply" type="button">Replace selected span</button><button id="undo" type="button">Undo replacement</button><button id="sample" type="button">Reset to sample</button></div><p id="status" role="status" aria-live="polite"></p>
|
||
<div class="actions"><button id="packet" type="button">Download Markdown packet</button><button id="result" type="button">Download curated JSON</button><button id="original" type="button">Save untouched original</button></div><p class="small">Offline copy: <a href="index.html" download="context-curator.html">download this complete editor</a>. Open the saved HTML in your browser. <a href="sample.json" download>Sample JSON</a> · <a href="demo-continuation.md" download>Demo packet</a> · <a href="README.md">Usage & limits</a></p></div>
|
||
<div><div class="measure" id="measure" aria-live="polite"></div><p class="diff-key">Complete message diff · − removed · + manual conclusion · unmarked retained.<br>All message fields are shown. No hidden context.</p><pre id="diff" tabindex="0" aria-label="Complete before and after diff"></pre><details><summary>Complete original JSON</summary><pre id="before" tabindex="0"></pre></details><details><summary>Complete curated JSON</summary><pre id="after" tabindex="0"></pre></details></div></div></section>
|
||
<section class="notes" aria-label="How it works"><article><h3><span class="number">01 /</span> Mark the detour.</h3><p>Import a transcript you have explicitly exported or converted. Pick one contiguous span. Messages outside it stay unchanged, including their metadata.</p></article><article><h3><span class="number">02 /</span> Write what survived.</h3><p>State the finding, evidence, unresolved questions, and next step. Nothing is summarized by a model. You decide what can safely be left behind.</p></article><article><h3><span class="number">03 /</span> Review & carry forward.</h3><p>Read the full diff. Download the quoted Markdown context for a fresh session. No live agent sessions or configuration are modified. Byte reduction is not a token or cost promise.</p></article></section>
|
||
<section aria-labelledby="pricing-title"><div class="section-head"><h2 id="pricing-title">An honest price list.</h2><span class="utility">Paid ideas are early access. No checkout, no billing.</span></div><div class="price-row"><strong>Local edition</strong><span>$0 · available today</span><span>Complete offline editor, sample, undo, diff and exports. No signup required.</span></div><div class="price-row"><strong>Founding workshop</strong><span>$49 one-time · proposed founding price</span><span>Early access idea: a guided transcript-conversion and handoff review. Register interest; not yet delivered.</span></div></section>
|
||
<section class="join" id="join" aria-labelledby="join-title"><div><p class="eyebrow">The next edition</p><h2 id="join-title">Less history.<br>More continuity.</h2><p>Get release updates, or signal interest in a guided workshop. The free editor is already yours.</p><p class="small">We use your email for Context Curator updates and your requested early access follow-up; we never share it. Do not put transcript content or secrets in the note.</p></div><div><form id="join-form" method="post" action="/api/signup" enctype="application/x-www-form-urlencoded"><input type="hidden" name="venture" value="context-curator"><input type="hidden" name="website" value=""><label for="email">Email</label><input id="email" name="email" type="email" required autocomplete="email" maxlength="254"><label for="plan">Your edition</label><select id="plan" name="plan" required><option value="free">Free local edition · release updates</option><option value="workshop">Founding workshop · $49 proposed, early access</option></select><label for="note">What would help? (optional)</label><textarea id="note" name="note" rows="2" maxlength="500"></textarea><div class="actions"><button class="primary" type="submit">Join the early access list →</button></div><p class="small">Signup requires the hosted page and a connection. The editor works offline.</p></form><div id="thanks" hidden role="status"><h3>You're on the list.</h3><p>Thanks for joining. Keep using the free local edition while we prepare the next release.</p><a href="#editor">Back to the editor ↑</a></div></div></section>
|
||
</main><footer><span>Context Curator · made at notplanned</span><span>No model calls. No trackers. No live-session access. Keep your original.</span></footer>
|
||
<script>
|
||
/*__CORE__*/
|
||
const SAMPLE_TEXT = /*__SAMPLE__*/;
|
||
/*__APP__*/
|
||
</script>
|
||
</body></html>
|