@corenel/web-ui 0.7.0 → 0.9.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.
Files changed (108) hide show
  1. package/dist/Composer.d.ts.map +1 -1
  2. package/dist/Composer.js +184 -172
  3. package/dist/Composer.js.map +1 -1
  4. package/dist/ContextBar.d.ts +1 -4
  5. package/dist/ContextBar.d.ts.map +1 -1
  6. package/dist/ContextBar.js +2 -2
  7. package/dist/ContextBar.js.map +1 -1
  8. package/dist/ContextManager.d.ts +3 -6
  9. package/dist/ContextManager.d.ts.map +1 -1
  10. package/dist/ContextManager.js +58 -10
  11. package/dist/ContextManager.js.map +1 -1
  12. package/dist/SummaryTranscript.d.ts +11 -1
  13. package/dist/SummaryTranscript.d.ts.map +1 -1
  14. package/dist/SummaryTranscript.js +47 -10
  15. package/dist/SummaryTranscript.js.map +1 -1
  16. package/dist/ToolFold.d.ts +9 -0
  17. package/dist/ToolFold.d.ts.map +1 -0
  18. package/dist/ToolFold.js +32 -0
  19. package/dist/ToolFold.js.map +1 -0
  20. package/dist/Transcript.d.ts +30 -1
  21. package/dist/Transcript.d.ts.map +1 -1
  22. package/dist/Transcript.js +132 -23
  23. package/dist/Transcript.js.map +1 -1
  24. package/dist/agentChat/AgentChat.d.ts +19 -5
  25. package/dist/agentChat/AgentChat.d.ts.map +1 -1
  26. package/dist/agentChat/AgentChat.js +174 -91
  27. package/dist/agentChat/AgentChat.js.map +1 -1
  28. package/dist/agentChat/OptionsDrawer.d.ts +0 -23
  29. package/dist/agentChat/OptionsDrawer.d.ts.map +1 -1
  30. package/dist/agentChat/OptionsDrawer.js +10 -45
  31. package/dist/agentChat/OptionsDrawer.js.map +1 -1
  32. package/dist/agentChat/PlanReview.d.ts +56 -0
  33. package/dist/agentChat/PlanReview.d.ts.map +1 -0
  34. package/dist/agentChat/PlanReview.js +269 -0
  35. package/dist/agentChat/PlanReview.js.map +1 -0
  36. package/dist/agentChat/SkillsSection.js +4 -2
  37. package/dist/agentChat/SkillsSection.js.map +1 -1
  38. package/dist/agentChat/controller.d.ts +12 -3
  39. package/dist/agentChat/controller.d.ts.map +1 -1
  40. package/dist/agentChat/controller.js.map +1 -1
  41. package/dist/arrivalEffect.d.ts +28 -0
  42. package/dist/arrivalEffect.d.ts.map +1 -0
  43. package/dist/arrivalEffect.js +114 -0
  44. package/dist/arrivalEffect.js.map +1 -0
  45. package/dist/commandTurn.d.ts.map +1 -1
  46. package/dist/commandTurn.js +3 -2
  47. package/dist/commandTurn.js.map +1 -1
  48. package/dist/fx/AsteroidsOverlay.d.ts +6 -0
  49. package/dist/fx/AsteroidsOverlay.d.ts.map +1 -0
  50. package/dist/fx/AsteroidsOverlay.js +166 -0
  51. package/dist/fx/AsteroidsOverlay.js.map +1 -0
  52. package/dist/fx/FlapRow.d.ts +8 -0
  53. package/dist/fx/FlapRow.d.ts.map +1 -0
  54. package/dist/fx/FlapRow.js +12 -0
  55. package/dist/fx/FlapRow.js.map +1 -0
  56. package/dist/fx/FxText.d.ts +11 -0
  57. package/dist/fx/FxText.d.ts.map +1 -0
  58. package/dist/fx/FxText.js +50 -0
  59. package/dist/fx/FxText.js.map +1 -0
  60. package/dist/fx/LiveAnswer.d.ts +17 -0
  61. package/dist/fx/LiveAnswer.d.ts.map +1 -0
  62. package/dist/fx/LiveAnswer.js +298 -0
  63. package/dist/fx/LiveAnswer.js.map +1 -0
  64. package/dist/fx/MatrixRain.d.ts +5 -0
  65. package/dist/fx/MatrixRain.d.ts.map +1 -0
  66. package/dist/fx/MatrixRain.js +73 -0
  67. package/dist/fx/MatrixRain.js.map +1 -0
  68. package/dist/fx/NetsplitJoin.d.ts +3 -0
  69. package/dist/fx/NetsplitJoin.d.ts.map +1 -0
  70. package/dist/fx/NetsplitJoin.js +13 -0
  71. package/dist/fx/NetsplitJoin.js.map +1 -0
  72. package/dist/fx/arrivalModes.d.ts +27 -0
  73. package/dist/fx/arrivalModes.d.ts.map +1 -0
  74. package/dist/fx/arrivalModes.js +107 -0
  75. package/dist/fx/arrivalModes.js.map +1 -0
  76. package/dist/fx/tail.d.ts +16 -0
  77. package/dist/fx/tail.d.ts.map +1 -0
  78. package/dist/fx/tail.js +54 -0
  79. package/dist/fx/tail.js.map +1 -0
  80. package/dist/fx/useReveal.d.ts +2 -0
  81. package/dist/fx/useReveal.d.ts.map +1 -0
  82. package/dist/fx/useReveal.js +59 -0
  83. package/dist/fx/useReveal.js.map +1 -0
  84. package/dist/observed.d.ts +16 -0
  85. package/dist/observed.d.ts.map +1 -0
  86. package/dist/observed.js +33 -0
  87. package/dist/observed.js.map +1 -0
  88. package/dist/toolRender.d.ts +6 -2
  89. package/dist/toolRender.d.ts.map +1 -1
  90. package/dist/toolRender.js +27 -17
  91. package/dist/toolRender.js.map +1 -1
  92. package/dist/transcriptSkin.d.ts +23 -0
  93. package/dist/transcriptSkin.d.ts.map +1 -0
  94. package/dist/transcriptSkin.js +255 -0
  95. package/dist/transcriptSkin.js.map +1 -0
  96. package/dist/transcriptSkinCss.d.ts +4 -0
  97. package/dist/transcriptSkinCss.d.ts.map +1 -0
  98. package/dist/transcriptSkinCss.js +136 -0
  99. package/dist/transcriptSkinCss.js.map +1 -0
  100. package/dist/usageSummary.d.ts +31 -0
  101. package/dist/usageSummary.d.ts.map +1 -0
  102. package/dist/usageSummary.js +39 -0
  103. package/dist/usageSummary.js.map +1 -0
  104. package/dist/verificationView.d.ts +3 -0
  105. package/dist/verificationView.d.ts.map +1 -0
  106. package/dist/verificationView.js +37 -0
  107. package/dist/verificationView.js.map +1 -0
  108. package/package.json +5 -5
