@corenel/web-ui 0.6.0 → 0.8.0
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/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +184 -172
- package/dist/Composer.js.map +1 -1
- package/dist/ContextBar.d.ts +1 -4
- package/dist/ContextBar.d.ts.map +1 -1
- package/dist/ContextBar.js +2 -2
- package/dist/ContextBar.js.map +1 -1
- package/dist/ContextManager.d.ts +3 -6
- package/dist/ContextManager.d.ts.map +1 -1
- package/dist/ContextManager.js +58 -10
- package/dist/ContextManager.js.map +1 -1
- package/dist/SummaryTranscript.d.ts +11 -1
- package/dist/SummaryTranscript.d.ts.map +1 -1
- package/dist/SummaryTranscript.js +47 -10
- package/dist/SummaryTranscript.js.map +1 -1
- package/dist/ToolFold.d.ts +9 -0
- package/dist/ToolFold.d.ts.map +1 -0
- package/dist/ToolFold.js +32 -0
- package/dist/ToolFold.js.map +1 -0
- package/dist/Transcript.d.ts +30 -1
- package/dist/Transcript.d.ts.map +1 -1
- package/dist/Transcript.js +132 -23
- package/dist/Transcript.js.map +1 -1
- package/dist/agentChat/AgentChat.d.ts +11 -3
- package/dist/agentChat/AgentChat.d.ts.map +1 -1
- package/dist/agentChat/AgentChat.js +174 -86
- package/dist/agentChat/AgentChat.js.map +1 -1
- package/dist/agentChat/OptionsDrawer.d.ts +0 -23
- package/dist/agentChat/OptionsDrawer.d.ts.map +1 -1
- package/dist/agentChat/OptionsDrawer.js +10 -45
- package/dist/agentChat/OptionsDrawer.js.map +1 -1
- package/dist/agentChat/PlanReview.d.ts +24 -0
- package/dist/agentChat/PlanReview.d.ts.map +1 -0
- package/dist/agentChat/PlanReview.js +103 -0
- package/dist/agentChat/PlanReview.js.map +1 -0
- package/dist/agentChat/SkillsSection.js +4 -2
- package/dist/agentChat/SkillsSection.js.map +1 -1
- package/dist/agentChat/controller.d.ts +20 -2
- package/dist/agentChat/controller.d.ts.map +1 -1
- package/dist/agentChat/controller.js.map +1 -1
- package/dist/arrivalEffect.d.ts +28 -0
- package/dist/arrivalEffect.d.ts.map +1 -0
- package/dist/arrivalEffect.js +114 -0
- package/dist/arrivalEffect.js.map +1 -0
- package/dist/commandTurn.d.ts.map +1 -1
- package/dist/commandTurn.js +3 -2
- package/dist/commandTurn.js.map +1 -1
- package/dist/fx/AsteroidsOverlay.d.ts +6 -0
- package/dist/fx/AsteroidsOverlay.d.ts.map +1 -0
- package/dist/fx/AsteroidsOverlay.js +166 -0
- package/dist/fx/AsteroidsOverlay.js.map +1 -0
- package/dist/fx/FlapRow.d.ts +8 -0
- package/dist/fx/FlapRow.d.ts.map +1 -0
- package/dist/fx/FlapRow.js +12 -0
- package/dist/fx/FlapRow.js.map +1 -0
- package/dist/fx/FxText.d.ts +11 -0
- package/dist/fx/FxText.d.ts.map +1 -0
- package/dist/fx/FxText.js +50 -0
- package/dist/fx/FxText.js.map +1 -0
- package/dist/fx/LiveAnswer.d.ts +17 -0
- package/dist/fx/LiveAnswer.d.ts.map +1 -0
- package/dist/fx/LiveAnswer.js +298 -0
- package/dist/fx/LiveAnswer.js.map +1 -0
- package/dist/fx/MatrixRain.d.ts +5 -0
- package/dist/fx/MatrixRain.d.ts.map +1 -0
- package/dist/fx/MatrixRain.js +73 -0
- package/dist/fx/MatrixRain.js.map +1 -0
- package/dist/fx/NetsplitJoin.d.ts +3 -0
- package/dist/fx/NetsplitJoin.d.ts.map +1 -0
- package/dist/fx/NetsplitJoin.js +13 -0
- package/dist/fx/NetsplitJoin.js.map +1 -0
- package/dist/fx/arrivalModes.d.ts +27 -0
- package/dist/fx/arrivalModes.d.ts.map +1 -0
- package/dist/fx/arrivalModes.js +107 -0
- package/dist/fx/arrivalModes.js.map +1 -0
- package/dist/fx/tail.d.ts +16 -0
- package/dist/fx/tail.d.ts.map +1 -0
- package/dist/fx/tail.js +54 -0
- package/dist/fx/tail.js.map +1 -0
- package/dist/fx/useReveal.d.ts +2 -0
- package/dist/fx/useReveal.d.ts.map +1 -0
- package/dist/fx/useReveal.js +59 -0
- package/dist/fx/useReveal.js.map +1 -0
- package/dist/observed.d.ts +16 -0
- package/dist/observed.d.ts.map +1 -0
- package/dist/observed.js +33 -0
- package/dist/observed.js.map +1 -0
- package/dist/toolRender.d.ts +6 -2
- package/dist/toolRender.d.ts.map +1 -1
- package/dist/toolRender.js +27 -17
- package/dist/toolRender.js.map +1 -1
- package/dist/transcriptSkin.d.ts +23 -0
- package/dist/transcriptSkin.d.ts.map +1 -0
- package/dist/transcriptSkin.js +255 -0
- package/dist/transcriptSkin.js.map +1 -0
- package/dist/transcriptSkinCss.d.ts +4 -0
- package/dist/transcriptSkinCss.d.ts.map +1 -0
- package/dist/transcriptSkinCss.js +136 -0
- package/dist/transcriptSkinCss.js.map +1 -0
- package/dist/usageSummary.d.ts +31 -0
- package/dist/usageSummary.d.ts.map +1 -0
- package/dist/usageSummary.js +39 -0
- package/dist/usageSummary.js.map +1 -0
- package/dist/verificationView.d.ts +3 -0
- package/dist/verificationView.d.ts.map +1 -0
- package/dist/verificationView.js +37 -0
- package/dist/verificationView.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MatrixRain.d.ts","sourceRoot":"","sources":["../../fx/MatrixRain.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,4BAsDzD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/* The faint falling-glyph rain behind the in-progress turn under the Matrix
|
|
3
|
+
* rain effect. Decorative: aria-hidden, never takes clicks, and stops the
|
|
4
|
+
* moment it is inactive or unmounted. Needs a positioned parent. */
|
|
5
|
+
import { useEffect, useRef } from 'react';
|
|
6
|
+
const GLYPHS = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワ0123456789';
|
|
7
|
+
const COL = 14;
|
|
8
|
+
const FRAME_MS = 55;
|
|
9
|
+
export function MatrixRain({ active }) {
|
|
10
|
+
const ref = useRef(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const cv = ref.current;
|
|
13
|
+
if (!active || !cv)
|
|
14
|
+
return;
|
|
15
|
+
const ctx = cv.getContext('2d');
|
|
16
|
+
if (!ctx)
|
|
17
|
+
return;
|
|
18
|
+
// Drawn in CSS pixels on a device-pixel canvas (sharp on HiDPI). Resized
|
|
19
|
+
// only when the size really changes: assigning width wipes the canvas, and
|
|
20
|
+
// the live box grows a little with every streamed line.
|
|
21
|
+
let W = 0;
|
|
22
|
+
let H = 0;
|
|
23
|
+
const size = () => {
|
|
24
|
+
const p = cv.parentElement;
|
|
25
|
+
const w = p?.clientWidth ?? 0, h = p?.clientHeight ?? 0, dpr = window.devicePixelRatio || 1;
|
|
26
|
+
if (w === W && h === H && cv.width === Math.round(w * dpr))
|
|
27
|
+
return;
|
|
28
|
+
W = w;
|
|
29
|
+
H = h;
|
|
30
|
+
cv.width = Math.round(w * dpr);
|
|
31
|
+
cv.height = Math.round(h * dpr);
|
|
32
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
33
|
+
};
|
|
34
|
+
size();
|
|
35
|
+
const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(size) : null;
|
|
36
|
+
if (ro && cv.parentElement)
|
|
37
|
+
ro.observe(cv.parentElement);
|
|
38
|
+
let drops = Array.from({ length: Math.max(1, Math.ceil(W / COL)) }, () => Math.random() * -30);
|
|
39
|
+
let last = 0;
|
|
40
|
+
let raf = 0;
|
|
41
|
+
const frame = (now) => {
|
|
42
|
+
if (now - last >= FRAME_MS) {
|
|
43
|
+
last = now;
|
|
44
|
+
const cols = Math.max(1, Math.ceil(W / COL));
|
|
45
|
+
if (drops.length !== cols)
|
|
46
|
+
drops = Array.from({ length: cols }, (_, i) => drops[i] ?? Math.random() * -30);
|
|
47
|
+
// Fade old glyphs to transparent, not to black: painting black would
|
|
48
|
+
// build a dark veil behind the text on light skins.
|
|
49
|
+
ctx.globalCompositeOperation = 'destination-out';
|
|
50
|
+
ctx.fillStyle = 'rgba(0,0,0,0.12)';
|
|
51
|
+
ctx.fillRect(0, 0, W, H);
|
|
52
|
+
ctx.globalCompositeOperation = 'source-over';
|
|
53
|
+
ctx.fillStyle = '#33ff33';
|
|
54
|
+
ctx.font = '13px monospace';
|
|
55
|
+
drops = drops.map((y, i) => {
|
|
56
|
+
ctx.fillText(GLYPHS[Math.floor(Math.random() * GLYPHS.length)], i * COL, y * 16);
|
|
57
|
+
return y * 16 > H && Math.random() > 0.96 ? 0 : y + 1;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
raf = window.requestAnimationFrame(frame);
|
|
61
|
+
};
|
|
62
|
+
raf = window.requestAnimationFrame(frame);
|
|
63
|
+
return () => { window.cancelAnimationFrame(raf); ro?.disconnect(); };
|
|
64
|
+
}, [active]);
|
|
65
|
+
if (!active)
|
|
66
|
+
return null;
|
|
67
|
+
return _jsx("canvas", { ref: ref, "aria-hidden": "true", style: S.canvas });
|
|
68
|
+
}
|
|
69
|
+
const S = {
|
|
70
|
+
// Behind the answer: the live box sets isolation so -1 stays inside it.
|
|
71
|
+
canvas: { position: 'absolute', inset: 0, width: '100%', height: '100%', pointerEvents: 'none', opacity: 0.25, zIndex: -1 },
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=MatrixRain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MatrixRain.js","sourceRoot":"","sources":["../../fx/MatrixRain.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetsplitJoin.d.ts","sourceRoot":"","sources":["../../fx/NetsplitJoin.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,wBAAgB,YAAY,sBAM3B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IRC_AGENT_NICK } from '../transcriptSkinCss';
|
|
3
|
+
export function NetsplitJoin() {
|
|
4
|
+
return (_jsxs("div", { "data-fx-join": "", "aria-hidden": "true", style: S.join, children: ["* ", IRC_AGENT_NICK, " has joined"] }));
|
|
5
|
+
}
|
|
6
|
+
const S = {
|
|
7
|
+
// The skin's success tint where it has one, else the text colour, dimmed.
|
|
8
|
+
join: {
|
|
9
|
+
userSelect: 'none', pointerEvents: 'none', color: 'var(--success, currentColor)', opacity: 0.8,
|
|
10
|
+
fontFamily: 'var(--font-mono, ui-monospace, monospace)', fontSize: '0.92em', marginBottom: 2,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=NetsplitJoin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetsplitJoin.js","sourceRoot":"","sources":["../../fx/NetsplitJoin.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,+BAAkB,EAAE,iBAAa,MAAM,EAAC,KAAK,EAAE,CAAC,CAAC,IAAI,mBAChD,cAAc,mBACb,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,GAAwC;IAC7C,0EAA0E;IAC1E,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,8BAA8B,EAAE,OAAO,EAAE,GAAG;QAC9F,UAAU,EAAE,2CAA2C,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC7F;CACF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ArrivalEffect } from '../arrivalEffect';
|
|
2
|
+
/** Reveal step per tick: typewriter keys at ~30 characters a second, the rest ~60. */
|
|
3
|
+
export declare function paceFor(effect: ArrivalEffect): number;
|
|
4
|
+
/** The end of the word containing (or starting at) `i`: the next whitespace. */
|
|
5
|
+
export declare function bandEnd(text: string, i: number): number;
|
|
6
|
+
/** How much of `text` Markdown renders once `shown` characters are revealed.
|
|
7
|
+
* `complete`: the text is final (the stream ended). Only then does catching
|
|
8
|
+
* up commit everything; while it streams, being caught up is just a pause,
|
|
9
|
+
* and the effect's own rule still applies (netsplit holds back a partial
|
|
10
|
+
* line, a band keeps its last words as decoration). */
|
|
11
|
+
export declare function committedAt(effect: ArrivalEffect, text: string, shown: number, complete?: boolean): number;
|
|
12
|
+
/** True for the effects whose decoration is the trailing band of words. */
|
|
13
|
+
export declare function isBandEffect(effect: ArrivalEffect): boolean;
|
|
14
|
+
/** A band's words as decoration: Markdown markers dropped (the decoration must
|
|
15
|
+
* never show raw syntax), whitespace collapsed. */
|
|
16
|
+
export declare function bandText(raw: string): string;
|
|
17
|
+
/** Line breaks in the first `n` characters (teleprinter feeds, signal rolls). */
|
|
18
|
+
export declare function lineCount(text: string, n: number): number;
|
|
19
|
+
export declare const NOISE = "#%&@$*+=?/\\|<>~^!";
|
|
20
|
+
/** At ~60 characters a second a character spends ~0.7 s crossing a tail this
|
|
21
|
+
* long, which is how long the signal takes to lock. */
|
|
22
|
+
export declare const SIGNAL_TAIL = 42;
|
|
23
|
+
/** The signal tail: the rest of the current line (capped), each character
|
|
24
|
+
* static or already locked. Characters nearest the reveal point are the most
|
|
25
|
+
* likely to have locked. Spaces stay spaces. */
|
|
26
|
+
export declare function signalGlyphs(pending: string, rand?: () => number): string[];
|
|
27
|
+
//# sourceMappingURL=arrivalModes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrivalModes.d.ts","sourceRoot":"","sources":["../../fx/arrivalModes.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AActD,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAErD;AAID,gFAAgF;AAChF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvD;AA6BD;;;;uDAIuD;AACvD,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAWvG;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE3D;AAED;mDACmD;AACnD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,eAAO,MAAM,KAAK,uBAAuB,CAAC;AAC1C;uDACuD;AACvD,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B;;gDAEgD;AAChD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,MAAoB,GAAG,MAAM,EAAE,CAQxF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const MODE = {
|
|
2
|
+
none: 'char', matrix: 'char', splitflap: 'char', typewriter: 'char', decode: 'char', teleprinter: 'char', signal: 'char',
|
|
3
|
+
radar: 'band', pencil: 'band', netsplit: 'line',
|
|
4
|
+
};
|
|
5
|
+
/** How far a band trails the reveal, in characters: at ~60 characters a second
|
|
6
|
+
* a radar contact glows about half a second, and a pencil sketch inks a beat
|
|
7
|
+
* (~0.55 s) after it is drawn. */
|
|
8
|
+
const BAND_LAG = { radar: 30, pencil: 33 };
|
|
9
|
+
/** Reveal step per tick: typewriter keys at ~30 characters a second, the rest ~60. */
|
|
10
|
+
export function paceFor(effect) {
|
|
11
|
+
return effect === 'typewriter' ? 1 : 2;
|
|
12
|
+
}
|
|
13
|
+
const isSpace = (ch) => ch !== undefined && /\s/.test(ch);
|
|
14
|
+
/** The end of the word containing (or starting at) `i`: the next whitespace. */
|
|
15
|
+
export function bandEnd(text, i) {
|
|
16
|
+
let j = Math.min(i, text.length);
|
|
17
|
+
while (j < text.length && !isSpace(text[j]))
|
|
18
|
+
j++;
|
|
19
|
+
return j;
|
|
20
|
+
}
|
|
21
|
+
// A block marker opening a line ("- ", "12. ", "## ", "> ", "| "), possibly
|
|
22
|
+
// nested ("> - "). Committed with the line's first word so Markdown already
|
|
23
|
+
// renders the block, and the marker never shows as raw text.
|
|
24
|
+
const BLOCK_MARKER = /^(?:(?:[-*+]|\d+[.)]|#{1,6}|>|\|)[ \t]+)+/;
|
|
25
|
+
function bandCommit(text, shown, lag) {
|
|
26
|
+
let c = Math.max(0, shown - lag);
|
|
27
|
+
// Back to a word start: a band holds whole words.
|
|
28
|
+
while (c > 0 && !isSpace(text[c - 1]))
|
|
29
|
+
c--;
|
|
30
|
+
// Never leave a line start inside the band. The decoration sits in the
|
|
31
|
+
// newest rendered block, so the newest line must already be one: commit
|
|
32
|
+
// through its block marker, if any, and its first word. The answer's own
|
|
33
|
+
// first line needs this only when it opens with a marker.
|
|
34
|
+
// The line's prefix is its indent, any (stacked) markers and their
|
|
35
|
+
// whitespace; `word` is where its first real word starts. A band starting
|
|
36
|
+
// anywhere in that prefix -- not only at the line start -- would show a raw
|
|
37
|
+
// marker (" - nested", "> - item").
|
|
38
|
+
const lineStart = text.lastIndexOf('\n', shown - 1) + 1;
|
|
39
|
+
let word = lineStart;
|
|
40
|
+
while (word < text.length && isSpace(text[word]))
|
|
41
|
+
word++;
|
|
42
|
+
const marker = BLOCK_MARKER.exec(text.slice(word));
|
|
43
|
+
if (marker)
|
|
44
|
+
word += marker[0].length;
|
|
45
|
+
while (word < text.length && isSpace(text[word]))
|
|
46
|
+
word++;
|
|
47
|
+
if (c <= word && (lineStart > 0 || marker))
|
|
48
|
+
c = Math.max(c, bandEnd(text, word));
|
|
49
|
+
return c;
|
|
50
|
+
}
|
|
51
|
+
/** How much of `text` Markdown renders once `shown` characters are revealed.
|
|
52
|
+
* `complete`: the text is final (the stream ended). Only then does catching
|
|
53
|
+
* up commit everything; while it streams, being caught up is just a pause,
|
|
54
|
+
* and the effect's own rule still applies (netsplit holds back a partial
|
|
55
|
+
* line, a band keeps its last words as decoration). */
|
|
56
|
+
export function committedAt(effect, text, shown, complete = true) {
|
|
57
|
+
if (complete && shown >= text.length)
|
|
58
|
+
return text.length;
|
|
59
|
+
const at = Math.min(shown, text.length);
|
|
60
|
+
switch (MODE[effect]) {
|
|
61
|
+
case 'band': return bandCommit(text, at, BAND_LAG[effect] ?? 30);
|
|
62
|
+
case 'line': {
|
|
63
|
+
const nl = text.lastIndexOf('\n', at - 1);
|
|
64
|
+
return nl < 0 ? 0 : nl + 1;
|
|
65
|
+
}
|
|
66
|
+
default: return at;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** True for the effects whose decoration is the trailing band of words. */
|
|
70
|
+
export function isBandEffect(effect) {
|
|
71
|
+
return MODE[effect] === 'band';
|
|
72
|
+
}
|
|
73
|
+
/** A band's words as decoration: Markdown markers dropped (the decoration must
|
|
74
|
+
* never show raw syntax), whitespace collapsed. */
|
|
75
|
+
export function bandText(raw) {
|
|
76
|
+
return raw
|
|
77
|
+
.replace(/\]\([^)]*\)/g, '')
|
|
78
|
+
.replace(/[*_`~#>|\\[\]]/g, '')
|
|
79
|
+
.replace(/\s+/g, ' ');
|
|
80
|
+
}
|
|
81
|
+
/** Line breaks in the first `n` characters (teleprinter feeds, signal rolls). */
|
|
82
|
+
export function lineCount(text, n) {
|
|
83
|
+
let count = 0;
|
|
84
|
+
const end = Math.min(n, text.length);
|
|
85
|
+
for (let i = 0; i < end; i++)
|
|
86
|
+
if (text.charCodeAt(i) === 10)
|
|
87
|
+
count++;
|
|
88
|
+
return count;
|
|
89
|
+
}
|
|
90
|
+
export const NOISE = '#%&@$*+=?/\\|<>~^!';
|
|
91
|
+
/** At ~60 characters a second a character spends ~0.7 s crossing a tail this
|
|
92
|
+
* long, which is how long the signal takes to lock. */
|
|
93
|
+
export const SIGNAL_TAIL = 42;
|
|
94
|
+
/** The signal tail: the rest of the current line (capped), each character
|
|
95
|
+
* static or already locked. Characters nearest the reveal point are the most
|
|
96
|
+
* likely to have locked. Spaces stay spaces. */
|
|
97
|
+
export function signalGlyphs(pending, rand = Math.random) {
|
|
98
|
+
const nl = pending.indexOf('\n');
|
|
99
|
+
const line = [...pending.slice(0, nl < 0 ? SIGNAL_TAIL : Math.min(nl, SIGNAL_TAIL))];
|
|
100
|
+
return line.map((ch, i) => {
|
|
101
|
+
if (isSpace(ch))
|
|
102
|
+
return ' ';
|
|
103
|
+
const lock = 1 - i / SIGNAL_TAIL;
|
|
104
|
+
return rand() < lock * lock ? ch : NOISE[Math.floor(rand() * NOISE.length)];
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=arrivalModes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrivalModes.js","sourceRoot":"","sources":["../../fx/arrivalModes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ArrivalEffect } from '../arrivalEffect';
|
|
2
|
+
export declare const TAIL_MAX = 14;
|
|
3
|
+
/** A random glyph standing in for `ch` under `effect`; whitespace stays a space,
|
|
4
|
+
* and an effect without glyphs returns `ch` itself. */
|
|
5
|
+
export declare function glyphFor(effect: ArrivalEffect, ch: string, rand?: () => number): string;
|
|
6
|
+
/** One glyph per pending character (spaces kept), capped at TAIL_MAX. Effects
|
|
7
|
+
* without a glyph tail return none. */
|
|
8
|
+
export declare function tailGlyphs(effect: ArrivalEffect, pending: string, rand?: () => number): string[];
|
|
9
|
+
/** The element to append the tail to: the deepest last element of the newest
|
|
10
|
+
* block. Null when the newest block is one the tail must not enter (a code
|
|
11
|
+
* block still streaming), so no tail is drawn at all rather than one in the
|
|
12
|
+
* wrong place. */
|
|
13
|
+
export declare function tailHost(root: Element, opts?: {
|
|
14
|
+
outsideInline?: boolean;
|
|
15
|
+
}): Element | null;
|
|
16
|
+
//# sourceMappingURL=tail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../fx/tail.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,eAAO,MAAM,QAAQ,KAAK,CAAC;AAQ3B;uDACuD;AACvD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,MAAoB,GAAG,MAAM,CAIpG;AAED;uCACuC;AACvC,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,MAAoB,GAAG,MAAM,EAAE,CAG7G;AAQD;;;kBAGkB;AAClB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,GAAG,IAAI,CAkB9F"}
|
package/dist/fx/tail.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export const TAIL_MAX = 14;
|
|
2
|
+
const KATAKANA = 'ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン0123456789';
|
|
3
|
+
const FLAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
4
|
+
const DECODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
5
|
+
const ALPHABET = { matrix: KATAKANA, splitflap: FLAP, decode: DECODE };
|
|
6
|
+
/** A random glyph standing in for `ch` under `effect`; whitespace stays a space,
|
|
7
|
+
* and an effect without glyphs returns `ch` itself. */
|
|
8
|
+
export function glyphFor(effect, ch, rand = Math.random) {
|
|
9
|
+
const set = ALPHABET[effect];
|
|
10
|
+
if (!set)
|
|
11
|
+
return ch;
|
|
12
|
+
return /\s/.test(ch) ? ' ' : set[Math.floor(rand() * set.length)];
|
|
13
|
+
}
|
|
14
|
+
/** One glyph per pending character (spaces kept), capped at TAIL_MAX. Effects
|
|
15
|
+
* without a glyph tail return none. */
|
|
16
|
+
export function tailGlyphs(effect, pending, rand = Math.random) {
|
|
17
|
+
if (!ALPHABET[effect])
|
|
18
|
+
return [];
|
|
19
|
+
return [...pending.slice(0, TAIL_MAX)].map((ch) => glyphFor(effect, ch, rand));
|
|
20
|
+
}
|
|
21
|
+
// Blocks the tail must never enter: it would read as part of the code, or break
|
|
22
|
+
// the element's layout.
|
|
23
|
+
const STOP = new Set(['PRE', 'TABLE', 'IMG', 'SVG', 'svg', 'HR', 'BR']);
|
|
24
|
+
// Inline formatting a band tail stays outside of.
|
|
25
|
+
const INLINE = new Set(['STRONG', 'B', 'EM', 'I', 'A', 'DEL', 'S', 'U', 'MARK', 'SPAN', 'SUB', 'SUP', 'SMALL', 'KBD']);
|
|
26
|
+
/** The element to append the tail to: the deepest last element of the newest
|
|
27
|
+
* block. Null when the newest block is one the tail must not enter (a code
|
|
28
|
+
* block still streaming), so no tail is drawn at all rather than one in the
|
|
29
|
+
* wrong place. */
|
|
30
|
+
export function tailHost(root, opts = {}) {
|
|
31
|
+
let el = root.querySelector('.agent-md') ?? root;
|
|
32
|
+
for (;;) {
|
|
33
|
+
// The last thing that is not blank. Descend only while it is an element:
|
|
34
|
+
// when text follows inline markup ("Use <code>x</code> then more") the
|
|
35
|
+
// tail belongs after that text, in this element, not inside the markup.
|
|
36
|
+
let last = el.lastChild;
|
|
37
|
+
while (last && last.nodeType === Node.TEXT_NODE && !last.textContent?.trim())
|
|
38
|
+
last = last.previousSibling;
|
|
39
|
+
if (!last || last.nodeType !== Node.ELEMENT_NODE)
|
|
40
|
+
return el;
|
|
41
|
+
const child = last;
|
|
42
|
+
if (STOP.has(child.tagName))
|
|
43
|
+
return null;
|
|
44
|
+
// Inline code that ends a line: the tail goes after it, never inside it.
|
|
45
|
+
if (child.tagName === 'CODE')
|
|
46
|
+
return el;
|
|
47
|
+
// Band tails (real words, not glyphs) go after inline formatting, never
|
|
48
|
+
// inside it: inside <strong> they would read bold, inside <a> clickable.
|
|
49
|
+
if (opts.outsideInline && INLINE.has(child.tagName))
|
|
50
|
+
return el;
|
|
51
|
+
el = child;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=tail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.js","sourceRoot":"","sources":["../../fx/tail.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,MAAM,QAAQ,GAAG,mEAAmE,CAAC;AACrF,MAAM,IAAI,GAAG,sCAAsC,CAAC;AACpD,MAAM,MAAM,GAAG,gEAAgE,CAAC;AAEhF,MAAM,QAAQ,GAA2C,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAE/G;uDACuD;AACvD,MAAM,UAAU,QAAQ,CAAC,MAAqB,EAAE,EAAU,EAAE,OAAqB,IAAI,CAAC,MAAM;IAC1F,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;uCACuC;AACvC,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,OAAe,EAAE,OAAqB,IAAI,CAAC,MAAM;IACjG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,gFAAgF;AAChF,wBAAwB;AACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxE,kDAAkD;AAClD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvH;;;kBAGkB;AAClB,MAAM,UAAU,QAAQ,CAAC,IAAa,EAAE,OAAoC,EAAE;IAC5E,IAAI,EAAE,GAAY,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC1D,SAAS,CAAC;QACR,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,IAAI,GAAqB,EAAE,CAAC,SAAS,CAAC;QAC1C,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;YAAE,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1G,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAe,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,yEAAyE;QACzE,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,CAAC;QACxC,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/D,EAAE,GAAG,KAAK,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReveal.d.ts","sourceRoot":"","sources":["../../fx/useReveal.ts"],"names":[],"mappings":"AAiBA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,MAAiB,EAAE,KAAK,SAAI,GAAG,MAAM,CA2CtG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* Paced reveal for arrival effects: how much of the streamed answer to show.
|
|
2
|
+
*
|
|
3
|
+
* About 60 characters a second (callers can go slower), but never more than
|
|
4
|
+
* about 2.5 s behind: when the text grows, the pace is re-derived so the whole
|
|
5
|
+
* backlog clears within CATCH_UP_TICKS. A fixed rate per backlog, not a
|
|
6
|
+
* fraction of what is left: a fraction decays geometrically.
|
|
7
|
+
*
|
|
8
|
+
* ONE timer for the life of the reveal. The live answer re-renders on every
|
|
9
|
+
* streamed delta, often faster than a tick; a timer keyed on the text was
|
|
10
|
+
* cleared and restarted by each delta and never got to tick. The text's
|
|
11
|
+
* length and the pace live in refs the timer reads instead. */
|
|
12
|
+
import { useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
13
|
+
const TICK_MS = 33;
|
|
14
|
+
const MIN_STEP = 2; // ~60 cps
|
|
15
|
+
const CATCH_UP_TICKS = 75; // ~2.5 s
|
|
16
|
+
export function useReveal(text, active, minStep = MIN_STEP, start = 0) {
|
|
17
|
+
// `start`: a hand-off resumes where the in-progress turn left off.
|
|
18
|
+
const [shown, setShown] = useState(start);
|
|
19
|
+
const [prevLen, setPrevLen] = useState(text.length);
|
|
20
|
+
const shownRef = useRef(start);
|
|
21
|
+
const lenRef = useRef(text.length);
|
|
22
|
+
const stepRef = useRef(minStep);
|
|
23
|
+
shownRef.current = shown;
|
|
24
|
+
// Switched on mid-answer: keep what is already shown, reveal only what
|
|
25
|
+
// arrives next. Starting from 0 would blank the answer and replay it.
|
|
26
|
+
const [prevActive, setPrevActive] = useState(active);
|
|
27
|
+
if (active !== prevActive) {
|
|
28
|
+
setPrevActive(active);
|
|
29
|
+
if (active)
|
|
30
|
+
setShown(text.length);
|
|
31
|
+
}
|
|
32
|
+
// A shorter text is a new answer: start it from the beginning.
|
|
33
|
+
if (text.length !== prevLen) {
|
|
34
|
+
setPrevLen(text.length);
|
|
35
|
+
if (text.length < prevLen)
|
|
36
|
+
setShown(0);
|
|
37
|
+
}
|
|
38
|
+
// Re-derive the pace whenever the text changes.
|
|
39
|
+
useLayoutEffect(() => {
|
|
40
|
+
lenRef.current = text.length;
|
|
41
|
+
const from = text.length < shownRef.current ? 0 : shownRef.current;
|
|
42
|
+
stepRef.current = Math.max(minStep, Math.floor((text.length - from) / CATCH_UP_TICKS));
|
|
43
|
+
}, [text, minStep]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!active)
|
|
46
|
+
return;
|
|
47
|
+
const id = setInterval(() => {
|
|
48
|
+
setShown((s) => {
|
|
49
|
+
const len = lenRef.current;
|
|
50
|
+
return s >= len ? s : Math.min(len, s + stepRef.current);
|
|
51
|
+
});
|
|
52
|
+
}, TICK_MS);
|
|
53
|
+
return () => clearInterval(id);
|
|
54
|
+
}, [active]);
|
|
55
|
+
if (!active)
|
|
56
|
+
return text.length;
|
|
57
|
+
return Math.min(shown, text.length);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=useReveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReveal.js","sourceRoot":"","sources":["../../fx/useReveal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;+DAU+D;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErE,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU;AAC9B,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,SAAS;AAEpC,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAe,EAAE,UAAkB,QAAQ,EAAE,KAAK,GAAG,CAAC;IAC5F,mEAAmE;IACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAEzB,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO;YAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,gDAAgD;IAChD,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IACzF,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC3B,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TurnVerificationCounts } from '@corenel/protocol';
|
|
2
|
+
/** Fixed-order, non-zero segments: "2 writes confirmed", "1 didn't take", … */
|
|
3
|
+
export declare function observedSegments(c: TurnVerificationCounts): string[];
|
|
4
|
+
/** "Observed: 2 writes confirmed · 1 didn't take · …" — zero segments omitted,
|
|
5
|
+
* fixed order. Shared with the timeline marker label. */
|
|
6
|
+
export declare function observedSummary(c: TurnVerificationCounts): string;
|
|
7
|
+
/** The label for a run whose audit log lost entries or could not confirm them
|
|
8
|
+
* written -- shared by the transcript's Observed row and the editor Run
|
|
9
|
+
* surface so both say it the same way. A known loss is stated as a count --
|
|
10
|
+
* a lower bound when the finish also timed out, so it says "possibly more";
|
|
11
|
+
* a finish that timed out with nothing known lost says it could not confirm. */
|
|
12
|
+
export declare function auditIncompleteText(a: {
|
|
13
|
+
lost: number;
|
|
14
|
+
unconfirmed?: boolean;
|
|
15
|
+
}): string;
|
|
16
|
+
//# sourceMappingURL=observed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed.d.ts","sourceRoot":"","sources":["../observed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAQpE;AAED;yDACyD;AACzD,wBAAgB,eAAe,CAAC,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAEjE;AAED;;;;gFAIgF;AAChF,wBAAgB,mBAAmB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAMtF"}
|
package/dist/observed.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Fixed-order, non-zero segments: "2 writes confirmed", "1 didn't take", … */
|
|
2
|
+
export function observedSegments(c) {
|
|
3
|
+
const seg = [];
|
|
4
|
+
if (c.confirmed)
|
|
5
|
+
seg.push(`${c.confirmed} ${c.confirmed === 1 ? 'write' : 'writes'} confirmed`);
|
|
6
|
+
if (c.didNotTake)
|
|
7
|
+
seg.push(`${c.didNotTake} didn't take`);
|
|
8
|
+
if (c.failed)
|
|
9
|
+
seg.push(`${c.failed} failed`);
|
|
10
|
+
if (c.denied)
|
|
11
|
+
seg.push(`${c.denied} denied`);
|
|
12
|
+
if (c.unverifiable)
|
|
13
|
+
seg.push(`${c.unverifiable} unverifiable`);
|
|
14
|
+
return seg;
|
|
15
|
+
}
|
|
16
|
+
/** "Observed: 2 writes confirmed · 1 didn't take · …" — zero segments omitted,
|
|
17
|
+
* fixed order. Shared with the timeline marker label. */
|
|
18
|
+
export function observedSummary(c) {
|
|
19
|
+
return `Observed: ${observedSegments(c).join(' · ')}`;
|
|
20
|
+
}
|
|
21
|
+
/** The label for a run whose audit log lost entries or could not confirm them
|
|
22
|
+
* written -- shared by the transcript's Observed row and the editor Run
|
|
23
|
+
* surface so both say it the same way. A known loss is stated as a count --
|
|
24
|
+
* a lower bound when the finish also timed out, so it says "possibly more";
|
|
25
|
+
* a finish that timed out with nothing known lost says it could not confirm. */
|
|
26
|
+
export function auditIncompleteText(a) {
|
|
27
|
+
if (a.lost > 0) {
|
|
28
|
+
const more = a.unconfirmed ? ', possibly more' : '';
|
|
29
|
+
return `Audit incomplete (${a.lost} ${a.lost === 1 ? 'entry' : 'entries'} not recorded${more})`;
|
|
30
|
+
}
|
|
31
|
+
return 'Audit incomplete (could not confirm entries were recorded)';
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=observed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed.js","sourceRoot":"","sources":["../observed.ts"],"names":[],"mappings":"AAMA,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,CAAyB;IACxD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC;IAChG,IAAI,CAAC,CAAC,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,YAAY;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,eAAe,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;yDACyD;AACzD,MAAM,UAAU,eAAe,CAAC,CAAyB;IACvD,OAAO,aAAa,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;;;gFAIgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,CAA0C;IAC5E,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,qBAAqB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,gBAAgB,IAAI,GAAG,CAAC;IAClG,CAAC;IACD,OAAO,4DAA4D,CAAC;AACtE,CAAC"}
|
package/dist/toolRender.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { ArrivalEffect } from './arrivalEffect';
|
|
2
3
|
/** A tool call normalized for rendering — surface-agnostic. */
|
|
3
4
|
export interface ToolInvocation {
|
|
4
5
|
name: string;
|
|
@@ -13,19 +14,22 @@ type ToolStatus = 'running' | 'ok' | 'warn' | 'error';
|
|
|
13
14
|
export declare function toolStatusOf(name: string, result: string, isError: boolean): ToolStatus;
|
|
14
15
|
/** One tool's glanceable status line. Shared by the card header, the summary
|
|
15
16
|
* renderer, and AgentPanel's live (in-flight) list so a call resolves in place. */
|
|
16
|
-
export declare function ToolLine({ name, args, result, isError, running, ms }: {
|
|
17
|
+
export declare function ToolLine({ name, args, result, isError, running, ms, nameFx }: {
|
|
17
18
|
name: string;
|
|
18
19
|
args: Record<string, unknown>;
|
|
19
20
|
result?: string;
|
|
20
21
|
isError?: boolean;
|
|
21
22
|
running?: boolean;
|
|
22
23
|
ms?: number;
|
|
24
|
+
/** Animate the name in once (live turn under an arrival effect). */
|
|
25
|
+
nameFx?: ArrivalEffect;
|
|
23
26
|
}): React.JSX.Element;
|
|
24
27
|
/** STANDARD tool renderer (normal + expanded): a collapsible card. `defaultOpen`
|
|
25
28
|
* is the only difference between the two views — expanded opens every card. */
|
|
26
|
-
export declare function ToolResultCard({ inv, defaultOpen }: {
|
|
29
|
+
export declare function ToolResultCard({ inv, defaultOpen, nameFx }: {
|
|
27
30
|
inv: ToolInvocation;
|
|
28
31
|
defaultOpen?: boolean;
|
|
32
|
+
nameFx?: ArrivalEffect;
|
|
29
33
|
}): React.JSX.Element;
|
|
30
34
|
/** The expandable body of a tool invocation — arguments (JSON) + the rich result
|
|
31
35
|
* renderer. Shared by ToolResultCard and any other surface that wants the SAME
|
package/dist/toolRender.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolRender.d.ts","sourceRoot":"","sources":["../toolRender.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"toolRender.d.ts","sourceRoot":"","sources":["../toolRender.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,KAAK,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;AAoEtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAQvF;AA0BD;mFACmF;AACnF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAe,EAAE,EAAE;IACtF,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAChH,oEAAoE;IACpE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,qBA0BA;AAED;+EAC+E;AAC/E,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,WAAmB,EAAE,MAAe,EAAE,EAAE;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,qBAcnJ;AAED;;wEAEwE;AACxE,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,qBAYnH"}
|