@workerdeck/ui 0.16.0 → 0.18.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 (47) hide show
  1. package/README.md +7 -0
  2. package/build/{SessionPanel-B9CHoq8x.d.mts → SessionPanel-CnU_IJ3-.d.mts} +36 -9
  3. package/build/{SessionPanel-DII9MmQ8.mjs → SessionPanel-DPx8Iz8a.mjs} +1432 -384
  4. package/build/SessionPanel-DPx8Iz8a.mjs.map +1 -0
  5. package/build/{format-DfI_je9S.d.mts → format-ljc3lKpA.d.mts} +1 -1
  6. package/build/format.d.mts +16 -5
  7. package/build/format.mjs +2 -3
  8. package/build/index.d.mts +288 -8
  9. package/build/index.mjs +620 -165
  10. package/build/index.mjs.map +1 -1
  11. package/build/{format-DqR56Y8l.mjs → status-BE-zg88x.mjs} +154 -2
  12. package/build/status-BE-zg88x.mjs.map +1 -0
  13. package/build/workspace.d.mts +4 -1
  14. package/build/workspace.mjs +4 -3
  15. package/build/workspace.mjs.map +1 -1
  16. package/package.json +8 -6
  17. package/src/components/agent/ContextRing.tsx +41 -0
  18. package/src/components/agent/EngineIcon.tsx +40 -0
  19. package/src/components/agent/ProjectIcon.tsx +119 -0
  20. package/src/components/agent/SessionBrowser.tsx +191 -17
  21. package/src/components/agent/SessionPanel.tsx +177 -2
  22. package/src/components/agent/SessionSteps.tsx +233 -0
  23. package/src/components/agent/SessionWorkspace.tsx +4 -0
  24. package/src/components/agent/StatusBar.tsx +4 -2
  25. package/src/components/agent/SubagentStrip.tsx +134 -0
  26. package/src/components/agent/ToolCallCard.tsx +72 -5
  27. package/src/components/agent/Transcript.tsx +212 -23
  28. package/src/components/agent/tool-result-fetch.tsx +36 -0
  29. package/src/components/agent/tool-result-image.tsx +209 -0
  30. package/src/components/agent/transcript-rows.ts +122 -23
  31. package/src/components/terminal/TerminalTranscript.tsx +154 -2
  32. package/src/components/terminal/affordances.tsx +34 -0
  33. package/src/components/terminal/blocks.ts +260 -0
  34. package/src/components/terminal/height.ts +73 -6
  35. package/src/components/terminal/image-box.ts +53 -0
  36. package/src/components/terminal/items.tsx +116 -79
  37. package/src/components/terminal/result-preview.ts +20 -6
  38. package/src/components/terminal/scrubber.tsx +172 -26
  39. package/src/components/terminal/tool-run.ts +177 -0
  40. package/src/index.ts +20 -1
  41. package/src/lib/status.ts +16 -3
  42. package/src/styles/terminal.css +85 -5
  43. package/src/styles/theme.css +42 -0
  44. package/build/SessionPanel-DII9MmQ8.mjs.map +0 -1
  45. package/build/format-DqR56Y8l.mjs.map +0 -1
  46. package/build/status-Ydzi7n6j.mjs +0 -143
  47. package/build/status-Ydzi7n6j.mjs.map +0 -1
package/README.md CHANGED
@@ -198,6 +198,13 @@ lose by forgetting a second mount isn't one.
198
198
  result and its `… +N` label. Re-spelling either one in the renderer alone desynchronises
199
199
  `estimateSize` and the transcript grows a phantom scrollable tail. `dev/height-audit.ts` is the
200
200
  gate; it measures against real browser layout, which no jsdom test can do.
201
+ - **`pnpm test` here covers the pure modules and nothing else.** That is the split, not an
202
+ omission: which rows exist, what a folded run's line says, how much of a result a collapsed row
203
+ keeps and which marks the rail paints are all string-and-array contracts with no DOM in them,
204
+ and they are where this package's bugs have actually shipped. Geometry — does the rendered row
205
+ come out the height the calculator predicted — is the browser audit above. A test in `test/`
206
+ that wants a DOM belongs in `dev/` instead. `buildClusters` and `railScale` are exported from
207
+ `scrubber.tsx` for the test alone and are deliberately absent from `index.ts`.
201
208
  - **`affordances={false}` must leave a way to scroll.** The scrubber replaces the native scrollbar
