Show turn summaries only in the transcript, not as inbox reports
This commit is contained in:
Vendored
+1
-52
@@ -140,57 +140,17 @@ export function mountChat(root, src, makeHead) {
|
||||
resizes.observe(transcript);
|
||||
const mutations = new MutationObserver(pin);
|
||||
mutations.observe(transcript, { childList: true, subtree: true, characterData: true });
|
||||
const visibleReports = new Map();
|
||||
const acked = new Set();
|
||||
const ackVisible = () => {
|
||||
if (document.visibilityState !== "visible") {
|
||||
return;
|
||||
}
|
||||
const ids = [...new Set(visibleReports.values())].filter((id) => !acked.has(id) && state.inbox.some((i) => i.id === id));
|
||||
if (ids.length === 0) {
|
||||
return;
|
||||
}
|
||||
for (const id of ids) {
|
||||
acked.add(id);
|
||||
}
|
||||
post("/api/inbox/responses", { body: { responses: ids.map((id) => ({ item_id: id, type: "dismiss" })) } }).catch((err) => {
|
||||
for (const id of ids) {
|
||||
acked.delete(id);
|
||||
}
|
||||
console.error("acknowledge reports", err);
|
||||
});
|
||||
};
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
for (const e of entries) {
|
||||
const id = e.target.dataset["inboxItem"];
|
||||
if (!id) {
|
||||
continue;
|
||||
}
|
||||
if (e.isIntersecting) {
|
||||
visibleReports.set(e.target, id);
|
||||
}
|
||||
else {
|
||||
visibleReports.delete(e.target);
|
||||
}
|
||||
}
|
||||
ackVisible();
|
||||
}, { root: transcript, threshold: 0.5 });
|
||||
const newCtx = () => ({
|
||||
tools: new Map(),
|
||||
subagents: new Map(),
|
||||
reviewers: new Set(),
|
||||
reviewButtons: new Map(),
|
||||
run: undefined,
|
||||
lastMessage: undefined,
|
||||
held: undefined,
|
||||
quiet: false,
|
||||
handoff: undefined,
|
||||
root: src.root,
|
||||
taskId: src.taskId(),
|
||||
watchReport: (el, itemId) => {
|
||||
el.dataset["inboxItem"] = itemId;
|
||||
observer.observe(el);
|
||||
},
|
||||
});
|
||||
let ctx = newCtx();
|
||||
let context = new Map();
|
||||
@@ -458,8 +418,6 @@ export function mountChat(root, src, makeHead) {
|
||||
};
|
||||
const renderAll = () => {
|
||||
stuck = true;
|
||||
observer.disconnect();
|
||||
visibleReports.clear();
|
||||
dropStream();
|
||||
pending = [];
|
||||
ctx = newCtx();
|
||||
@@ -484,18 +442,14 @@ export function mountChat(root, src, makeHead) {
|
||||
}),
|
||||
onEach([src.transcriptTopic], (fresh) => appendEvents(fresh)),
|
||||
onEach([src.streamTopic], (ev) => appendDelta(ev)),
|
||||
onEach(["inbox"], ackVisible),
|
||||
];
|
||||
document.addEventListener("visibilitychange", ackVisible);
|
||||
replace(root, h("div", { class: "transcript-view" }, head, transcript, composer));
|
||||
renderAll();
|
||||
return () => {
|
||||
for (const off of offs) {
|
||||
off();
|
||||
}
|
||||
document.removeEventListener("visibilitychange", ackVisible);
|
||||
headImpl.dispose?.();
|
||||
observer.disconnect();
|
||||
resizes.disconnect();
|
||||
mutations.disconnect();
|
||||
dropStream();
|
||||
@@ -825,7 +779,6 @@ function renderEvent(ev, ctx) {
|
||||
const when = h("time", { dateTime: ev.created_at, title: ev.created_at }, ago(ev.created_at));
|
||||
switch (ev.kind) {
|
||||
case "user.message":
|
||||
ctx.lastMessage = undefined;
|
||||
ctx.quiet = false;
|
||||
if (ev.actor === "byre") {
|
||||
const text = String(p["text"]);
|
||||
@@ -843,8 +796,7 @@ function renderEvent(ev, ctx) {
|
||||
return null;
|
||||
}
|
||||
ctx.quiet = false;
|
||||
ctx.lastMessage = h("div", { class: "msg agent" }, markdown(String(p["text"]), "text md", md));
|
||||
return ctx.lastMessage;
|
||||
return h("div", { class: "msg agent" }, markdown(String(p["text"]), "text md", md));
|
||||
case "agent.thinking":
|
||||
return h("details", { class: "thinking" }, h("summary", {}, subagentTag(parentOf(p), ctx), "thinking"), markdown(String(p["text"]), "text md", md));
|
||||
case "agent.tool_result": {
|
||||
@@ -858,9 +810,6 @@ function renderEvent(ev, ctx) {
|
||||
return null;
|
||||
}
|
||||
case "turn.ended":
|
||||
if (typeof p["inbox_item_id"] === "string" && p["inbox_item_id"] && ctx.lastMessage) {
|
||||
ctx.watchReport(ctx.lastMessage, p["inbox_item_id"]);
|
||||
}
|
||||
if (p["handoff"] === true) {
|
||||
return h("div", { class: "note" }, "handoff written; continuing in a new session with a fresh context ", when);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user