create-egregore 0.19.3 → 0.19.5
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.
- package/assets/egregore-launcher.js +3 -1
- package/lib/local.js +63 -6
- package/package.json +2 -2
- package/runtime/codex/.codex/hooks/search-hint.js +65 -0
- package/runtime/codex/.codex/hooks.json +13 -0
- package/runtime/codex/.codex/skills/deep-reflect/SKILL.md +14 -10
- package/runtime/codex/.codex/skills/minion/SKILL.md +25 -0
- package/runtime/codex/.codex/skills/scroll/SKILL.md +168 -0
- package/runtime/codex/.codex/skills/scroll/agents/openai.yaml +4 -0
- package/runtime/codex/.codex/skills/scroll/assets/shell.html +542 -0
- package/runtime/codex/.codex/skills/search/SKILL.md +56 -0
- package/runtime/codex/.codex/skills/session-view/SKILL.md +25 -0
- package/runtime/codex/.codex/skills/thread/SKILL.md +25 -0
- package/runtime/codex/.codex/skills/view/SKILL.md +147 -32
- package/runtime/codex/.codex/skills/view/agents/openai.yaml +4 -0
- package/runtime/codex/.codex/skills/view/assets/compose-scaffold.html +221 -0
- package/runtime/codex/.codex/spec-manifest.json +3 -3
- package/runtime/codex/AGENTS.md +24 -3
- package/runtime/codex/bin/activity-data.sh +46 -4
- package/runtime/codex/bin/agent.sh +10 -2
- package/runtime/codex/bin/codex-install-skills.sh +1 -1
- package/runtime/codex/bin/codex-render-spec.mjs +18 -1
- package/runtime/codex/bin/codex-session-start.sh +1 -1
- package/runtime/codex/bin/codex-skill-render.mjs +13 -7
- package/runtime/codex/bin/codex-sync-skills.sh +4 -0
- package/runtime/codex/bin/graph-op.sh +56 -5
- package/runtime/codex/bin/graph.sh +36 -0
- package/runtime/codex/bin/handoff-run.sh +157 -7
- package/runtime/codex/bin/handoff-save-egregore.sh +6 -1
- package/runtime/codex/bin/index-handoff.sh +9 -3
- package/runtime/codex/bin/lib/context.sh +89 -17
- package/runtime/codex/bin/lib/dashboard-artifact.sh +1 -1
- package/runtime/codex/bin/lib/git-sync.sh +35 -9
- package/runtime/codex/bin/lib/greeting.sh +25 -3
- package/runtime/codex/bin/publish-artifact.sh +29 -1
- package/runtime/codex/manifest.json +16 -1
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="__THEME_DARK__" data-theme-pair="__THEME_PAIR__" data-theme-mode="auto">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>__TITLE__ · Egregore</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,400..700&family=Hanken+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
10
|
+
<script>
|
|
11
|
+
/* Meridian theme engine (light / auto / dark) + palette pairs — pre-paint, no network, no permissions. */
|
|
12
|
+
(function(){
|
|
13
|
+
var PAIRS={
|
|
14
|
+
sovereign:{light:'ledger',dark:'bedrock'},
|
|
15
|
+
meridian:{light:'vellum',dark:'nocturne'},
|
|
16
|
+
agronomic:{light:'loam',dark:'soil'}
|
|
17
|
+
};
|
|
18
|
+
var PAIR_ORDER=['sovereign','meridian','agronomic'];
|
|
19
|
+
var DEFAULT_PAIR='__THEME_PAIR__';
|
|
20
|
+
var MODES=['light','auto','dark'], ICONS=['\u2600','\u25D0','\u263D'], LABELS=['light','auto','dark'];
|
|
21
|
+
function prefersDark(){
|
|
22
|
+
if(window.matchMedia('(prefers-color-scheme: dark)').matches) return true;
|
|
23
|
+
if(window.matchMedia('(prefers-color-scheme: light)').matches) return false;
|
|
24
|
+
var h=new Date().getHours(); return (h>=19||h<7);
|
|
25
|
+
}
|
|
26
|
+
function curPair(){ var p=null; try{p=localStorage.getItem('eg-theme-pair');}catch(e){}
|
|
27
|
+
return PAIRS[p]?p:DEFAULT_PAIR; }
|
|
28
|
+
function curMode(){ var m='auto'; try{m=localStorage.getItem('eg-theme-mode')||'auto';}catch(e){} return m; }
|
|
29
|
+
function apply(mode){
|
|
30
|
+
var pid=curPair(), pair=PAIRS[pid];
|
|
31
|
+
var dark=mode==='auto'?prefersDark():(mode==='dark');
|
|
32
|
+
var el=document.documentElement;
|
|
33
|
+
el.setAttribute('data-theme', dark?pair.dark:pair.light);
|
|
34
|
+
el.setAttribute('data-theme-pair', pid);
|
|
35
|
+
el.setAttribute('data-theme-mode', mode);
|
|
36
|
+
}
|
|
37
|
+
apply(curMode());
|
|
38
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',function(){
|
|
39
|
+
if(curMode()==='auto') apply('auto');
|
|
40
|
+
});
|
|
41
|
+
window.__egTheme={
|
|
42
|
+
cycle:function(){
|
|
43
|
+
var next=MODES[(MODES.indexOf(curMode())+1)%3];
|
|
44
|
+
try{localStorage.setItem('eg-theme-mode',next);}catch(e){}
|
|
45
|
+
apply(next); this.paint();
|
|
46
|
+
},
|
|
47
|
+
cyclePair:function(){
|
|
48
|
+
var next=PAIR_ORDER[(PAIR_ORDER.indexOf(curPair())+1)%PAIR_ORDER.length];
|
|
49
|
+
try{localStorage.setItem('eg-theme-pair',next);}catch(e){}
|
|
50
|
+
apply(curMode()); this.paint();
|
|
51
|
+
},
|
|
52
|
+
paint:function(){
|
|
53
|
+
var i=MODES.indexOf(curMode()), b=document.getElementById('themebtn');
|
|
54
|
+
if(b){ b.querySelector('.ic').textContent=ICONS[i]; b.querySelector('.tl').textContent=LABELS[i]; }
|
|
55
|
+
var pb=document.getElementById('palbtn');
|
|
56
|
+
if(pb){ pb.querySelector('.tl').textContent=curPair(); }
|
|
57
|
+
},
|
|
58
|
+
init:function(){this.paint();}
|
|
59
|
+
};
|
|
60
|
+
})();
|
|
61
|
+
</script>
|
|
62
|
+
<style>
|
|
63
|
+
/*__MERIDIAN_CSS__*/
|
|
64
|
+
|
|
65
|
+
[data-theme="ledger"]{--sky:var(--steel)}
|
|
66
|
+
[data-theme="bedrock"]{--sky:var(--steel)}
|
|
67
|
+
|
|
68
|
+
/* ── Meridian compat: aliases the Threads components use, mapped to role tokens ── */
|
|
69
|
+
:root{
|
|
70
|
+
--surface:var(--card); --surface-2:var(--paper-2); --bg:var(--paper); --bg-soft:var(--paper-2);
|
|
71
|
+
--text-faint:var(--ink-faint); --border-soft:var(--line-soft);
|
|
72
|
+
--accent:var(--t1); --accent-2:var(--t1); --font:var(--sans);
|
|
73
|
+
--s1:var(--ink-faint); --s2:var(--sky); --s3:var(--t1); --s4:var(--t3); --s5:var(--t2);
|
|
74
|
+
--green:var(--t2); --red:var(--t3);
|
|
75
|
+
--radius:14px; --maxw:920px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* ===== Threads components (press vocabulary, re-tokenised onto Meridian) ===== */
|
|
79
|
+
*{box-sizing:border-box}
|
|
80
|
+
html{scroll-behavior:smooth}
|
|
81
|
+
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);
|
|
82
|
+
line-height:1.62;font-size:16.5px;-webkit-font-smoothing:antialiased;}
|
|
83
|
+
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}
|
|
84
|
+
a{color:var(--accent);text-decoration:none}
|
|
85
|
+
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.18;letter-spacing:-.02em;color:var(--text)}
|
|
86
|
+
h2{font-size:1.92rem;margin:0 0 6px}
|
|
87
|
+
h3{font-size:1.28rem;margin:32px 0 10px}
|
|
88
|
+
h4{font-family:var(--serif);font-weight:400}
|
|
89
|
+
p{color:var(--text-dim)} p strong,li strong{color:var(--text);font-weight:600}
|
|
90
|
+
em{font-style:italic}
|
|
91
|
+
.mono{font-family:var(--mono)}
|
|
92
|
+
code{font-family:var(--mono);font-size:.84em;background:var(--surface-2);
|
|
93
|
+
border:1px solid var(--border);padding:1px 6px;border-radius:5px;color:var(--accent-2)}
|
|
94
|
+
|
|
95
|
+
/* header */
|
|
96
|
+
header{padding:62px 0 40px;border-bottom:1px dotted var(--line)}
|
|
97
|
+
.brandmark{margin-bottom:26px}
|
|
98
|
+
.brandmark svg{height:32px;width:auto;display:block}
|
|
99
|
+
.kicker{font-family:var(--mono);font-size:.72rem;letter-spacing:2.5px;text-transform:uppercase;
|
|
100
|
+
color:var(--accent);margin-bottom:18px}
|
|
101
|
+
header h1{font-size:3rem;margin:0 0 20px;max-width:20ch;line-height:1.06}
|
|
102
|
+
.lede{font-size:1.2rem;color:var(--text-dim);max-width:60ch;margin:0;font-family:var(--font)}
|
|
103
|
+
.subtitle{font-family:var(--serif);font-size:1.35rem;color:var(--text-dim);font-weight:400;
|
|
104
|
+
font-style:italic;margin:6px 0 0;letter-spacing:-.01em}
|
|
105
|
+
.meta{display:flex;gap:26px;flex-wrap:wrap;margin-top:30px;font-family:var(--mono);
|
|
106
|
+
font-size:.76rem;color:var(--text-faint)}
|
|
107
|
+
.meta b{color:var(--text-dim);font-weight:500}
|
|
108
|
+
|
|
109
|
+
/* sections + dotted divider w/ diamond */
|
|
110
|
+
section{padding:46px 0;border-bottom:1px dotted var(--line);position:relative}
|
|
111
|
+
section::after{content:"";position:absolute;left:50%;bottom:-4px;width:7px;height:7px;
|
|
112
|
+
transform:translateX(-50%) rotate(45deg);background:var(--bg);
|
|
113
|
+
border-right:1px dotted var(--line-soft);border-bottom:1px dotted var(--line-soft)}
|
|
114
|
+
.secnum{font-family:var(--mono);font-size:.74rem;color:var(--accent);letter-spacing:2px;margin-bottom:4px}
|
|
115
|
+
.lead-in{font-size:1.04rem;color:var(--text-dim);max-width:64ch}
|
|
116
|
+
|
|
117
|
+
/* summary / stat cards */
|
|
118
|
+
.summary{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
|
|
119
|
+
padding:32px 34px;margin:28px 0 8px}
|
|
120
|
+
.summary h3{margin-top:0}
|
|
121
|
+
.claims{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:24px}
|
|
122
|
+
.claims.three{grid-template-columns:1fr 1fr 1fr}
|
|
123
|
+
@media(max-width:680px){.claims,.claims.three{grid-template-columns:1fr}}
|
|
124
|
+
.claim{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:18px 20px}
|
|
125
|
+
.claim .n{font-family:var(--serif);font-size:1.62rem;color:var(--accent);font-weight:400}
|
|
126
|
+
.claim .l{font-size:.85rem;color:var(--text-dim);margin-top:6px;line-height:1.45}
|
|
127
|
+
|
|
128
|
+
/* callout */
|
|
129
|
+
.callout{border-left:2px solid var(--accent);background:var(--surface);
|
|
130
|
+
border-radius:0 10px 10px 0;padding:16px 22px;margin:24px 0;color:var(--text-dim)}
|
|
131
|
+
.callout b{color:var(--text)}
|
|
132
|
+
|
|
133
|
+
/* spectrum (progression of 2-4 options) */
|
|
134
|
+
.spectrum{display:grid;gap:0;margin:26px 0 10px;grid-auto-flow:column;grid-auto-columns:1fr;
|
|
135
|
+
border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
|
|
136
|
+
@media(max-width:680px){.spectrum{grid-auto-flow:row}}
|
|
137
|
+
.sp{padding:22px 22px 24px;border-right:1px solid var(--border-soft);position:relative}
|
|
138
|
+
.sp:last-child{border-right:none}
|
|
139
|
+
.sp.win{background:var(--t1-bg)}
|
|
140
|
+
.sp .tag{font-family:var(--mono);font-size:.68rem;letter-spacing:1.2px;text-transform:uppercase;color:var(--text-faint)}
|
|
141
|
+
.sp.win .tag{color:var(--accent)}
|
|
142
|
+
.sp h4{margin:8px 0 6px;font-size:1.12rem;color:var(--text)}
|
|
143
|
+
.sp p{font-size:.85rem;margin:0;color:var(--text-dim)}
|
|
144
|
+
.sp .has{font-family:var(--mono);font-size:.72rem;margin-top:12px;color:var(--text-faint)}
|
|
145
|
+
.sp .has .y{color:var(--green)} .sp .has .x{color:var(--red)}
|
|
146
|
+
|
|
147
|
+
/* flow (process: node -> node -> node) */
|
|
148
|
+
.flow{display:flex;flex-direction:column;gap:14px;margin:26px 0 8px}
|
|
149
|
+
.frow{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 22px}
|
|
150
|
+
.frow.win{border-color:var(--line-soft);background:var(--t1-bg)}
|
|
151
|
+
.fhead{display:flex;align-items:baseline;gap:12px;margin-bottom:14px;flex-wrap:wrap}
|
|
152
|
+
.fhead .cnd{font-family:var(--mono);font-weight:500;font-size:.88rem}
|
|
153
|
+
.fhead .gloss{color:var(--text-dim);font-size:.88rem}
|
|
154
|
+
.chain{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
|
|
155
|
+
.node{flex:1;min-width:118px;background:var(--bg);border:1px solid var(--border-soft);
|
|
156
|
+
border-radius:9px;padding:11px 13px}
|
|
157
|
+
.node .nt{font-size:.82rem;color:var(--text);font-weight:600}
|
|
158
|
+
.node .nd{font-size:.74rem;color:var(--text-faint);margin-top:3px;line-height:1.4}
|
|
159
|
+
.node.sub{border-color:var(--line-soft);background:var(--t1-bg)}
|
|
160
|
+
.arrow{display:flex;align-items:center;padding:0 9px;color:var(--accent);font-size:1.1rem}
|
|
161
|
+
.fmeta{display:flex;gap:16px;margin-top:13px;font-family:var(--mono);font-size:.72rem;color:var(--text-faint);flex-wrap:wrap}
|
|
162
|
+
.fmeta .y{color:var(--green)} .fmeta .x{color:var(--red)}
|
|
163
|
+
@media(max-width:680px){.chain{flex-direction:column}.arrow{transform:rotate(90deg);padding:4px 0;align-self:center}.node{width:100%}}
|
|
164
|
+
|
|
165
|
+
dfn{font-style:normal;color:var(--text);font-weight:600;border-bottom:1px dotted var(--accent)}
|
|
166
|
+
|
|
167
|
+
/* tables */
|
|
168
|
+
table{width:100%;border-collapse:collapse;margin:24px 0;font-size:.9rem}
|
|
169
|
+
th,td{text-align:left;padding:13px 14px;border-bottom:1px solid var(--border);vertical-align:top}
|
|
170
|
+
th{font-family:var(--mono);font-size:.72rem;letter-spacing:.5px;text-transform:uppercase;
|
|
171
|
+
color:var(--text-faint);font-weight:500}
|
|
172
|
+
td{color:var(--text-dim)}
|
|
173
|
+
tr td:first-child{color:var(--text)}
|
|
174
|
+
td.num,th.num{text-align:right;font-family:var(--mono);font-size:.86rem}
|
|
175
|
+
.tbl-overall td{border-top:2px solid var(--border);font-weight:600;color:var(--text)}
|
|
176
|
+
.hl{color:var(--accent);font-weight:600}
|
|
177
|
+
.pill{display:inline-block;font-family:var(--mono);font-size:.66rem;padding:2px 8px;border-radius:20px;
|
|
178
|
+
border:1px solid var(--border);background:var(--bg)}
|
|
179
|
+
.pill.on{color:var(--accent);border-color:var(--line-soft);background:var(--t1-bg)}
|
|
180
|
+
|
|
181
|
+
/* charts */
|
|
182
|
+
figure{margin:30px 0 8px;background:var(--surface);border:1px solid var(--border);
|
|
183
|
+
border-radius:var(--radius);padding:26px 26px 18px}
|
|
184
|
+
figcaption{font-size:.82rem;color:var(--text-faint);margin-top:14px;font-family:var(--mono)}
|
|
185
|
+
.chart-title{font-family:var(--serif);font-size:1.1rem;color:var(--text);font-weight:400;margin-bottom:2px}
|
|
186
|
+
.chart-sub{font-size:.82rem;color:var(--text-dim);margin-bottom:16px}
|
|
187
|
+
svg{display:block;width:100%;height:auto;overflow:visible;font-family:var(--font)}
|
|
188
|
+
svg .m{font-family:var(--mono)}
|
|
189
|
+
.brandmark svg{width:auto;height:32px}
|
|
190
|
+
.legend{display:flex;gap:20px;flex-wrap:wrap;margin-top:6px;font-size:.78rem;color:var(--text-dim);
|
|
191
|
+
font-family:var(--mono)}
|
|
192
|
+
.legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:7px;vertical-align:middle}
|
|
193
|
+
|
|
194
|
+
/* horizontal bars (completeness/fidelity style) */
|
|
195
|
+
.barlist{margin:22px 0}
|
|
196
|
+
.barrow{display:grid;grid-template-columns:130px 1fr;gap:14px;align-items:center;padding:10px 0;
|
|
197
|
+
border-bottom:1px solid var(--border-soft)}
|
|
198
|
+
.barrow .lab{font-family:var(--mono);font-size:.8rem;color:var(--text-dim)}
|
|
199
|
+
.bars{display:flex;flex-direction:column;gap:6px}
|
|
200
|
+
.barline{display:flex;align-items:center;gap:10px}
|
|
201
|
+
.barline .t{font-family:var(--mono);font-size:.66rem;color:var(--text-faint);width:90px}
|
|
202
|
+
.track{flex:1;height:9px;background:var(--surface-2);border-radius:6px;overflow:hidden}
|
|
203
|
+
.fill{height:100%;border-radius:6px}
|
|
204
|
+
.barline .v{font-family:var(--mono);font-size:.72rem;color:var(--text-dim);width:34px;text-align:right}
|
|
205
|
+
|
|
206
|
+
/* numbered list (steps / findings) */
|
|
207
|
+
.steps{counter-reset:step;margin:22px 0}
|
|
208
|
+
.step{display:grid;grid-template-columns:34px 1fr;gap:16px;padding:16px 0;border-bottom:1px solid var(--border-soft)}
|
|
209
|
+
.step .b{counter-increment:step;font-family:var(--serif);color:var(--accent);font-size:1.2rem}
|
|
210
|
+
.step .b::before{content:counter(step)}
|
|
211
|
+
.step h4{margin:0 0 4px;font-size:1.06rem;color:var(--text)}
|
|
212
|
+
.step p{margin:0;font-size:.88rem}
|
|
213
|
+
|
|
214
|
+
ul,ol{color:var(--text-dim)} li{margin:5px 0}
|
|
215
|
+
.fin{font-size:1.04rem}
|
|
216
|
+
footer{padding:42px 0 70px;color:var(--text-faint);font-size:.8rem;font-family:var(--mono)}
|
|
217
|
+
.tag-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
|
|
218
|
+
.tg{font-family:var(--mono);font-size:.66rem;color:var(--text-faint);border:1px solid var(--border);
|
|
219
|
+
border-radius:6px;padding:3px 9px;background:var(--surface)}
|
|
220
|
+
|
|
221
|
+
/* ===== Agent-handoff artifact extensions — Meridian role tokens throughout ===== */
|
|
222
|
+
html{scroll-behavior:smooth}
|
|
223
|
+
body{background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.62;font-size:16.5px;-webkit-font-smoothing:antialiased}
|
|
224
|
+
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}
|
|
225
|
+
::selection{background:var(--t1);color:var(--paper)}
|
|
226
|
+
|
|
227
|
+
.callout{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--t2);border-radius:0 12px 12px 0;padding:16px 20px;color:var(--ink-soft);font-size:.94rem}
|
|
228
|
+
.callout b{color:var(--ink)}
|
|
229
|
+
|
|
230
|
+
/* top bar */
|
|
231
|
+
.topbar{position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:16px;padding:11px 22px;
|
|
232
|
+
background:color-mix(in srgb, var(--paper) 86%, transparent);backdrop-filter:saturate(150%) blur(10px);
|
|
233
|
+
border-bottom:1px solid var(--line)}
|
|
234
|
+
.topbar .mark{font-family:var(--mono);font-size:.74rem;letter-spacing:2px;text-transform:uppercase;color:var(--t1);font-weight:600;white-space:nowrap}
|
|
235
|
+
.topbar .mark .full{color:var(--ink-faint);font-weight:400}
|
|
236
|
+
.topbar .spacer{flex:1}
|
|
237
|
+
.seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--card)}
|
|
238
|
+
.seg button{appearance:none;border:0;background:transparent;font-family:var(--mono);font-size:.74rem;letter-spacing:.5px;color:var(--ink-soft);padding:7px 15px;cursor:pointer;line-height:1.4}
|
|
239
|
+
.seg button + button{border-left:1px solid var(--line)}
|
|
240
|
+
.seg button.on{background:var(--t1);color:var(--paper)}
|
|
241
|
+
.gbtn{appearance:none;border:1px solid var(--line);background:var(--card);border-radius:9px;font-family:var(--mono);font-size:.7rem;letter-spacing:.5px;color:var(--ink-soft);padding:7px 11px;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
|
|
242
|
+
.gbtn .ic{font-size:.92rem;line-height:1}
|
|
243
|
+
@media(max-width:680px){.topbar{gap:9px;padding:9px 13px}.topbar .mark .full{display:none}.gbtn .tl{display:none}}
|
|
244
|
+
|
|
245
|
+
/* view switch */
|
|
246
|
+
.view{display:none}
|
|
247
|
+
.view.active{display:block;animation:fade .35s ease}
|
|
248
|
+
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
|
|
249
|
+
|
|
250
|
+
/* paper header */
|
|
251
|
+
.phead{padding:58px 0 38px;border-bottom:1px solid var(--line)}
|
|
252
|
+
.phead .kicker{font-family:var(--mono);font-size:.72rem;letter-spacing:2.5px;text-transform:uppercase;color:var(--t1);margin-bottom:16px}
|
|
253
|
+
.phead h1{font-family:var(--serif);font-weight:380;font-size:3rem;line-height:1.05;letter-spacing:-.02em;margin:0 0 16px;color:var(--ink);max-width:22ch}
|
|
254
|
+
.phead .subtitle{font-family:var(--serif);font-size:1.32rem;color:var(--ink-soft);font-style:italic;margin:0;letter-spacing:-.01em;max-width:54ch}
|
|
255
|
+
.phead .meta{display:flex;gap:24px;flex-wrap:wrap;margin-top:26px;font-family:var(--mono);font-size:.74rem;color:var(--ink-faint)}
|
|
256
|
+
.phead .meta b{color:var(--ink-soft);font-weight:500}
|
|
257
|
+
@media(max-width:620px){.phead h1{font-size:2.1rem}}
|
|
258
|
+
|
|
259
|
+
/* floating section rail — LEFT, fixed-width dot lane */
|
|
260
|
+
.railnav{position:fixed;top:50%;left:15px;transform:translateY(-50%);z-index:40;display:flex;flex-direction:column;gap:4px;max-height:80vh;padding:6px 2px}
|
|
261
|
+
.railnav a{position:relative;display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:6px}
|
|
262
|
+
.railnav a .rdot{width:6px;height:6px;border-radius:50%;background:var(--line);flex:none;transition:background .2s,box-shadow .2s,transform .2s}
|
|
263
|
+
.railnav a:hover .rdot{transform:scale(1.3);background:var(--ink-faint)}
|
|
264
|
+
.railnav a .rlbl{position:absolute;left:20px;top:50%;transform:translateY(-50%) translateX(-4px);opacity:0;pointer-events:none;white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis;font-family:var(--mono);font-size:.64rem;color:var(--ink-soft);background:color-mix(in srgb, var(--card) 90%, transparent);border:1px solid var(--line);border-radius:7px;padding:3px 9px;backdrop-filter:blur(6px);box-shadow:var(--shadow);transition:opacity .16s,transform .16s}
|
|
265
|
+
.railnav a:hover .rlbl{opacity:1;transform:translateY(-50%) translateX(0)}
|
|
266
|
+
.railnav a.on .rdot{background:var(--t1);box-shadow:0 0 0 3px var(--t1-bg)}
|
|
267
|
+
.railnav a.on .rlbl{color:var(--ink);border-color:var(--t1)}
|
|
268
|
+
@media(max-width:1180px){.railnav{display:none}}
|
|
269
|
+
|
|
270
|
+
/* thesis banner */
|
|
271
|
+
.thesis{background:var(--card);border:1px solid var(--line-soft);border-left:3px solid var(--t1);border-radius:0 14px 14px 0;padding:26px 30px;margin:30px 0 6px}
|
|
272
|
+
.thesis .tlab{font-family:var(--mono);font-size:.68rem;letter-spacing:2px;text-transform:uppercase;color:var(--t1);margin-bottom:12px}
|
|
273
|
+
.thesis blockquote{margin:0;font-family:var(--serif);font-size:1.5rem;line-height:1.32;color:var(--ink);letter-spacing:-.01em;font-weight:380}
|
|
274
|
+
@media(max-width:620px){.thesis blockquote{font-size:1.2rem}}
|
|
275
|
+
|
|
276
|
+
/* layer stack */
|
|
277
|
+
.layers{display:flex;flex-direction:column;gap:8px;margin:26px 0 10px}
|
|
278
|
+
.layer{display:grid;grid-template-columns:86px 190px 1fr;gap:14px;align-items:baseline;background:var(--card);border:1px solid var(--line);border-radius:11px;padding:13px 18px}
|
|
279
|
+
.layer .ln{font-family:var(--mono);font-size:.72rem;color:var(--t1);font-weight:600;letter-spacing:1px}
|
|
280
|
+
.layer .lt{font-weight:600;color:var(--ink);font-size:.95rem}
|
|
281
|
+
.layer .ld{color:var(--ink-soft);font-size:.9rem}
|
|
282
|
+
.layer.mech{border-left:3px solid var(--t2)}
|
|
283
|
+
.layer.policy{border-left:3px solid var(--t1)}
|
|
284
|
+
.layer .mechtag{font-family:var(--mono);font-size:.6rem;letter-spacing:1px;text-transform:uppercase;border-radius:20px;padding:1px 8px;margin-left:8px;vertical-align:middle}
|
|
285
|
+
.layer.mech .mechtag{color:var(--t2);border:1px solid var(--t2)}
|
|
286
|
+
.layer.policy .mechtag{color:var(--t1);border:1px solid var(--t1)}
|
|
287
|
+
@media(max-width:720px){.layer{grid-template-columns:1fr;gap:4px}}
|
|
288
|
+
|
|
289
|
+
/* threat cards */
|
|
290
|
+
.threats{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:26px 0 8px}
|
|
291
|
+
@media(max-width:760px){.threats{grid-template-columns:1fr}}
|
|
292
|
+
.tcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:17px 19px}
|
|
293
|
+
.tcard .tname{display:flex;align-items:center;gap:10px;font-weight:600;color:var(--ink);margin-bottom:7px;font-size:.96rem}
|
|
294
|
+
.tcard .sev{font-family:var(--mono);font-size:.6rem;letter-spacing:1.2px;text-transform:uppercase;border-radius:20px;padding:2px 9px;flex:none}
|
|
295
|
+
.sev.mit{color:var(--t2);border:1px solid var(--t2);background:var(--t2-bg)}
|
|
296
|
+
.sev.res{color:var(--t1);border:1px solid var(--t1);background:var(--t1-bg)}
|
|
297
|
+
.sev.open{color:var(--t3);border:1px solid var(--t3);background:transparent}
|
|
298
|
+
.tcard p{margin:4px 0;font-size:.88rem;line-height:1.55}
|
|
299
|
+
.tcard .mit-line b{color:var(--t2);font-weight:600}
|
|
300
|
+
.tcard .res-line b{color:var(--t3);font-weight:600}
|
|
301
|
+
.tcard .fork{font-family:var(--mono);font-size:.72rem;color:var(--t1);margin-top:8px}
|
|
302
|
+
.tcard .fork a{color:var(--t1);border-bottom:1px dotted var(--t1);text-decoration:none;cursor:pointer}
|
|
303
|
+
|
|
304
|
+
/* ===== Harvest surface ===== */
|
|
305
|
+
#view-harvest .wrap{max-width:960px}
|
|
306
|
+
.hv-hero{padding:50px 0 14px;border-bottom:1px solid var(--line)}
|
|
307
|
+
.hv-hero .sig{font-family:var(--mono);font-size:.72rem;letter-spacing:2.5px;text-transform:uppercase;color:var(--t1);margin-bottom:14px}
|
|
308
|
+
.hv-hero h1{font-family:var(--serif);font-weight:380;font-size:2.5rem;margin:0 0 14px;line-height:1.06;color:var(--ink)}
|
|
309
|
+
.hv-hero p{font-size:1.06rem;color:var(--ink-soft);max-width:66ch}
|
|
310
|
+
.hv-meta{display:flex;gap:22px;flex-wrap:wrap;margin-top:20px;font-family:var(--mono);font-size:.72rem;color:var(--ink-faint)}
|
|
311
|
+
.hv-meta b{color:var(--ink-soft);font-weight:500}
|
|
312
|
+
|
|
313
|
+
.band{padding:34px 0 8px}
|
|
314
|
+
.band > .bhead{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:4px;padding-bottom:10px;border-bottom:1px solid var(--line)}
|
|
315
|
+
.band > .bhead .bnum{font-family:var(--mono);font-size:.74rem;letter-spacing:2px;color:var(--t1)}
|
|
316
|
+
.band > .bhead h2{font-family:var(--serif);font-weight:400;font-size:1.5rem;margin:0;color:var(--ink)}
|
|
317
|
+
.band > .bhead .bsub{color:var(--ink-faint);font-size:.86rem;font-family:var(--mono)}
|
|
318
|
+
|
|
319
|
+
.dcard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px 26px;margin:22px 0}
|
|
320
|
+
.dcard.answered{border-color:var(--t1);box-shadow:0 0 0 2px var(--t1-bg)}
|
|
321
|
+
.dhead{display:flex;align-items:baseline;gap:12px;margin-bottom:6px}
|
|
322
|
+
.dhead .dnum{font-family:var(--mono);font-size:.74rem;color:var(--t1);font-weight:600;flex:none;border:1px solid var(--t1);border-radius:6px;padding:1px 7px;background:var(--card)}
|
|
323
|
+
.dhead h3{font-family:var(--serif);font-weight:400;margin:0;font-size:1.2rem;line-height:1.25;color:var(--ink)}
|
|
324
|
+
.dframe{font-size:.96rem;color:var(--ink-soft);margin:6px 0 4px}
|
|
325
|
+
.dframe .ref{font-family:var(--mono);font-size:.78rem;color:var(--ink-faint)}
|
|
326
|
+
|
|
327
|
+
.opts{display:grid;gap:12px;margin:18px 0 6px}
|
|
328
|
+
.opts.two{grid-template-columns:1fr 1fr}.opts.three{grid-template-columns:1fr 1fr 1fr}
|
|
329
|
+
@media(max-width:720px){.opts.two,.opts.three{grid-template-columns:1fr}}
|
|
330
|
+
.opt{position:relative;border:1px solid var(--line);border-radius:11px;padding:15px 16px 14px;background:var(--paper);cursor:pointer;transition:.16s;display:flex;flex-direction:column;gap:10px}
|
|
331
|
+
.opt:hover{border-color:var(--t1);background:var(--paper-2)}
|
|
332
|
+
.opt.sel{border-color:var(--t1);background:var(--t1-bg);box-shadow:0 0 0 2px var(--t1)}
|
|
333
|
+
.opt .ohead{display:flex;align-items:center;gap:9px}
|
|
334
|
+
.opt .okey{font-family:var(--mono);font-size:.7rem;width:20px;height:20px;display:grid;place-items:center;border:1px solid var(--line);border-radius:5px;color:var(--ink-soft);flex:none;background:var(--card)}
|
|
335
|
+
.opt.sel .okey{background:var(--t1);color:var(--paper);border-color:var(--t1)}
|
|
336
|
+
.opt .olabel{font-weight:600;color:var(--ink);font-size:.96rem;line-height:1.25}
|
|
337
|
+
.oviz{font-family:var(--mono);font-size:.7rem;line-height:1.5;color:var(--ink-soft);background:var(--card);border:1px solid var(--line-soft);border-radius:8px;padding:9px 11px;white-space:pre-wrap;overflow-x:auto}
|
|
338
|
+
.obadges{display:flex;flex-wrap:wrap;gap:6px}
|
|
339
|
+
.obadges .bdg{font-family:var(--mono);font-size:.64rem;border:1px solid var(--line);border-radius:20px;padding:2px 9px;background:var(--card);color:var(--ink-soft)}
|
|
340
|
+
.obadges .bdg.hot{border-color:var(--t1);background:var(--card);color:var(--t1)}
|
|
341
|
+
.obadges .bdg.cool{border-color:var(--sky);background:var(--t2-bg);color:var(--sky)}
|
|
342
|
+
.otrade{display:flex;flex-direction:column;gap:3px;margin-top:2px}
|
|
343
|
+
.otrade span{font-size:.8rem;line-height:1.4}
|
|
344
|
+
.otrade .plus{color:var(--t2)}.otrade .plus::before{content:"+ ";font-family:var(--mono)}
|
|
345
|
+
.otrade .minus{color:var(--t3)}.otrade .minus::before{content:"\2212 ";font-family:var(--mono)}
|
|
346
|
+
.orec{margin-top:14px;font-size:.88rem;color:var(--ink-soft);background:var(--paper);border:1px dashed var(--t1);border-radius:9px;padding:11px 14px}
|
|
347
|
+
.orec b{color:var(--t1)}
|
|
348
|
+
.orec::before{content:"\2605 lean ";font-family:var(--mono);font-size:.72rem;letter-spacing:1px;color:var(--t1);font-weight:600}
|
|
349
|
+
.dnote,.otext{width:100%;margin-top:14px;font-family:var(--sans);font-size:.9rem;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:9px;padding:11px 13px;resize:vertical;min-height:46px;line-height:1.5}
|
|
350
|
+
.dnote::placeholder,.otext::placeholder{color:var(--ink-faint)}
|
|
351
|
+
.dnote:focus,.otext:focus,.opt:focus-visible{outline:2px solid var(--t1);outline-offset:1px}
|
|
352
|
+
.oprompt{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--sky);border-radius:14px;padding:22px 24px;margin:22px 0}
|
|
353
|
+
.oprompt .otext{min-height:80px}
|
|
354
|
+
.oprompt h3{font-family:var(--serif);font-weight:400;margin:0 0 8px;font-size:1.15rem;color:var(--ink)}
|
|
355
|
+
.oprompt p{font-size:.92rem;color:var(--ink-soft);margin:0}
|
|
356
|
+
|
|
357
|
+
.copydock{position:sticky;bottom:0;z-index:50;margin:38px 0 0;background:color-mix(in srgb, var(--paper) 92%, transparent);backdrop-filter:blur(8px);border-top:1px solid var(--line);padding:16px 0 22px}
|
|
358
|
+
.copydock .row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
|
|
359
|
+
.copydock .prog{font-family:var(--mono);font-size:.76rem;color:var(--ink-soft)}
|
|
360
|
+
.copydock .prog b{color:var(--t1)}
|
|
361
|
+
.copybtn{appearance:none;border:0;background:var(--t1);color:var(--paper);font-family:var(--mono);font-size:.78rem;letter-spacing:.5px;padding:10px 18px;border-radius:9px;cursor:pointer}
|
|
362
|
+
.copybtn:hover{filter:brightness(1.08)}
|
|
363
|
+
.copybtn.done{background:var(--t2)}
|
|
364
|
+
.ghostbtn{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);font-family:var(--mono);font-size:.74rem;padding:10px 14px;border-radius:9px;cursor:pointer}
|
|
365
|
+
.copyblock{margin:14px 0 0;max-height:0;overflow:hidden;transition:max-height .3s ease}
|
|
366
|
+
.copyblock.show{max-height:520px;overflow:auto}
|
|
367
|
+
.copyblock pre{background:#0e151d;color:#e7ecf2;border-radius:11px;padding:16px 18px;margin:0;font-family:var(--mono);font-size:.74rem;line-height:1.6;overflow-x:auto;white-space:pre}
|
|
368
|
+
|
|
369
|
+
.pfoot{padding:42px 0 70px;color:var(--ink-faint);font-size:.8rem;font-family:var(--mono);border-top:1px solid var(--line);margin-top:10px}
|
|
370
|
+
.pfoot .src{margin-top:8px;line-height:1.7}
|
|
371
|
+
.pfoot .tag-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
|
|
372
|
+
.pfoot .tg{font-family:var(--mono);font-size:.66rem;color:var(--ink-faint);border:1px solid var(--line);border-radius:6px;padding:3px 9px;background:var(--card)}
|
|
373
|
+
</style>
|
|
374
|
+
</head>
|
|
375
|
+
<body>
|
|
376
|
+
|
|
377
|
+
<nav class="topbar">
|
|
378
|
+
<span class="mark">⊙ EGREGORE <span class="full">· __CONTEXT__</span></span>
|
|
379
|
+
<span class="spacer"></span>
|
|
380
|
+
<span class="seg" role="tablist">
|
|
381
|
+
<button id="tab-paper" class="on" onclick="showView('paper')">SPEC</button>
|
|
382
|
+
<button id="tab-harvest" onclick="showView('harvest')">HARVEST</button>
|
|
383
|
+
</span>
|
|
384
|
+
<button id="palbtn" class="gbtn" onclick="__egTheme.cyclePair()" title="Palette: sovereign / meridian / agronomic"><span class="ic">❖</span><span class="tl">__THEME_PAIR__</span></button>
|
|
385
|
+
<button id="themebtn" class="gbtn" onclick="__egTheme.cycle()" title="Theme: light / auto / dark"><span class="ic">◐</span><span class="tl">auto</span></button>
|
|
386
|
+
</nav>
|
|
387
|
+
|
|
388
|
+
<div id="view-paper" class="view active">
|
|
389
|
+
<div class="wrap">
|
|
390
|
+
<!-- __FACE__ : replace this comment with the paper face. Required grammar:
|
|
391
|
+
<header class="phead"> kicker · h1 · subtitle · .meta (Author / Version vN — updates in place / Grounds / Date)
|
|
392
|
+
<section id="s-…"> blocks (rail-nav builds from these; h2 per section):
|
|
393
|
+
· the setting/question — what exists, what it cannot answer; .claims grid for load-bearing numbers; .thesis for the reframe
|
|
394
|
+
· the lenses — 2–4 distinct mental models of the same design (h3 each); every lens must stress-test, not decorate
|
|
395
|
+
· the machine — the concrete architecture; .layers for anatomy; tokenized SVG <figure> (fill/stroke ONLY var(--token)); .steps for protocol
|
|
396
|
+
· the consequences/product section
|
|
397
|
+
· honest costs — .threats grid of .tcard, each residual deep-linking <a onclick="goFork('fork-id')"> to the fork that prices it
|
|
398
|
+
<footer class="pfoot"> title line · .src grounds + "updates in place" note · .tag-row
|
|
399
|
+
-->
|
|
400
|
+
</div>
|
|
401
|
+
</div>
|
|
402
|
+
|
|
403
|
+
<div id="view-harvest" class="view">
|
|
404
|
+
<div class="wrap">
|
|
405
|
+
<!-- __HARVEST__ : replace this comment with the harvest face. Required grammar:
|
|
406
|
+
<div class="hv-hero"> .sig · h1 · lede naming every fork in one breath · .hv-meta (Respondent / Surface: N forks · M prompts / Loop: paste-back → vN+1 / Returns to)
|
|
407
|
+
<div class="callout"> how-to-read (every option carries a real + and a real −; at most one ★ lean; the why-note rides back)
|
|
408
|
+
<section class="band"> per band (2–4 bands), .bhead with .bnum letter:
|
|
409
|
+
<div class="dcard" data-decision="fork-id"> · .dhead (.dnum A1 · h3 question) · .dframe with .ref grounds
|
|
410
|
+
.opts.two|.three of <div class="opt" data-opt="key" data-label="Label"> · .ohead (.okey letter · .olabel) · optional .oviz (mono sketch) / .obadges · .otrade (one .plus + one .minus — an option with no minus is propaganda)
|
|
411
|
+
<div class="orec"> at most one ★ lean, a position not a verdict · <textarea class="dnote" data-note="fork-id">
|
|
412
|
+
<div class="oprompt" data-openid="prompt-id"> open prompts — ALWAYS include one meta-prompt: "this paper is alive — what should vN+1 ask?"
|
|
413
|
+
copydock + harvest pfoot (keep from shell)
|
|
414
|
+
-->
|
|
415
|
+
|
|
416
|
+
<div class="copydock">
|
|
417
|
+
<div class="row">
|
|
418
|
+
<span class="prog" id="prog"></span>
|
|
419
|
+
<span class="spacer" style="flex:1"></span>
|
|
420
|
+
<button class="ghostbtn" onclick="togglePreview()">preview block</button>
|
|
421
|
+
<button class="copybtn" id="copybtn" onclick="copyDecisions()">copy decisions</button>
|
|
422
|
+
</div>
|
|
423
|
+
<div class="copyblock" id="copyblock"><pre></pre></div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<footer class="pfoot">
|
|
427
|
+
<div>Egregore — harvest surface for __TITLE__</div>
|
|
428
|
+
<div class="src">Decisions paste back into the session · absorbed through the harvest loop · the paper updates in place and v__NEXT_VERSION__'s questions regenerate · UNDECIDED stays open, never forced.</div>
|
|
429
|
+
<div class="tag-row"><span class="tg">__HARVEST_ID__</span><span class="tg">__SURFACE_ID__</span></div>
|
|
430
|
+
</footer>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<nav class="railnav" id="railnav" aria-label="Sections"></nav>
|
|
435
|
+
|
|
436
|
+
<script>
|
|
437
|
+
function showView(v){
|
|
438
|
+
document.getElementById('view-paper').classList.toggle('active', v==='paper');
|
|
439
|
+
document.getElementById('view-harvest').classList.toggle('active', v==='harvest');
|
|
440
|
+
document.getElementById('tab-paper').classList.toggle('on', v==='paper');
|
|
441
|
+
document.getElementById('tab-harvest').classList.toggle('on', v==='harvest');
|
|
442
|
+
document.getElementById('railnav').style.display = (v==='paper') ? '' : 'none';
|
|
443
|
+
history.replaceState(null,'', '#'+v);
|
|
444
|
+
window.scrollTo({top:0,behavior:'instant'});
|
|
445
|
+
}
|
|
446
|
+
function goFork(did){
|
|
447
|
+
showView('harvest');
|
|
448
|
+
var card=document.querySelector('.dcard[data-decision="'+did+'"]');
|
|
449
|
+
if(card){ setTimeout(function(){ card.scrollIntoView({behavior:'smooth',block:'center'}); },80); }
|
|
450
|
+
}
|
|
451
|
+
function buildRail(){
|
|
452
|
+
var rail=document.getElementById('railnav');
|
|
453
|
+
var secs=document.querySelectorAll('#view-paper section[id]');
|
|
454
|
+
rail.innerHTML='';
|
|
455
|
+
secs.forEach(function(s){
|
|
456
|
+
var h=(s.querySelector('h2')||{}).textContent||s.id;
|
|
457
|
+
var a=document.createElement('a'); a.href='#'+s.id;
|
|
458
|
+
a.innerHTML='<span class="rdot"></span><span class="rlbl">'+h+'</span>'; a.title=h;
|
|
459
|
+
rail.appendChild(a);
|
|
460
|
+
});
|
|
461
|
+
var links=[].slice.call(rail.querySelectorAll('a'));
|
|
462
|
+
var io=new IntersectionObserver(function(es){
|
|
463
|
+
es.forEach(function(e){ if(e.isIntersecting){ var id=e.target.id;
|
|
464
|
+
links.forEach(function(l){ l.classList.toggle('on', l.getAttribute('href')==='#'+id); }); } });
|
|
465
|
+
},{rootMargin:'-30% 0px -60% 0px'});
|
|
466
|
+
secs.forEach(function(s){io.observe(s);});
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
var SLUG='__SLUG__';
|
|
470
|
+
var state={decisions:{},notes:{},opens:{}};
|
|
471
|
+
function loadState(){ try{Object.assign(state, JSON.parse(localStorage.getItem('__STORAGE_KEY__')||'{}'));}catch(e){}
|
|
472
|
+
if(!state.decisions)state.decisions={}; if(!state.notes)state.notes={}; if(!state.opens)state.opens={}; }
|
|
473
|
+
function saveState(){ try{localStorage.setItem('__STORAGE_KEY__', JSON.stringify(state));}catch(e){} }
|
|
474
|
+
function wireHarvest(){
|
|
475
|
+
document.querySelectorAll('.dcard').forEach(function(card){
|
|
476
|
+
var did=card.dataset.decision;
|
|
477
|
+
card.querySelectorAll('.opt').forEach(function(opt){
|
|
478
|
+
var key=opt.dataset.opt, label=opt.dataset.label||(opt.querySelector('.olabel')||{}).textContent||key;
|
|
479
|
+
if(state.decisions[did] && state.decisions[did].key===key) opt.classList.add('sel');
|
|
480
|
+
opt.addEventListener('click', function(){
|
|
481
|
+
var already=opt.classList.contains('sel');
|
|
482
|
+
card.querySelectorAll('.opt').forEach(function(o){o.classList.remove('sel');});
|
|
483
|
+
if(already){delete state.decisions[did];} else {opt.classList.add('sel'); state.decisions[did]={key:key,label:label};}
|
|
484
|
+
card.classList.toggle('answered', !!state.decisions[did]); saveState(); updateProgress();
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
card.classList.toggle('answered', !!state.decisions[did]);
|
|
488
|
+
var nt=card.querySelector('.dnote');
|
|
489
|
+
if(nt){ if(state.notes[did])nt.value=state.notes[did];
|
|
490
|
+
nt.addEventListener('input', function(){state.notes[did]=nt.value; saveState();}); }
|
|
491
|
+
});
|
|
492
|
+
document.querySelectorAll('.oprompt .otext').forEach(function(t){
|
|
493
|
+
var oid=t.dataset.open;
|
|
494
|
+
if(state.opens[oid])t.value=state.opens[oid];
|
|
495
|
+
t.addEventListener('input', function(){state.opens[oid]=t.value; saveState(); updateProgress();});
|
|
496
|
+
});
|
|
497
|
+
updateProgress();
|
|
498
|
+
}
|
|
499
|
+
function buildBlock(){
|
|
500
|
+
var cards=[].slice.call(document.querySelectorAll('.dcard'));
|
|
501
|
+
var opens=[].slice.call(document.querySelectorAll('.oprompt'));
|
|
502
|
+
var out='#'+SLUG+'-decisions:v__VERSION__\n'
|
|
503
|
+
+'surface: __SURFACE_ID__\n'
|
|
504
|
+
+'harvest: __HARVEST_ID__\n'
|
|
505
|
+
+'date: __DATE__\n\n';
|
|
506
|
+
cards.forEach(function(c,i){ var did=c.dataset.decision, sel=state.decisions[did];
|
|
507
|
+
out+='Q'+(i+1)+' '+did+': '+(sel?sel.key+' ("'+sel.label+'")':'UNDECIDED')+'\n';
|
|
508
|
+
if(state.notes[did] && state.notes[did].trim()) out+=' note: '+state.notes[did].trim().replace(/\n+/g,' ')+'\n';
|
|
509
|
+
});
|
|
510
|
+
if(opens.length) out+='\n';
|
|
511
|
+
opens.forEach(function(o,i){ var oid=o.dataset.openid||(o.querySelector('.otext')||{}).dataset.open;
|
|
512
|
+
var ans=(state.opens[oid]||'').trim();
|
|
513
|
+
out+='O'+(i+1)+' '+oid+': '+(ans?ans.replace(/\n+/g,' '):'UNDECIDED')+'\n';
|
|
514
|
+
});
|
|
515
|
+
return out;
|
|
516
|
+
}
|
|
517
|
+
function updateProgress(){
|
|
518
|
+
var total=document.querySelectorAll('.dcard').length, done=Object.keys(state.decisions).length;
|
|
519
|
+
var oTotal=document.querySelectorAll('.oprompt').length, oDone=Object.values(state.opens).filter(function(v){return v&&v.trim();}).length;
|
|
520
|
+
var el=document.getElementById('prog'); if(el) el.innerHTML='<b>'+done+'</b>/'+total+' forks · <b>'+oDone+'</b>/'+oTotal+' prompts';
|
|
521
|
+
var pre=document.querySelector('#copyblock pre'); if(pre) pre.textContent=buildBlock();
|
|
522
|
+
}
|
|
523
|
+
function copyDecisions(){
|
|
524
|
+
var txt=buildBlock(), btn=document.getElementById('copybtn');
|
|
525
|
+
navigator.clipboard.writeText(txt).then(function(){
|
|
526
|
+
btn.textContent='✓ copied — paste into your Egregore session'; btn.classList.add('done');
|
|
527
|
+
setTimeout(function(){btn.textContent='copy decisions'; btn.classList.remove('done');},2600);
|
|
528
|
+
}).catch(function(){togglePreview(true);});
|
|
529
|
+
}
|
|
530
|
+
function togglePreview(force){
|
|
531
|
+
var cb=document.getElementById('copyblock');
|
|
532
|
+
cb.classList.toggle('show', force===true?true:!cb.classList.contains('show'));
|
|
533
|
+
}
|
|
534
|
+
(function(){
|
|
535
|
+
loadState();
|
|
536
|
+
if(window.__egTheme) __egTheme.init();
|
|
537
|
+
buildRail(); wireHarvest();
|
|
538
|
+
var h=location.hash.replace('#',''); if(h==='harvest') showView('harvest');
|
|
539
|
+
})();
|
|
540
|
+
</script>
|
|
541
|
+
</body>
|
|
542
|
+
</html>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: search
|
|
3
|
+
description: Hybrid keyword + semantic recall over the org's shared memory (decisions, handoffs, quests, knowledge, meetings) when the user invokes /search or $search, or asks what the org knows/decided about a topic. Use proactively before answering questions about past work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Egregore Search
|
|
7
|
+
|
|
8
|
+
Native Codex Egregore skill. Fully local — no API calls, works in local and
|
|
9
|
+
connected mode. Silence in your context does not mean silence in memory:
|
|
10
|
+
search before answering from conversation context alone.
|
|
11
|
+
|
|
12
|
+
## Flow
|
|
13
|
+
|
|
14
|
+
1. Run the search:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
bin/agent.sh search "your query" -n 6
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- Default is hybrid (BM25 + vector + rerank); it falls back to keyword
|
|
21
|
+
search automatically when local models aren't built, with a note.
|
|
22
|
+
- `--fast` — keyword only (BM25), instant. Use for exact terms: names,
|
|
23
|
+
filenames, error strings.
|
|
24
|
+
- `--semantic` — vector only. Use when the user's wording likely differs
|
|
25
|
+
from the document's.
|
|
26
|
+
- Graph enrichment is automatic in connected mode — hits carry `↳ graph`
|
|
27
|
+
state lines (status, recipient, artifact type, quest) with no flag.
|
|
28
|
+
`--no-enrich` skips it when speed matters; local mode never attempts it.
|
|
29
|
+
|
|
30
|
+
2. Search the *concept*, not the user's literal sentence. If the first query
|
|
31
|
+
returns weak scores, run a second with different wording — one
|
|
32
|
+
keyword-ish, one conceptual.
|
|
33
|
+
|
|
34
|
+
3. Results are snippets with `memory/...` file paths. Read the source file
|
|
35
|
+
for anything you will cite or act on — snippets truncate, and memory
|
|
36
|
+
files carry dates, authors, and caveats that change the answer.
|
|
37
|
+
|
|
38
|
+
4. Answer directly, citing file paths. If results are empty or weak, say so
|
|
39
|
+
plainly — "nothing in memory on X" is a real answer. Do not present
|
|
40
|
+
conversation-context guesses as memory.
|
|
41
|
+
|
|
42
|
+
## Routing
|
|
43
|
+
|
|
44
|
+
- Searching *code* in the repo → use your normal file search, not this.
|
|
45
|
+
- Relationship/status traversal in connected mode ("who claimed this
|
|
46
|
+
handoff?") → `bin/graph.sh`. The graph finds links between things;
|
|
47
|
+
search finds content inside things.
|
|
48
|
+
|
|
49
|
+
## Maintenance
|
|
50
|
+
|
|
51
|
+
- Fully self-maintaining: every query re-indexes incrementally and warms
|
|
52
|
+
missing embeddings in a background job. On a fresh machine the first
|
|
53
|
+
searches run in keyword mode while the semantic index builds itself
|
|
54
|
+
(~2GB one-time local model download); no manual setup.
|
|
55
|
+
- `bash bin/search.sh reindex --embed` — force a full rebuild.
|
|
56
|
+
- `bash bin/search.sh status` — index health.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-view
|
|
3
|
+
description: 'Turn the current working session into an expressive, self-contained HTML view of how it evolved — steady work as a quiet spine, decisions as forks showing the road taken beside the roads not taken. Use for "/session-view", "make sense of this session", "turn this session into an artifact", "show how this session evolved".'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
7
|
+
|
|
8
|
+
# Egregore session-view Adapter
|
|
9
|
+
|
|
10
|
+
This is fallback coverage for a long-tail Egregore workflow that has not been
|
|
11
|
+
ported to a hand-written Codex-native skill yet.
|
|
12
|
+
|
|
13
|
+
Use the project shell and filesystem directly. Do not invoke Claude Code
|
|
14
|
+
commands. Translate interactive choices to structured Codex question tooling
|
|
15
|
+
when it is available; otherwise render compact numbered choices with an
|
|
16
|
+
`Other:` option and wait for the user.
|
|
17
|
+
|
|
18
|
+
1. Read `.claude/skills/session-view/SKILL.md` for the workflow details.
|
|
19
|
+
2. Run the referenced `bin/` scripts directly from Codex.
|
|
20
|
+
3. Treat graph, publish, and notify steps as best-effort unless that workflow
|
|
21
|
+
explicitly says they are required.
|
|
22
|
+
4. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
23
|
+
calls when `egregore.json` declares `"mode": "local"`.
|
|
24
|
+
5. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
25
|
+
handoffs.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thread
|
|
3
|
+
description: 'Threads — directed work-stream primitive: store the intent, project the state. Use for /thread new|view|dash|fold|review — creating a thread, viewing one, regenerating the heat-ring dashboard, folding a confirmed decision into stored intent, or running the iteration review. Also triggers when a #thread-<slug>-foldin:v1 block is pasted.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
7
|
+
|
|
8
|
+
# Egregore thread Adapter
|
|
9
|
+
|
|
10
|
+
This is fallback coverage for a long-tail Egregore workflow that has not been
|
|
11
|
+
ported to a hand-written Codex-native skill yet.
|
|
12
|
+
|
|
13
|
+
Use the project shell and filesystem directly. Do not invoke Claude Code
|
|
14
|
+
commands. Translate interactive choices to structured Codex question tooling
|
|
15
|
+
when it is available; otherwise render compact numbered choices with an
|
|
16
|
+
`Other:` option and wait for the user.
|
|
17
|
+
|
|
18
|
+
1. Read `.claude/skills/thread/SKILL.md` for the workflow details.
|
|
19
|
+
2. Run the referenced `bin/` scripts directly from Codex.
|
|
20
|
+
3. Treat graph, publish, and notify steps as best-effort unless that workflow
|
|
21
|
+
explicitly says they are required.
|
|
22
|
+
4. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
23
|
+
calls when `egregore.json` declares `"mode": "local"`.
|
|
24
|
+
5. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
25
|
+
handoffs.
|