202
209
  while it is interactive; with affordances off, the marks stay painted but inert *and the native
203
210
  scrollbar comes back*. A rail that kept the scrollbar hidden while refusing the pointer would
@@ -120,14 +120,6 @@ declare function WithActions({
120
120
  children: ReactNode;
121
121
  className?: string;
122
122
  }): _$react.JSX.Element;
123
- /**
124
- * Copy, as a character.
125
- *
126
- * `⧉` and `✓` rather than an SVG for the same reason the rest of the theme uses
127
- * glyphs: an icon drawn at some other size sits between the cells everything
128
- * else is on, and reads as a button borrowed from another application. The tick
129
- * replaces the glyph in place, so the confirmation costs no width either.
130
- */
131
123
  declare function CopyAction({
132
124
  text,
133
125
  label
@@ -326,6 +318,39 @@ interface SessionPanelProps {
326
318
  * client's watermarks; a shared one is session metadata on the gateway).
327
319
  */
328
320
  scrubberMarks?: readonly number[];
321
+ /**
322
+ * Scroll a tool call into view; bump `nonce` to ask again for the same one.
323
+ * See {@link TranscriptProps.reveal} — this is the panel's pass-through, and
324
+ * exists so a surface *outside* the panel (a sessions list showing a session's
325
+ * running sub-agents) can say "take me to that one" without opening a second
326
+ * attach to find out where it is.
327
+ */
328
+ reveal?: {
329
+ toolUseId: string;
330
+ nonce: number;
331
+ };
332
+ /**
333
+ * Open a **sub-agent takeover**: the panel body becomes that agent's own work,
334
+ * with a way back. Bump `nonce` to ask again for the same one.
335
+ *
336
+ * A *request*, not a controlled value — the panel owns which agent is open,
337
+ * exactly as it owns `panel`. Dismissal has to work with zero host wiring
338
+ * (Back and Escape are the panel's own affordances), and the two hosts in
339
+ * scope reach this across a postMessage bridge where a controlled prop would
340
+ * need a live closure at the far end. Same shape and same reason as
341
+ * {@link SessionPanelProps.reveal}.
342
+ *
343
+ * Hosts must clear their request on a session switch: a stale one replayed at
344
+ * remount would open a frame the new transcript cannot answer.
345
+ *
346
+ * Claude-only in practice, and gated by data rather than by a flag — codex and
347
+ * provider sessions have no `parentToolUseId`, so they grow no task blocks and
348
+ * no sub-agent rows, and nothing can raise this.
349
+ */
350
+ openSubagent?: {
351
+ toolUseId: string;
352
+ nonce: number;
353
+ };
329
354
  /**
330
355
  * Terminal theme only: hold the prompt of the turn you are reading at the top
331
356
  * of the transcript, as the Claude Code CLI does. The **real row** is pinned
@@ -519,6 +544,8 @@ declare function SessionPanel({
519
544
  terminalMetrics,
520
545
  scrubber,
521
546
  scrubberMarks,
547
+ reveal,
548
+ openSubagent,
522
549
  stickyPrompt,
523
550
  controlsSurface,
524
551
  onControls,
@@ -531,4 +558,4 @@ declare function SessionPanel({
531
558
  }: SessionPanelProps): _$react.JSX.Element;
532
559
  //#endregion
533
560
  export { permissionModeChoices as C, PermissionModeSelectProps as S, useAffordances as _, SessionVitals as a, PermissionModeMeta as b, TranscriptDensityProvider as c, TranscriptVariantProvider as d, useTranscriptDensity as f, WithActions as g, TerminalAffordances as h, SessionSurfacePanel as i, TranscriptFont as l, CopyAction as m, SessionPanel as n, TerminalMetrics as o, useTranscriptVariant as p, SessionPanelProps as r, TranscriptDensity as s, SessionControls as t, TranscriptVariant as u, PERMISSION_MODES as v, permissionModeMeta as w, PermissionModeSelect as x, PermissionModeChoice as y };
534
- //# sourceMappingURL=SessionPanel-B9CHoq8x.d.mts.map
561
+ //# sourceMappingURL=SessionPanel-CnU_IJ3-.d.mts.map