@corenel/web-ui 0.13.3 → 0.14.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 +30 -1
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +111 -19
- package/dist/Composer.js.map +1 -1
- package/dist/ContextBar.d.ts +9 -3
- package/dist/ContextBar.d.ts.map +1 -1
- package/dist/ContextBar.js +14 -7
- package/dist/ContextBar.js.map +1 -1
- package/dist/ContextManager.d.ts +10 -2
- package/dist/ContextManager.d.ts.map +1 -1
- package/dist/ContextManager.js +14 -10
- package/dist/ContextManager.js.map +1 -1
- package/dist/DictateButton.d.ts +21 -1
- package/dist/DictateButton.d.ts.map +1 -1
- package/dist/DictateButton.js +73 -10
- package/dist/DictateButton.js.map +1 -1
- package/dist/PickChips.d.ts +6 -0
- package/dist/PickChips.d.ts.map +1 -0
- package/dist/PickChips.js +55 -0
- package/dist/PickChips.js.map +1 -0
- package/dist/ProcessDock.d.ts +10 -0
- package/dist/ProcessDock.d.ts.map +1 -1
- package/dist/ProcessDock.js +24 -1
- package/dist/ProcessDock.js.map +1 -1
- package/dist/RichContent.d.ts.map +1 -1
- package/dist/RichContent.js +102 -24
- package/dist/RichContent.js.map +1 -1
- package/dist/SummaryTranscript.d.ts +5 -1
- package/dist/SummaryTranscript.d.ts.map +1 -1
- package/dist/SummaryTranscript.js +5 -3
- package/dist/SummaryTranscript.js.map +1 -1
- package/dist/TodoBar.d.ts +2 -0
- package/dist/TodoBar.d.ts.map +1 -1
- package/dist/TodoBar.js +8 -0
- package/dist/TodoBar.js.map +1 -1
- package/dist/TodoLine.d.ts +11 -0
- package/dist/TodoLine.d.ts.map +1 -0
- package/dist/TodoLine.js +55 -0
- package/dist/TodoLine.js.map +1 -0
- package/dist/ToolFold.js +1 -1
- package/dist/ToolFold.js.map +1 -1
- package/dist/Transcript.d.ts +19 -1
- package/dist/Transcript.d.ts.map +1 -1
- package/dist/Transcript.js +127 -58
- package/dist/Transcript.js.map +1 -1
- package/dist/agentChat/AgentChat.d.ts +42 -0
- package/dist/agentChat/AgentChat.d.ts.map +1 -1
- package/dist/agentChat/AgentChat.js +573 -100
- package/dist/agentChat/AgentChat.js.map +1 -1
- package/dist/agentChat/ChatSettingsSheet.d.ts +9 -0
- package/dist/agentChat/ChatSettingsSheet.d.ts.map +1 -0
- package/dist/agentChat/ChatSettingsSheet.js +103 -0
- package/dist/agentChat/ChatSettingsSheet.js.map +1 -0
- package/dist/agentChat/OptionsDrawer.d.ts +8 -0
- package/dist/agentChat/OptionsDrawer.d.ts.map +1 -1
- package/dist/agentChat/OptionsDrawer.js +24 -215
- package/dist/agentChat/OptionsDrawer.js.map +1 -1
- package/dist/agentChat/PlanReview.d.ts +1 -1
- package/dist/agentChat/PlanReview.d.ts.map +1 -1
- package/dist/agentChat/PlanReview.js +1 -1
- package/dist/agentChat/PlanReview.js.map +1 -1
- package/dist/agentChat/SourceGroups.d.ts +24 -0
- package/dist/agentChat/SourceGroups.d.ts.map +1 -0
- package/dist/agentChat/SourceGroups.js +117 -0
- package/dist/agentChat/SourceGroups.js.map +1 -0
- package/dist/agentChat/controller.d.ts +30 -1
- package/dist/agentChat/controller.d.ts.map +1 -1
- package/dist/agentChat/controller.js.map +1 -1
- package/dist/agentChat/pendingQueue.d.ts +4 -0
- package/dist/agentChat/pendingQueue.d.ts.map +1 -1
- package/dist/agentChat/pendingQueue.js +7 -0
- package/dist/agentChat/pendingQueue.js.map +1 -1
- package/dist/agentChat/planTool.d.ts +4 -0
- package/dist/agentChat/planTool.d.ts.map +1 -0
- package/dist/agentChat/planTool.js +4 -0
- package/dist/agentChat/planTool.js.map +1 -0
- package/dist/agentChat/testSheetHost.d.ts +3 -0
- package/dist/agentChat/testSheetHost.d.ts.map +1 -0
- package/dist/agentChat/testSheetHost.js +9 -0
- package/dist/agentChat/testSheetHost.js.map +1 -0
- package/dist/agentChat/useChatOptions.d.ts +63 -0
- package/dist/agentChat/useChatOptions.d.ts.map +1 -0
- package/dist/agentChat/useChatOptions.js +156 -0
- package/dist/agentChat/useChatOptions.js.map +1 -0
- package/dist/chatRefreshContext.d.ts +8 -0
- package/dist/chatRefreshContext.d.ts.map +1 -0
- package/dist/chatRefreshContext.js +14 -0
- package/dist/chatRefreshContext.js.map +1 -0
- package/dist/chatSkinContext.d.ts +13 -6
- package/dist/chatSkinContext.d.ts.map +1 -1
- package/dist/chatSkinContext.js +18 -4
- package/dist/chatSkinContext.js.map +1 -1
- package/dist/chatSkinCss.d.ts.map +1 -1
- package/dist/chatSkinCss.js +108 -22
- package/dist/chatSkinCss.js.map +1 -1
- package/dist/composerAction.d.ts +16 -0
- package/dist/composerAction.d.ts.map +1 -0
- package/dist/composerAction.js +20 -0
- package/dist/composerAction.js.map +1 -0
- package/dist/composerHistory.d.ts.map +1 -1
- package/dist/composerHistory.js +4 -1
- package/dist/composerHistory.js.map +1 -1
- package/dist/fx/LiveAnswer.d.ts.map +1 -1
- package/dist/fx/LiveAnswer.js +324 -59
- package/dist/fx/LiveAnswer.js.map +1 -1
- package/dist/fx/arrivalModes.d.ts +17 -2
- package/dist/fx/arrivalModes.d.ts.map +1 -1
- package/dist/fx/arrivalModes.js +46 -4
- package/dist/fx/arrivalModes.js.map +1 -1
- package/dist/fx/pacer.d.ts +41 -0
- package/dist/fx/pacer.d.ts.map +1 -0
- package/dist/fx/pacer.js +66 -0
- package/dist/fx/pacer.js.map +1 -0
- package/dist/fx/useReveal.d.ts +16 -1
- package/dist/fx/useReveal.d.ts.map +1 -1
- package/dist/fx/useReveal.js +101 -41
- package/dist/fx/useReveal.js.map +1 -1
- package/dist/localAddress.d.ts +2 -0
- package/dist/localAddress.d.ts.map +1 -0
- package/dist/localAddress.js +56 -0
- package/dist/localAddress.js.map +1 -0
- package/dist/steps/AfterReply.d.ts +67 -0
- package/dist/steps/AfterReply.d.ts.map +1 -0
- package/dist/steps/AfterReply.js +217 -0
- package/dist/steps/AfterReply.js.map +1 -0
- package/dist/steps/ChatApproval.d.ts +18 -0
- package/dist/steps/ChatApproval.d.ts.map +1 -0
- package/dist/steps/ChatApproval.js +35 -0
- package/dist/steps/ChatApproval.js.map +1 -0
- package/dist/steps/Delegation.d.ts +77 -0
- package/dist/steps/Delegation.d.ts.map +1 -0
- package/dist/steps/Delegation.js +188 -0
- package/dist/steps/Delegation.js.map +1 -0
- package/dist/steps/LiveRail.d.ts +14 -0
- package/dist/steps/LiveRail.d.ts.map +1 -0
- package/dist/steps/LiveRail.js +16 -0
- package/dist/steps/LiveRail.js.map +1 -0
- package/dist/steps/StepDetail.d.ts +23 -0
- package/dist/steps/StepDetail.d.ts.map +1 -0
- package/dist/steps/StepDetail.js +195 -0
- package/dist/steps/StepDetail.js.map +1 -0
- package/dist/steps/StepDetailHost.d.ts +54 -0
- package/dist/steps/StepDetailHost.d.ts.map +1 -0
- package/dist/steps/StepDetailHost.js +175 -0
- package/dist/steps/StepDetailHost.js.map +1 -0
- package/dist/steps/StepRail.d.ts +38 -0
- package/dist/steps/StepRail.d.ts.map +1 -0
- package/dist/steps/StepRail.js +238 -0
- package/dist/steps/StepRail.js.map +1 -0
- package/dist/steps/approval.d.ts +73 -0
- package/dist/steps/approval.d.ts.map +1 -0
- package/dist/steps/approval.js +81 -0
- package/dist/steps/approval.js.map +1 -0
- package/dist/steps/model.d.ts +140 -0
- package/dist/steps/model.d.ts.map +1 -0
- package/dist/steps/model.js +433 -0
- package/dist/steps/model.js.map +1 -0
- package/dist/steps/outcome.d.ts +5 -0
- package/dist/steps/outcome.d.ts.map +1 -0
- package/dist/steps/outcome.js +34 -0
- package/dist/steps/outcome.js.map +1 -0
- package/dist/steps/peek.d.ts +35 -0
- package/dist/steps/peek.d.ts.map +1 -0
- package/dist/steps/peek.js +219 -0
- package/dist/steps/peek.js.map +1 -0
- package/dist/steps/plan.d.ts +50 -0
- package/dist/steps/plan.d.ts.map +1 -0
- package/dist/steps/plan.js +242 -0
- package/dist/steps/plan.js.map +1 -0
- package/dist/steps/useRailDetail.d.ts +25 -0
- package/dist/steps/useRailDetail.d.ts.map +1 -0
- package/dist/steps/useRailDetail.js +108 -0
- package/dist/steps/useRailDetail.js.map +1 -0
- package/dist/steps/words.d.ts +40 -0
- package/dist/steps/words.d.ts.map +1 -0
- package/dist/steps/words.js +247 -0
- package/dist/steps/words.js.map +1 -0
- package/dist/toolRender.d.ts +27 -1
- package/dist/toolRender.d.ts.map +1 -1
- package/dist/toolRender.js +72 -4
- package/dist/toolRender.js.map +1 -1
- package/dist/transcriptSkin.d.ts.map +1 -1
- package/dist/transcriptSkin.js +66 -0
- package/dist/transcriptSkin.js.map +1 -1
- package/dist/transcriptSkinCss.d.ts +35 -0
- package/dist/transcriptSkinCss.d.ts.map +1 -1
- package/dist/transcriptSkinCss.js +360 -19
- package/dist/transcriptSkinCss.js.map +1 -1
- package/dist/useHoldPress.d.ts +24 -0
- package/dist/useHoldPress.d.ts.map +1 -0
- package/dist/useHoldPress.js +85 -0
- package/dist/useHoldPress.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import { IcCheck, IcChevronRight, IcClock, IcRefresh, IcX } from '@corenel/ui-kit/icons';
|
|
4
|
+
import { observedSummary, auditIncompleteText } from '../observed';
|
|
5
|
+
import { FOLDED_TITLE, NOT_SENT_BEFORE_FOLD_TITLE, CACHE_WARNING_TITLE } from '../contextCopy';
|
|
6
|
+
import { useVerificationView } from '../verificationView';
|
|
7
|
+
import { durationText } from './StepRail';
|
|
8
|
+
import { CopyIconButton } from './StepDetail';
|
|
9
|
+
import { useDetailHold, useStepDetail } from './StepDetailHost';
|
|
10
|
+
import './rail.css';
|
|
11
|
+
/** >= $0.01 reads "$0.03", a smaller cost "<$0.01", no cost nothing. */
|
|
12
|
+
export function fmtCost(cost) {
|
|
13
|
+
if (!Number.isFinite(cost) || cost <= 0)
|
|
14
|
+
return '';
|
|
15
|
+
return cost >= 0.01 ? `$${cost.toFixed(2)}` : '<$0.01';
|
|
16
|
+
}
|
|
17
|
+
function plural(n, one, many) {
|
|
18
|
+
return `${n} ${n === 1 ? one : many}`;
|
|
19
|
+
}
|
|
20
|
+
/** The line's segments, in order. A mismatch is always here: the detail may be
|
|
21
|
+
* closed, and a change that did not take must never be hidden. */
|
|
22
|
+
export function afterSegments(p) {
|
|
23
|
+
const out = [];
|
|
24
|
+
if (p.steps > 0)
|
|
25
|
+
out.push({ text: plural(p.steps, 'step', 'steps'), tone: 'plain' });
|
|
26
|
+
// A room's log records only cost; zero time there means unknown, not instant.
|
|
27
|
+
if (p.stats && p.stats.ms !== 0) {
|
|
28
|
+
const t = durationText(p.stats.ms);
|
|
29
|
+
if (t)
|
|
30
|
+
out.push({ text: t, tone: 'plain', kind: 'time' });
|
|
31
|
+
}
|
|
32
|
+
if (p.stats) {
|
|
33
|
+
const c = fmtCost(p.stats.cost);
|
|
34
|
+
if (c)
|
|
35
|
+
out.push({ text: c, tone: 'plain' });
|
|
36
|
+
}
|
|
37
|
+
const miss = p.verification?.counts.didNotTake ?? 0;
|
|
38
|
+
if (miss > 0)
|
|
39
|
+
out.push({ text: `${plural(miss, 'change', 'changes')} did not take`, tone: 'bad' });
|
|
40
|
+
if (p.audit)
|
|
41
|
+
out.push({ text: auditIncompleteText(p.audit), tone: 'bad' });
|
|
42
|
+
if (!p.included)
|
|
43
|
+
out.push({ text: 'Not in context', tone: 'plain' });
|
|
44
|
+
if (p.folded)
|
|
45
|
+
out.push({ text: 'Folded', tone: 'plain' });
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/** The usage in the words the old stats line used. A collaboration room's log
|
|
49
|
+
* records only cost, with inTok/outTok/ms at 0 meaning "unknown", so those
|
|
50
|
+
* segments are left out rather than stated as zero. */
|
|
51
|
+
export function statsParts(stats) {
|
|
52
|
+
const hasTokens = stats.inTok !== 0 || stats.outTok !== 0;
|
|
53
|
+
const hasTiming = stats.ms !== 0;
|
|
54
|
+
const segments = [];
|
|
55
|
+
const titleParts = [];
|
|
56
|
+
if (hasTokens) {
|
|
57
|
+
/* `inTok` is summed over every model call, and each call resends the whole
|
|
58
|
+
* prompt -- a four-call turn at 46K reads 184K. When the turn made more
|
|
59
|
+
* than one call, lead with the context it occupied and say what the sum is. */
|
|
60
|
+
const ctx = (stats.calls ?? 1) > 1 ? stats.ctxTok : undefined;
|
|
61
|
+
if (ctx) {
|
|
62
|
+
const cached = stats.cachedTok != null ? ` (${stats.cachedTok.toLocaleString()} cached)` : '';
|
|
63
|
+
segments.push(`${ctx.toLocaleString()} context`, `${stats.inTok.toLocaleString()} in over ${stats.calls} calls${cached}`);
|
|
64
|
+
titleParts.push('Context: the largest single request', 'in: prompt tokens billed across every call');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
segments.push(`${stats.inTok.toLocaleString()} in`);
|
|
68
|
+
titleParts.push('Tokens in');
|
|
69
|
+
}
|
|
70
|
+
segments.push(`${stats.outTok.toLocaleString()} out`);
|
|
71
|
+
titleParts.push('out');
|
|
72
|
+
}
|
|
73
|
+
segments.push(`$${stats.cost.toFixed(4)}`);
|
|
74
|
+
titleParts.push('estimated cost');
|
|
75
|
+
if (hasTiming) {
|
|
76
|
+
segments.push(`${(stats.ms / 1000).toFixed(1)}s`);
|
|
77
|
+
titleParts.push('wall-clock for this turn');
|
|
78
|
+
}
|
|
79
|
+
return { segments, titleParts };
|
|
80
|
+
}
|
|
81
|
+
/** A token count short enough for a tile: 950, 18.2k, 1.4M. */
|
|
82
|
+
export function compactCount(n) {
|
|
83
|
+
const one = (v) => v.toFixed(1).replace(/\.0$/, '');
|
|
84
|
+
// 999,950 rounds to "1000.0k"; it belongs to the next unit.
|
|
85
|
+
if (n >= 999950)
|
|
86
|
+
return `${one(n / 1000000)}M`;
|
|
87
|
+
if (n >= 1000)
|
|
88
|
+
return `${one(n / 1000)}k`;
|
|
89
|
+
return String(n);
|
|
90
|
+
}
|
|
91
|
+
/** The detail's usage as tiles plus one note line. Same rules as statsParts: a
|
|
92
|
+
* room's log records only cost, so zero tokens or time are left out, not shown
|
|
93
|
+
* as zero. */
|
|
94
|
+
export function usageTiles(stats) {
|
|
95
|
+
const tiles = [];
|
|
96
|
+
if (stats.ms !== 0) {
|
|
97
|
+
tiles.push({ label: 'Time', value: `${(stats.ms / 1000).toFixed(1)}s`, title: 'Wall-clock for this turn' });
|
|
98
|
+
}
|
|
99
|
+
tiles.push({ label: 'Cost', value: `$${stats.cost.toFixed(4)}`, title: 'Estimated cost' });
|
|
100
|
+
const hasTokens = stats.inTok !== 0 || stats.outTok !== 0;
|
|
101
|
+
if (hasTokens) {
|
|
102
|
+
const count = (label, n, title) => {
|
|
103
|
+
const value = compactCount(n);
|
|
104
|
+
const exact = n.toLocaleString();
|
|
105
|
+
return value === String(n) ? { label, value, title } : { label, value, title, exact };
|
|
106
|
+
};
|
|
107
|
+
tiles.push(count('Tokens in', stats.inTok, `${stats.inTok.toLocaleString()} prompt tokens billed across every call`));
|
|
108
|
+
tiles.push(count('Tokens out', stats.outTok, `${stats.outTok.toLocaleString()} tokens out`));
|
|
109
|
+
}
|
|
110
|
+
const notes = [];
|
|
111
|
+
const calls = stats.calls ?? 1;
|
|
112
|
+
if (hasTokens && calls > 1)
|
|
113
|
+
notes.push(`${calls} model calls`);
|
|
114
|
+
if (hasTokens && stats.cachedTok)
|
|
115
|
+
notes.push(`${compactCount(stats.cachedTok)} of the input cached`);
|
|
116
|
+
if (hasTokens && calls > 1 && stats.ctxTok)
|
|
117
|
+
notes.push(`largest request ${compactCount(stats.ctxTok)}`);
|
|
118
|
+
return { tiles, note: notes.join(' · ') };
|
|
119
|
+
}
|
|
120
|
+
function Usage(p) {
|
|
121
|
+
const { tiles, note } = usageTiles(p.stats);
|
|
122
|
+
return (_jsxs("section", { className: "tx-after-usage", "data-tx-part": "after-usage-line", "aria-label": "Usage", children: [_jsx("div", { className: "tx-after-tiles", children: tiles.map((t) => (_jsxs("div", { className: "tx-after-tile", "data-tx-part": "after-tile", title: t.title, children: [_jsx("div", { className: "tx-after-label", children: t.label }), _jsx("div", { className: "tx-after-value", children: t.value }), t.exact ? _jsx("div", { className: "tx-after-tile-exact", "data-tx-part": "after-tile-exact", children: t.exact }) : null] }, t.label))) }), note ? _jsx("div", { className: "tx-after-tile-note", "data-tx-part": "after-usage-note", children: note }) : null] }));
|
|
123
|
+
}
|
|
124
|
+
/** What the runtime observed, beside and distinct from the agent's own account. */
|
|
125
|
+
function Observed(p) {
|
|
126
|
+
const { v, audit } = p;
|
|
127
|
+
// The Settings preference is the STARTING state; the list then toggles on its own.
|
|
128
|
+
const [pref] = useVerificationView();
|
|
129
|
+
const [open, setOpen] = useState(pref === 'expanded');
|
|
130
|
+
const auditLabel = audit ? _jsx("div", { className: "tx-after-audit", "data-tx-part": "after-audit", "data-testid": "turn-audit-incomplete", children: auditIncompleteText(audit) }) : null;
|
|
131
|
+
if (!v)
|
|
132
|
+
return auditLabel;
|
|
133
|
+
const mismatch = v.counts.didNotTake > 0;
|
|
134
|
+
const summary = _jsx("span", { children: observedSummary(v.counts) });
|
|
135
|
+
return (_jsxs("section", { className: "tx-after-section", "data-tx-part": "after-observed", "data-tx-tone": mismatch ? 'bad' : undefined, "data-testid": "turn-observed", children: [_jsxs("div", { className: "tx-after-observed-head", children: [_jsx("span", { className: "tx-after-label", children: "Changes" }), v.changes.length > 0 ? (_jsxs("button", { type: "button", className: "tx-after-toggle", "data-tx-part": "after-toggle", "aria-expanded": open, onClick: () => setOpen((o) => !o), children: [summary, _jsx("span", { className: "tx-after-note", children: " (runtime)" }), _jsx("span", { className: "tx-after-caret", "data-open": open ? '' : undefined, "aria-hidden": "true", children: _jsx(IcChevronRight, { size: 14 }) })] })) : (_jsxs("span", { className: "tx-after-toggle-static", children: [summary, _jsx("span", { className: "tx-after-note", children: " (runtime)" })] }))] }), mismatch ? _jsx("div", { className: "tx-after-mismatch", "data-tx-part": "after-mismatch", children: "The agent's account above may not match what happened." }) : null, open ? (_jsx("ul", { className: "tx-after-changes", "data-tx-part": "after-changes", children: v.changes.map((c, i) => (_jsxs("li", { className: "tx-after-change", "data-tx-tone": c.took ? undefined : 'bad', children: [_jsx("span", { className: "tx-after-change-mark", role: "img", "aria-label": c.took ? 'Took' : 'Did not take', children: c.took ? _jsx(IcCheck, { size: 14 }) : _jsx(IcX, { size: 14 }) }), _jsx("code", { children: c.target }), " ", _jsx("span", { className: "tx-after-change-state", children: c.took ? c.state : "didn't take" })] }, `${c.callId}:${i}`))) })) : null, auditLabel] }));
|
|
136
|
+
}
|
|
137
|
+
/** The context switch's name. It never changes: the switch's state says
|
|
138
|
+
* whether the turn is sent, so the label cannot contradict the knob. "Later
|
|
139
|
+
* turns", not "the next": a turn left in context rides every request after it. */
|
|
140
|
+
export const INCLUDED_LABEL = 'Send to the model on later turns';
|
|
141
|
+
/** Copy reply and Retry from here, as icons in the detail's header. Null when
|
|
142
|
+
* there is nothing to copy and nothing to retry. */
|
|
143
|
+
function afterActions(p, close) {
|
|
144
|
+
const { turn, replyText, onRetry } = p;
|
|
145
|
+
const canRetry = !!onRetry && turn.messages.some((m) => m.role === 'user');
|
|
146
|
+
return () => (replyText || canRetry ? (_jsxs(_Fragment, { children: [replyText ? _jsx(CopyIconButton, { text: replyText, label: "Copy reply" }) : null, canRetry ? (_jsx("button", { type: "button", className: "tx-detail-icon", "data-tx-part": "detail-icon", "aria-label": "Retry from here", title: "Retry from here", onClick: () => { close(); onRetry?.(turn.id); }, children: _jsx(IcRefresh, { size: 16 }) })) : null] })) : null);
|
|
147
|
+
}
|
|
148
|
+
function AfterDetail(p) {
|
|
149
|
+
const { turn, folded, beforeFold, onToggleInclude } = p;
|
|
150
|
+
return (_jsxs("div", { className: "tx-detail tx-after-detail", "data-tx-part": "after-usage", children: [turn.stats ? _jsx(Usage, { stats: turn.stats }) : null, turn.verification || turn.auditIncomplete ? _jsx(Observed, { v: turn.verification, audit: turn.auditIncomplete }) : null, folded ? _jsx("div", { className: "tx-after-note-line", "data-tx-part": "after-note", children: FOLDED_TITLE }) : null, onToggleInclude && !folded ? (_jsxs("section", { className: "tx-after-section", "aria-label": "Context", children: [_jsx("span", { className: "tx-after-label", children: "Context" }), beforeFold ? (_jsx("div", { className: "tx-after-note-line", "data-tx-part": "after-note", children: NOT_SENT_BEFORE_FOLD_TITLE })) : (_jsxs("div", { className: "tx-after-context", "data-tx-part": "after-context", children: [_jsxs("button", { type: "button", role: "switch", "aria-checked": turn.included, className: "tx-after-switch", "data-tx-part": "after-switch", onClick: () => onToggleInclude(turn.id), children: [_jsx("span", { className: "tx-after-switch-text", children: INCLUDED_LABEL }), _jsx("span", { className: "tx-after-switch-track", "aria-hidden": "true", children: _jsx("span", { className: "tx-after-switch-knob" }) })] }), _jsx("div", { className: "tx-after-note-line", "data-tx-part": "after-note", children: CACHE_WARNING_TITLE })] }))] })) : null] }));
|
|
151
|
+
}
|
|
152
|
+
export function AfterReply(p) {
|
|
153
|
+
const { turn, steps, folded } = p;
|
|
154
|
+
const detail = useStepDetail();
|
|
155
|
+
const id = `turn:${turn.id}`;
|
|
156
|
+
const selected = detail?.openId === id;
|
|
157
|
+
// Held while open: if this turn is removed, its detail closes rather than freezing.
|
|
158
|
+
useDetailHold(selected ? id : null);
|
|
159
|
+
// While open, the host draws the detail from the newest props, so a toggle
|
|
160
|
+
// shows its new state. Registered only when what it shows changed: the
|
|
161
|
+
// callbacks are read through a ref, so a host's fresh closures alone do not
|
|
162
|
+
// redraw the open panel on every streamed delta.
|
|
163
|
+
const latest = useRef(p);
|
|
164
|
+
latest.current = p;
|
|
165
|
+
const hasToggle = !!p.onToggleInclude;
|
|
166
|
+
const hasRetry = !!p.onRetry;
|
|
167
|
+
const registered = useRef(null);
|
|
168
|
+
useLayoutEffect(() => {
|
|
169
|
+
if (!detail || !selected) {
|
|
170
|
+
registered.current = null;
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const key = [id, p.turn, p.folded, p.beforeFold, p.replyText, hasToggle, hasRetry, detail.close];
|
|
174
|
+
const last = registered.current;
|
|
175
|
+
if (last && last.length === key.length && last.every((v, i) => v === key[i]))
|
|
176
|
+
return;
|
|
177
|
+
registered.current = key;
|
|
178
|
+
const close = detail.close;
|
|
179
|
+
const now = () => {
|
|
180
|
+
const cur = latest.current;
|
|
181
|
+
return {
|
|
182
|
+
turn: cur.turn,
|
|
183
|
+
folded: cur.folded,
|
|
184
|
+
beforeFold: cur.beforeFold,
|
|
185
|
+
replyText: cur.replyText,
|
|
186
|
+
...(hasToggle ? { onToggleInclude: (t) => latest.current.onToggleInclude?.(t) } : {}),
|
|
187
|
+
...(hasRetry ? { onRetry: (t) => latest.current.onRetry?.(t) } : {}),
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
detail.register(id, {
|
|
191
|
+
body: () => _jsx(AfterDetail, { ...now() }),
|
|
192
|
+
actions: () => afterActions(now(), close)(),
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
const segs = afterSegments({
|
|
196
|
+
steps,
|
|
197
|
+
stats: turn.stats,
|
|
198
|
+
verification: turn.verification,
|
|
199
|
+
audit: turn.auditIncomplete,
|
|
200
|
+
included: turn.included,
|
|
201
|
+
folded,
|
|
202
|
+
});
|
|
203
|
+
if (!segs.length && !p.replyText)
|
|
204
|
+
return null;
|
|
205
|
+
const open = () => {
|
|
206
|
+
if (!detail)
|
|
207
|
+
return;
|
|
208
|
+
detail.open({
|
|
209
|
+
id,
|
|
210
|
+
title: 'This reply',
|
|
211
|
+
body: () => _jsx(AfterDetail, { ...p }),
|
|
212
|
+
actions: afterActions(p, detail.close),
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
return (_jsxs("button", { type: "button", className: "tx-after", "data-tx-part": "after", "data-tx-selected": selected ? '' : undefined, onClick: open, children: [segs.map((s, i) => (_jsxs("span", { className: "tx-after-item", children: [i > 0 ? ' · ' : '', _jsxs("span", { className: "tx-after-seg", "data-tx-part": "after-seg", "data-tx-tone": s.tone, children: [s.kind === 'time' ? _jsx("span", { className: "tx-after-seg-icon", "aria-hidden": "true", children: _jsx(IcClock, { size: 12 }) }) : null, s.text] })] }, i))), _jsxs("span", { className: "tx-after-more", "data-tx-part": "after-more", children: ["Details", _jsx(IcChevronRight, { size: 14 })] })] }));
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=AfterReply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AfterReply.js","sourceRoot":"","sources":["../../steps/AfterReply.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ComponentProps, type JSX } from 'react';
|
|
2
|
+
import { type ApprovalRequest } from '@corenel/ui-kit/kit';
|
|
3
|
+
import { PlanApprovalCard } from '../agentChat/PlanReview';
|
|
4
|
+
/** The kit's ApprovalCard for one chat request. Mount it keyed by the request
|
|
5
|
+
* (`request.key`), so a newer request is a new card. It acts once, only on a
|
|
6
|
+
* choice the request offers, and not in the first APPROVAL_ARM_MS after it
|
|
7
|
+
* appears. */
|
|
8
|
+
export declare function ChatApproval(p: {
|
|
9
|
+
request: ApprovalRequest;
|
|
10
|
+
onAnswer: (answer: {
|
|
11
|
+
allow: boolean;
|
|
12
|
+
always: boolean;
|
|
13
|
+
}) => void;
|
|
14
|
+
}): JSX.Element;
|
|
15
|
+
/** The plan card under the same rule: Approve and Deny do nothing in the
|
|
16
|
+
* first APPROVAL_ARM_MS after it appears. Mount it keyed by the request. */
|
|
17
|
+
export declare function ArmedPlanApproval(p: ComponentProps<typeof PlanApprovalCard>): JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ChatApproval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatApproval.d.ts","sourceRoot":"","sources":["../../steps/ChatApproval.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAS3D;;;cAGc;AACd,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CACjE,GAAG,GAAG,CAAC,OAAO,CAed;AAED;4EAC4E;AAC5E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,cAAc,CAAC,OAAO,gBAAgB,CAAC,GAAG,GAAG,CAAC,OAAO,CASzF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState } from 'react';
|
|
3
|
+
import { ApprovalCard } from '@corenel/ui-kit/kit';
|
|
4
|
+
import { PlanApprovalCard } from '../agentChat/PlanReview';
|
|
5
|
+
import { APPROVAL_ARM_MS, answerToPerm } from './approval';
|
|
6
|
+
/** True once APPROVAL_ARM_MS has passed since the calling card mounted. */
|
|
7
|
+
function useArmed() {
|
|
8
|
+
const [shownAt] = useState(() => Date.now());
|
|
9
|
+
return () => Date.now() - shownAt >= APPROVAL_ARM_MS;
|
|
10
|
+
}
|
|
11
|
+
/** The kit's ApprovalCard for one chat request. Mount it keyed by the request
|
|
12
|
+
* (`request.key`), so a newer request is a new card. It acts once, only on a
|
|
13
|
+
* choice the request offers, and not in the first APPROVAL_ARM_MS after it
|
|
14
|
+
* appears. */
|
|
15
|
+
export function ChatApproval(p) {
|
|
16
|
+
const armed = useArmed();
|
|
17
|
+
const answered = useRef(false);
|
|
18
|
+
const r = p.request;
|
|
19
|
+
const offered = new Set([r.allow.id, r.deny.id, ...r.more.map((c) => c.id)]);
|
|
20
|
+
return (_jsx(ApprovalCard, { request: r, onAnswer: (choice) => {
|
|
21
|
+
if (answered.current || !offered.has(choice) || !armed())
|
|
22
|
+
return;
|
|
23
|
+
answered.current = true;
|
|
24
|
+
p.onAnswer(answerToPerm(choice));
|
|
25
|
+
} }));
|
|
26
|
+
}
|
|
27
|
+
/** The plan card under the same rule: Approve and Deny do nothing in the
|
|
28
|
+
* first APPROVAL_ARM_MS after it appears. Mount it keyed by the request. */
|
|
29
|
+
export function ArmedPlanApproval(p) {
|
|
30
|
+
const armed = useArmed();
|
|
31
|
+
return (_jsx(PlanApprovalCard, { ...p, onApprove: () => { if (armed())
|
|
32
|
+
p.onApprove(); }, onDeny: (note) => { if (armed())
|
|
33
|
+
p.onDeny(note); } }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ChatApproval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatApproval.js","sourceRoot":"","sources":["../../steps/ChatApproval.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAiC,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,YAAY,EAAwB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D,2EAA2E;AAC3E,SAAS,QAAQ;IACf,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,eAAe,CAAC;AACvD,CAAC;AAED;;;cAGc;AACd,MAAM,UAAU,YAAY,CAAC,CAG5B;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACpB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,CACL,KAAC,YAAY,IACX,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACnB,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO;YACjE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACnC,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED;4EAC4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,CAA0C;IAC1E,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,KAAC,gBAAgB,OACX,CAAC,EACL,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,KAAK,EAAE;YAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAChD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,KAAK,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAClD,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type JSX, type ReactNode } from 'react';
|
|
2
|
+
import { type KitStatus } from '@corenel/ui-kit/kit';
|
|
3
|
+
import { type Step } from './model';
|
|
4
|
+
import type { StepKind } from './words';
|
|
5
|
+
import './rail.css';
|
|
6
|
+
export interface SubagentRow {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
agent?: string;
|
|
10
|
+
status: KitStatus;
|
|
11
|
+
problems: {
|
|
12
|
+
kind: StepKind;
|
|
13
|
+
refused: boolean;
|
|
14
|
+
}[];
|
|
15
|
+
/** "Writing 3f5a….txt", "Thinking", or the outcome words when ended. */
|
|
16
|
+
now: string;
|
|
17
|
+
turns?: number;
|
|
18
|
+
ms?: number;
|
|
19
|
+
detail: () => ReactNode;
|
|
20
|
+
/** The call_agent call this row stands for (its tool call id). A delegated
|
|
21
|
+
* callee's approval shows under this row (useApprovalSlot). Unset on
|
|
22
|
+
* spawn_agent(s) rows, which share one call id. */
|
|
23
|
+
callId?: string;
|
|
24
|
+
/** A failed row's error. */
|
|
25
|
+
error?: string;
|
|
26
|
+
/** What its steps did is not known (built from a settled result after a
|
|
27
|
+
* reload): `problems` is empty for want of records, not because none happened,
|
|
28
|
+
* so the row makes no clean claim. */
|
|
29
|
+
problemsUnknown?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface DelegationView {
|
|
32
|
+
tool: string;
|
|
33
|
+
done: boolean;
|
|
34
|
+
rows: SubagentRow[];
|
|
35
|
+
}
|
|
36
|
+
type Tone = 'ok' | 'warn' | 'bad' | 'plain';
|
|
37
|
+
export declare function outcomeWords(row: Pick<SubagentRow, 'status' | 'problems'> & Partial<Pick<SubagentRow, 'now' | 'error' | 'problemsUnknown'>>): {
|
|
38
|
+
text: string;
|
|
39
|
+
tone: Tone;
|
|
40
|
+
};
|
|
41
|
+
/** "5 finished, 5 writes refused": how many ended which way, then the problems. */
|
|
42
|
+
export declare function delegationSummary(rows: SubagentRow[]): string;
|
|
43
|
+
/** A callee's recorded step on the rail, by the rail's own status rules: an
|
|
44
|
+
* outcome-less step is running, a refusal is refused, any other not-ok failed. */
|
|
45
|
+
export declare function stepFromLiveStep(s: {
|
|
46
|
+
text: string;
|
|
47
|
+
id?: string;
|
|
48
|
+
ok?: boolean;
|
|
49
|
+
args?: Record<string, unknown>;
|
|
50
|
+
reason?: string;
|
|
51
|
+
}): Step;
|
|
52
|
+
/** The dot for a sub-agent step, by the same rules as its words: orange while one
|
|
53
|
+
* waits on an approval (the run is blocked on the person, so that wins even over
|
|
54
|
+
* a sibling's failure), red when any sub-agent failed, amber "finished with
|
|
55
|
+
* problems" when any had a step refused or failed, grey when its steps are not
|
|
56
|
+
* known (a reloaded row) or it stopped, green only when every one finished clean.
|
|
57
|
+
* `asking` is whether an approval for one of its calls is showing under a row. */
|
|
58
|
+
export declare function delegationDot(view: DelegationView, asking: boolean): {
|
|
59
|
+
status: KitStatus;
|
|
60
|
+
outcome?: 'problems' | 'unknown';
|
|
61
|
+
};
|
|
62
|
+
export declare function DelegationStep(p: {
|
|
63
|
+
view: DelegationView;
|
|
64
|
+
}): JSX.Element;
|
|
65
|
+
/** A sub-agent's detail: who it is, its steps, why any were refused, its answer,
|
|
66
|
+
* and Open full session when a saved session exists. `scope` prefixes the ids
|
|
67
|
+
* its steps open their own detail under. */
|
|
68
|
+
export declare function SubagentDetail(p: {
|
|
69
|
+
scope: string;
|
|
70
|
+
head: string;
|
|
71
|
+
steps: Step[];
|
|
72
|
+
reasons: string[];
|
|
73
|
+
answer?: string;
|
|
74
|
+
onOpenSession?: () => void;
|
|
75
|
+
}): JSX.Element;
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=Delegation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Delegation.d.ts","sourceRoot":"","sources":["../../steps/Delegation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGvF,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,OAAO,YAAY,CAAC;AAUpB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACjD,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,SAAS,CAAC;IACxB;;uDAEmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;0CAEsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE;AAEpF,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AA+B5C,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,GAAG,iBAAiB,CAAC,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAiB1K;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAS7D;AAED;kFACkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAStI;AAkDD;;;;;kFAKkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;CAAE,CAS5H;AAoBD,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAuFvE;AAED;;4CAE4C;AAC5C,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B,GAAG,GAAG,CAAC,OAAO,CAgCd"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useLayoutEffect, useState } from 'react';
|
|
3
|
+
import { KitButton, StatusDot, statusWord } from '@corenel/ui-kit/kit';
|
|
4
|
+
import { IcChevron, IcUsers } from '@corenel/ui-kit/icons';
|
|
5
|
+
import { Markdown } from '../RichContent';
|
|
6
|
+
import { stepFromLive } from './model';
|
|
7
|
+
import { firstLine } from './outcome';
|
|
8
|
+
import { StepRail, durationText, useOwnRailDot } from './StepRail';
|
|
9
|
+
import { stepTitle } from './StepDetail';
|
|
10
|
+
import { useDetailHold, useStepDetail } from './StepDetailHost';
|
|
11
|
+
import { stepDetailBody } from './useRailDetail';
|
|
12
|
+
import { ApprovalSlotContext, useApprovalSlot } from './approval';
|
|
13
|
+
import './rail.css';
|
|
14
|
+
const ERROR_MAX = 120;
|
|
15
|
+
const NOUNS = {
|
|
16
|
+
read: 'read', search: 'search', run: 'command', write: 'write', edit: 'write', delete: 'delete',
|
|
17
|
+
};
|
|
18
|
+
const PLURALS = {
|
|
19
|
+
read: 'reads', search: 'searches', command: 'commands', write: 'writes', delete: 'deletes', step: 'steps',
|
|
20
|
+
};
|
|
21
|
+
function clip(text, max) {
|
|
22
|
+
return text.length > max ? `${text.slice(0, max - 1)}…` : text;
|
|
23
|
+
}
|
|
24
|
+
/** "write refused", "2 writes refused", "command failed", grouped by kind and
|
|
25
|
+
* refusal in the order they first happened, joined by ", ". */
|
|
26
|
+
function problemWords(problems) {
|
|
27
|
+
const groups = new Map();
|
|
28
|
+
for (const p of problems) {
|
|
29
|
+
const noun = NOUNS[p.kind] ?? 'step';
|
|
30
|
+
const key = `${noun}|${p.refused ? 'r' : 'f'}`;
|
|
31
|
+
const g = groups.get(key);
|
|
32
|
+
if (g)
|
|
33
|
+
g.n++;
|
|
34
|
+
else
|
|
35
|
+
groups.set(key, { noun, refused: p.refused, n: 1 });
|
|
36
|
+
}
|
|
37
|
+
return [...groups.values()]
|
|
38
|
+
.map((g) => `${g.n === 1 ? g.noun : `${g.n} ${PLURALS[g.noun] ?? g.noun}`} ${g.refused ? 'refused' : 'failed'}`)
|
|
39
|
+
.join(', ');
|
|
40
|
+
}
|
|
41
|
+
export function outcomeWords(row) {
|
|
42
|
+
switch (row.status) {
|
|
43
|
+
case 'running':
|
|
44
|
+
case 'needs-you':
|
|
45
|
+
return { text: row.now ?? '', tone: 'plain' };
|
|
46
|
+
case 'failed': {
|
|
47
|
+
const why = clip(firstLine(row.error ?? ''), ERROR_MAX);
|
|
48
|
+
return { text: why ? `Failed · ${why}` : 'Failed', tone: 'bad' };
|
|
49
|
+
}
|
|
50
|
+
case 'stopped':
|
|
51
|
+
return { text: 'Stopped', tone: 'plain' };
|
|
52
|
+
default: {
|
|
53
|
+
const words = problemWords(row.problems);
|
|
54
|
+
if (words)
|
|
55
|
+
return { text: `Finished · ${words}`, tone: 'warn' };
|
|
56
|
+
return { text: 'Finished', tone: row.problemsUnknown ? 'plain' : 'ok' };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** "5 finished, 5 writes refused": how many ended which way, then the problems. */
|
|
61
|
+
export function delegationSummary(rows) {
|
|
62
|
+
const count = (s) => rows.filter((r) => r.status === s).length;
|
|
63
|
+
const parts = [
|
|
64
|
+
[count('done'), 'finished'], [count('failed'), 'failed'], [count('stopped'), 'stopped'],
|
|
65
|
+
[count('running') + count('needs-you'), 'running'],
|
|
66
|
+
];
|
|
67
|
+
const words = parts.filter(([n]) => n > 0).map(([n, w]) => `${n} ${w}`);
|
|
68
|
+
const problems = problemWords(rows.flatMap((r) => r.problems));
|
|
69
|
+
return [...words, ...(problems ? [problems] : [])].join(', ');
|
|
70
|
+
}
|
|
71
|
+
/** A callee's recorded step on the rail, by the rail's own status rules: an
|
|
72
|
+
* outcome-less step is running, a refusal is refused, any other not-ok failed. */
|
|
73
|
+
export function stepFromLiveStep(s) {
|
|
74
|
+
const settled = s.ok !== undefined;
|
|
75
|
+
return stepFromLive({
|
|
76
|
+
id: typeof s.id === 'string' ? s.id : '',
|
|
77
|
+
name: typeof s.text === 'string' ? s.text : '',
|
|
78
|
+
args: s.args && typeof s.args === 'object' && !Array.isArray(s.args) ? s.args : {},
|
|
79
|
+
done: settled,
|
|
80
|
+
...(settled ? { result: s.ok === false ? s.reason ?? '' : '', isError: s.ok === false } : {}),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function subagents(n) {
|
|
84
|
+
return `${n} ${n === 1 ? 'sub-agent' : 'sub-agents'}`;
|
|
85
|
+
}
|
|
86
|
+
function rowMeta(row) {
|
|
87
|
+
const turns = typeof row.turns === 'number' ? `${row.turns} ${row.turns === 1 ? 'turn' : 'turns'}` : '';
|
|
88
|
+
const ms = typeof row.ms === 'number' ? durationText(row.ms) : '';
|
|
89
|
+
return [turns, ms].filter(Boolean).join(' · ');
|
|
90
|
+
}
|
|
91
|
+
function hasProblems(row) {
|
|
92
|
+
return row.problems.length > 0;
|
|
93
|
+
}
|
|
94
|
+
function Row(p) {
|
|
95
|
+
const { row } = p;
|
|
96
|
+
const approval = useApprovalSlot(row.callId);
|
|
97
|
+
const words = outcomeWords(row);
|
|
98
|
+
// While its approval shows under it, the row is waiting on you.
|
|
99
|
+
const dot = approval ? { status: 'needs-you' } : rowDot(row);
|
|
100
|
+
const meta = rowMeta(row);
|
|
101
|
+
const label = [row.name, statusWord(row.status), words.text, meta].filter(Boolean).join(', ');
|
|
102
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "tx-subagent", "data-tx-part": "subagent", "data-tx-status": row.status, "data-tx-outcome": hasProblems(row) ? 'problems' : row.problemsUnknown ? undefined : 'clean', "data-tx-selected": p.selected ? '' : undefined, "aria-label": label, "aria-expanded": p.inline ? p.selected : undefined, onClick: p.onOpen, children: [_jsx("span", { className: "tx-subagent-dot", "data-tx-part": "subagent-dot", "data-tx-status": dot.status, "data-tx-outcome": dot.outcome, "aria-hidden": "true", children: _jsx(StatusDot, { status: dot.status, pulse: dot.status === 'running' }) }), _jsx("span", { className: "tx-subagent-name", "data-tx-part": "subagent-name", children: row.name }), words.text ? _jsx("span", { className: "tx-subagent-now", "data-tx-part": "subagent-now", "data-tx-tone": words.tone, children: words.text }) : null, meta ? _jsx("span", { className: "tx-subagent-meta", "data-tx-part": "subagent-meta", children: meta }) : null] }), approval ? _jsx("div", { className: "tx-subagent-approval", "data-tx-part": "subagent-approval", children: approval }) : null, p.inline && p.selected ? _jsx("div", { className: "tx-subagent-inline", "data-tx-part": "subagent-inline", children: row.detail() }) : null] }));
|
|
103
|
+
}
|
|
104
|
+
/** The dot for a sub-agent step, by the same rules as its words: orange while one
|
|
105
|
+
* waits on an approval (the run is blocked on the person, so that wins even over
|
|
106
|
+
* a sibling's failure), red when any sub-agent failed, amber "finished with
|
|
107
|
+
* problems" when any had a step refused or failed, grey when its steps are not
|
|
108
|
+
* known (a reloaded row) or it stopped, green only when every one finished clean.
|
|
109
|
+
* `asking` is whether an approval for one of its calls is showing under a row. */
|
|
110
|
+
export function delegationDot(view, asking) {
|
|
111
|
+
const { rows } = view;
|
|
112
|
+
if (asking || rows.some((r) => r.status === 'needs-you'))
|
|
113
|
+
return { status: 'needs-you' };
|
|
114
|
+
if (rows.some((r) => r.status === 'failed'))
|
|
115
|
+
return { status: 'failed' };
|
|
116
|
+
if (!view.done || rows.some((r) => r.status === 'running'))
|
|
117
|
+
return { status: 'running' };
|
|
118
|
+
if (rows.some(hasProblems))
|
|
119
|
+
return { status: 'done', outcome: 'problems' };
|
|
120
|
+
if (rows.some((r) => r.status === 'stopped'))
|
|
121
|
+
return { status: 'stopped' };
|
|
122
|
+
if (rows.length === 0 || rows.some((r) => r.problemsUnknown))
|
|
123
|
+
return { status: 'done', outcome: 'unknown' };
|
|
124
|
+
return { status: 'done' };
|
|
125
|
+
}
|
|
126
|
+
/** A row's own dot, by the same rules: a finished row with problems is amber and
|
|
127
|
+
* a reloaded row whose steps are unknown is grey, never a green it cannot claim. */
|
|
128
|
+
function rowDot(row) {
|
|
129
|
+
if (row.status !== 'done')
|
|
130
|
+
return { status: row.status };
|
|
131
|
+
if (hasProblems(row))
|
|
132
|
+
return { status: 'done', outcome: 'problems' };
|
|
133
|
+
return row.problemsUnknown ? { status: 'done', outcome: 'unknown' } : { status: 'done' };
|
|
134
|
+
}
|
|
135
|
+
/* aria-hidden: the line's own label says the state, and a skin may draw a
|
|
136
|
+
* text mark on this dot (handheld), which must not be read aloud. */
|
|
137
|
+
function OwnDot({ dot }) {
|
|
138
|
+
return (_jsx("span", { className: "tx-step-dot", "data-tx-part": "step-dot", "data-tx-own-dot": "", "data-tx-status": dot.status, "data-tx-outcome": dot.outcome, "aria-hidden": "true", children: _jsx(StatusDot, { status: dot.status, pulse: dot.status === 'running' }) }));
|
|
139
|
+
}
|
|
140
|
+
export function DelegationStep(p) {
|
|
141
|
+
const { view } = p;
|
|
142
|
+
const { rows } = view;
|
|
143
|
+
// On a rail this step draws its own dot (the rail's would follow the call's
|
|
144
|
+
// result text, which says nothing of a refused or failed callee).
|
|
145
|
+
const onRail = useOwnRailDot();
|
|
146
|
+
const slot = useContext(ApprovalSlotContext);
|
|
147
|
+
const asking = !view.done && !!slot && rows.some((r) => !!r.callId && r.callId === slot.callId);
|
|
148
|
+
const dot = onRail ? _jsx(OwnDot, { dot: delegationDot(view, asking) }) : null;
|
|
149
|
+
const detail = useStepDetail();
|
|
150
|
+
const [expanded, setExpanded] = useState(false);
|
|
151
|
+
// With no detail host the row's detail opens inline, under the row.
|
|
152
|
+
const [inlineId, setInlineId] = useState(null);
|
|
153
|
+
const openId = detail ? detail.openId : inlineId;
|
|
154
|
+
const openRow = rows.find((r) => r.id === openId);
|
|
155
|
+
// While a row's detail is open the host draws it from this render's row, so a
|
|
156
|
+
// running callee's detail follows it; when the row goes, the detail closes.
|
|
157
|
+
useDetailHold(detail && openRow ? openRow.id : null);
|
|
158
|
+
useLayoutEffect(() => {
|
|
159
|
+
if (detail && openRow)
|
|
160
|
+
detail.register(openRow.id, { body: openRow.detail, status: openRow.status });
|
|
161
|
+
});
|
|
162
|
+
const open = (row) => {
|
|
163
|
+
if (detail)
|
|
164
|
+
detail.open({ id: row.id, title: row.name, status: row.status, body: row.detail });
|
|
165
|
+
else
|
|
166
|
+
setInlineId((cur) => (cur === row.id ? null : row.id));
|
|
167
|
+
};
|
|
168
|
+
const list = (_jsx("div", { className: "tx-subagent-list", "data-tx-part": "subagent-list", children: rows.map((r) => _jsx(Row, { row: r, selected: openId === r.id, inline: !detail, onOpen: () => open(r) }, r.id)) }));
|
|
169
|
+
if (view.done) {
|
|
170
|
+
const summary = delegationSummary(rows);
|
|
171
|
+
const label = ['Delegated', subagents(rows.length), summary].filter(Boolean).join(' · ');
|
|
172
|
+
const tone = rows.some((r) => r.status === 'failed') ? 'bad' : rows.some(hasProblems) ? 'warn' : 'plain';
|
|
173
|
+
return (_jsxs("div", { className: "tx-delegation", "data-tx-part": "delegation", "data-tx-done": "", children: [dot, _jsxs("button", { type: "button", className: "tx-step-line tx-delegation-line", "data-tx-part": "delegation-line", "aria-expanded": expanded, "aria-label": label, onClick: () => setExpanded((e) => !e), children: [_jsx("span", { className: "tx-step-icon", "data-tx-part": "step-icon", "aria-hidden": "true", children: _jsx(IcUsers, { size: 14 }) }), _jsx("span", { className: "tx-step-verb", "data-tx-part": "step-verb", children: "Delegated" }), _jsx("span", { className: "tx-delegation-sum", "data-tx-part": "delegation-sum", "data-tx-tone": tone, children: [subagents(rows.length), summary].filter(Boolean).join(' · ') }), _jsx("span", { className: "tx-step-chev", "data-tx-part": "step-chev", "aria-hidden": "true", children: _jsx(IcChevron, { size: 14 }) })] }), expanded ? list : null] }));
|
|
174
|
+
}
|
|
175
|
+
const ended = rows.filter((r) => r.status !== 'running' && r.status !== 'needs-you').length;
|
|
176
|
+
return (_jsxs("div", { className: "tx-delegation", "data-tx-part": "delegation", children: [dot, _jsxs("div", { className: "tx-delegation-head", "data-tx-part": "delegation-head", children: [_jsx("span", { className: "tx-step-icon", "data-tx-part": "step-icon", "aria-hidden": "true", children: _jsx(IcUsers, { size: 14 }) }), _jsx("span", { className: "tx-delegation-title", "data-tx-part": "delegation-title", children: rows.length ? `Delegating · ${subagents(rows.length)}` : 'Delegating · starting' })] }), rows.length ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "tx-delegation-bar", "data-tx-part": "delegation-bar", "aria-hidden": "true", children: rows.map((r) => (_jsx("span", { className: "tx-delegation-seg", "data-tx-part": "delegation-bar-seg", "data-tx-status": r.status, "data-tx-outcome": r.status === 'done' && hasProblems(r) ? 'problems' : undefined }, r.id))) }), _jsx("span", { className: "tx-delegation-count", "data-tx-part": "delegation-count", children: `${ended} of ${rows.length} done` }), list] })) : null] }));
|
|
177
|
+
}
|
|
178
|
+
/** A sub-agent's detail: who it is, its steps, why any were refused, its answer,
|
|
179
|
+
* and Open full session when a saved session exists. `scope` prefixes the ids
|
|
180
|
+
* its steps open their own detail under. */
|
|
181
|
+
export function SubagentDetail(p) {
|
|
182
|
+
const detail = useStepDetail();
|
|
183
|
+
const openStep = (s) => {
|
|
184
|
+
detail?.open({ id: `${p.scope}:${s.id}`, title: stepTitle(s), status: s.status, body: stepDetailBody(s, {}) });
|
|
185
|
+
};
|
|
186
|
+
return (_jsxs("div", { className: "tx-detail tx-subagent-detail", "data-tx-part": "subagent-detail", children: [_jsx("div", { className: "tx-subagent-detail-head", "data-tx-part": "subagent-detail-head", children: p.head }), p.steps.length ? (_jsx(StepRail, { items: p.steps.map((s) => ({ kind: 'step', step: s, peek: false })), onOpenStep: openStep })) : null, p.reasons.length ? (_jsxs("section", { className: "tx-subagent-section", "data-tx-part": "subagent-detail-section", "data-tx-tone": "bad", children: [_jsx("h3", { className: "tx-subagent-section-title", "data-tx-part": "subagent-detail-title", children: "Why it was refused" }), _jsx("ul", { className: "tx-subagent-reasons", "data-tx-part": "subagent-detail-reasons", children: p.reasons.map((r, i) => _jsx("li", { children: r }, i)) })] })) : null, p.answer ? (_jsxs("section", { className: "tx-subagent-section", "data-tx-part": "subagent-detail-section", children: [_jsx("h3", { className: "tx-subagent-section-title", "data-tx-part": "subagent-detail-title", children: "Its answer" }), _jsx(Markdown, { text: p.answer })] })) : null, p.onOpenSession ? (_jsx("div", { className: "tx-detail-actions", "data-tx-part": "detail-actions", children: _jsx(KitButton, { variant: "text", onClick: p.onOpenSession, children: "Open full session" }) })) : null] }));
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=Delegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Delegation.js","sourceRoot":"","sources":["../../steps/Delegation.tsx"],"names":[],"mappings":"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"}
|