@tangle-network/agent-app 0.45.31 → 0.45.33

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 (63) hide show
  1. package/dist/{DesignCanvas-RSWQCXM3.js → DesignCanvas-EODMDQMT.js} +2 -2
  2. package/dist/{DesignCanvasEditor-XZMGIST7.js → DesignCanvasEditor-DRRZ6ZD3.js} +4 -4
  3. package/dist/{InvitationsPanel-CJ7DR4F7.js → InvitationsPanel-BATXZHY4.js} +2 -2
  4. package/dist/{MembersPanel-BB4OD2KB.js → MembersPanel-XNLF3SA4.js} +2 -2
  5. package/dist/assistant/index.js +11 -10
  6. package/dist/assistant/index.js.map +1 -1
  7. package/dist/chat-react/index.js +1 -1
  8. package/dist/{chunk-YIQHOAHN.js → chunk-3UBAO3N5.js} +3 -3
  9. package/dist/{chunk-YIQHOAHN.js.map → chunk-3UBAO3N5.js.map} +1 -1
  10. package/dist/{chunk-PURHUAOR.js → chunk-556RB3XI.js} +5 -5
  11. package/dist/chunk-556RB3XI.js.map +1 -0
  12. package/dist/{chunk-NEJ7OMQS.js → chunk-5LC2VXH5.js} +102 -4
  13. package/dist/chunk-5LC2VXH5.js.map +1 -0
  14. package/dist/{chunk-HZ4WCA37.js → chunk-5MZXWPFN.js} +9 -9
  15. package/dist/chunk-5MZXWPFN.js.map +1 -0
  16. package/dist/{chunk-FNM7JYME.js → chunk-5N434BGF.js} +17 -17
  17. package/dist/chunk-5N434BGF.js.map +1 -0
  18. package/dist/{chunk-5SXS3YAB.js → chunk-7MV23XBW.js} +2 -2
  19. package/dist/chunk-7MV23XBW.js.map +1 -0
  20. package/dist/{chunk-S564OFTL.js → chunk-F4XLTVQ3.js} +3 -3
  21. package/dist/{chunk-S564OFTL.js.map → chunk-F4XLTVQ3.js.map} +1 -1
  22. package/dist/{chunk-LSQR6HM6.js → chunk-IN6LNZ7O.js} +35 -34
  23. package/dist/chunk-IN6LNZ7O.js.map +1 -0
  24. package/dist/{chunk-L7FHRORY.js → chunk-SFSR3CAH.js} +180 -40
  25. package/dist/chunk-SFSR3CAH.js.map +1 -0
  26. package/dist/{chunk-QGOU3VXH.js → chunk-UXRJAUJL.js} +3 -3
  27. package/dist/{chunk-IFYJDX3J.js → chunk-XHD4Y54K.js} +47 -46
  28. package/dist/chunk-XHD4Y54K.js.map +1 -0
  29. package/dist/design-canvas-react/index.js +8 -8
  30. package/dist/design-canvas-react/index.js.map +1 -1
  31. package/dist/design-canvas-react/lazy.js +1 -1
  32. package/dist/spend/cli.js +1 -1
  33. package/dist/spend/index.d.ts +212 -7
  34. package/dist/spend/index.js +5 -1
  35. package/dist/spend/index.js.map +1 -1
  36. package/dist/studio-react/index.js +27 -27
  37. package/dist/studio-react/index.js.map +1 -1
  38. package/dist/teams-react/index.js +2 -2
  39. package/dist/teams-react/lazy.js +2 -2
  40. package/dist/theme/index.js +1 -1
  41. package/dist/theme/tailwind-preset.d.ts +5 -1
  42. package/dist/theme/tailwind-preset.js +11 -2
  43. package/dist/theme/tailwind-preset.js.map +1 -1
  44. package/dist/theme/tokens.css +126 -79
  45. package/dist/web-react/async/index.js +1 -1
  46. package/dist/web-react/index.d.ts +60 -2
  47. package/dist/web-react/index.js +13 -3
  48. package/dist/work-product-react/index.js +3 -3
  49. package/dist/work-product-react/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/chunk-5SXS3YAB.js.map +0 -1
  52. package/dist/chunk-FNM7JYME.js.map +0 -1
  53. package/dist/chunk-HZ4WCA37.js.map +0 -1
  54. package/dist/chunk-IFYJDX3J.js.map +0 -1
  55. package/dist/chunk-L7FHRORY.js.map +0 -1
  56. package/dist/chunk-LSQR6HM6.js.map +0 -1
  57. package/dist/chunk-NEJ7OMQS.js.map +0 -1
  58. package/dist/chunk-PURHUAOR.js.map +0 -1
  59. /package/dist/{DesignCanvas-RSWQCXM3.js.map → DesignCanvas-EODMDQMT.js.map} +0 -0
  60. /package/dist/{DesignCanvasEditor-XZMGIST7.js.map → DesignCanvasEditor-DRRZ6ZD3.js.map} +0 -0
  61. /package/dist/{InvitationsPanel-CJ7DR4F7.js.map → InvitationsPanel-BATXZHY4.js.map} +0 -0
  62. /package/dist/{MembersPanel-BB4OD2KB.js.map → MembersPanel-XNLF3SA4.js.map} +0 -0
  63. /package/dist/{chunk-QGOU3VXH.js.map → chunk-UXRJAUJL.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  // src/teams-react/lazy.tsx
2
2
  import { lazy } from "react";
3
3
  var MembersPanelLazy = lazy(
4
- () => import("../MembersPanel-BB4OD2KB.js").then((m) => ({ default: m.MembersPanel }))
4
+ () => import("../MembersPanel-XNLF3SA4.js").then((m) => ({ default: m.MembersPanel }))
5
5
  );
6
6
  var InvitationsPanelLazy = lazy(
7
- () => import("../InvitationsPanel-CJ7DR4F7.js").then((m) => ({ default: m.InvitationsPanel }))
7
+ () => import("../InvitationsPanel-BATXZHY4.js").then((m) => ({ default: m.InvitationsPanel }))
8
8
  );
9
9
  var InviteAcceptPageLazy = lazy(
10
10
  () => import("../InviteAcceptPage-P3QJC3C6.js").then((m) => ({ default: m.InviteAcceptPage }))
@@ -3,7 +3,7 @@ import {
3
3
  lightTheme,
4
4
  themeColor,
5
5
  themeToCssVars
6
- } from "../chunk-LSQR6HM6.js";
6
+ } from "../chunk-IN6LNZ7O.js";
7
7
  export {
8
8
  darkTheme,
9
9
  lightTheme,
@@ -12,7 +12,7 @@
12
12
  * values (bg-[var(--bg-input)]), which Tailwind supports without color config.
13
13
  *
14
14
  * Beyond colour this preset also maps the border TIERS, the semantic radius
15
- * steps, and the motion scale. See docs/design-tokens.md.
15
+ * steps, the motion scale, and the elevation shadows. See docs/design-tokens.md.
16
16
  */
17
17
  /** Define a preset configuration for dark mode and extended theme colors with foreground variants */
18
18
  declare const agentAppPreset: {
@@ -66,6 +66,10 @@ declare const agentAppPreset: {
66
66
  'surface-container-high': string;
67
67
  'surface-container-highest': string;
68
68
  };
69
+ boxShadow: {
70
+ raised: string;
71
+ overlay: string;
72
+ };
69
73
  borderColor: {
70
74
  border: string;
71
75
  'card-edge': string;
@@ -31,9 +31,18 @@ var agentAppPreset = {
31
31
  // MD3 surface ladder — wires sandbox-ui's `bg-surface-container*`
32
32
  // utilities (used by AgentComposer + its pickers) onto the shadcn
33
33
  // elevation triples, so those components render on-palette here.
34
+ // Monotonic in the dark theme: card (L 0.235) < secondary (0.285) <
35
+ // popover (0.325) — the rungs a container climbs as it floats higher.
34
36
  "surface-container": "hsl(var(--card))",
35
- "surface-container-high": "hsl(var(--popover))",
36
- "surface-container-highest": "hsl(var(--secondary))"
37
+ "surface-container-high": "hsl(var(--secondary))",
38
+ "surface-container-highest": "hsl(var(--popover))"
39
+ },
40
+ // Elevation shadows — `shadow-raised` for the floating composer,
41
+ // `shadow-overlay` for popovers/dialogs. Both re-theme through
42
+ // tokens.css (dark doubles the alpha at the token).
43
+ boxShadow: {
44
+ raised: "var(--shadow-raised)",
45
+ overlay: "var(--shadow-overlay)"
37
46
  },
38
47
  // Border tiers. `borderColor` is a separate scale from `colors`, so
39
48
  // pointing `border-border` at the soft tier here leaves `bg-border` /
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/tailwind-preset.ts"],"sourcesContent":["/**\n * Tailwind preset mapping the shadcn semantic color names used by web-react\n * (bg-card, text-muted-foreground, border-border, …) onto the CSS variables in\n * tokens.css — so a consuming app themes every agent-app surface from one source.\n *\n * // tailwind.config.{js,ts}\n * import agentAppPreset from '@tangle-network/agent-app/tailwind-preset'\n * export default { presets: [agentAppPreset], content: [...] }\n *\n * Pair with `import '@tangle-network/agent-app/styles'` for the variable values.\n * design-canvas/sequences need no preset — they consume vars via arbitrary\n * values (bg-[var(--bg-input)]), which Tailwind supports without color config.\n *\n * Beyond colour this preset also maps the border TIERS, the semantic radius\n * steps, and the motion scale. See docs/design-tokens.md.\n */\n\nconst withForeground = (name: string) => ({\n DEFAULT: `hsl(var(--${name}))`,\n foreground: `hsl(var(--${name}-foreground))`,\n})\n\n/**\n * A border tier as a Tailwind colour that still honours the `/40` opacity\n * modifier.\n *\n * The tier tokens are `color-mix()` results, not channel triples, and Tailwind\n * cannot inject an alpha into a value it cannot parse — pointing `border-border`\n * straight at `var(--border-soft)` makes Tailwind DROP `border-border/50`\n * entirely rather than emit it without the modifier, which is silent: the\n * element falls back to `currentColor` and nothing errors. This package has 18\n * such usages. Wrapping the token in a `color-mix` that consumes\n * `<alpha-value>` keeps the token as the source AND composes with the modifier:\n * bare → 100% of the tier, `/50` → half of it.\n */\nconst tier = (token: string) => `color-mix(in oklch, var(${token}) calc(<alpha-value> * 100%), transparent)`\n\n/** Define a preset configuration for dark mode and extended theme colors with foreground variants */\nconst agentAppPreset = {\n darkMode: ['class', '[data-theme=\"dark\"]'] as [string, string],\n theme: {\n extend: {\n colors: {\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n success: withForeground('success'),\n // `strong` sits alongside DEFAULT/foreground rather than replacing\n // either: `--warning` is the dot/border/tint hue, `--warning-foreground`\n // is what goes on a SOLID gold chip, and `text-warning-strong` is the\n // only one of the three that stays legible as text on a warning TINT in\n // both themes.\n warning: { ...withForeground('warning'), strong: 'hsl(var(--warning-strong))' },\n card: withForeground('card'),\n popover: withForeground('popover'),\n primary: withForeground('primary'),\n secondary: withForeground('secondary'),\n muted: withForeground('muted'),\n accent: withForeground('accent'),\n destructive: withForeground('destructive'),\n // MD3 surface ladder — wires sandbox-ui's `bg-surface-container*`\n // utilities (used by AgentComposer + its pickers) onto the shadcn\n // elevation triples, so those components render on-palette here.\n 'surface-container': 'hsl(var(--card))',\n 'surface-container-high': 'hsl(var(--popover))',\n 'surface-container-highest': 'hsl(var(--secondary))',\n },\n // Border tiers. `borderColor` is a separate scale from `colors`, so\n // pointing `border-border` at the soft tier here leaves `bg-border` /\n // `text-border` (and the `--border` triple itself) at full strength.\n //\n // This is the one place a single edit reaches every `border-border` in\n // the fleet — 151 in this package alone — which is the only reason the\n // tiers are worth having. Editing 151 call sites to say `border-soft`\n // would be the same change spelled 151 times, and the next component\n // written would still say `border-border`.\n //\n // `border-input` is untouched on purpose: a form field's edge is a\n // control affordance, not a divider.\n //\n // Opting out is one line in the consumer's own config\n // (`borderColor: { border: 'hsl(var(--border))' }`) or one line in its\n // CSS (`--border-soft: hsl(var(--border))`), and the second also restores\n // the pre-tier look for any consumer-owned `--color-border` mapping,\n // which a Tailwind v4 app defines in its own `@theme` and this preset\n // cannot reach.\n borderColor: {\n border: tier('--border-soft'),\n 'card-edge': tier('--card-edge'),\n strong: 'hsl(var(--border))',\n },\n // Semantic radius. Deliberately NOT a remap of Tailwind's `rounded-md` /\n // `rounded-lg`: those names collide with the token ladder's names at\n // DIFFERENT values (`--radius-md` is 8px, `rounded-md` is 6px), so\n // remapping would silently resize 302 existing `rounded-*` usages across\n // four products. New names, opt-in, no resize.\n borderRadius: {\n control: 'var(--radius-sm)',\n card: 'var(--radius-lg)',\n surface: 'var(--radius-2xl)',\n },\n // Motion. Additive names alongside Tailwind's numeric durations and\n // in/out/in-out curves, so `duration-fast` and `ease-entrance` compile\n // without displacing `duration-150` or `ease-out`.\n transitionDuration: {\n instant: 'var(--duration-instant)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n },\n transitionTimingFunction: {\n standard: 'var(--ease-standard)',\n entrance: 'var(--ease-entrance)',\n exit: 'var(--ease-exit)',\n },\n },\n },\n}\n\nexport default agentAppPreset\n"],"mappings":";AAiBA,IAAM,iBAAiB,CAAC,UAAkB;AAAA,EACxC,SAAS,aAAa,IAAI;AAAA,EAC1B,YAAY,aAAa,IAAI;AAC/B;AAeA,IAAM,OAAO,CAAC,UAAkB,2BAA2B,KAAK;AAGhE,IAAM,iBAAiB;AAAA,EACrB,UAAU,CAAC,SAAS,qBAAqB;AAAA,EACzC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,eAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMjC,SAAS,EAAE,GAAG,eAAe,SAAS,GAAG,QAAQ,6BAA6B;AAAA,QAC9E,MAAM,eAAe,MAAM;AAAA,QAC3B,SAAS,eAAe,SAAS;AAAA,QACjC,SAAS,eAAe,SAAS;AAAA,QACjC,WAAW,eAAe,WAAW;AAAA,QACrC,OAAO,eAAe,OAAO;AAAA,QAC7B,QAAQ,eAAe,QAAQ;AAAA,QAC/B,aAAa,eAAe,aAAa;AAAA;AAAA;AAAA;AAAA,QAIzC,qBAAqB;AAAA,QACrB,0BAA0B;AAAA,QAC1B,6BAA6B;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa;AAAA,QACX,QAAQ,KAAK,eAAe;AAAA,QAC5B,aAAa,KAAK,aAAa;AAAA,QAC/B,QAAQ;AAAA,MACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,cAAc;AAAA,QACZ,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAIA,oBAAoB;AAAA,QAClB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,0BAA0B;AAAA,QACxB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,0BAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/theme/tailwind-preset.ts"],"sourcesContent":["/**\n * Tailwind preset mapping the shadcn semantic color names used by web-react\n * (bg-card, text-muted-foreground, border-border, …) onto the CSS variables in\n * tokens.css — so a consuming app themes every agent-app surface from one source.\n *\n * // tailwind.config.{js,ts}\n * import agentAppPreset from '@tangle-network/agent-app/tailwind-preset'\n * export default { presets: [agentAppPreset], content: [...] }\n *\n * Pair with `import '@tangle-network/agent-app/styles'` for the variable values.\n * design-canvas/sequences need no preset — they consume vars via arbitrary\n * values (bg-[var(--bg-input)]), which Tailwind supports without color config.\n *\n * Beyond colour this preset also maps the border TIERS, the semantic radius\n * steps, the motion scale, and the elevation shadows. See docs/design-tokens.md.\n */\n\nconst withForeground = (name: string) => ({\n DEFAULT: `hsl(var(--${name}))`,\n foreground: `hsl(var(--${name}-foreground))`,\n})\n\n/**\n * A border tier as a Tailwind colour that still honours the `/40` opacity\n * modifier.\n *\n * The tier tokens are `color-mix()` results, not channel triples, and Tailwind\n * cannot inject an alpha into a value it cannot parse — pointing `border-border`\n * straight at `var(--border-soft)` makes Tailwind DROP `border-border/50`\n * entirely rather than emit it without the modifier, which is silent: the\n * element falls back to `currentColor` and nothing errors. This package has 18\n * such usages. Wrapping the token in a `color-mix` that consumes\n * `<alpha-value>` keeps the token as the source AND composes with the modifier:\n * bare → 100% of the tier, `/50` → half of it.\n */\nconst tier = (token: string) => `color-mix(in oklch, var(${token}) calc(<alpha-value> * 100%), transparent)`\n\n/** Define a preset configuration for dark mode and extended theme colors with foreground variants */\nconst agentAppPreset = {\n darkMode: ['class', '[data-theme=\"dark\"]'] as [string, string],\n theme: {\n extend: {\n colors: {\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n success: withForeground('success'),\n // `strong` sits alongside DEFAULT/foreground rather than replacing\n // either: `--warning` is the dot/border/tint hue, `--warning-foreground`\n // is what goes on a SOLID gold chip, and `text-warning-strong` is the\n // only one of the three that stays legible as text on a warning TINT in\n // both themes.\n warning: { ...withForeground('warning'), strong: 'hsl(var(--warning-strong))' },\n card: withForeground('card'),\n popover: withForeground('popover'),\n primary: withForeground('primary'),\n secondary: withForeground('secondary'),\n muted: withForeground('muted'),\n accent: withForeground('accent'),\n destructive: withForeground('destructive'),\n // MD3 surface ladder — wires sandbox-ui's `bg-surface-container*`\n // utilities (used by AgentComposer + its pickers) onto the shadcn\n // elevation triples, so those components render on-palette here.\n // Monotonic in the dark theme: card (L 0.235) < secondary (0.285) <\n // popover (0.325) — the rungs a container climbs as it floats higher.\n 'surface-container': 'hsl(var(--card))',\n 'surface-container-high': 'hsl(var(--secondary))',\n 'surface-container-highest': 'hsl(var(--popover))',\n },\n // Elevation shadows — `shadow-raised` for the floating composer,\n // `shadow-overlay` for popovers/dialogs. Both re-theme through\n // tokens.css (dark doubles the alpha at the token).\n boxShadow: {\n raised: 'var(--shadow-raised)',\n overlay: 'var(--shadow-overlay)',\n },\n // Border tiers. `borderColor` is a separate scale from `colors`, so\n // pointing `border-border` at the soft tier here leaves `bg-border` /\n // `text-border` (and the `--border` triple itself) at full strength.\n //\n // This is the one place a single edit reaches every `border-border` in\n // the fleet — 151 in this package alone — which is the only reason the\n // tiers are worth having. Editing 151 call sites to say `border-soft`\n // would be the same change spelled 151 times, and the next component\n // written would still say `border-border`.\n //\n // `border-input` is untouched on purpose: a form field's edge is a\n // control affordance, not a divider.\n //\n // Opting out is one line in the consumer's own config\n // (`borderColor: { border: 'hsl(var(--border))' }`) or one line in its\n // CSS (`--border-soft: hsl(var(--border))`), and the second also restores\n // the pre-tier look for any consumer-owned `--color-border` mapping,\n // which a Tailwind v4 app defines in its own `@theme` and this preset\n // cannot reach.\n borderColor: {\n border: tier('--border-soft'),\n 'card-edge': tier('--card-edge'),\n strong: 'hsl(var(--border))',\n },\n // Semantic radius. Deliberately NOT a remap of Tailwind's `rounded-md` /\n // `rounded-lg`: those names collide with the token ladder's names at\n // DIFFERENT values (`--radius-md` is 8px, `rounded-md` is 6px), so\n // remapping would silently resize 302 existing `rounded-*` usages across\n // four products. New names, opt-in, no resize.\n borderRadius: {\n control: 'var(--radius-sm)',\n card: 'var(--radius-lg)',\n surface: 'var(--radius-2xl)',\n },\n // Motion. Additive names alongside Tailwind's numeric durations and\n // in/out/in-out curves, so `duration-fast` and `ease-entrance` compile\n // without displacing `duration-150` or `ease-out`.\n transitionDuration: {\n instant: 'var(--duration-instant)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n },\n transitionTimingFunction: {\n standard: 'var(--ease-standard)',\n entrance: 'var(--ease-entrance)',\n exit: 'var(--ease-exit)',\n },\n },\n },\n}\n\nexport default agentAppPreset\n"],"mappings":";AAiBA,IAAM,iBAAiB,CAAC,UAAkB;AAAA,EACxC,SAAS,aAAa,IAAI;AAAA,EAC1B,YAAY,aAAa,IAAI;AAC/B;AAeA,IAAM,OAAO,CAAC,UAAkB,2BAA2B,KAAK;AAGhE,IAAM,iBAAiB;AAAA,EACrB,UAAU,CAAC,SAAS,qBAAqB;AAAA,EACzC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS,eAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMjC,SAAS,EAAE,GAAG,eAAe,SAAS,GAAG,QAAQ,6BAA6B;AAAA,QAC9E,MAAM,eAAe,MAAM;AAAA,QAC3B,SAAS,eAAe,SAAS;AAAA,QACjC,SAAS,eAAe,SAAS;AAAA,QACjC,WAAW,eAAe,WAAW;AAAA,QACrC,OAAO,eAAe,OAAO;AAAA,QAC7B,QAAQ,eAAe,QAAQ;AAAA,QAC/B,aAAa,eAAe,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMzC,qBAAqB;AAAA,QACrB,0BAA0B;AAAA,QAC1B,6BAA6B;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA,MAIA,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa;AAAA,QACX,QAAQ,KAAK,eAAe;AAAA,QAC5B,aAAa,KAAK,aAAa;AAAA,QAC/B,QAAQ;AAAA,MACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,cAAc;AAAA,QACZ,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAIA,oBAAoB;AAAA,QAClB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,0BAA0B;AAAA,QACxB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,0BAAQ;","names":[]}
@@ -24,19 +24,29 @@
24
24
  :root {
25
25
  /* ── The neutral ramp ────────────────────────────────────────────────────
26
26
  ONE ladder, both themes: light reads it from the top down, dark from the
27
- bottom up. Stop names ARE their oklch lightness (`--neutral-91` is
28
- L 0.91), so the ladder rule is checkable rather than conventional:
29
-
30
- L = 0.16 + 0.03n n = 0 … 28 (0.16 is the darkest surface,
31
- 1.00 the terminal white)
32
-
33
- Chroma is a CONSTANT 0.004 at hue 286 one deliberate cool cast, not a
34
- wandering one. The HSL these tokens replaced carried "S 5–7%" throughout
35
- and that reads as consistent, but HSL saturation is not chroma: the same
36
- nominal 5–7% produced 0.0014 chroma at L 0.976 and 0.0154 at L 0.478, so
37
- the old ramp visibly GAINED blue as it darkened. Look at the `-hsl` mirrors
38
- below to see the same fact from the other side — holding chroma constant
39
- needs S 17.2% at L 0.97 and S 1.3% at L 0.49.
27
+ bottom up. A stop's name is its oklch lightness × 100, rounded to the
28
+ nearest integer (`--neutral-94` is L 0.945), so the rule stays checkable
29
+ rather than conventional. Chroma comes in TWO bands, because the two ends
30
+ of the ladder do different work:
31
+
32
+ dark band L ≤ 0.4 — the dark theme's surface ladder: chroma
33
+ 0.014–0.018 at hue 280, falling as L rises. The deep
34
+ surfaces carry the deliberate cool cast; the border stop
35
+ carries least, so a hairline reads as an edge, not a tint.
36
+ The lightness steps here are deliberately SMALL at the
37
+ bottom of sRGB, rungs 0.03 apart measure 1.05:1, which is
38
+ physically imperceptible, so this band's separation comes
39
+ from the whole stack (fill step + border tier + shadow),
40
+ not from any single rung.
41
+ light band L ≥ 0.8 — chroma 0.004–0.008 at hue 280: the tinted-canvas
42
+ values from the elevation audit. The mid stops (49, 70 —
43
+ text, not surfaces) keep the legacy 0.004 at hue 286; at
44
+ that chroma the 6° hue difference is below what sRGB shows.
45
+
46
+ HSL saturation is not chroma, which is why the `-hsl` mirrors wander in
47
+ S% while the oklch sources hold their bands: the ramp this replaced
48
+ carried a nominal "S 5–7%" throughout that produced 0.0014 chroma at
49
+ L 0.976 and 0.0154 at L 0.478 — visibly gaining blue as it darkened.
40
50
 
41
51
  The terminal stop is chroma 0 because sRGB admits no chroma at L 1.
42
52
 
@@ -48,24 +58,39 @@
48
58
  rather than a derivation. tests/theme/tokens-contract.test.ts converts
49
59
  every oklch stop to HSL and fails if its mirror has drifted, so the two
50
60
  forms cannot disagree without a red test. */
51
- --neutral-16: oklch(0.16 0.004 286);
52
- --neutral-16-hsl: 240.1 6.8% 5.5%;
53
- --neutral-19: oklch(0.19 0.004 286);
54
- --neutral-19-hsl: 240 4.9% 8%;
55
- --neutral-22: oklch(0.22 0.004 286);
56
- --neutral-22-hsl: 239.9 3.8% 10.7%;
57
- --neutral-25: oklch(0.25 0.004 286);
58
- --neutral-25-hsl: 239.9 3.1% 13.5%;
61
+ /* dark band — the dark theme's surface ladder, bottom up: canvas-backdrop,
62
+ background, input (recessed), card, secondary/muted/accent, popover,
63
+ border. The first three RETUNE the stops the light theme's ink also reads;
64
+ the top four are new rungs. */
65
+ --neutral-16: oklch(0.16 0.018 280);
66
+ --neutral-16-hsl: 234.9 28.5% 6.4%;
67
+ --neutral-19: oklch(0.19 0.018 280);
68
+ --neutral-19-hsl: 234.5 21.2% 9%;
69
+ --neutral-22: oklch(0.215 0.018 280);
70
+ --neutral-22-hsl: 234.2 17.6% 11.3%;
71
+ --neutral-24: oklch(0.235 0.018 280);
72
+ --neutral-24-hsl: 234.1 15.5% 13.1%;
73
+ --neutral-28: oklch(0.285 0.017 280);
74
+ --neutral-28-hsl: 233.8 11.4% 17.8%;
75
+ --neutral-33: oklch(0.325 0.016 280);
76
+ --neutral-33-hsl: 233.6 9.1% 21.7%;
77
+ --neutral-36: oklch(0.365 0.014 280);
78
+ --neutral-36-hsl: 233.4 7% 25.6%;
79
+ /* mid stops — text, both themes */
59
80
  --neutral-49: oklch(0.49 0.004 286);
60
81
  --neutral-49-hsl: 239.7 1.3% 38.2%;
61
82
  --neutral-70: oklch(0.7 0.004 286);
62
83
  --neutral-70-hsl: 239.6 1.5% 62.5%;
63
- --neutral-91: oklch(0.91 0.004 286);
64
- --neutral-91-hsl: 239.6 5.2% 88.7%;
65
- --neutral-94: oklch(0.94 0.004 286);
66
- --neutral-94-hsl: 239.6 8% 92.6%;
67
- --neutral-97: oklch(0.97 0.004 286);
68
- --neutral-97-hsl: 239.6 17.2% 96.5%;
84
+ /* light band — the light theme's surfaces, bottom up: border/input,
85
+ canvas-backdrop, background, secondary/muted/accent, terminal white. */
86
+ --neutral-85: oklch(0.85 0.0079 280);
87
+ --neutral-85-hsl: 233.1 6.8% 81.4%;
88
+ --neutral-92: oklch(0.925 0.0069 280);
89
+ --neutral-92-hsl: 233.1 12.5% 90.9%;
90
+ --neutral-94: oklch(0.945 0.0059 280);
91
+ --neutral-94-hsl: 233.2 14.8% 93.4%;
92
+ --neutral-96: oklch(0.965 0.0049 280);
93
+ --neutral-96-hsl: 233.2 19.9% 95.9%;
69
94
  --neutral-100: oklch(1 0 0);
70
95
  --neutral-100-hsl: 0 0% 100%;
71
96
 
@@ -76,24 +101,24 @@
76
101
  tuned for AA as TEXT. agent-app keeps its own light-default /
77
102
  [data-theme="dark"] scope model (brand is dark-default), so /theme stays
78
103
  dependency-free — only the values are shared, not the cascade. */
79
- --background: var(--neutral-100-hsl);
104
+ --background: var(--neutral-94-hsl);
80
105
  --foreground: var(--neutral-16-hsl);
81
- --card: var(--neutral-97-hsl);
106
+ --card: var(--neutral-100-hsl);
82
107
  --card-foreground: var(--neutral-16-hsl);
83
108
  --popover: var(--neutral-100-hsl);
84
109
  --popover-foreground: var(--neutral-16-hsl);
85
110
  --primary: 245 62% 57%;
86
111
  --primary-foreground: var(--neutral-100-hsl);
87
- --secondary: var(--neutral-94-hsl);
112
+ --secondary: var(--neutral-96-hsl);
88
113
  --secondary-foreground: var(--neutral-22-hsl);
89
- --muted: var(--neutral-94-hsl);
114
+ --muted: var(--neutral-96-hsl);
90
115
  --muted-foreground: var(--neutral-49-hsl);
91
- --accent: var(--neutral-94-hsl);
116
+ --accent: var(--neutral-96-hsl);
92
117
  --accent-foreground: var(--neutral-22-hsl);
93
118
  --destructive: 0 72% 41%;
94
119
  --destructive-foreground: var(--neutral-100-hsl);
95
- --border: var(--neutral-91-hsl);
96
- --input: var(--neutral-91-hsl);
120
+ --border: var(--neutral-85-hsl);
121
+ --input: var(--neutral-85-hsl);
97
122
  --ring: 245 62% 57%;
98
123
  /* status colors — brand hues (teal/gold/red), but lightness kept dark enough
99
124
  to clear WCAG AA when used AS TEXT on tinted chips. Brand's own status
@@ -107,12 +132,12 @@
107
132
  `--warning-foreground` is paired with — and the reason that pairing cannot
108
133
  serve both. Measured on the shipped approval card: no single lightness
109
134
  clears AA in both themes, because the tint tracks the page. On the light
110
- card rgb(251,248,240) the ramp needs L <= 30% (L 38% is 3.07:1); on the dark
111
- card rgb(27,22,16) it needs L >= 34% (L 28% is 3.27:1). So this token
112
- re-themes where `--warning` and `--warning-foreground` deliberately do not.
113
- 28% / 56% are the values with margin either side of those knees: 5.17:1
114
- light, 10.11:1 dark. */
115
- --warning-strong: 41 96% 28%;
135
+ page the tint composites to rgb(233,230,227) and the ramp needs L <= 27%
136
+ (L 28% is 4.43:1); on the dark page rgb(32,29,29) it needs L >= 36%
137
+ (L 34% is 4.06:1). So this token re-themes where `--warning` and
138
+ `--warning-foreground` deliberately do not. 27% / 56% are the values with
139
+ margin either side of those knees: 4.69:1 light, 9.12:1 dark. */
140
+ --warning-strong: 41 96% 27%;
116
141
 
117
142
  /* canvas/sequences aliases — full colors, resolve to the triples above */
118
143
  --bg-input: hsl(var(--card));
@@ -140,8 +165,9 @@
140
165
 
141
166
  /* canvas-only surfaces (not part of the shadcn vocabulary). Name matches the
142
167
  `--canvas-backdrop` the design-canvas Workspace references (with a #1a1a1a
143
- fallback). One ramp stop below the sheet, so the page reads as lifted. */
144
- --canvas-backdrop: hsl(var(--neutral-91-hsl));
168
+ fallback). Two ramp stops BELOW the page, so elevation reads the right way
169
+ up: canvas under page, white card lifted above both. */
170
+ --canvas-backdrop: hsl(var(--neutral-92-hsl));
145
171
 
146
172
  /* Keyboard focus ring. Resolves through `--ring`, so the dark scope re-themes
147
173
  it by the same cascade every other token here uses. */
@@ -216,34 +242,49 @@
216
242
  hsl(--border) full strength: form-field edges (`--input`), and any
217
243
  edge a component deliberately emphasises
218
244
 
219
- LIGHT is 40% / 60%, chosen against OUR surfaces rather than copied. A 1px
220
- hairline, contrast of the composited line against the surface it sits on,
221
- rendered and read back by playground/scripts/token-render.mjs:
245
+ LIGHT is 40% / 60%. A 1px hairline, contrast of the composited line
246
+ against the surface it sits on, rendered and read back by
247
+ playground/scripts/token-render.mjs:
248
+
249
+ alpha on background on card on muted
250
+ 22% 1.065 1.098 1.081
251
+ 40% 1.125 1.188 1.143
252
+ 60% 1.198 1.309 1.236
253
+ 100% 1.345 1.584 1.428
254
+
255
+ 40% keeps a divider quiet on `--background` (1.125), where most of this
256
+ package's dividers sit, while the white card's fill step does the
257
+ containing; 60% is far enough above it (1.309 vs 1.198) to read as a
258
+ DIFFERENT decision, short of the 1.584 that reads as a box.
259
+
260
+ DARK is 60% / 80% — the tiers no longer collapse there. They used to:
261
+ the old dark border (L 0.25) was already at the edge of visible at full
262
+ strength (1.158 on card), so a softened tier was not a quieter line but
263
+ no line, and dark ran both tiers at 100%. The ladder revision lifted the
264
+ dark border to L 0.365, and the same measurement now leaves room to
265
+ spare:
222
266
 
223
267
  alpha on background on card on muted
224
- 22% 1.060 1.044 1.026 the reference's soft value
225
- 40% 1.108 1.072 1.036 quiet, still resolves
226
- 60% 1.176 1.120 1.063 reads as a container
227
- 100% 1.311 1.205 1.102 reads as a box
228
-
229
- 40% is the quietest alpha at which a 1px line still resolves on `--card`,
230
- which is where most of this package's dividers actually sit — at 22% it is
231
- simply not there.
232
- The card edge is 60% rather than the reference's 55% because ours has to
233
- clear the soft tier by enough to read as a DIFFERENT decision (1.176 vs
234
- 1.108), while our card already carries a fill step of its own (L 0.97 on a
235
- 1.00 background) that the reference's card — the same colour as its
236
- background — does not have.
237
-
238
- DARK INVERTS: both tiers are FULL strength. Same measurement, our dark
239
- ramp, and it forces the opposite answer. Dark `--border` (L 0.25) is
240
- already at the edge of visible at 100% — 1.212 on background, 1.158 on
241
- card, 1.085 on muted — and the same 40% takes those to 1.057 / 1.048 /
242
- 1.023. That is not a quieter line, it is no line. A tier system that
243
- erases the thing it is tiering is worse than no tiers, so dark collapses
244
- the three to one. */
268
+ 60% 1.320 1.265 1.173
269
+ 80% 1.489 1.389 1.253
270
+ 100% 1.716 1.553 1.339
271
+
272
+ The soft tier at 60% clears the 1.07 hairline floor on every surface it
273
+ divides, and the card edge at 80% sits clearly above it same method,
274
+ opposite conclusion, because the border colour itself moved. */
245
275
  --border-soft: color-mix(in oklch, hsl(var(--border)) 40%, transparent);
246
276
  --card-edge: color-mix(in oklch, hsl(var(--border)) 60%, transparent);
277
+
278
+ /* ── Elevation shadows ───────────────────────────────────────────────────
279
+ Two foreground-tinted lifts, so elevation is a token rather than an
280
+ arbitrary value at each call site. `--shadow-raised` promotes the proven
281
+ floating-composer values (src/web-react/chat-composer.tsx) unchanged;
282
+ `--shadow-overlay` is the higher lift for popovers and dialogs. Dark
283
+ doubles the alpha — the same shadow over a near-black surface reads at
284
+ roughly half its light-theme strength, so the dark theme compensates at
285
+ the token, not at every component. */
286
+ --shadow-raised: 0 1px 2px hsl(var(--foreground) / 0.05), 0 12px 28px hsl(var(--foreground) / 0.07);
287
+ --shadow-overlay: 0 2px 6px hsl(var(--foreground) / 0.06), 0 16px 40px hsl(var(--foreground) / 0.1);
247
288
  }
248
289
 
249
290
  /**
@@ -286,31 +327,31 @@
286
327
  ladder and only differ in which stop each role picks.
287
328
  `--warning-foreground` (dark text on a solid gold chip) is theme-invariant
288
329
  and is therefore absent, not omitted: the cascade already carries it. */
289
- --background: var(--neutral-16-hsl);
330
+ --background: var(--neutral-19-hsl);
290
331
  --foreground: var(--neutral-94-hsl);
291
- --card: var(--neutral-19-hsl);
332
+ --card: var(--neutral-24-hsl);
292
333
  --card-foreground: var(--neutral-94-hsl);
293
- --popover: var(--neutral-25-hsl);
334
+ --popover: var(--neutral-33-hsl);
294
335
  --popover-foreground: var(--neutral-94-hsl);
295
336
  /* 74% L (brand's #818CF8 intent) so primary clears AA as TEXT on a primary/10
296
337
  tint in dark. That lightness is also why the foreground has to INVERT here:
297
338
  the light theme's white-on-indigo is 6.01:1, but the same white on this
298
339
  74%-L lavender rgb(137,137,245) is 3.02:1 — measured failing on the
299
- "Approve & run" button. A dark foreground on the same fill is 6.44:1, so
340
+ "Approve & run" button. A dark foreground on the same fill is 6.27:1, so
300
341
  the solid button reads in both themes and the tint keeps its AA as text. */
301
342
  --primary: 239 84% 74%;
302
343
  --primary-foreground: var(--neutral-16-hsl);
303
- --secondary: var(--neutral-22-hsl);
344
+ --secondary: var(--neutral-28-hsl);
304
345
  --secondary-foreground: var(--neutral-94-hsl);
305
- --muted: var(--neutral-22-hsl);
346
+ --muted: var(--neutral-28-hsl);
306
347
  --muted-foreground: var(--neutral-70-hsl);
307
- --accent: var(--neutral-22-hsl);
348
+ --accent: var(--neutral-28-hsl);
308
349
  --accent-foreground: var(--neutral-94-hsl);
309
350
  --destructive: 348 90% 68%;
310
- --destructive-foreground: var(--neutral-25-hsl);
351
+ --destructive-foreground: var(--neutral-24-hsl);
311
352
  /* @see the :root declaration — this is the tier that re-themes. */
312
353
  --warning-strong: 40 94% 56%;
313
- --border: var(--neutral-25-hsl);
354
+ --border: var(--neutral-36-hsl);
314
355
  --input: var(--neutral-22-hsl);
315
356
  --ring: 239 84% 74%;
316
357
  --success: 160 70% 52%;
@@ -319,10 +360,16 @@
319
360
 
320
361
  --canvas-backdrop: hsl(var(--neutral-16-hsl));
321
362
 
322
- /* The tier inversion. Full strength for BOTH tiers see the measurement in
323
- the :root block: a softened dark hairline is not quieter, it is absent. */
324
- --border-soft: hsl(var(--border));
325
- --card-edge: hsl(var(--border));
363
+ /* The dark tiers, re-joined. The border is now strong enough (L 0.365) that
364
+ softening leaves a visible line see the measurement in the :root block:
365
+ 60% reads 1.265 on the card, where the old border at FULL strength read
366
+ 1.158. Dark runs the same three tiers as light, one step stronger. */
367
+ --border-soft: color-mix(in oklch, hsl(var(--border)) 60%, transparent);
368
+ --card-edge: color-mix(in oklch, hsl(var(--border)) 80%, transparent);
369
+
370
+ /* Doubled alphas against the near-black surfaces — @see :root. */
371
+ --shadow-raised: 0 1px 2px hsl(var(--foreground) / 0.14), 0 12px 28px hsl(var(--foreground) / 0.22);
372
+ --shadow-overlay: 0 2px 6px hsl(var(--foreground) / 0.12), 0 16px 40px hsl(var(--foreground) / 0.2);
326
373
  }
327
374
 
328
375
  /**
@@ -16,7 +16,7 @@ import {
16
16
  resolveAsyncValue,
17
17
  useAsyncResource,
18
18
  useConfirmedMutation
19
- } from "../../chunk-YIQHOAHN.js";
19
+ } from "../../chunk-3UBAO3N5.js";
20
20
  export {
21
21
  AsyncRequestError,
22
22
  AsyncView,
@@ -11,6 +11,7 @@ import { E as EvidenceEntry, g as ExceptionEntry, b as WorkProductProvenance, P
11
11
  export { a as AgentSessionControls, A as AgentSessionControlsProps, C as ComposerMentionProp, D as DEFAULT_MENTION_EMPTY_TEXT, b as DEFAULT_MENTION_LIMIT, I as INDEX_REFRESH_AFTER_MS, M as MentionItem, c as UseFileMentionsOptions, U as UseFileMentionsResult, r as rankFileMentions, u as useFileMentions } from '../agent-session-controls-BwImzYKC.js';
12
12
  import { a as ChatAttachmentKind, b as ChatAttachmentInput } from '../wire-DOZ-O6hD.js';
13
13
  export { C as ChatMentionKind, e as ChatTurnFilePartInput, d as ChatTurnPartInput, c as ChatTurnRequestPayload, D as DISPATCH_MAX_MEDIA_PARTS, i as DISPATCH_MAX_PARTS, j as DISPATCH_REQUEST_MAX_BYTES, k as DISPATCH_STRUCTURAL_RESERVE_BYTES, F as FileMention, P as ProducerErrorEvent, m as ProducerNoticeEvent, n as ProducerPassthroughEvent, o as ProducerPassthroughEventType, p as ProducerReasoningEvent, q as ProducerTextEvent, r as ProducerToolCallEvent, s as ProducerToolResultEvent, t as ProducerUsageEvent, u as ProducerWireEvent, w as base64WireLen, x as buildMentionPromptBlock, y as chatTurnRequestInit, z as fileMentionsToParts, B as mediaTypeForMentionPath, E as mentionKindForPath } from '../wire-DOZ-O6hD.js';
14
+ import { Harness } from '../harness/index.js';
14
15
  import { S as StepAgentActivity } from '../agent-activity-C8ZG0F0M.js';
15
16
  import { F as FlowTrace } from '../flow-types-CJxEmaRy.js';
16
17
  import { a as ReviewQueueItem, c as ReviewQueueState } from '../queue-VTBA5ONX.js';
@@ -22,7 +23,6 @@ import { AsyncResourceState, AsyncEmptySpec } from './async/index.js';
22
23
  import { CatalogModel } from '../catalog/index.js';
23
24
  export { a as ATTACHMENT_ACCEPT, e as FileIndexReadyResponse, f as FileIndexResponse, g as FileIndexWarmingResponse } from '../attachment-validation-BfJDBU1g.js';
24
25
  export { a as attachmentPartKey } from '../stream-normalizer-DKRxyVlZ.js';
25
- import '../harness/index.js';
26
26
  import '../billing/index.js';
27
27
 
28
28
  /** Represent durable plan decisions as either approved or rejected */
@@ -936,6 +936,34 @@ interface ProviderLogoProps {
936
936
  /** Real brand mark when we have one; tinted monogram otherwise. */
937
937
  declare function ProviderLogo({ provider, size }: ProviderLogoProps): ReactNode;
938
938
 
939
+ /**
940
+ * Per-harness brand marks for the canonical pickers — the same marks the
941
+ * legacy sandbox-ui harness picker (`dashboard/harness-logo.tsx`) shipped,
942
+ * vendored as inline SVG so `/web-react` stays dependency-free beyond React:
943
+ * sandbox-ui (and its `@lobehub/icons-static-svg` bundle) is an OPTIONAL peer
944
+ * the canonical pickers must not force on a consumer. Geometry is the lobehub
945
+ * single-color artwork, rendered in `currentColor` exactly as the legacy
946
+ * component painted it (a foreground-filled CSS mask), so every mark tracks
947
+ * the theme. Harnesses with no published brand mark get an honest inline
948
+ * lucide glyph — bot / plug / terminal, the same fallbacks the legacy picker
949
+ * used — and an unknown id falls back to the neutral bot. Data-record
950
+ * structure mirrors `./provider-logo`.
951
+ */
952
+
953
+ interface HarnessGlyphProps {
954
+ /** Harness to mark. Typed as the canonical union; an out-of-union runtime
955
+ * value still renders — it gets the neutral fallback glyph. */
956
+ harness: Harness;
957
+ className?: string;
958
+ }
959
+ /**
960
+ * Brand mark for a harness — size it from the call site (`className="h-4
961
+ * w-4"`). Unknown ids render the neutral bot, never an invented logo.
962
+ * `data-glyph` names the resolved mark so tests and stories can assert
963
+ * brand-vs-fallback without snapshotting path data.
964
+ */
965
+ declare function HarnessGlyph({ harness, className }: HarnessGlyphProps): ReactNode;
966
+
939
967
  /**
940
968
  * Smooth text reveal — turns chunky network deltas into a continuous
941
969
  * typewriter paint. Streamed turns arrive in 100-500ms slabs (model burst,
@@ -1935,6 +1963,16 @@ declare function usePopover(open: boolean, setOpen: (open: boolean) => void): {
1935
1963
  'aria-expanded': boolean;
1936
1964
  };
1937
1965
  };
1966
+ /**
1967
+ * The one overlay elevation for floating surfaces — picker menus, popovers,
1968
+ * drawers, modals. The theme's `shadow-overlay` utility is landing with the
1969
+ * token work; until it does, this is the composer's raised-card literal kept
1970
+ * in a single place so every overlay paints the same shadow and the later
1971
+ * token swap is a one-line edit (`shadow-overlay` here, `shadow-raised` on
1972
+ * the composer card).
1973
+ * TODO(theme): swap to `shadow-overlay` once the preset ships it.
1974
+ */
1975
+ declare const OVERLAY_SHADOW = "shadow-[0_1px_2px_hsl(var(--foreground)/0.05),0_12px_28px_hsl(var(--foreground)/0.07)] dark:shadow-[0_1px_2px_hsl(var(--foreground)/0.14),0_12px_28px_hsl(var(--foreground)/0.22)]";
1938
1976
  /**
1939
1977
  * Guard an async action against double-submit. `run` ignores re-entrant calls
1940
1978
  * while a promise is in flight and flips `pending` so the caller can disable
@@ -1988,6 +2026,26 @@ interface EffortLevel {
1988
2026
  label: string;
1989
2027
  }
1990
2028
  declare const DEFAULT_EFFORT_LEVELS: readonly EffortLevel[];
2029
+ /** Segments the meter draws — fixed geometry so the ladder stays tabular
2030
+ * across levels (and across the trigger and its menu rows). */
2031
+ declare const EFFORT_METER_SEGMENTS = 4;
2032
+ /**
2033
+ * Filled-segment count for a level: 0 for off/none (or an id the levels list
2034
+ * does not carry); otherwise the level's position among the non-off choices
2035
+ * scaled onto the meter, so the ladder reads low < medium < high and the top
2036
+ * level fills the whole scale. The canonical four levels land 0 / 1 / 2 / 4.
2037
+ */
2038
+ declare function effortMeterFill(levelId: string, levels?: readonly EffortLevel[]): number;
2039
+ /**
2040
+ * The thinking-strength meter: four 12px bars, filled count = level, filled
2041
+ * opacity ramping 25→100% left to right (unfilled at a faint ghost). Purely
2042
+ * decorative — the level name is always rendered as text beside it, so the
2043
+ * meter is `aria-hidden` and adds no second accessible name.
2044
+ */
2045
+ declare function EffortMeter({ fill, className }: {
2046
+ fill: number;
2047
+ className?: string;
2048
+ }): react.JSX.Element;
1991
2049
  interface EffortPickerProps {
1992
2050
  value: string;
1993
2051
  onChange: (id: string) => void;
@@ -2202,4 +2260,4 @@ declare function useThinkingSeconds(active: boolean): number;
2202
2260
  */
2203
2261
  declare function ChatMessages({ messages, messageSize, chrome, models, renderMarkdown, renderExtras, durableCards, userLabel, agentLabel, loading, approval, onToolCallClick, toolRenderers, error, onRetry, renderEmpty, emptyState, header, resolveAttachmentUrl, workProductCards, }: ChatMessagesProps): react.JSX.Element;
2204
2262
 
2205
- export { type ActivityTone, type AgentActivityPage, AgentActivityPanel, type AgentActivityPanelProps, type AgentActivityRecord, type AttachmentFileResult, CatalogModel, ChatAttachmentInput, ChatAttachmentKind, ChatAttachmentPart, ChatComposer, type ChatComposerProps, type ChatEmptyDoor, ChatEmptyState, type ChatEmptyStateProps, ChatInteraction, ChatInteractionField, type ChatInteractionRestoreMode, ChatInteractionStatus, ChatMentionPart, type ChatMessageMetrics, type ChatMessageSegment, ChatMessages, type ChatMessagesProps, ChatSelectField, type ChatStreamCallbacks, type ChatStreamToolCall, type ChatStreamToolResult, type ChatToolCallInfo, type ChatUiMessage, type ComposerFile, type ComposerFilePart, type ComposerSendFailure, type ComposerSendHandler, type ComposerSendOutcome, type ComposerSendPartsHandler, type ComposerSendRejected, type ComposerSendResult, type ConsumeChatStreamResult, DEFAULT_EFFORT_LEVELS, DEFAULT_PROVENANCE_CONFIDENCE_POLICY, type DurableChatCard, DurableChatCards, type DurableChatCardsProps, type DurableInteractionAnswerSubmitterOptions, DurablePlanCard, type DurablePlanCardProps, DurablePlanClientError, type DurablePlanCurrentInput, type DurablePlanDecision, type DurablePlanDecisionClient, type DurablePlanDecisionClientOptions, type DurablePlanDecisionInput, type DurablePlanDecisionResult, type DurablePlanFollowUpReceipt, EMPTY_RECORD_GRID_OVERLAY, type EffortLevel, EffortPicker, type EffortPickerProps, EvidenceLineageTable, type EvidenceLineageTableProps, ExceptionList, type ExceptionListProps, type FetchSessionPage, type FieldValues, FlowWaterfall, type FlowWaterfallProps, INTERACTION_SUBMIT_TIMEOUT_MESSAGE, INTERACTION_SUBMIT_TIMEOUT_MS, InteractionActionButton, type InteractionAnswerSubmission, type InteractionAnswerSubmitterOptions, InteractionAnswers, type InteractionAttemptStore, InteractionBadge, type InteractionBadgeVariant, InteractionCancelData, InteractionPlanCard, type InteractionPlanCardProps, InteractionQuestionCard, type InteractionQuestionCardProps, InteractionRequestWire, type InteractionSubmitResult, type LinkLikeComponent, type LinkLikeProps, type MentionTextSegment, MessageAttachments, type MessageAttachmentsProps, MissionActivityLane, type MissionActivityLaneProps, ModelPicker, type ModelPickerProps, PROVENANCE_BASES, type ProposalApprovalHandlers, type ProvenanceBasis, type ProvenanceBasisMeta, type ProvenanceConfidencePolicy, type ProvenanceGap, type ProvenanceGapKind, ProvenanceLegend, type ProvenanceLegendProps, type ProvenanceRecord, type ProvenanceSource, type ProvenanceSourceStatus, ProvenanceStamp, type ProvenanceStampProps, type ProvenanceStanding, type ProvenanceStandingMeta, ProvenanceValue, type ProvenanceValueProps, ProviderLogo, type ProviderLogoProps, QualityCheckList, type QualityCheckListProps, QuestionOptionList, type QuestionOptionListProps, RecordGrid, type RecordGridBooleanColumn, type RecordGridCellChange, type RecordGridCellOutcome, type RecordGridCellSource, type RecordGridColumn, type RecordGridColumnBase, type RecordGridCreateOutcome, type RecordGridCurrencyColumn, type RecordGridDateColumn, type RecordGridDependency, type RecordGridNumberColumn, type RecordGridOverlay, type RecordGridProps, type RecordGridRow, type RecordGridRowOutcome, type RecordGridSelectColumn, type RecordGridSelectOption, type RecordGridSourceBasis, type RecordGridTextColumn, type RecordGridValue, type RecordGridWriteOutcome, type RestoreChatInteractionsOptions, ReviewQueueItem, type ReviewQueuePage, ReviewQueuePanel, type ReviewQueuePanelProps, ReviewQueueState, RunDrillIn, type RunDrillInProps, SeatPaywall, type SeatPaywallProps, type SessionActionLabels, type SessionActions, type SessionActionsOptions, type SessionBulkAction, SessionHistoryPanel, type SessionHistoryPanelProps, type SessionHistoryState, type SessionPageQuery, type SmoothRevealOptions, type StreamChatOptions, type SubmitInteractionAnswer, type ToolDetailRenderers, type ToolRunRecord, type ToolRunStep, type UseChatInteractionsOptions, type UseChatInteractionsResult, type UseComposerAttachmentsOptions, type UseComposerAttachmentsResult, type UseDurablePlanFlowOptions, type UseDurablePlanFlowResult, type UseInfiniteScrollOptions, type UseSessionHistoryOptions, type WaterfallRow, WorkProductCard, type WorkProductCardProps, __resetAttachmentFileCacheForTests, activityTone, buildAnswerData, cancelChatInteraction, consumeChatStream, createDurableInteractionAnswerSubmitter, createDurablePlanDecisionClient, createInteractionAnswerSubmitter, createMemoryInteractionAttemptStore, createSessionInteractionAttemptStore, describeProvenance, describeProvenanceSourceStatus, dispatchChatStreamLine, durableChatCardsFromParts, fieldAnswer, fieldValuesFromAnswers, formatActivityCost, formatActivityDuration, formatModelCost, formatRecordGridValue, formatSessionTimestamp, formatTokensPerSecond, hasSecretField, hydrateChatInteractions, interactionStatusLabels, interactionSubmissionSignature, interactionTerminalNotes, isLateAnswerableStatus, isRecordGridCellApplicable, lateAnswerMessage, loadAttachmentFile, loadingProvenanceSources, mergeActivityPages, mergeReviewQueuePages, nextRevealCount, parseRecordGridInput, pendingApprovalOf, projectRecordGridRows, provenanceBasisMeta, provenanceGaps, provenanceNextMove, provenanceStandingMeta, provenanceTriggerLabel, pruneRecordGridOverlay, readRecordGridCell, recordGridEditorText, recordGridFail, recordGridOk, recordGridRowLabel, resolveChatInteraction, resolveProvenanceStanding, responseErrorMessage, restoreChatInteractions, reviewQueueStateLabel, rollUpProvenanceStanding, sameRecordGridValue, segmentMentionContent, settleInteractionSubmit, standingFromConfidence, streamChatTurn, sumRecordGridColumn, terminalizePendingChatInteractions, triggerAttachmentDownload, upsertChatInteraction, useChatInteractions, useComposerAttachments, useDurablePlanFlow, useInfiniteScroll, usePending, usePopover, useSessionActions, useSessionHistory, useSmoothText, useThinkingSeconds, validateRecordGridCell, validateRecordGridRow, waterfallLayout, weakerProvenanceStanding, withRecordGridCreated, withRecordGridRemoved, withRecordGridServerRow, withRecordGridUpdate, withoutRecordGridCreated, withoutRecordGridRemoved, withoutRecordGridUpdate, workProductPartsFromMessageParts, workProductStatusLabel };
2263
+ export { type ActivityTone, type AgentActivityPage, AgentActivityPanel, type AgentActivityPanelProps, type AgentActivityRecord, type AttachmentFileResult, CatalogModel, ChatAttachmentInput, ChatAttachmentKind, ChatAttachmentPart, ChatComposer, type ChatComposerProps, type ChatEmptyDoor, ChatEmptyState, type ChatEmptyStateProps, ChatInteraction, ChatInteractionField, type ChatInteractionRestoreMode, ChatInteractionStatus, ChatMentionPart, type ChatMessageMetrics, type ChatMessageSegment, ChatMessages, type ChatMessagesProps, ChatSelectField, type ChatStreamCallbacks, type ChatStreamToolCall, type ChatStreamToolResult, type ChatToolCallInfo, type ChatUiMessage, type ComposerFile, type ComposerFilePart, type ComposerSendFailure, type ComposerSendHandler, type ComposerSendOutcome, type ComposerSendPartsHandler, type ComposerSendRejected, type ComposerSendResult, type ConsumeChatStreamResult, DEFAULT_EFFORT_LEVELS, DEFAULT_PROVENANCE_CONFIDENCE_POLICY, type DurableChatCard, DurableChatCards, type DurableChatCardsProps, type DurableInteractionAnswerSubmitterOptions, DurablePlanCard, type DurablePlanCardProps, DurablePlanClientError, type DurablePlanCurrentInput, type DurablePlanDecision, type DurablePlanDecisionClient, type DurablePlanDecisionClientOptions, type DurablePlanDecisionInput, type DurablePlanDecisionResult, type DurablePlanFollowUpReceipt, EFFORT_METER_SEGMENTS, EMPTY_RECORD_GRID_OVERLAY, type EffortLevel, EffortMeter, EffortPicker, type EffortPickerProps, EvidenceLineageTable, type EvidenceLineageTableProps, ExceptionList, type ExceptionListProps, type FetchSessionPage, type FieldValues, FlowWaterfall, type FlowWaterfallProps, HarnessGlyph, type HarnessGlyphProps, INTERACTION_SUBMIT_TIMEOUT_MESSAGE, INTERACTION_SUBMIT_TIMEOUT_MS, InteractionActionButton, type InteractionAnswerSubmission, type InteractionAnswerSubmitterOptions, InteractionAnswers, type InteractionAttemptStore, InteractionBadge, type InteractionBadgeVariant, InteractionCancelData, InteractionPlanCard, type InteractionPlanCardProps, InteractionQuestionCard, type InteractionQuestionCardProps, InteractionRequestWire, type InteractionSubmitResult, type LinkLikeComponent, type LinkLikeProps, type MentionTextSegment, MessageAttachments, type MessageAttachmentsProps, MissionActivityLane, type MissionActivityLaneProps, ModelPicker, type ModelPickerProps, OVERLAY_SHADOW, PROVENANCE_BASES, type ProposalApprovalHandlers, type ProvenanceBasis, type ProvenanceBasisMeta, type ProvenanceConfidencePolicy, type ProvenanceGap, type ProvenanceGapKind, ProvenanceLegend, type ProvenanceLegendProps, type ProvenanceRecord, type ProvenanceSource, type ProvenanceSourceStatus, ProvenanceStamp, type ProvenanceStampProps, type ProvenanceStanding, type ProvenanceStandingMeta, ProvenanceValue, type ProvenanceValueProps, ProviderLogo, type ProviderLogoProps, QualityCheckList, type QualityCheckListProps, QuestionOptionList, type QuestionOptionListProps, RecordGrid, type RecordGridBooleanColumn, type RecordGridCellChange, type RecordGridCellOutcome, type RecordGridCellSource, type RecordGridColumn, type RecordGridColumnBase, type RecordGridCreateOutcome, type RecordGridCurrencyColumn, type RecordGridDateColumn, type RecordGridDependency, type RecordGridNumberColumn, type RecordGridOverlay, type RecordGridProps, type RecordGridRow, type RecordGridRowOutcome, type RecordGridSelectColumn, type RecordGridSelectOption, type RecordGridSourceBasis, type RecordGridTextColumn, type RecordGridValue, type RecordGridWriteOutcome, type RestoreChatInteractionsOptions, ReviewQueueItem, type ReviewQueuePage, ReviewQueuePanel, type ReviewQueuePanelProps, ReviewQueueState, RunDrillIn, type RunDrillInProps, SeatPaywall, type SeatPaywallProps, type SessionActionLabels, type SessionActions, type SessionActionsOptions, type SessionBulkAction, SessionHistoryPanel, type SessionHistoryPanelProps, type SessionHistoryState, type SessionPageQuery, type SmoothRevealOptions, type StreamChatOptions, type SubmitInteractionAnswer, type ToolDetailRenderers, type ToolRunRecord, type ToolRunStep, type UseChatInteractionsOptions, type UseChatInteractionsResult, type UseComposerAttachmentsOptions, type UseComposerAttachmentsResult, type UseDurablePlanFlowOptions, type UseDurablePlanFlowResult, type UseInfiniteScrollOptions, type UseSessionHistoryOptions, type WaterfallRow, WorkProductCard, type WorkProductCardProps, __resetAttachmentFileCacheForTests, activityTone, buildAnswerData, cancelChatInteraction, consumeChatStream, createDurableInteractionAnswerSubmitter, createDurablePlanDecisionClient, createInteractionAnswerSubmitter, createMemoryInteractionAttemptStore, createSessionInteractionAttemptStore, describeProvenance, describeProvenanceSourceStatus, dispatchChatStreamLine, durableChatCardsFromParts, effortMeterFill, fieldAnswer, fieldValuesFromAnswers, formatActivityCost, formatActivityDuration, formatModelCost, formatRecordGridValue, formatSessionTimestamp, formatTokensPerSecond, hasSecretField, hydrateChatInteractions, interactionStatusLabels, interactionSubmissionSignature, interactionTerminalNotes, isLateAnswerableStatus, isRecordGridCellApplicable, lateAnswerMessage, loadAttachmentFile, loadingProvenanceSources, mergeActivityPages, mergeReviewQueuePages, nextRevealCount, parseRecordGridInput, pendingApprovalOf, projectRecordGridRows, provenanceBasisMeta, provenanceGaps, provenanceNextMove, provenanceStandingMeta, provenanceTriggerLabel, pruneRecordGridOverlay, readRecordGridCell, recordGridEditorText, recordGridFail, recordGridOk, recordGridRowLabel, resolveChatInteraction, resolveProvenanceStanding, responseErrorMessage, restoreChatInteractions, reviewQueueStateLabel, rollUpProvenanceStanding, sameRecordGridValue, segmentMentionContent, settleInteractionSubmit, standingFromConfidence, streamChatTurn, sumRecordGridColumn, terminalizePendingChatInteractions, triggerAttachmentDownload, upsertChatInteraction, useChatInteractions, useComposerAttachments, useDurablePlanFlow, useInfiniteScroll, usePending, usePopover, useSessionActions, useSessionHistory, useSmoothText, useThinkingSeconds, validateRecordGridCell, validateRecordGridRow, waterfallLayout, weakerProvenanceStanding, withRecordGridCreated, withRecordGridRemoved, withRecordGridServerRow, withRecordGridUpdate, withoutRecordGridCreated, withoutRecordGridRemoved, withoutRecordGridUpdate, workProductPartsFromMessageParts, workProductStatusLabel };
@@ -110,7 +110,7 @@ import {
110
110
  withoutRecordGridCreated,
111
111
  withoutRecordGridRemoved,
112
112
  withoutRecordGridUpdate
113
- } from "../chunk-IFYJDX3J.js";
113
+ } from "../chunk-XHD4Y54K.js";
114
114
  import "../chunk-FBVLEGEG.js";
115
115
  import {
116
116
  EvidenceLineageTable,
@@ -123,20 +123,25 @@ import {
123
123
  reviewQueueStateLabel,
124
124
  workProductPartsFromMessageParts,
125
125
  workProductStatusLabel
126
- } from "../chunk-HZ4WCA37.js";
126
+ } from "../chunk-5MZXWPFN.js";
127
127
  import {
128
128
  parseReviewQueueItem
129
129
  } from "../chunk-GEYACSFW.js";
130
130
  import {
131
131
  AgentSessionControls,
132
132
  DEFAULT_EFFORT_LEVELS,
133
+ EFFORT_METER_SEGMENTS,
134
+ EffortMeter,
133
135
  EffortPicker,
136
+ HarnessGlyph,
134
137
  ModelPicker,
138
+ OVERLAY_SHADOW,
135
139
  ProviderLogo,
140
+ effortMeterFill,
136
141
  useComposerAttachments,
137
142
  usePending,
138
143
  usePopover
139
- } from "../chunk-L7FHRORY.js";
144
+ } from "../chunk-SFSR3CAH.js";
140
145
  import {
141
146
  tabTerminalConnectionId,
142
147
  useSandboxTerminalConnection
@@ -215,11 +220,14 @@ export {
215
220
  DurableChatCards,
216
221
  DurablePlanCard,
217
222
  DurablePlanClientError,
223
+ EFFORT_METER_SEGMENTS,
218
224
  EMPTY_RECORD_GRID_OVERLAY,
225
+ EffortMeter,
219
226
  EffortPicker,
220
227
  EvidenceLineageTable,
221
228
  ExceptionList,
222
229
  FlowWaterfall,
230
+ HarnessGlyph,
223
231
  INDEX_REFRESH_AFTER_MS,
224
232
  INTERACTION_CANCEL_EVENT,
225
233
  INTERACTION_EVENT,
@@ -233,6 +241,7 @@ export {
233
241
  MessageAttachments,
234
242
  MissionActivityLane,
235
243
  ModelPicker,
244
+ OVERLAY_SHADOW,
236
245
  PROVENANCE_BASES,
237
246
  ProvenanceLegend,
238
247
  ProvenanceStamp,
@@ -272,6 +281,7 @@ export {
272
281
  describeProvenanceSourceStatus,
273
282
  dispatchChatStreamLine,
274
283
  durableChatCardsFromParts,
284
+ effortMeterFill,
275
285
  fieldAcceptsFreeText,
276
286
  fieldAnswer,
277
287
  fieldValuesFromAnswers,
@@ -4,7 +4,7 @@ import {
4
4
  ProvenanceStamp,
5
5
  QualityCheckList,
6
6
  workProductStatusLabel
7
- } from "../chunk-HZ4WCA37.js";
7
+ } from "../chunk-5MZXWPFN.js";
8
8
  import "../chunk-GEYACSFW.js";
9
9
  import {
10
10
  unresolvedBlockingExceptions
@@ -147,7 +147,7 @@ function WorkProductPane({
147
147
  {
148
148
  type: "button",
149
149
  onClick: () => void loadCompare(prior, entry),
150
- className: "rounded-md border border-border px-2 py-0.5 text-[11px] font-medium text-foreground transition hover:bg-accent/30",
150
+ className: "rounded-md border border-border px-2 py-0.5 text-[11px] font-medium text-foreground transition hover:bg-accent",
151
151
  children: [
152
152
  "Compare v",
153
153
  prior.version,
@@ -157,7 +157,7 @@ function WorkProductPane({
157
157
  }
158
158
  )
159
159
  ] }),
160
- entry.reviewNote && /* @__PURE__ */ jsx("p", { className: "mt-1 text-[13px] leading-snug text-foreground", children: entry.reviewNote }),
160
+ entry.reviewNote && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm leading-snug text-foreground", children: entry.reviewNote }),
161
161
  /* @__PURE__ */ jsx(ProvenanceStamp, { provenance: entry.provenance, className: "mt-1" })
162
162
  ] }, `${entry.version}:${entry.status}:${entry.at}`);
163
163
  }),