@@ -0,0 +1,255 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* Transcript skin -- how the chat transcript LOOKS, separate from how much tool
3
+ * detail it shows (transcriptView.tsx). Persisted per browser and kept in step
4
+ * across every mounted transcript, the same way the detail setting is.
5
+ *
6
+ * A skin paints in two layers, both scoped to the transcript subtree:
7
+ * - tokens: CSS custom properties set on TranscriptSkinRoot. Transcript parts
8
+ * already read --surface-*, --text-*, --border-*, and the --tx-* shape tokens
9
+ * fall back to today's values, so `default` (no tokens) is unchanged.
10
+ * - decorations: SKIN_CSS[skin], pseudo-elements keyed on data-tx-skin and
11
+ * data-tx-part, mounted only while the skin is active. */
12
+ import { useCallback, useEffect, useState } from 'react';
13
+ import { SKIN_CSS } from './transcriptSkinCss';
14
+ export const TRANSCRIPT_SKINS = ['default', 'terminal', 'crt', 'minimal', 'paper', 'blueprint', 'irc', 'handheld', 'receipt', 'mission', 'retro'];
15
+ export const TRANSCRIPT_SKIN_LABELS = {
16
+ default: 'Default', terminal: 'Terminal', crt: 'CRT', minimal: 'Minimal', paper: 'Paper', blueprint: 'Blueprint', irc: 'IRC',
17
+ handheld: 'Handheld', receipt: 'Receipt', mission: 'Mission control', retro: 'Retro desktop',
18
+ };
19
+ const KEY = 'prompd.web.transcriptSkin';
20
+ const EVENT = 'prompd:transcriptSkin';
21
+ export function isTranscriptSkin(v) {
22
+ return typeof v === 'string' && TRANSCRIPT_SKINS.includes(v);
23
+ }
24
+ function read() {
25
+ try {
26
+ const v = localStorage.getItem(KEY);
27
+ return isTranscriptSkin(v) ? v : 'default';
28
+ }
29
+ catch {
30
+ return 'default';
31
+ }
32
+ }
33
+ /** Read/write the persisted skin. Cross-instance updates sync via a `storage`
34
+ * event + a same-tab custom event, so every mounted transcript stays in step. */
35
+ export function useTranscriptSkin() {
36
+ const [skin, setSkinState] = useState(read);
37
+ useEffect(() => {
38
+ const sync = () => setSkinState(read());
39
+ window.addEventListener('storage', sync);
40
+ window.addEventListener(EVENT, sync);
41
+ return () => {
42
+ window.removeEventListener('storage', sync);
43
+ window.removeEventListener(EVENT, sync);
44
+ };
45
+ }, []);
46
+ const setSkin = useCallback((s) => {
47
+ setSkinState(s);
48
+ try {
49
+ localStorage.setItem(KEY, s);
50
+ }
51
+ catch { /* storage blocked: this tab still switches */ }
52
+ window.dispatchEvent(new CustomEvent(EVENT));
53
+ }, []);
54
+ return [skin, setSkin];
55
+ }
56
+ /** The `/skin [id]` command, as a pure function so it is testable without a
57
+ * chat. `next` is the skin to switch to, or null to leave it alone. */
58
+ export function skinCommand(arg, current) {
59
+ const want = arg.trim().toLowerCase();
60
+ const list = TRANSCRIPT_SKINS.map((s) => (s === current ? `${s} (current)` : s)).join(', ');
61
+ if (!want)
62
+ return { next: null, note: `Transcript skins: ${list}. Use \`/skin <name>\` to switch.` };
63
+ if (isTranscriptSkin(want))
64
+ return { next: want, note: `Transcript skin set to ${TRANSCRIPT_SKIN_LABELS[want]}.` };
65
+ return { next: null, note: `No skin named "${arg.trim()}". Skins: ${TRANSCRIPT_SKINS.join(', ')}.` };
66
+ }
67
+ const MONO = "'JetBrains Mono', ui-monospace, 'SF Mono', Consolas, monospace";
68
+ /* Token maps. Keys are custom properties; `--tx-*` are transcript-only shape
69
+ * tokens whose fallbacks (in Transcript.tsx / toolRender.tsx) are today's
70
+ * values. Values follow the approved mockup. */
71
+ const TOKENS = {
72
+ terminal: {
73
+ '--surface-1': '#0d1014', '--surface-2': '#0d1014',
74
+ '--text-primary': '#e8edf4', '--text-secondary': '#8b98a8', '--text-tertiary': '#8593a3', '--text-disabled': '#7a8797',
75
+ '--border-subtle': '#26303b', '--border-default': '#26303b', '--border-accent': '#26303b',
76
+ '--accent': '#5fb3f9', '--accent-soft': 'transparent',
77
+ '--danger': '#ff7b72', '--danger-soft': 'transparent', '--success': '#7ee787', '--warning': '#f2c46d',
78
+ '--font-mono': MONO,
79
+ '--tx-font': MONO, '--tx-size': '13px', '--tx-line': '1.55', '--tx-bg': '#0d1014', '--tx-fg': '#d4dae3',
80
+ '--tx-tool-body-pad': '2px 0 6px 4ch',
81
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0',
82
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'normal',
83
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '1px 0',
84
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#7ee787',
85
+ },
86
+ crt: {
87
+ '--surface-1': '#0a0703', '--surface-2': '#120c05',
88
+ '--text-primary': '#ffb347', '--text-secondary': '#d99a3f', '--text-tertiary': '#a8772f', '--text-disabled': '#8a6226',
89
+ '--border-subtle': '#3a2a12', '--border-default': '#3a2a12', '--border-accent': '#3a2a12',
90
+ '--accent': '#ffd08a', '--accent-soft': 'transparent',
91
+ '--danger': '#ff6a3d', '--danger-soft': 'transparent', '--success': '#ffb347', '--warning': '#ffd08a',
92
+ '--font-mono': "'VT323', " + MONO,
93
+ '--tx-font': "'VT323', " + MONO, '--tx-size': '22px', '--tx-line': '1.25',
94
+ '--tx-bg': '#0a0703', '--tx-bg-image': 'radial-gradient(ellipse at center, #1a1206 0%, #0a0703 80%)', '--tx-fg': '#ffb347',
95
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0',
96
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'normal',
97
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '1px 0',
98
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#ffb347',
99
+ },
100
+ minimal: {
101
+ '--surface-1': '#191817', '--surface-2': '#191817',
102
+ '--text-primary': '#e9e6e1', '--text-secondary': '#a8a29a', '--text-tertiary': '#8a857e', '--text-disabled': '#6b665f',
103
+ '--border-subtle': '#2f2c29', '--border-default': '#2f2c29', '--border-accent': '#2f2c29',
104
+ '--accent': '#e8b48f', '--accent-soft': '#262422',
105
+ '--danger': '#e0776b', '--danger-soft': 'transparent', '--success': '#a8a29a', '--warning': '#d9b36c',
106
+ '--tx-font': 'inherit', '--tx-size': '14px', '--tx-line': '1.65', '--tx-bg': '#191817', '--tx-fg': '#e9e6e1',
107
+ '--tx-user-bg': '#262422', '--tx-user-border': '0', '--tx-user-radius': '12px', '--tx-user-pad': '6px 12px',
108
+ '--tx-user-align': 'flex-end', '--tx-user-maxw': '85%', '--tx-user-style': 'normal',
109
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '2px 0',
110
+ '--tx-glyph-display': 'none', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#a8a29a',
111
+ },
112
+ paper: {
113
+ '--surface-1': '#f7f3ea', '--surface-2': '#ece5d6',
114
+ '--text-primary': '#2a2621', '--text-secondary': '#5b5247', '--text-tertiary': '#655b4f', '--text-disabled': '#6b6155',
115
+ '--border-subtle': '#ddd3c2', '--border-default': '#cfc3ae', '--border-accent': '#b9ac98',
116
+ '--accent': '#8a5a2b', '--accent-soft': 'transparent',
117
+ '--danger': '#a8412f', '--danger-soft': 'transparent', '--success': '#6d8a5f', '--warning': '#9a7a2f',
118
+ '--tx-font': "'Source Serif 4', Georgia, 'Times New Roman', serif", '--tx-size': '16px', '--tx-line': '1.65',
119
+ '--tx-bg': '#f7f3ea', '--tx-fg': '#2a2621',
120
+ '--tx-pad': '14px max(18px, calc((100% - 64ch) / 2))',
121
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0 0 0 14px',
122
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'italic',
123
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '3px 0',
124
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#6d8a5f',
125
+ },
126
+ blueprint: {
127
+ '--surface-1': '#0e3a6b', '--surface-2': '#0e3a6b',
128
+ '--text-primary': '#ffffff', '--text-secondary': '#cfe4fb', '--text-tertiary': '#a9cdf2', '--text-disabled': '#7fb0e0',
129
+ '--border-subtle': 'rgba(159,208,255,0.5)', '--border-default': '#9fd0ff', '--border-accent': '#9fd0ff',
130
+ '--accent': '#7fc4ff', '--accent-soft': 'rgba(14,58,107,0.85)',
131
+ '--danger': '#ff9f7a', '--danger-soft': 'rgba(14,58,107,0.92)', '--success': '#9fd0ff', '--warning': '#ffe28a',
132
+ '--font-mono': MONO,
133
+ '--tx-font': MONO, '--tx-size': '13px', '--tx-line': '1.55',
134
+ '--tx-bg': '#0e3a6b', '--tx-fg': '#dcecff',
135
+ '--tx-bg-image': 'linear-gradient(rgba(170,210,255,0.16) 1px, transparent 1px), linear-gradient(90deg, rgba(170,210,255,0.16) 1px, transparent 1px), linear-gradient(rgba(170,210,255,0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(170,210,255,0.07) 1px, transparent 1px)',
136
+ '--tx-bg-size': '80px 80px, 80px 80px, 16px 16px, 16px 16px',
137
+ '--tx-tool-overflow': 'visible',
138
+ '--tx-user-bg': 'rgba(14,58,107,0.85)', '--tx-user-border': '1px dashed #9fd0ff', '--tx-user-radius': '0', '--tx-user-pad': '6px 12px',
139
+ '--tx-user-align': 'flex-end', '--tx-user-maxw': '85%', '--tx-user-style': 'normal',
140
+ '--tx-tool-bg': 'rgba(14,58,107,0.92)', '--tx-tool-border': '1px solid #9fd0ff', '--tx-tool-radius': '0', '--tx-tool-pad': '5px 10px',
141
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#9fd0ff',
142
+ },
143
+ /* A chat-client log: one line per speaker, tool calls as "* agent" action
144
+ * lines (the nicks and prefixes live in SKIN_CSS.irc). No timestamps: a
145
+ * turn records no time, and an invented one would be a false statement. */
146
+ irc: {
147
+ '--surface-1': '#101418', '--surface-2': '#101418',
148
+ '--text-primary': '#e6edf3', '--text-secondary': '#8b949e', '--text-tertiary': '#808b96', '--text-disabled': '#76818c',
149
+ '--border-subtle': '#1f262d', '--border-default': '#1f262d', '--border-accent': '#1f262d',
150
+ '--accent': '#79c0ff', '--accent-soft': 'transparent',
151
+ '--danger': '#ff7b72', '--danger-soft': 'transparent', '--success': '#e3b341', '--warning': '#e3b341',
152
+ '--font-mono': MONO,
153
+ '--tx-font': MONO, '--tx-size': '13px', '--tx-line': '1.6', '--tx-bg': '#101418', '--tx-fg': '#c8d0d8',
154
+ '--tx-tool-body-pad': '0 0 4px 4ch',
155
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0',
156
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'normal',
157
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '0 0 0 2ch',
158
+ '--tx-glyph-display': 'none', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#e3b341',
159
+ },
160
+ /* A four-green handheld screen; answers sit in a chunky text box (CSS). */
161
+ handheld: {
162
+ '--surface-1': '#9bbc0f', '--surface-2': '#8bac0f',
163
+ '--text-primary': '#0f380f', '--text-secondary': '#0f380f', '--text-tertiary': '#1f4a1f', '--text-disabled': '#1f4a1f',
164
+ '--border-subtle': '#306230', '--border-default': '#306230', '--border-accent': '#306230',
165
+ '--accent': '#0f380f', '--accent-soft': '#8bac0f',
166
+ '--danger': '#0f380f', '--danger-soft': 'transparent', '--success': '#306230', '--warning': '#306230',
167
+ '--font-mono': "'VT323', " + MONO,
168
+ '--tx-font': "'VT323', " + MONO, '--tx-size': '18px', '--tx-line': '1.2', '--tx-bg': '#9bbc0f', '--tx-fg': '#0f380f',
169
+ '--tx-user-bg': '#8bac0f', '--tx-user-border': '2px solid #306230', '--tx-user-radius': '0', '--tx-user-pad': '6px 9px',
170
+ '--tx-user-align': 'flex-end', '--tx-user-maxw': '85%', '--tx-user-style': 'normal',
171
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '2px 0',
172
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-bg': '#306230', '--tx-glyph-fg': '#9bbc0f', '--tx-glyph-radius': '0',
173
+ },
174
+ /* A thermal slip on a counter: the transcript list is the paper (CSS). */
175
+ receipt: {
176
+ '--surface-1': '#fbfaf6', '--surface-2': '#f1eee6',
177
+ '--text-primary': '#222222', '--text-secondary': '#444444', '--text-tertiary': '#666666', '--text-disabled': '#777777',
178
+ '--border-subtle': '#bbbbbb', '--border-default': '#bbbbbb', '--border-accent': '#bbbbbb',
179
+ '--accent': '#222222', '--accent-soft': 'transparent',
180
+ '--danger': '#a3261b', '--danger-soft': 'transparent', '--success': '#222222', '--warning': '#6b5300',
181
+ '--font-mono': "'Courier Prime', 'Courier New', monospace",
182
+ '--tx-font': "'Courier Prime', 'Courier New', monospace", '--tx-size': '12.5px', '--tx-line': '1.45',
183
+ '--tx-bg': '#d9d4cc', '--tx-fg': '#222222',
184
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0',
185
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'italic',
186
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '1px 0',
187
+ '--tx-glyph-display': 'none', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#222222',
188
+ },
189
+ /* A console log: FLIGHT / CAPCOM roles, GO / NO-GO events, T+ working time. */
190
+ mission: {
191
+ '--surface-1': '#0b1117', '--surface-2': '#0f1821',
192
+ '--text-primary': '#d7e3ee', '--text-secondary': '#6f8599', '--text-tertiary': '#8098ad', '--text-disabled': '#7890a5',
193
+ '--border-subtle': '#22313f', '--border-default': '#22313f', '--border-accent': '#22313f',
194
+ '--accent': '#6cc4ff', '--accent-soft': 'transparent',
195
+ '--danger': '#ff5d5d', '--danger-soft': 'transparent', '--success': '#3ddc84', '--warning': '#ffb454',
196
+ '--font-mono': MONO,
197
+ '--tx-font': MONO, '--tx-size': '12.5px', '--tx-line': '1.5', '--tx-bg': '#0b1117', '--tx-fg': '#d7e3ee',
198
+ '--tx-user-bg': 'transparent', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '0',
199
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'normal',
200
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '2px 0',
201
+ '--tx-glyph-display': 'none', '--tx-glyph-bg': 'transparent', '--tx-glyph-fg': '#3ddc84',
202
+ },
203
+ /* Grey bevels on a teal desktop: each turn a window (CSS). */
204
+ retro: {
205
+ '--surface-1': '#ffffff', '--surface-2': '#c0c0c0',
206
+ '--text-primary': '#000000', '--text-secondary': '#333333', '--text-tertiary': '#333333', '--text-disabled': '#333333',
207
+ '--border-subtle': '#808080', '--border-default': '#808080', '--border-accent': '#808080',
208
+ '--accent': '#000080', '--accent-soft': '#ffffff',
209
+ '--danger': '#e00000', '--danger-soft': '#c0c0c0', '--success': '#008000', '--warning': '#806000',
210
+ '--tx-font': "Tahoma, Verdana, 'Segoe UI', sans-serif", '--tx-size': '12.5px', '--tx-line': '1.45',
211
+ '--tx-bg': '#008080', '--tx-fg': '#000000',
212
+ '--tx-user-bg': '#ffffff', '--tx-user-border': '0', '--tx-user-radius': '0', '--tx-user-pad': '6px 8px',
213
+ '--tx-user-align': 'stretch', '--tx-user-maxw': 'none', '--tx-user-style': 'normal',
214
+ '--tx-tool-bg': 'transparent', '--tx-tool-border': '0', '--tx-tool-radius': '0', '--tx-tool-pad': '2px 4px',
215
+ '--tx-glyph-display': 'inline-flex', '--tx-glyph-fg': '#ffffff', '--tx-glyph-radius': '0',
216
+ // Chips sit in the white answer box, not on the teal desktop.
217
+ '--surface-3': '#dcdcdc', '--text-on-accent': '#ffffff',
218
+ },
219
+ };
220
+ /* App tokens the transcript reads that a skin rarely wants to pick by hand
221
+ * (inline-code chips, warning tints, the Apply button). Derived from the skin's
222
+ * own colours so none of the app theme leaks in; a skin's map can still set
223
+ * any of them explicitly, and wins. */
224
+ const DERIVED = {
225
+ '--surface-3': 'color-mix(in srgb, var(--text-primary) 14%, var(--tx-bg))',
226
+ '--warning-soft': 'color-mix(in srgb, var(--warning) 16%, var(--tx-bg))',
227
+ '--text-on-accent': 'var(--tx-bg)',
228
+ '--grad-brand': 'var(--accent)',
229
+ '--brand-violet': 'var(--accent)',
230
+ };
231
+ /** Wraps a transcript and applies the skin to it and nothing else. `default`
232
+ * renders a plain wrapper: no tokens, no stylesheet, so today's look is
233
+ * untouched. */
234
+ export function TranscriptSkinRoot({ skin, children, style }) {
235
+ if (skin === 'default') {
236
+ return _jsx("div", { "data-tx-skin": "default", style: style, children: children });
237
+ }
238
+ const rootStyle = {
239
+ ...DERIVED,
240
+ ...TOKENS[skin],
241
+ background: 'var(--tx-bg)',
242
+ backgroundImage: 'var(--tx-bg-image, none)',
243
+ backgroundSize: 'var(--tx-bg-size, auto)',
244
+ color: 'var(--tx-fg)',
245
+ fontFamily: 'var(--tx-font)',
246
+ fontSize: 'var(--tx-size)',
247
+ lineHeight: 'var(--tx-line)',
248
+ padding: 'var(--tx-pad, 14px)',
249
+ borderRadius: 'var(--radius-md)',
250
+ position: 'relative',
251
+ ...style,
252
+ };
253
+ return (_jsxs("div", { "data-tx-skin": skin, style: rootStyle, children: [_jsx("style", { children: SKIN_CSS[skin] }), children] }));
254
+ }
255
+ //# sourceMappingURL=transcriptSkin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptSkin.js","sourceRoot":"","sources":["../transcriptSkin.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TranscriptSkin } from './transcriptSkin';
2
+ export declare const IRC_AGENT_NICK = "agent";
3
+ export declare const SKIN_CSS: Record<TranscriptSkin, string>;
4
+ //# sourceMappingURL=transcriptSkinCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptSkinCss.d.ts","sourceRoot":"","sources":["../transcriptSkinCss.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA8DvD,eAAO,MAAM,cAAc,UAAU,CAAC;AAyEtC,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAYnD,CAAC"}
@@ -0,0 +1,136 @@
1
+ const T = (skin) => `[data-tx-skin="${skin}"]`;
2
+ const terminal = `
3
+ ${T('terminal')} [data-tx-part="user"]::before { content: "you ~ % "; color: #5fb3f9; }
4
+ ${T('terminal')} [data-tx-part="assistant"] { padding-left: 2ch; border-left: 1px solid #26303b; }
5
+ ${T('terminal')} [data-tx-part="tool-name"] { color: #7ee787; }
6
+ ${T('terminal')} [data-tx-status="error"] { --tx-glyph-fg: #ff7b72; }
7
+ ${T('terminal')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #ff7b72; }
8
+ ${T('terminal')} [data-tx-part="stats"]::before { content: "-- "; }
9
+ `;
10
+ const crt = `
11
+ @import url('https://fonts.googleapis.com/css2?family=VT323&display=swap');
12
+ ${T('crt')} { text-shadow: 0 0 4px rgba(255,170,60,0.55), 0 0 12px rgba(255,140,20,0.25); }
13
+ ${T('crt')}::after { content: ""; position: absolute; inset: 0; pointer-events: none; border-radius: inherit;
14
+ background: repeating-linear-gradient(to bottom, rgba(0,0,0,0.28) 0 1px, transparent 1px 3px);
15
+ box-shadow: inset 0 0 90px rgba(0,0,0,0.85); }
16
+ ${T('crt')} [data-tx-part="user"]::before { content: "> "; }
17
+ ${T('crt')} [data-tx-part="tool-name"] { text-transform: uppercase; }
18
+ ${T('crt')} [data-tx-status="error"] { --tx-glyph-fg: #ff6a3d; }
19
+ ${T('crt')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #ff6a3d; text-shadow: 0 0 6px rgba(255,90,40,0.7); }
20
+ ${T('crt')} [data-tx-part="turn"]:last-child [data-tx-last]::after {
21
+ content: ""; display: inline-block; width: 0.6em; height: 1em; margin-left: 4px; vertical-align: -2px;
22
+ background: #ffb347; box-shadow: 0 0 8px rgba(255,170,60,0.7); animation: tx-crt-blink 1.1s steps(1) infinite; }
23
+ @keyframes tx-crt-blink { 50% { opacity: 0; } }
24
+ @media (prefers-reduced-motion: reduce) {
25
+ ${T('crt')} [data-tx-part="turn"]:last-child [data-tx-last]::after { animation: none; }
26
+ }
27
+ `;
28
+ const minimal = `
29
+ ${T('minimal')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #e0776b; }
30
+ ${T('minimal')} [data-tx-part="tool-head"]:hover [data-tx-part="tool-name"] { color: #e9e6e1; }
31
+ `;
32
+ const paper = `
33
+ @import url('https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,600;1,8..60,400&display=swap');
34
+ ${T('paper')} [data-tx-part="user"] { box-shadow: inset 2px 0 0 #b9ac98; }
35
+ ${T('paper')} [data-tx-part="tool-name"] { font-variant: small-caps; letter-spacing: 0.03em; }
36
+ ${T('paper')} [data-tx-part="tool-group"] { border-top: 1px solid #ddd3c2; border-bottom: 1px solid #ddd3c2; padding: 4px 0; }
37
+ ${T('paper')} [data-tx-part="tool"] { box-shadow: inset 0 1px #ddd3c2, inset 0 -1px #ddd3c2; }
38
+ ${T('paper')} [data-tx-status="error"] { --tx-glyph-fg: #a8412f; }
39
+ ${T('paper')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #a8412f; }
40
+ `;
41
+ const blueprint = `
42
+ ${T('blueprint')} [data-tx-part="user"]::before { content: "REQ "; color: #7fc4ff; font-size: 11px; letter-spacing: 0.1em; }
43
+ ${T('blueprint')} [data-tx-part="tool"] { position: relative; margin-left: 18px; }
44
+ ${T('blueprint')} [data-tx-part="tool"]::before { content: ""; position: absolute; left: -13px; top: 13px; width: 12px; border-top: 1px solid #7fc4ff; }
45
+ ${T('blueprint')} [data-tx-part="tool"]::after { content: ""; position: absolute; left: -13px; top: -8px; bottom: -8px; border-left: 1px solid #7fc4ff; }
46
+ ${T('blueprint')} [data-tx-part="tool-name"] { text-transform: uppercase; letter-spacing: 0.08em; }
47
+ ${T('blueprint')} [data-tx-part="tool-body"] { border-top: 1px dashed rgba(159,208,255,0.5); }
48
+ ${T('blueprint')} [data-tx-status="error"] { outline: 1px dashed #ff9f7a; outline-offset: -1px; --tx-glyph-fg: #ff9f7a; }
49
+ ${T('blueprint')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #ff9f7a; }
50
+ ${T('blueprint')} [data-tx-part="stats"] { letter-spacing: 0.06em; }
51
+ `;
52
+ /* Nicks are generic on purpose: the same code serves both apps, so the agent
53
+ * is "<agent>", never a product name. Exported so the Netsplit arrival effect's
54
+ * join line uses the very same nick. */
55
+ export const IRC_AGENT_NICK = 'agent';
56
+ const N = IRC_AGENT_NICK;
57
+ const irc = `
58
+ ${T('irc')} [data-tx-part="user"]::before { content: "<you> "; color: #79c0ff; }
59
+ ${T('irc')} [data-tx-part="assistant"]::before { content: "<${N}> "; float: left; margin-right: 1ch; color: #d2a8ff; }
60
+ ${T('irc')} [data-tx-part="tool-name"] { color: #e3b341; font-style: italic; }
61
+ ${T('irc')} [data-tx-part="tool-name"]::before { content: "* ${N} ran "; }
62
+ ${T('irc')} [data-tx-status="running"] [data-tx-part="tool-name"]::before { content: "* ${N} is running "; }
63
+ ${T('irc')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #ff7b72; }
64
+ ${T('irc')} [data-tx-status="error"] [data-tx-part="tool-name"]::before { content: "* ${N} failed "; }
65
+ ${T('irc')} [data-tx-part="stats"]::before { content: "-!- "; color: #3fb950; }
66
+ `;
67
+ const handheld = `
68
+ @import url('https://fonts.googleapis.com/css2?family=VT323&display=swap');
69
+ ${T('handheld')} [data-tx-part="assistant"] { position: relative; margin: 3px; padding: 10px 12px 16px; background: #9bbc0f;
70
+ box-shadow: 0 0 0 3px #0f380f, inset 0 0 0 2px #9bbc0f, inset 0 0 0 4px #306230; }
71
+ ${T('handheld')} [data-tx-part="turn"]:last-child [data-tx-last]::after { content: ""; position: absolute; right: 10px; bottom: 5px;
72
+ border: 5px solid transparent; border-top: 6px solid #0f380f; border-bottom: 0; animation: tx-hh-bob 1s steps(2) infinite; }
73
+ @keyframes tx-hh-bob { 50% { transform: translateY(2px); } }
74
+ @media (prefers-reduced-motion: reduce) {
75
+ ${T('handheld')} [data-tx-part="turn"]:last-child [data-tx-last]::after { animation: none; }
76
+ }
77
+ ${T('handheld')} [data-tx-status="error"] { --tx-glyph-bg: #9bbc0f; --tx-glyph-fg: #0f380f; }
78
+ ${T('handheld')} [data-tx-status="error"] [data-tx-part="glyph"] { box-shadow: inset 0 0 0 2px #0f380f; }
79
+ ${T('handheld')} [data-tx-status="error"] [data-tx-part="tool-name"] { text-decoration: underline wavy; }
80
+ `;
81
+ const receipt = `
82
+ @import url('https://fonts.googleapis.com/css2?family=Courier+Prime:wght@400;700&display=swap');
83
+ ${T('receipt')} [data-tx-part="list"] { max-width: 40ch; margin: 0 auto; padding: 16px 16px 26px; background: #fbfaf6;
84
+ box-shadow: 0 1px 3px rgba(0,0,0,0.18);
85
+ -webkit-mask: linear-gradient(#000 0 0) top/100% calc(100% - 8px) no-repeat, conic-gradient(from -45deg at bottom, #0000, #000 1deg 89deg, #0000 90deg) bottom/12px 8px repeat-x;
86
+ mask: linear-gradient(#000 0 0) top/100% calc(100% - 8px) no-repeat, conic-gradient(from -45deg at bottom, #0000, #000 1deg 89deg, #0000 90deg) bottom/12px 8px repeat-x; }
87
+ ${T('receipt')} [data-tx-part="list"]::before { content: "*** RECEIPT ***"; display: block; text-align: center; font-weight: 700; }
88
+ ${T('receipt')} [data-tx-part="turn"] + [data-tx-part="turn"] { border-top: 1px dashed #999; padding-top: 12px; }
89
+ ${T('receipt')} [data-tx-part="stats"] { font-weight: 700; border-top: 1px dashed #999; padding-top: 4px; }
90
+ ${T('receipt')} [data-tx-part="stats"]::before { content: "TOTAL "; }
91
+ ${T('receipt')} [data-tx-status="error"] [data-tx-part="tool-name"] { text-decoration: line-through; }
92
+ `;
93
+ /* T+ is the agent's working time (data-tx-elapsed, Transcript.tsx), not a
94
+ * wall clock. */
95
+ const mission = `
96
+ ${T('mission')} [data-tx-part="list"]::before { content: "\\25CF LIVE MISSION LOG"; display: block; padding-bottom: 6px; border-bottom: 1px solid #22313f;
97
+ color: #3ddc84; font-size: 10.5px; letter-spacing: 0.14em; }
98
+ ${T('mission')} [data-tx-part="turn"][data-tx-elapsed]::before { content: attr(data-tx-elapsed); color: #5d7488; font-size: 10.5px; letter-spacing: 0.08em; }
99
+ ${T('mission')} [data-tx-part="user"]::before { content: "FLIGHT "; color: #ffb454; font-size: 10.5px; letter-spacing: 0.1em; }
100
+ ${T('mission')} [data-tx-part="assistant"]::before { content: "CAPCOM "; float: left; margin-right: 1ch; color: #6cc4ff; font-size: 10.5px; letter-spacing: 0.1em; }
101
+ ${T('mission')} [data-tx-part="tool-name"]::before { content: "GO"; display: inline-block; margin-right: 8px; padding: 0 6px; border: 1px solid #3ddc84;
102
+ border-radius: 3px; color: #3ddc84; font-size: 9.5px; letter-spacing: 0.1em; line-height: 1.6; }
103
+ ${T('mission')} [data-tx-status="running"] [data-tx-part="tool-name"]::before { content: "HOLD"; border-color: #ffb454; color: #ffb454; }
104
+ ${T('mission')} [data-tx-status="error"] [data-tx-part="tool-name"]::before { content: "NO-GO"; border-color: #ff5d5d; color: #ff5d5d; }
105
+ ${T('mission')} [data-tx-part="stats"] { align-self: flex-start; padding: 4px 8px; border: 1px solid #22313f; background: #0f1821; }
106
+ ${T('mission')} [data-tx-part="stats"]::before { content: "TELEMETRY "; color: #5d7488; }
107
+ `;
108
+ const BEVEL = 'inset -1px -1px #0a0a0a, inset 1px 1px #fff, inset -2px -2px #808080, inset 2px 2px #dfdfdf';
109
+ const SUNKEN = 'inset 1px 1px #808080, inset -1px -1px #fff, inset 2px 2px #0a0a0a, inset -2px -2px #dfdfdf';
110
+ const retro = `
111
+ ${T('retro')} [data-tx-part="list"] { counter-reset: tx-win; }
112
+ ${T('retro')} [data-tx-part="turn"] { counter-increment: tx-win; padding: 3px 3px 8px; background: #c0c0c0; box-shadow: ${BEVEL}; }
113
+ ${T('retro')} [data-tx-part="turn"]::before { content: "Transcript - turn " counter(tx-win); display: block; padding: 3px 6px;
114
+ background: linear-gradient(90deg, #000080, #1084d0); color: #fff; font-weight: 700; font-size: 11.5px; }
115
+ ${T('retro')} [data-tx-part="turn"] > [data-tx-part] { margin-left: 6px; margin-right: 6px; }
116
+ ${T('retro')} [data-tx-part="user"] { box-shadow: ${SUNKEN}; }
117
+ ${T('retro')} [data-tx-part="assistant"] { padding: 6px 8px; background: #fff; box-shadow: ${SUNKEN}; }
118
+ ${T('retro')} [data-tx-part="stats"] { padding: 2px 6px; box-shadow: inset 1px 1px #808080, inset -1px -1px #fff; }
119
+ ${T('retro')} [data-tx-status="error"] { padding: 3px; box-shadow: ${BEVEL}; }
120
+ ${T('retro')} [data-tx-status="error"]::before { content: "Error"; display: block; padding: 2px 6px;
121
+ background: linear-gradient(90deg, #800000, #c04040); color: #fff; font-weight: 700; font-size: 11.5px; }
122
+ `;
123
+ export const SKIN_CSS = {
124
+ default: '',
125
+ terminal,
126
+ crt,
127
+ minimal,
128
+ paper,
129
+ blueprint,
130
+ irc,
131
+ handheld,
132
+ receipt,
133
+ mission,
134
+ retro,
135
+ };
136
+ //# sourceMappingURL=transcriptSkinCss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptSkinCss.js","sourceRoot":"","sources":["../transcriptSkinCss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { ConversationTurn } from '@corenel/harness/conversation';
2
+ export interface UsageTotals {
3
+ inTok: number;
4
+ outTok: number;
5
+ /** Null when no turn measured it: unknown, not "none cached". */
6
+ cachedTok: number | null;
7
+ cost: number;
8
+ turns: number;
9
+ /** Model calls across the session; null when no turn recorded its count. */
10
+ calls: number | null;
11
+ }
12
+ export interface UsageRow {
13
+ id: string;
14
+ /** 1-based position among the turns that ran, so "Turn 4" means the fourth. */
15
+ index: number;
16
+ /** The turn's largest single request, or null when it was not measured. */
17
+ ctxTok: number | null;
18
+ calls: number | null;
19
+ inTok: number;
20
+ outTok: number;
21
+ cachedTok: number | null;
22
+ cost: number;
23
+ }
24
+ /** Session totals, the last `n` turns that ran (newest first), and the latest
25
+ * request's size -- the figure the gauge can be checked against. */
26
+ export declare function usageSummary(turns: readonly ConversationTurn[], n: number): {
27
+ session: UsageTotals;
28
+ recent: UsageRow[];
29
+ lastContext: number | null;
30
+ };
31
+ //# sourceMappingURL=usageSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageSummary.d.ts","sourceRoot":"","sources":["../usageSummary.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;oEACoE;AACpE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAkCpJ"}
@@ -0,0 +1,39 @@
1
+ /** Session totals, the last `n` turns that ran (newest first), and the latest
2
+ * request's size -- the figure the gauge can be checked against. */
3
+ export function usageSummary(turns, n) {
4
+ const ran = [];
5
+ for (const t of turns) {
6
+ if (!t.stats)
7
+ continue;
8
+ const calls = t.stats.calls ?? null;
9
+ ran.push({
10
+ id: t.id,
11
+ index: ran.length + 1,
12
+ // One call means the turn's billed `in` was its only request.
13
+ ctxTok: t.stats.ctxTok ?? (calls === 1 ? t.stats.inTok : null),
14
+ calls,
15
+ inTok: t.stats.inTok,
16
+ outTok: t.stats.outTok,
17
+ cachedTok: t.stats.cachedTok ?? null,
18
+ cost: t.stats.cost,
19
+ });
20
+ }
21
+ const sumKnown = (pick) => {
22
+ const known = ran.map(pick).filter((v) => v !== null);
23
+ return known.length ? known.reduce((a, v) => a + v, 0) : null;
24
+ };
25
+ const session = {
26
+ inTok: ran.reduce((a, r) => a + r.inTok, 0),
27
+ outTok: ran.reduce((a, r) => a + r.outTok, 0),
28
+ cachedTok: sumKnown((r) => r.cachedTok),
29
+ cost: ran.reduce((a, r) => a + r.cost, 0),
30
+ turns: ran.length,
31
+ calls: sumKnown((r) => r.calls),
32
+ };
33
+ return {
34
+ session,
35
+ recent: ran.slice(-Math.max(0, n)).reverse(),
36
+ lastContext: ran.length ? ran[ran.length - 1].ctxTok : null,
37
+ };
38
+ }
39
+ //# sourceMappingURL=usageSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageSummary.js","sourceRoot":"","sources":["../usageSummary.ts"],"names":[],"mappings":"AAuCA;oEACoE;AACpE,MAAM,UAAU,YAAY,CAAC,KAAkC,EAAE,CAAS;IACxE,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,SAAS;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC;YACrB,8DAA8D;YAC9D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9D,KAAK;YACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK;YACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;YACtB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI;YACpC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,IAAoC,EAAiB,EAAE;QACvE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,OAAO,GAAgB;QAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KAChC,CAAC;IACF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QAC5C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type VerificationView = 'collapsed' | 'expanded';
2
+ export declare function useVerificationView(): [VerificationView, (v: VerificationView) => void];
3
+ //# sourceMappingURL=verificationView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verificationView.d.ts","sourceRoot":"","sources":["../verificationView.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAaxD,wBAAgB,mBAAmB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAoBvF"}
@@ -0,0 +1,37 @@
1
+ /* Turn verification summary — whether the "Observed: …" block under an agent
2
+ * turn starts collapsed (one line) or expanded (with the observed changes).
3
+ * A starting state only: each summary still toggles on its own. Persisted and
4
+ * synced across instances the same way as transcriptView.tsx. */
5
+ import { useCallback, useEffect, useState } from 'react';
6
+ const KEY = 'prompd.web.verificationView';
7
+ const EVENT = 'prompd:verificationView';
8
+ function read() {
9
+ try {
10
+ return localStorage.getItem(KEY) === 'expanded' ? 'expanded' : 'collapsed';
11
+ }
12
+ catch {
13
+ return 'collapsed';
14
+ }
15
+ }
16
+ export function useVerificationView() {
17
+ const [view, setViewState] = useState(read);
18
+ useEffect(() => {
19
+ const sync = () => setViewState(read());
20
+ window.addEventListener('storage', sync);
21
+ window.addEventListener(EVENT, sync);
22
+ return () => {
23
+ window.removeEventListener('storage', sync);
24
+ window.removeEventListener(EVENT, sync);
25
+ };
26
+ }, []);
27
+ const setView = useCallback((v) => {
28
+ setViewState(v);
29
+ try {
30
+ localStorage.setItem(KEY, v);
31
+ }
32
+ catch { /* storage unavailable: the choice lasts this session */ }
33
+ window.dispatchEvent(new CustomEvent(EVENT));
34
+ }, []);
35
+ return [view, setView];
36
+ }
37
+ //# sourceMappingURL=verificationView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verificationView.js","sourceRoot":"","sources":["../verificationView.tsx"],"names":[],"mappings":"AAAA;;;iEAGiE;AACjE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIzD,MAAM,GAAG,GAAG,6BAA6B,CAAC;AAC1C,MAAM,KAAK,GAAG,yBAAyB,CAAC;AAExC,SAAS,IAAI;IACX,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAmB,EAAE,EAAE;QAClD,YAAY,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC;YAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,wDAAwD,CAAC,CAAC;QACxG,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corenel/web-ui",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "license": "Elastic-2.0",
5
5
  "type": "module",
6
6
  "description": "Corenel browser dock/agent UI — the presentational components (transcript, composer, rich content, tool render, context manager, etc.). The prompd app's AgentPanel/PolicyEditor compose these on top.",
@@ -15,10 +15,10 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@corenel/protocol": "0.9.0",
19
- "@corenel/ui-kit": "0.6.0",
20
- "@corenel/harness": "0.10.0",
21
- "@corenel/tools-web": "0.5.0"
18
+ "@corenel/harness": "0.13.0",
19
+ "@corenel/ui-kit": "0.8.1",
20
+ "@corenel/tools-web": "0.8.0",
21
+ "@corenel/protocol": "0.12.0"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": "^18.3.1",