kaizen-agent 1.31.1 → 1.31.3
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/package.json +1 -1
- package/web/board.html +9 -5
package/package.json
CHANGED
package/web/board.html
CHANGED
|
@@ -311,19 +311,20 @@ aside .foot .more .menu-pop{left:0;right:auto;top:auto;bottom:calc(100% + 4px)}.
|
|
|
311
311
|
.ice-list{display:flex;flex-direction:column;gap:1px}
|
|
312
312
|
.ice-list .ice-cat{margin:0;padding:14px 12px 4px;font-size:12px;font-weight:500}.ice-cat i{font-style:normal;font-weight:400;margin-left:6px}.ice-list .ice-cat:first-child{padding-top:4px}
|
|
313
313
|
.ice-row{border-radius:var(--r-s)}.ice-open{border-radius:0 0 var(--r-s) var(--r-s);margin-top:-1px;background:var(--hover)}.ice-row:has(+.ice-open){border-radius:var(--r-s) var(--r-s) 0 0;background:var(--hover)}
|
|
314
|
-
.ice-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto
|
|
314
|
+
.ice-row{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:10px;min-height:36px;padding:2px 8px 2px 12px;cursor:pointer}
|
|
315
315
|
.ice-row:hover,.ice-row.cur{background:var(--hover)}
|
|
316
316
|
.ice-row.cur{box-shadow:inset 0 0 0 1px var(--line)}
|
|
317
317
|
.ice-row.sel{background:color-mix(in srgb,var(--accent) 8%,transparent)}
|
|
318
318
|
.ice-t{font:inherit;font-size:13px;color:var(--ink);background:none;border:0;padding:6px 0;text-align:left;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
319
319
|
.ice-t[aria-expanded=true]{font-weight:500}
|
|
320
|
-
.ice-src{
|
|
320
|
+
.ice-src{display:inline-flex;align-items:center}
|
|
321
|
+
.ice-meta{display:inline-flex;align-items:center;gap:10px;min-width:0;font-size:11px;color:var(--dim)}.ice-meta .nm{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
321
322
|
.ice-age{font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:64px;text-align:right}
|
|
322
323
|
.ice-ra{display:none;gap:2px;min-width:64px;justify-content:flex-end}
|
|
323
324
|
.ice-ra .btn{padding:0 6px}
|
|
324
325
|
.ice-row:hover .ice-age,.ice-row.cur .ice-age,.ice-row:focus-within .ice-age{display:none}
|
|
325
326
|
.ice-row:hover .ice-ra,.ice-row.cur .ice-ra,.ice-row:focus-within .ice-ra{display:flex}
|
|
326
|
-
.ice-open{display:grid;gap:8px;padding:6px 12px 12px
|
|
327
|
+
.ice-open{display:grid;gap:8px;padding:6px 12px 12px 61px}
|
|
327
328
|
.ice-zero{padding:40px 16px;text-align:center;border:1px solid var(--line);border-radius:var(--r);background:var(--bg-2)}
|
|
328
329
|
.ice-zero h4{margin:0 0 6px;font-size:14px;font-weight:600;color:var(--ink)}
|
|
329
330
|
.ice-zero p{margin:0;font-size:12px;color:var(--dim);line-height:1.5}
|
|
@@ -335,7 +336,7 @@ body:not(.paged) .src-sec,body:not(.paged) .src-scrim{display:none}
|
|
|
335
336
|
.src-sec .sub a{color:var(--accent);text-decoration:none;cursor:pointer}
|
|
336
337
|
.src-sec .sub a:hover{text-decoration:underline}
|
|
337
338
|
@media(hover:none){.ice-ra{display:flex}.ice-age{display:none}}
|
|
338
|
-
@media(max-width:640px){.ice-
|
|
339
|
+
@media(max-width:640px){.ice-meta .nm{display:none}.ice-open{padding-left:12px}}
|
|
339
340
|
.src-list{display:flex;flex-direction:column;gap:10px}
|
|
340
341
|
.src-card{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r);padding:14px;box-shadow:var(--shadow-1);display:flex;flex-direction:column;gap:9px;transition:border-color .15s}
|
|
341
342
|
.src-card:hover{border-color:color-mix(in srgb,var(--line) 70%,var(--ink))}
|
|
@@ -1096,6 +1097,8 @@ let pageGen=0;
|
|
|
1096
1097
|
async function openSettings(){
|
|
1097
1098
|
if(view!=="settings")return;const gen=++pageGen;
|
|
1098
1099
|
stopDictation(true);
|
|
1100
|
+
// Coming from another page or a card, its body goes now, not when the fetch answers.
|
|
1101
|
+
if(!$("panel").classList.contains("open")||$("ptitle").textContent!=="Settings"){$("pbody").innerHTML=`<p class="snone">Loading…</p>`;$("psub").textContent=""}
|
|
1099
1102
|
termStop();openKey=null;runDoc=null;$("pterm").hidden=true;$("panel").classList.add("open");$("scrim").classList.add("on");$("ptitle").textContent="Settings";$("ptabs").innerHTML="";$("pfoot").innerHTML="";
|
|
1100
1103
|
const cur=document.documentElement.dataset.theme||"system";
|
|
1101
1104
|
const cfg=await fetch("/settings").then(r=>r.json()).catch(()=>null);
|
|
@@ -1186,6 +1189,7 @@ async function openSources(){
|
|
|
1186
1189
|
const iceDraft=srcOpen()&&$("ice-title")?[$("ice-title").dataset.k,$("ice-title").value,$("ice-details").value]:null;
|
|
1187
1190
|
// And a category typed on a row but not yet saved.
|
|
1188
1191
|
const cats=new Map(srcOpen()?[...$("pbody").querySelectorAll("[data-ct]")].map(m=>[m.dataset.k,m.value]):[]);
|
|
1192
|
+
if(!srcOpen())$("pbody").innerHTML=`<p class="snone">Loading…</p>`;
|
|
1189
1193
|
termStop();openKey=null;runDoc=null;$("pterm").hidden=true;$("panel").classList.add("open");$("scrim").classList.add("on");$("ptitle").textContent=SRC;$("ptabs").innerHTML="";$("pfoot").innerHTML="";
|
|
1190
1194
|
$("psub").textContent="Requests gathered from your sources wait here until you promote them to Ideas or dismiss them; nothing starts on its own.";$("psub").title="";
|
|
1191
1195
|
const dir=all?null:S.dir,q=dir?"?dir="+encodeURIComponent(dir):"";
|
|
@@ -1256,7 +1260,7 @@ async function openSources(){
|
|
|
1256
1260
|
if(r.wait)return`<div class="ice-form-acts"><span class="hint">Drafting…</span></div>`;
|
|
1257
1261
|
return`<div class="ice-form"><label for="ice-reply" class="hint" style="margin:0">Your reply${r.note?` · ${esc(r.note)}`:""}</label><textarea class="sel" id="ice-reply" rows="3" maxlength="2000" aria-label="Your reply"${r.busy||r.again?" disabled":""}>${esc(r.text)}</textarea><span class="hint" id="ice-rn" style="margin:0">${r.again?"Writing another…":`${r.text.length} chars`}</span><div class="ice-form-acts"><span class="end"></span>${G.connected?`${style(r.busy||r.again)}<button class="btn ghost sm" id="ice-rg"${r.busy||r.again?" disabled":""}>Regenerate</button>`:""}<button class="btn ghost sm" id="ice-rc"${r.busy?" disabled":""}>Cancel</button><button class="btn pri sm" id="ice-rs"${r.busy||r.again||!r.text.trim()?" disabled":""}>${r.busy?"Sending…":"Send reply"}</button></div></div>`};
|
|
1258
1262
|
const row=i=>{const it=ice[i],k=iceKey(it),open=iceForm===k;
|
|
1259
|
-
return `<div class="ice-row${iceCur===k?" cur":""}${iceSel.has(k)?" sel":""}" data-i="${i}" data-k="${esc(k)}"><input type="checkbox" id="ice-ck-${i}" data-ck="${i}"${iceSel.has(k)?" checked":""} aria-label="Select: ${esc(it.text)}"><button class="ice-t" id="ice-o-${i}" data-o="${i}" aria-expanded="${open}" title="${esc(it.text)}">${esc(it.text)}</button><span class="ice-
|
|
1263
|
+
return `<div class="ice-row${iceCur===k?" cur":""}${iceSel.has(k)?" sel":""}" data-i="${i}" data-k="${esc(k)}"><input type="checkbox" id="ice-ck-${i}" data-ck="${i}"${iceSel.has(k)?" checked":""} aria-label="Select: ${esc(it.text)}"><span class="ice-src" title="${esc(srcName(it))}">${fav(it.source,"link",list.find(x=>x.dir===it.dir&&x.url===it.source)?.social)}</span><button class="ice-t" id="ice-o-${i}" data-o="${i}" aria-expanded="${open}" title="${esc(it.text)}">${esc(it.text)}</button><span class="ice-meta">${many?`<span class="nm">${esc(it.project||"")}</span>`:""}${it.replied?`<span title="Replied ${esc(ago(it.replied))}">replied</span>`:""}<span class="ice-age">${ago(it.at)}</span><span class="ice-ra"><button class="btn ghost sm" id="ice-pr-${i}" data-pr="${i}" title="Promote to Ideas as gathered (p)" aria-label="Promote to Ideas: ${esc(it.text)}">${ico("plus")}</button><button class="btn ghost sm" id="ice-ds-${i}" data-ds="${i}" title="Dismiss (d)" aria-label="Dismiss: ${esc(it.text)}">${ico("x")}</button></span></span></div>`
|
|
1260
1264
|
+(open?`<div class="ice-open">${it.notes?`<div class="ice-notes">${esc(it.notes)}</div>`:""}<span class="hint" style="margin:0">From ${esc(srcName(it))} · ${ago(it.at)}${it.post?` · <a href="${esc(it.post)}" target="_blank" rel="noopener">open post</a>`:""}</span>${replyBox(it)}${form(it)}</div>`:"")};
|
|
1261
1265
|
const inbox=ice.length&&!order.length?`<div class="ice-zero"><h4>Nothing matches</h4><p>${ice.length} waiting outside these filters.</p><p style="margin-top:10px"><button class="btn sm" id="ice-unf">Clear filters</button></p></div>`:ice.length?`<div class="ice-list">${[...groups].map(([g,ix])=>`<div class="ice-cat">${esc(g)}<i>${ix.length}</i></div>${ix.map(row).join("")}`).join("")}</div>`
|
|
1262
1266
|
:`<div class="ice-zero"><h4>Inbox zero</h4><p>Nothing waiting. Gather all checks your sources for new requests; /kaizen discover in your agent sorts what comes in.</p></div>`;
|