shadok-ai 0.14.11 → 0.14.13
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/README.md +6 -0
- package/dist/extract.d.ts +8 -0
- package/dist/extract.js +8 -0
- package/dist/extract.js.map +1 -1
- package/package.json +1 -1
- package/public/index.html +212 -6
- package/public/ledger-view.js +122 -0
package/README.md
CHANGED
|
@@ -174,6 +174,12 @@ Enter to skip; you can add it later from the web UI).
|
|
|
174
174
|
otherwise just print a local path you cannot open. **Artifacts are denied**
|
|
175
175
|
cockpit-wide for the same reason — a page on claude.ai is not the file you
|
|
176
176
|
asked for (`SHADOK_ALLOW_ARTIFACTS=1` lifts it).
|
|
177
|
+
- **Compaction summaries, folded away** — when Claude Code runs out of context
|
|
178
|
+
it compacts the conversation and writes a long "This session is being
|
|
179
|
+
continued…" summary as the first message of what follows. Shown in full it
|
|
180
|
+
buried the chat, so the cockpit folds it into a collapsible **Context summary**
|
|
181
|
+
box: collapsed by default, one click to read it, capped and scrolling even when
|
|
182
|
+
open. It is still real history — just out of the way.
|
|
177
183
|
- **Diff panel** — what an agent actually changed, against its base.
|
|
178
184
|
- **What an agent left running, on its tab** — a turning ⏳ for background
|
|
179
185
|
shells, a still 👁 for monitors, each with its count past one. Claude Code
|
package/dist/extract.d.ts
CHANGED
|
@@ -90,6 +90,14 @@ export interface HistoryTurn {
|
|
|
90
90
|
*/
|
|
91
91
|
from?: string;
|
|
92
92
|
origin?: string;
|
|
93
|
+
/**
|
|
94
|
+
* A compaction summary: the long "This session is being continued…" block
|
|
95
|
+
* Claude Code writes as a USER message when it compacts the conversation
|
|
96
|
+
* (`isCompactSummary` on the .jsonl line). It is real transcript content, so
|
|
97
|
+
* it must survive a reload — but it is huge and drowns the chat, so the client
|
|
98
|
+
* folds it into a collapsible box instead of a full-width bubble.
|
|
99
|
+
*/
|
|
100
|
+
compaction?: true;
|
|
93
101
|
}
|
|
94
102
|
/**
|
|
95
103
|
* The .jsonl a session was written to (`~/.claude/projects/<encoded cwd>/<id>`),
|
package/dist/extract.js
CHANGED
|
@@ -263,6 +263,14 @@ export function loadHistory(cwd, sessionId) {
|
|
|
263
263
|
const text = userPromptText(e);
|
|
264
264
|
if (text === null)
|
|
265
265
|
continue; // tool result, system reminder, interruption
|
|
266
|
+
// A compaction summary is a (large) USER message Claude Code writes itself
|
|
267
|
+
// on /compact or an auto-compaction. Keep it — it is real history — but
|
|
268
|
+
// flag it so the client can fold it away instead of flooding the chat.
|
|
269
|
+
if (e.isCompactSummary) {
|
|
270
|
+
turns.push({ role: "user", text, compaction: true, ...when });
|
|
271
|
+
pendingHiddenPrompt = false;
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
266
274
|
// A pushed ledger delta may ride ahead of ANY prompt — human, cron, or an
|
|
267
275
|
// agent notification — so strip it BEFORE classifying: otherwise a cron /
|
|
268
276
|
// agent prompt no longer starts with its hiding mark and would leak into
|
package/dist/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,0EAA0E;IAC1E,oEAAoE;IACpE,2BAA2B;IAC3B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,qEAAqE;IACrE,oDAAoD;IACpD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,GAAG,CAAC,CAAC;YACV,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,iEAAiE;IACjE,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpC,GAAG,GAAG,CAAC,CAAC;YACR,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,KAAK;SACT,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAqBD;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,CAAY;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAY;IAChD,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnG,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,6EAA6E;IAC7E,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,iDAAiD,CAAC;IAanE,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAiB,IAAI,CAAC;IAC/B,IAAI,OAAO,GAA2B,IAAI,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,uEAAuE;QACvE,uEAAuE;QACvE,6EAA6E;QAC7E,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,sDAAsD;QACtD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC;YACN,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnB,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YACjC,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;aAAM,IACL,OAAO;YACP,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAChC,CAAC;YACD,2DAA2D;YAC3D,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5E,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,yEAAyE;YACzE,iDAAiD;YACjD,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,8EAA8E;IAC9E,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE9D,sEAAsE;IACtE,0DAA0D;IAC1D,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,aAAa,CAAC,MAAM;gBAAE,MAAM;YAChC,SAAS;QACX,CAAC;QACD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,CAAM;IACnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC5B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,IAAI,GAAG,CAAC,CAAC;SAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,CAAC;aACL,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,kEAAkE;IAClE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC;AA8CD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAiB;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;AAC1H,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,SAAiB;IACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,wEAAwE;IACxE,8EAA8E;IAC9E,4EAA4E;IAC5E,sEAAsE;IACtE,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,CAAM,CAAC;QACX,IAAI,CAAC;YACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QACrC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,yEAAyE;YACzE,wEAAwE;YACxE,kDAAkD;YAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC1B,IAAI,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,mBAAmB,GAAG,KAAK,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS,CAAC,6CAA6C;YAC1E,2EAA2E;YAC3E,wEAAwE;YACxE,uEAAuE;YACvE,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBAC9D,mBAAmB,GAAG,KAAK,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,eAAe;YACf,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACpC,uEAAuE;YACvE,0EAA0E;YAC1E,yEAAyE;YACzE,qEAAqE;YACrE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,0EAA0E;YAC1E,0EAA0E;YAC1E,wEAAwE;YACxE,yCAAyC;YACzC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;gBAC3B,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,IAAI;aACR,CAAC,CAAC;YACH,mBAAmB,GAAG,KAAK,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,0EAA0E;YAC1E,uEAAuE;YACvE,4EAA4E;YAC5E,0CAA0C;YAC1C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU;oBAAE,SAAS;gBACrC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;oBAAC,mBAAmB,GAAG,KAAK,CAAC;gBAAC,CAAC;YAC5G,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO;iBAC3B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxB,iEAAiE;gBACjE,2DAA2D;iBAC1D,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;iBAChE,IAAI,CAAC,IAAI,CAAC;iBACV,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,yEAAyE;YACzE,yEAAyE;YACzE,0EAA0E;YAC1E,8DAA8D;YAC9D,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,mBAAmB;gBAAE,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;;gBACrF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;YAC/G,mBAAmB,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAC7B,KAAK;YACL,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,kFAAkF;AAClF,SAAS,eAAe,CAAC,IAAY;IACnC,uEAAuE;IACvE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,CAAM,CAAC;QACX,IAAI,CAAC;YACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,SAAiB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GACR,oBAAoB,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;IAChF,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,yEAAyE;IACzE,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,SAAS;QAC/B,IAAI,CAAM,CAAC;QACX,IAAI,CAAC;YACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,SAAS;QACzC,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,QAAuB,EACvB,QAAQ,GAAG,mBAAmB;IAE9B,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,QAAQ,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,GAAG,QAAQ,GAAG,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE;aACd,WAAW,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aAClE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -1070,6 +1070,34 @@
|
|
|
1070
1070
|
font-style: italic;
|
|
1071
1071
|
padding: 2px 0;
|
|
1072
1072
|
}
|
|
1073
|
+
/* ── Compaction summary ──────────────────────────────────
|
|
1074
|
+
Claude Code's "This session is being continued…" block, folded away so it
|
|
1075
|
+
doesn't bury the chat. Collapsed by default; even expanded it is capped and
|
|
1076
|
+
scrolls, so a 14 KB summary can never take over the thread. */
|
|
1077
|
+
.turn.compaction { max-width: 92%; }
|
|
1078
|
+
.compaction-box {
|
|
1079
|
+
border: 1px dashed var(--line); border-radius: 8px;
|
|
1080
|
+
background: var(--bg-inset); overflow: hidden;
|
|
1081
|
+
}
|
|
1082
|
+
.compaction-sum {
|
|
1083
|
+
cursor: pointer; list-style: none; user-select: none;
|
|
1084
|
+
display: flex; align-items: center; gap: 8px;
|
|
1085
|
+
padding: 7px 10px; font-size: 12.5px; color: var(--text-dim);
|
|
1086
|
+
}
|
|
1087
|
+
.compaction-sum::-webkit-details-marker { display: none; }
|
|
1088
|
+
.compaction-sum::before {
|
|
1089
|
+
content: "▸"; color: var(--amber); font-size: 11px; transition: transform 0.12s;
|
|
1090
|
+
}
|
|
1091
|
+
.compaction-box[open] > .compaction-sum::before { transform: rotate(90deg); }
|
|
1092
|
+
.compaction-sum:hover { color: var(--amber); }
|
|
1093
|
+
.compaction-sum .time { margin-left: auto; font-style: normal; }
|
|
1094
|
+
.compaction-body {
|
|
1095
|
+
border-top: 1px solid var(--line);
|
|
1096
|
+
max-height: 340px; overflow-y: auto;
|
|
1097
|
+
margin: 0; border-radius: 0;
|
|
1098
|
+
font-size: 13px;
|
|
1099
|
+
}
|
|
1100
|
+
.compaction-body.md { padding: 8px 10px; }
|
|
1073
1101
|
/* ── Activity block ──────────────────────────────────────
|
|
1074
1102
|
A run of tool calls between two pieces of assistant text. Folds at three
|
|
1075
1103
|
levels — output, same-tool run, whole block — each driven by data-folded.
|
|
@@ -1693,7 +1721,37 @@
|
|
|
1693
1721
|
#ledgerList .ldg-kind { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; opacity: .55;
|
|
1694
1722
|
border: 1px solid currentColor; border-radius: 3px; padding: 0 4px; }
|
|
1695
1723
|
#ledgerList .ldg-meta { color: var(--text-dim); font-size: 10px; margin-top: 2px; }
|
|
1696
|
-
#ledgerList .ldg-note { font-size: 12px; opacity: .85; margin-top: 3px;
|
|
1724
|
+
#ledgerList .ldg-note { font-size: 12px; opacity: .85; margin-top: 3px; cursor: pointer;
|
|
1725
|
+
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; }
|
|
1726
|
+
#ledgerList .ldg-note.open { -webkit-line-clamp: unset; overflow: visible; }
|
|
1727
|
+
#ledgerList .ldg-id { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; opacity: .55;
|
|
1728
|
+
border: 1px solid var(--line, #3a3d42); border-radius: 3px; padding: 0 4px; cursor: pointer; }
|
|
1729
|
+
#ledgerList .ldg-id:hover { opacity: .95; }
|
|
1730
|
+
#ledgerList .ldg-stale { color: #e9a23b; }
|
|
1731
|
+
#ledgerTools { margin-bottom: 10px; }
|
|
1732
|
+
#ledgerTools .ldg-row { display: flex; gap: 6px; flex-wrap: wrap; }
|
|
1733
|
+
#ledgerTools input, #ledgerTools select { background: rgba(255,255,255,.04); border: 1px solid var(--line, #3a3d42);
|
|
1734
|
+
border-radius: 6px; color: inherit; font-family: inherit; padding: 5px 8px; }
|
|
1735
|
+
/* The compact size is gated on a FINE pointer, and that is the whole of why.
|
|
1736
|
+
`#ledgerTools input` (0,1,0,1) ties with the same selector in the
|
|
1737
|
+
(pointer: coarse) block and comes LATER, so naming it there does nothing —
|
|
1738
|
+
measured in a real phone viewport, the field stayed 13px. Under 16px Safari
|
|
1739
|
+
zooms on focus, which widens the layout viewport and sets the entire
|
|
1740
|
+
cockpit sliding sideways (invariant 28). So the small size never exists on
|
|
1741
|
+
touch rather than being overridden on it — and the shorthand is
|
|
1742
|
+
`font-family`, not `font`, because `font: inherit` sets the SIZE too (to
|
|
1743
|
+
the body's 15px) and would lose the same tie in the same silent way. */
|
|
1744
|
+
@media (pointer: fine) {
|
|
1745
|
+
#ledgerTools input, #ledgerTools select { font-size: 13px; }
|
|
1746
|
+
}
|
|
1747
|
+
#ledgerTools #ledgerSearch { flex: 1 1 150px; min-width: 120px; }
|
|
1748
|
+
#ledgerTools select { flex: 0 1 auto; max-width: 46%; }
|
|
1749
|
+
#ledgerTools .ldg-chips { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 7px; }
|
|
1750
|
+
#ledgerTools .ldg-chip { background: none; border: 1px solid var(--line, #3a3d42); border-radius: 999px;
|
|
1751
|
+
color: inherit; cursor: pointer; font-size: 11px; opacity: .65; padding: 2px 9px; }
|
|
1752
|
+
#ledgerTools .ldg-chip[aria-pressed="true"] { opacity: 1; border-color: currentColor; background: rgba(255,255,255,.08); }
|
|
1753
|
+
#ledgerTools .ldg-chip .n { opacity: .55; margin-left: 4px; }
|
|
1754
|
+
#ledgerTools .ldg-count { color: var(--text-dim); font-size: 11px; margin-top: 7px; }
|
|
1697
1755
|
#secretsPanel .sec-repo { font-size: 12px; opacity: .8; margin-bottom: 4px; word-break: break-all; }
|
|
1698
1756
|
#secretsPanel .sec-note { font-size: 12px; opacity: .65; margin: 6px 0 12px; }
|
|
1699
1757
|
#secretsList { list-style: none; padding: 0; margin: 0 0 12px; }
|
|
@@ -1909,6 +1967,15 @@
|
|
|
1909
1967
|
<button id="ledgerClose" title="Close">✕</button>
|
|
1910
1968
|
</div>
|
|
1911
1969
|
<p class="sec-note">What sibling agents have resolved or decided, so no one re-raises it. One row per entity; a new record supersedes it. Read-only here — agents write it via the <code>shadok-ledger</code> skill.</p>
|
|
1970
|
+
<div id="ledgerTools">
|
|
1971
|
+
<div class="ldg-row">
|
|
1972
|
+
<input id="ledgerSearch" type="search" placeholder="search label, note, source, id…" autocomplete="off" />
|
|
1973
|
+
<select id="ledgerAge" title="How long since the row's claim was last confirmed"></select>
|
|
1974
|
+
<select id="ledgerSort" title="Order"></select>
|
|
1975
|
+
</div>
|
|
1976
|
+
<div id="ledgerChips" class="ldg-chips"></div>
|
|
1977
|
+
<div id="ledgerCount" class="ldg-count"></div>
|
|
1978
|
+
</div>
|
|
1912
1979
|
</div>
|
|
1913
1980
|
<div class="pin-body">
|
|
1914
1981
|
<ul id="ledgerList"></ul>
|
|
@@ -2387,6 +2454,12 @@
|
|
|
2387
2454
|
window.claudeUpdateState = claudeUpdateState;
|
|
2388
2455
|
import { uploadFailure } from "/upload.js?v=__ASSET_V__";
|
|
2389
2456
|
window.uploadFailure = uploadFailure;
|
|
2457
|
+
import { filterLedger, ledgerFacets, ledgerAge, LEDGER_AGES, LEDGER_SORTS } from "/ledger-view.js?v=__ASSET_V__";
|
|
2458
|
+
window.filterLedger = filterLedger;
|
|
2459
|
+
window.ledgerFacets = ledgerFacets;
|
|
2460
|
+
window.ledgerAge = ledgerAge;
|
|
2461
|
+
window.LEDGER_AGES = LEDGER_AGES;
|
|
2462
|
+
window.LEDGER_SORTS = LEDGER_SORTS;
|
|
2390
2463
|
window.MODEL_CHOICES = MODEL_CHOICES;
|
|
2391
2464
|
window.composeModel = composeModel;
|
|
2392
2465
|
window.pickChannelSource = pickChannelSource;
|
|
@@ -2464,6 +2537,13 @@
|
|
|
2464
2537
|
bubblePlacement: () => null,
|
|
2465
2538
|
unionRect: () => null,
|
|
2466
2539
|
visibleSteps: (steps) => steps ?? [],
|
|
2540
|
+
// The viewer is opened by a click, so the module is long since loaded —
|
|
2541
|
+
// but a stub is still the rule (invariant 10), and the honest one here
|
|
2542
|
+
// shows the table UNFILTERED rather than an empty panel that reads as
|
|
2543
|
+
// "the ledger is empty".
|
|
2544
|
+
filterLedger: (entries) => entries ?? [],
|
|
2545
|
+
ledgerFacets: () => ({ status: [], kind: [] }),
|
|
2546
|
+
ledgerAge: () => null,
|
|
2467
2547
|
// A missing module must leave the picker EMPTY and silent rather than
|
|
2468
2548
|
// half-built: an empty list renders no chips, so the form still starts an
|
|
2469
2549
|
// agent on its profile's model, which is what it did before this existed.
|
|
@@ -4719,6 +4799,41 @@
|
|
|
4719
4799
|
return bubble;
|
|
4720
4800
|
}
|
|
4721
4801
|
|
|
4802
|
+
/**
|
|
4803
|
+
* A compaction summary, folded into a collapsible box. Claude Code writes a
|
|
4804
|
+
* long "This session is being continued…" block as a user message when it
|
|
4805
|
+
* compacts; shown as a full bubble it buries everything, so it is collapsed by
|
|
4806
|
+
* default and expands on click. The body is sanitised like any transcript
|
|
4807
|
+
* markdown (invariant 13), even though this text is the model's own summary.
|
|
4808
|
+
*/
|
|
4809
|
+
function addCompactionCard(tab, text, at) {
|
|
4810
|
+
if (Number.isFinite(at)) { tab.lastMsgAt = at; renderLastAt(tab); }
|
|
4811
|
+
const turn = document.createElement("div");
|
|
4812
|
+
turn.className = "turn compaction";
|
|
4813
|
+
const det = document.createElement("details");
|
|
4814
|
+
det.className = "compaction-box";
|
|
4815
|
+
const sum = document.createElement("summary");
|
|
4816
|
+
sum.className = "compaction-sum";
|
|
4817
|
+
sum.textContent = "🗜 Context summary — earlier conversation compacted";
|
|
4818
|
+
const time = fmtTime(at);
|
|
4819
|
+
if (time) sum.appendChild(time);
|
|
4820
|
+
det.appendChild(sum);
|
|
4821
|
+
const body = document.createElement("div");
|
|
4822
|
+
body.className = "compaction-body bubble";
|
|
4823
|
+
if (text && window.marked && window.DOMPurify) {
|
|
4824
|
+
body.classList.add("md");
|
|
4825
|
+
body.innerHTML = DOMPurify.sanitize(marked.parse(text));
|
|
4826
|
+
} else {
|
|
4827
|
+
body.textContent = text || "";
|
|
4828
|
+
}
|
|
4829
|
+
det.appendChild(body);
|
|
4830
|
+
turn.appendChild(det);
|
|
4831
|
+
if (text) addCopyButton(turn, text);
|
|
4832
|
+
tab.transcriptEl.appendChild(turn);
|
|
4833
|
+
pinBottom(tab);
|
|
4834
|
+
return body;
|
|
4835
|
+
}
|
|
4836
|
+
|
|
4722
4837
|
/** The URL that serves a dropped / pasted / Telegram media file, by basename
|
|
4723
4838
|
* (the server scopes it to MEDIA_DIR). */
|
|
4724
4839
|
function mediaUrl(p) {
|
|
@@ -5926,6 +6041,10 @@
|
|
|
5926
6041
|
// A file the agent delivered (SendUserFile) — its card survives the
|
|
5927
6042
|
// reload so the download / image stays reachable.
|
|
5928
6043
|
addFileCard(t, h.files || [], h.at);
|
|
6044
|
+
} else if (h.role === "user" && h.compaction) {
|
|
6045
|
+
// A compaction summary: a huge "This session is being continued…"
|
|
6046
|
+
// block. Fold it into a collapsible box so it doesn't bury the chat.
|
|
6047
|
+
addCompactionCard(t, h.text, h.at);
|
|
5929
6048
|
} else if (h.role === "user") {
|
|
5930
6049
|
// Who sent it, recovered from the stripped ⟦…⟧ header, through the
|
|
5931
6050
|
// SAME echoAuthor the live echo uses: "Ada · telegram"
|
|
@@ -7181,11 +7300,18 @@
|
|
|
7181
7300
|
const age = days <= 0 ? "today" : days === 1 ? "yesterday" : days + "d ago";
|
|
7182
7301
|
return abs + " · " + age;
|
|
7183
7302
|
}
|
|
7303
|
+
// Everything `GET /ledger` returned, narrowed client-side: the table is small
|
|
7304
|
+
// enough to send whole and large enough (144 rows here, 498 on a sibling one
|
|
7305
|
+
// day later) that a flat list stops being readable.
|
|
7306
|
+
let ledgerAll = [];
|
|
7307
|
+
const ledgerQuery = { text: "", status: [], kind: [], age: "any", sort: "recent" };
|
|
7184
7308
|
function renderLedger(entries) {
|
|
7185
7309
|
const ul = $("ledgerList");
|
|
7186
7310
|
ul.innerHTML = "";
|
|
7187
7311
|
if (!entries || !entries.length) {
|
|
7188
|
-
ul.innerHTML = '<li><span style="opacity:.6">
|
|
7312
|
+
ul.innerHTML = '<li><span style="opacity:.6">'
|
|
7313
|
+
+ (ledgerAll.length ? "no row matches these filters" : "the ledger is empty")
|
|
7314
|
+
+ "</span></li>";
|
|
7189
7315
|
return;
|
|
7190
7316
|
}
|
|
7191
7317
|
for (const e of entries) {
|
|
@@ -7207,16 +7333,96 @@
|
|
|
7207
7333
|
const verified = e.verifiedAt && e.verifiedAt !== e.updatedAt ? " · verified " + ldgWhen(e.verifiedAt) : "";
|
|
7208
7334
|
meta.textContent = ldgWhen(e.updatedAt) + verified + (e.source ? " · " + e.source : "");
|
|
7209
7335
|
if (e.updatedAt) meta.title = new Date(e.updatedAt).toLocaleString();
|
|
7336
|
+
// A month without a confirmation is the state the skill's hedge is about,
|
|
7337
|
+
// so it is marked rather than left to be computed off a date.
|
|
7338
|
+
const age = window.ledgerAge(e);
|
|
7339
|
+
if (age != null && age > 30) meta.classList.add("ldg-stale");
|
|
7340
|
+
// The id is the durable handle: `record --id a1b2` is what you tell an
|
|
7341
|
+
// agent, and until now the viewer was the one place that did not show it.
|
|
7342
|
+
if (e.id) {
|
|
7343
|
+
const idb = document.createElement("button");
|
|
7344
|
+
idb.className = "ldg-id"; idb.type = "button"; idb.textContent = e.id;
|
|
7345
|
+
idb.title = "copy this id — agents update a row with `record --id " + e.id + "`";
|
|
7346
|
+
idb.addEventListener("click", async () => {
|
|
7347
|
+
try { await navigator.clipboard.writeText(e.id); idb.textContent = "copied"; }
|
|
7348
|
+
catch { idb.textContent = e.id; }
|
|
7349
|
+
setTimeout(() => { idb.textContent = e.id; }, 900);
|
|
7350
|
+
});
|
|
7351
|
+
head.appendChild(idb);
|
|
7352
|
+
}
|
|
7210
7353
|
li.append(head, meta);
|
|
7211
|
-
if (e.note) {
|
|
7354
|
+
if (e.note) {
|
|
7355
|
+
// Notes run to a couple of thousand characters on a busy table, so a
|
|
7356
|
+
// filtered list of them is a wall. Three lines, and a click opens the
|
|
7357
|
+
// one you came for — the first sentence is the headline anyway, which
|
|
7358
|
+
// is exactly what the pushed block carries.
|
|
7359
|
+
const n = document.createElement("div");
|
|
7360
|
+
n.className = "ldg-note"; n.textContent = e.note; n.title = "click to expand";
|
|
7361
|
+
n.addEventListener("click", () => n.classList.toggle("open"));
|
|
7362
|
+
li.appendChild(n);
|
|
7363
|
+
}
|
|
7212
7364
|
ul.appendChild(li);
|
|
7213
7365
|
}
|
|
7214
7366
|
}
|
|
7367
|
+
/** Re-narrow and repaint from the rows already in hand — no round trip. */
|
|
7368
|
+
function applyLedgerFilters() {
|
|
7369
|
+
const shown = window.filterLedger(ledgerAll, ledgerQuery);
|
|
7370
|
+
renderLedger(shown);
|
|
7371
|
+
const n = ledgerAll.length;
|
|
7372
|
+
$("ledgerCount").textContent = shown.length === n
|
|
7373
|
+
? n + (n === 1 ? " row" : " rows")
|
|
7374
|
+
: shown.length + " of " + n + " rows";
|
|
7375
|
+
}
|
|
7376
|
+
/** The chips are built from the data, never from a fixed list: `status` is
|
|
7377
|
+
* free text, so a hardcoded set would hide whatever word nobody predicted. */
|
|
7378
|
+
function paintLedgerChips() {
|
|
7379
|
+
const box = $("ledgerChips");
|
|
7380
|
+
box.innerHTML = "";
|
|
7381
|
+
const facets = window.ledgerFacets(ledgerAll);
|
|
7382
|
+
for (const [dim, items] of [["status", facets.status], ["kind", facets.kind]]) {
|
|
7383
|
+
for (const it of items) {
|
|
7384
|
+
const b = document.createElement("button");
|
|
7385
|
+
b.type = "button"; b.className = "ldg-chip";
|
|
7386
|
+
b.setAttribute("aria-pressed", String(ledgerQuery[dim].includes(it.value)));
|
|
7387
|
+
b.innerHTML = "";
|
|
7388
|
+
b.appendChild(document.createTextNode(it.value));
|
|
7389
|
+
const n = document.createElement("span"); n.className = "n"; n.textContent = it.count;
|
|
7390
|
+
b.appendChild(n);
|
|
7391
|
+
b.addEventListener("click", () => {
|
|
7392
|
+
const sel = ledgerQuery[dim];
|
|
7393
|
+
const i = sel.indexOf(it.value);
|
|
7394
|
+
if (i < 0) sel.push(it.value); else sel.splice(i, 1);
|
|
7395
|
+
b.setAttribute("aria-pressed", String(i < 0));
|
|
7396
|
+
applyLedgerFilters();
|
|
7397
|
+
});
|
|
7398
|
+
box.appendChild(b);
|
|
7399
|
+
}
|
|
7400
|
+
}
|
|
7401
|
+
}
|
|
7402
|
+
for (const [id, key] of [["ledgerAge", "age"], ["ledgerSort", "sort"]]) {
|
|
7403
|
+
const sel = $(id);
|
|
7404
|
+
sel.addEventListener("change", () => { ledgerQuery[key] = sel.value; applyLedgerFilters(); });
|
|
7405
|
+
}
|
|
7406
|
+
$("ledgerSearch").addEventListener("input", () => {
|
|
7407
|
+
ledgerQuery.text = $("ledgerSearch").value;
|
|
7408
|
+
applyLedgerFilters();
|
|
7409
|
+
});
|
|
7215
7410
|
$("ledgerBtn").addEventListener("click", async () => {
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7411
|
+
try { ledgerAll = (await (await fetch("/ledger")).json()).entries || []; } catch { ledgerAll = []; }
|
|
7412
|
+
// The option lists come from the module, so the control and the filter it
|
|
7413
|
+
// drives cannot drift apart.
|
|
7414
|
+
for (const [id, list] of [["ledgerAge", window.LEDGER_AGES], ["ledgerSort", window.LEDGER_SORTS]]) {
|
|
7415
|
+
const sel = $(id);
|
|
7416
|
+
if (!sel.options.length) {
|
|
7417
|
+
for (const o of list ?? []) sel.add(new Option(o.label, o.value));
|
|
7418
|
+
}
|
|
7419
|
+
}
|
|
7420
|
+
$("ledgerAge").value = ledgerQuery.age;
|
|
7421
|
+
$("ledgerSort").value = ledgerQuery.sort;
|
|
7422
|
+
paintLedgerChips();
|
|
7423
|
+
applyLedgerFilters();
|
|
7219
7424
|
$("ledgerOverlay").hidden = false;
|
|
7425
|
+
$("ledgerSearch").focus();
|
|
7220
7426
|
});
|
|
7221
7427
|
$("ledgerClose").addEventListener("click", () => { $("ledgerOverlay").hidden = true; });
|
|
7222
7428
|
$("ledgerOverlay").addEventListener("click", (e) => { if (e.target === $("ledgerOverlay")) $("ledgerOverlay").hidden = true; });
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Filtering and sorting for the read-only ledger viewer.
|
|
2
|
+
//
|
|
3
|
+
// The table is small enough to send whole (`GET /ledger`) and large enough that
|
|
4
|
+
// a flat list stops being readable: 144 rows on the instance that develops
|
|
5
|
+
// shadok, 498 on a sibling one day later, and it only grows with the number of
|
|
6
|
+
// live topics. So the narrowing happens client-side, over rows already in hand
|
|
7
|
+
// — no endpoint, no pagination, no round trip per keystroke.
|
|
8
|
+
//
|
|
9
|
+
// Pure, and in its own module for the usual reason (invariant 10's family): the
|
|
10
|
+
// browser loads it AND `test/ledger-view.test.ts` imports it, so the rules below
|
|
11
|
+
// are exercised without a DOM.
|
|
12
|
+
|
|
13
|
+
/** Case- and ACCENT-insensitive, because a sibling instance's rows are written
|
|
14
|
+
* in French: searching `hopital` must find `hôpital`, or the box is a trap for
|
|
15
|
+
* exactly the people whose rows need it most. */
|
|
16
|
+
export function ldgNorm(s) {
|
|
17
|
+
return String(s ?? "")
|
|
18
|
+
.normalize("NFD")
|
|
19
|
+
.replace(/\p{Diacritic}/gu, "")
|
|
20
|
+
.toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Everything a row can be found by. The id is in there on purpose: it is the
|
|
24
|
+
* handle the pushed block and the CLI both print, so pasting `a1b2` back in
|
|
25
|
+
* has to land on the row it names. */
|
|
26
|
+
export function ledgerHaystack(e) {
|
|
27
|
+
return ldgNorm([e?.id, e?.entity, e?.status, e?.kind, e?.note, e?.source].filter(Boolean).join(" "));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* How many days since the row's claim was last CONFIRMED — `verifiedAt` when it
|
|
32
|
+
* exists, else `updatedAt`. Same two-clock rule the CLI and the block use: an
|
|
33
|
+
* edit is not an observation, and the staleness judgement rests on the latter.
|
|
34
|
+
* Counted in CALENDAR days, so it agrees with the date the row shows rather
|
|
35
|
+
* than with a rolling 24 hours.
|
|
36
|
+
*/
|
|
37
|
+
export function ledgerAge(e, now = Date.now()) {
|
|
38
|
+
const t = e?.verifiedAt ?? e?.updatedAt;
|
|
39
|
+
if (!t) return null;
|
|
40
|
+
const d = new Date(t);
|
|
41
|
+
const n = new Date(now);
|
|
42
|
+
const d0 = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
|
|
43
|
+
const n0 = new Date(n.getFullYear(), n.getMonth(), n.getDate()).getTime();
|
|
44
|
+
return Math.max(0, Math.round((n0 - d0) / 86400000));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The age windows offered, as data so the <select> is built from them and the
|
|
48
|
+
* filter reads the same list. `stale` is the inverse of the others and the one
|
|
49
|
+
* with operational value: a row nobody has re-confirmed in a month is exactly
|
|
50
|
+
* what the hedge in the skill is about. */
|
|
51
|
+
export const LEDGER_AGES = [
|
|
52
|
+
{ value: "any", label: "any age" },
|
|
53
|
+
{ value: "today", label: "today", max: 0 },
|
|
54
|
+
{ value: "7", label: "last 7 days", max: 7 },
|
|
55
|
+
{ value: "30", label: "last 30 days", max: 30 },
|
|
56
|
+
{ value: "stale", label: "not confirmed in 30d", min: 31 },
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
export const LEDGER_SORTS = [
|
|
60
|
+
{ value: "recent", label: "most recent" },
|
|
61
|
+
{ value: "stale", label: "least recently confirmed" },
|
|
62
|
+
{ value: "entity", label: "name (A→Z)" },
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/** The distinct values really present, with their counts — never a hardcoded
|
|
66
|
+
* list: `status` is free text (an agent may write anything), so a fixed set of
|
|
67
|
+
* chips would silently hide whatever word it did not predict. */
|
|
68
|
+
export function ledgerFacets(entries) {
|
|
69
|
+
const tally = (pick) => {
|
|
70
|
+
const m = new Map();
|
|
71
|
+
for (const e of entries ?? []) {
|
|
72
|
+
const v = pick(e);
|
|
73
|
+
if (v) m.set(v, (m.get(v) ?? 0) + 1);
|
|
74
|
+
}
|
|
75
|
+
return [...m].map(([value, count]) => ({ value, count })).sort((a, b) => b.count - a.count || a.value.localeCompare(b.value));
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
status: tally((e) => e.status),
|
|
79
|
+
// `task` is the default and nearly the whole table, so it is a chip like the
|
|
80
|
+
// others here (unlike the block, where tagging it would be noise on a line
|
|
81
|
+
// the reader did not ask for) — in a filter bar the reader DID ask.
|
|
82
|
+
kind: tally((e) => e.kind || "task"),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Narrow and order. An empty selection means "no constraint on that dimension",
|
|
88
|
+
* never "nothing" — a filter bar that can be driven into an empty list by doing
|
|
89
|
+
* nothing is a bug report waiting to happen.
|
|
90
|
+
*
|
|
91
|
+
* Every search term must match (AND), which is how a search box is expected to
|
|
92
|
+
* behave: typing more words narrows.
|
|
93
|
+
*/
|
|
94
|
+
export function filterLedger(entries, query = {}, now = Date.now()) {
|
|
95
|
+
const { text = "", status = [], kind = [], age = "any", sort = "recent" } = query;
|
|
96
|
+
const terms = ldgNorm(text).split(/\s+/).filter(Boolean);
|
|
97
|
+
const window = LEDGER_AGES.find((a) => a.value === age) ?? LEDGER_AGES[0];
|
|
98
|
+
const out = (entries ?? []).filter((e) => {
|
|
99
|
+
if (status.length && !status.includes(e.status)) return false;
|
|
100
|
+
if (kind.length && !kind.includes(e.kind || "task")) return false;
|
|
101
|
+
if (window.max != null || window.min != null) {
|
|
102
|
+
const d = ledgerAge(e, now);
|
|
103
|
+
// A row with no date at all is NOT quietly dropped by an age window: it
|
|
104
|
+
// is a row we know nothing about, and hiding it is how it stops existing.
|
|
105
|
+
if (d != null) {
|
|
106
|
+
if (window.max != null && d > window.max) return false;
|
|
107
|
+
if (window.min != null && d < window.min) return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (terms.length) {
|
|
111
|
+
const hay = ledgerHaystack(e);
|
|
112
|
+
if (!terms.every((t) => hay.includes(t))) return false;
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
});
|
|
116
|
+
const by = {
|
|
117
|
+
recent: (a, b) => (b.updatedAt ?? 0) - (a.updatedAt ?? 0),
|
|
118
|
+
stale: (a, b) => (ledgerAge(b, now) ?? -1) - (ledgerAge(a, now) ?? -1) || (a.updatedAt ?? 0) - (b.updatedAt ?? 0),
|
|
119
|
+
entity: (a, b) => String(a.entity ?? "").localeCompare(String(b.entity ?? "")),
|
|
120
|
+
};
|
|
121
|
+
return out.sort(by[sort] ?? by.recent);
|
|
122
|
+
}
|