@copilotkit/web-inspector 1.73.0 → 1.73.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -28,7 +28,7 @@ const THREAD_INSPECTOR_TAG = "cpk-thread-inspector";
28
28
  * User-facing label for the learning view. The legacy menu key stays
29
29
  * "memories" for persistence and telemetry stability.
30
30
  */
31
- const LEARNING_VIEW_LABEL = "Learning";
31
+ const LEARNING_VIEW_LABEL = "Automatic Learning";
32
32
  const LEARNING_RECOPY_CONFIRMATION_MS = 2e3;
33
33
  /**
34
34
  * User-facing label for the What's new view. Its menu key stays `whats-new`
@@ -292,17 +292,17 @@ const SELF_HOSTED_INTELLIGENCE_URL = "https://docs.copilotkit.ai/intelligence/se
292
292
  const INTELLIGENCE_STORY_BEATS = [
293
293
  {
294
294
  id: "threads",
295
- label: "Threads",
295
+ label: "Rich Threads",
296
296
  duration: 6500,
297
297
  lead: "You only see this session. Your users have all the others.",
298
298
  support: "Rich Threads keep every conversation and its state, so you can open the one that broke instead of reproducing it."
299
299
  },
300
300
  {
301
301
  id: "learning",
302
- label: "Learning",
302
+ label: "Automatic Learning",
303
303
  duration: 6e3,
304
304
  lead: "Your users already told you what to fix.",
305
- support: "Learning reads the runs behind those threads and finds the patterns — every Insight linked to the messages that back it."
305
+ support: "Automatic Learning reads the runs behind those threads and finds the patterns — every Insight linked to the messages that back it."
306
306
  },
307
307
  {
308
308
  id: "skill",
@@ -392,7 +392,7 @@ const INTELLIGENCE_STORY_CHAIN = [
392
392
  }
393
393
  ];
394
394
  const THREADS_EXAMPLE_OVERVIEW_VIDEO_URL = "https://cdn.copilotkit.ai/corp-site/videos/copilotkit-generative-ui-agentic-frontend-demo.webm";
395
- const THREADS_EXAMPLE_OVERVIEW_VIDEO_FALLBACK = "The demo video is unavailable. Use the example threads to explore Messages, AG-UI Events, and State.";
395
+ const THREADS_EXAMPLE_OVERVIEW_VIDEO_FALLBACK = "The demo video is unavailable. Use the example threads to explore Conversation, AG-UI Events, and State.";
396
396
  const THREADS_LOCKED_VIDEO_URL = "https://www.loom.com/embed/79817778d29e490c97225127d2f17b3a?hide_owner=true&hide_share=true&hide_title=true&hideEmbedTopBar=true&hide_speed=true";
397
397
  const LEARNING_LOCKED_VIDEO_URL = "https://www.loom.com/embed/2978fbfe42324e509057ac5fd46b7a70?hide_owner=true&hide_share=true&hide_title=true&hideEmbedTopBar=true&hide_speed=true";
398
398
  const THREADS_LOCKED_FEATURE_OUTLINE = [
@@ -740,9 +740,9 @@ const THREADS_EXAMPLE_DETAILS = {
740
740
  const THREADS_EXAMPLE_TOUR_STEPS = [
741
741
  {
742
742
  tab: "timeline",
743
- label: "Messages",
743
+ label: "Conversation",
744
744
  title: "Read the run as a story",
745
- body: "The timeline turns messages, tool calls, state changes, and run markers into a scannable debugging trail."
745
+ body: "Read messages and tool calls as a conversation. Switch to the event timeline to inspect state changes and run markers."
746
746
  },
747
747
  {
748
748
  tab: "raw-events",
@@ -1236,6 +1236,7 @@ var CpkThreadList = class extends PortableLitElement {
1236
1236
  var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1237
1237
  constructor(..._args2) {
1238
1238
  super(..._args2);
1239
+ this.showThreadTitle = true;
1239
1240
  this.threadId = null;
1240
1241
  this.provider = null;
1241
1242
  this.thread = null;
@@ -1254,6 +1255,7 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1254
1255
  this.tryFromHereBusy = false;
1255
1256
  this.tryFromHereError = null;
1256
1257
  this._tab = "timeline";
1258
+ this._showEventTimeline = false;
1257
1259
  this._fetchedMetadata = null;
1258
1260
  this._conversation = [];
1259
1261
  this._fetchedEvents = null;
@@ -1325,6 +1327,10 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1325
1327
  static {
1326
1328
  this.properties = {
1327
1329
  threadId: { attribute: false },
1330
+ showThreadTitle: {
1331
+ type: Boolean,
1332
+ attribute: false
1333
+ },
1328
1334
  provider: { attribute: false },
1329
1335
  thread: { attribute: false },
1330
1336
  runtimeUrl: { attribute: false },
@@ -1374,7 +1380,7 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1374
1380
  this.TAB_LIST = [
1375
1381
  {
1376
1382
  id: "timeline",
1377
- label: "Messages"
1383
+ label: "Conversation"
1378
1384
  },
1379
1385
  {
1380
1386
  id: "raw-events",
@@ -1416,8 +1422,17 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1416
1422
  static headersLoadKey(headers) {
1417
1423
  return JSON.stringify(Object.entries(headers).sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey)));
1418
1424
  }
1425
+ renderConversationActions() {
1426
+ return lit.html`<div class="cpk-td__timeline-toolbar">
1427
+ <button type="button" class="cpk-td__timeline-bulk-toggle" aria-pressed=${this._showEventTimeline} @click=${() => {
1428
+ this._showEventTimeline = !this._showEventTimeline;
1429
+ this.requestUpdate();
1430
+ }}>${this._showEventTimeline ? "Show conversation" : "Show event timeline"}</button>
1431
+ ${this.renderTryFromHereControl()}
1432
+ </div>`;
1433
+ }
1419
1434
  renderTabContent(id) {
1420
- if (id === "timeline") return this.withMessagesToolbar(this.renderTimeline());
1435
+ if (id === "timeline") return lit.html`${this._showEventTimeline ? lit.html`<div class="cpk-td__timeline-toolbar">${this.renderTimelineBulkButtons()}</div>${this.renderTimeline()}` : this._conversation.length || this._loadingMessages || this._messagesError ? this.renderConversation() : this.renderTimeline()}`;
1421
1436
  if (id === "state") return this.renderState();
1422
1437
  return this.renderEvents();
1423
1438
  }
@@ -1624,6 +1639,49 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1624
1639
  margin-inline-start: 0;
1625
1640
  }
1626
1641
 
1642
+ .cpk-td__thread-header {
1643
+ display: flex;
1644
+ flex-wrap: wrap;
1645
+ align-items: center;
1646
+ gap: 10px 16px;
1647
+ padding: 12px 16px;
1648
+ flex-shrink: 0;
1649
+ border-bottom: 1px solid #dbdbe540;
1650
+ }
1651
+ .cpk-td__thread-title {
1652
+ flex: 1 1 180px;
1653
+ min-width: 0;
1654
+ overflow-wrap: anywhere;
1655
+ font-size: 15px;
1656
+ font-weight: 600;
1657
+ }
1658
+ .cpk-td__pinned-actions {
1659
+ margin-left: auto;
1660
+ max-width: 100%;
1661
+ }
1662
+ .cpk-td__pinned-actions .cpk-td__timeline-toolbar {
1663
+ justify-content: flex-end;
1664
+ }
1665
+
1666
+ :host([data-color-scheme="dark"]) .cpk-td__bubble-inner--assistant {
1667
+ background: transparent;
1668
+ color: #e7e7ed;
1669
+ }
1670
+ :host([data-color-scheme="dark"]) .cpk-td__bubble-inner--user {
1671
+ background: #27272a;
1672
+ color: #f4f4f5;
1673
+ }
1674
+ :host([data-color-scheme="dark"]) .cpk-td__show-more {
1675
+ color: #c5b5ff;
1676
+ }
1677
+ .cpk-td__timeline-bulk-toggle[aria-pressed="true"] {
1678
+ background: #ece7fa;
1679
+ color: #51418b;
1680
+ }
1681
+ .cpk-td__bubble-inner {
1682
+ line-height: 1.65;
1683
+ overflow-wrap: anywhere;
1684
+ }
1627
1685
  .cpk-td__metadata-strip {
1628
1686
  display: flex;
1629
1687
  flex-direction: column;
@@ -1869,7 +1927,7 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1869
1927
  /* ── Conversation bubbles ────────────────────────────────────────── */
1870
1928
  .cpk-td__bubble {
1871
1929
  display: flex;
1872
- margin-bottom: 2px;
1930
+ margin-bottom: 10px;
1873
1931
  }
1874
1932
 
1875
1933
  .cpk-td__bubble--user {
@@ -1881,16 +1939,16 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1881
1939
  }
1882
1940
 
1883
1941
  .cpk-td__bubble-inner {
1884
- padding: 9px 14px;
1885
- max-width: 75%;
1886
- font-size: 13px;
1887
- line-height: 1.55;
1942
+ padding: 10px 16px;
1943
+ max-width: 80%;
1944
+ font-size: 14px;
1945
+ line-height: 1.65;
1888
1946
  }
1889
1947
 
1890
1948
  .cpk-td__bubble-inner--user {
1891
- background: #eee6fe;
1892
- color: #57575b;
1893
- border-radius: 12px 12px 4px 12px;
1949
+ background: #f4f4f5;
1950
+ color: #18181b;
1951
+ border-radius: 18px;
1894
1952
  }
1895
1953
 
1896
1954
  .cpk-td__show-more {
@@ -1905,16 +1963,17 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1905
1963
  }
1906
1964
 
1907
1965
  .cpk-td__bubble-inner--assistant {
1908
- background: #f7f7f9;
1966
+ background: transparent;
1909
1967
  color: #010507;
1910
- border-radius: 12px 12px 12px 4px;
1911
- border: 1px solid #e9e9ef;
1968
+ max-width: 100%;
1969
+ padding: 4px 0;
1970
+ border: 0;
1912
1971
  }
1913
1972
 
1914
1973
  /* ── Tool call blocks ────────────────────────────────────────────── */
1915
1974
  .cpk-td__tool-block {
1916
1975
  border: 1px solid #e9e9ef;
1917
- border-radius: 7px;
1976
+ border-radius: 12px;
1918
1977
  overflow: hidden;
1919
1978
  }
1920
1979
 
@@ -1922,34 +1981,38 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
1922
1981
  display: flex;
1923
1982
  align-items: center;
1924
1983
  gap: 6px;
1925
- padding: 6px 10px;
1926
- background: rgba(133, 236, 206, 0.15);
1984
+ padding: 12px;
1985
+ background: #ffffff;
1986
+ color: #71717a;
1927
1987
  cursor: pointer;
1928
1988
  font-size: 11px;
1929
1989
  user-select: none;
1930
1990
  }
1931
1991
 
1932
1992
  .cpk-td__tool-header:hover {
1933
- background: rgba(133, 236, 206, 0.22);
1993
+ background: #fafafa;
1934
1994
  }
1935
1995
 
1936
1996
  .cpk-td__tool-name {
1937
- font-family: "Spline Sans Mono", monospace;
1938
- font-size: 10px;
1997
+ font-size: 13px;
1939
1998
  font-weight: 500;
1940
- color: #087653;
1941
- text-transform: uppercase;
1999
+ color: #18181b;
2000
+ overflow-wrap: anywhere;
2001
+ min-width: 0;
1942
2002
  flex: 1;
1943
2003
  }
1944
2004
 
1945
2005
  .cpk-td__tool-status {
1946
- font-family: "Spline Sans Mono", monospace;
1947
- font-size: 9px;
1948
- text-transform: uppercase;
1949
- color: #087653;
2006
+ font-size: 10px;
2007
+ font-weight: 500;
2008
+ padding: 3px 7px;
2009
+ border-radius: 999px;
2010
+ background: #d1fae5;
2011
+ color: #065f46;
1950
2012
  }
1951
2013
 
1952
2014
  .cpk-td__tool-status--pending {
2015
+ background: #fef3c7;
1953
2016
  color: #8a5900;
1954
2017
  }
1955
2018
 
@@ -2257,21 +2320,25 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
2257
2320
  display: flex;
2258
2321
  flex-direction: column;
2259
2322
  gap: 6px;
2260
- padding: 4px 16px 8px;
2323
+ padding: 0;
2261
2324
  animation: cpk-genui-enter 0.25s cubic-bezier(0.16, 1, 0.3, 1) both;
2262
2325
  }
2263
2326
 
2264
2327
  .cpk-td__genui-badge {
2265
- display: inline-flex;
2266
- align-items: center;
2267
- gap: 4px;
2268
- padding: 2px 8px;
2269
- border-radius: 5px;
2270
- background: #eee6fe;
2328
+ display: flex;
2329
+ align-items: baseline;
2330
+ flex-wrap: wrap;
2331
+ gap: 6px;
2332
+ padding: 12px;
2333
+ min-height: 44px;
2334
+ box-sizing: border-box;
2335
+ border: 1px solid #e5def5;
2336
+ border-radius: 12px;
2337
+ background: #f7f4fc;
2271
2338
  color: #57575b;
2272
- font-size: 10px;
2273
- font-weight: 600;
2274
- align-self: flex-start;
2339
+ font-size: 13px;
2340
+ line-height: 20px;
2341
+ font-weight: 500;
2275
2342
  }
2276
2343
 
2277
2344
  .cpk-td__genui-card {
@@ -2282,13 +2349,32 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
2282
2349
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);
2283
2350
  }
2284
2351
 
2285
- .cpk-td__genui-placeholder {
2286
- padding: 8px 12px;
2287
- border-radius: 10px;
2288
- border: 1px solid #ede9fe;
2289
- background: #f5f3ff;
2290
- color: #7c3aed;
2291
- font-size: 11px;
2352
+ .cpk-td__genui-component {
2353
+ margin-left: 6px;
2354
+ font-size: 13px;
2355
+ font-weight: 400;
2356
+ overflow-wrap: anywhere;
2357
+ min-width: 0;
2358
+ line-height: inherit;
2359
+ }
2360
+
2361
+ :host([data-color-scheme="dark"]) .cpk-td__genui-badge {
2362
+ border-color: #49405f;
2363
+ }
2364
+
2365
+ :host([data-color-scheme="dark"]) .cpk-td__tool-header {
2366
+ background: #191c24;
2367
+ }
2368
+ :host([data-color-scheme="dark"]) .cpk-td__tool-name {
2369
+ color: #f4f4f5;
2370
+ }
2371
+ :host([data-color-scheme="dark"]) .cpk-td__tool-status {
2372
+ background: #17392e;
2373
+ color: #6ee7b7;
2374
+ }
2375
+ :host([data-color-scheme="dark"]) .cpk-td__tool-status--pending {
2376
+ background: #3d3019;
2377
+ color: #fbbf24;
2292
2378
  }
2293
2379
 
2294
2380
  /* ── AG-UI Events ────────────────────────────────────────────────── */
@@ -2528,7 +2614,6 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
2528
2614
 
2529
2615
  :host([data-color-scheme="dark"]) .cpk-td__metadata-pill,
2530
2616
  :host([data-color-scheme="dark"]) .cpk-td__try-from-here,
2531
- :host([data-color-scheme="dark"]) .cpk-td__bubble-inner--assistant,
2532
2617
  :host([data-color-scheme="dark"]) .cpk-td__tool-block,
2533
2618
  :host([data-color-scheme="dark"]) .cpk-td__event,
2534
2619
  :host([data-color-scheme="dark"]) .cpk-td__genui-card,
@@ -3501,7 +3586,10 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3501
3586
  ${viewInApp !== lit.nothing ? lit.html`<div class="cpk-td__chrome-actions">${viewInApp}</div>` : lit.nothing}
3502
3587
  ${this.renderPanelToggle()}
3503
3588
  </div>
3504
- ${this.renderMetadataStrip()}
3589
+ <div class="cpk-td__thread-header">
3590
+ ${this.showThreadTitle ? lit.html`<div class="cpk-td__thread-title">${this.metadata?.name || this.thread?.name || "Rich Thread"}</div>` : lit.nothing}
3591
+ ${this._tab === "timeline" ? lit.html`<div class="cpk-td__pinned-actions">${this.renderConversationActions()}</div>` : lit.nothing}
3592
+ </div>
3505
3593
 
3506
3594
  <!-- Scrollable content -->
3507
3595
  <div class="cpk-td__content">
@@ -3544,60 +3632,6 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3544
3632
  ${this.renderDetailPanel()}
3545
3633
  </div>
3546
3634
  </div>
3547
- `;
3548
- }
3549
- renderMetadataStrip() {
3550
- const metadata = this.metadata;
3551
- const pills = [{
3552
- label: "Name",
3553
- value: metadata?.name ?? this.thread?.name ?? "Untitled"
3554
- }, {
3555
- label: "ID",
3556
- value: metadata?.id ?? this.threadId ?? "—"
3557
- }];
3558
- for (const fact of [
3559
- {
3560
- label: "Agent",
3561
- value: metadata?.agentId
3562
- },
3563
- {
3564
- label: "Created",
3565
- value: metadata?.createdAt
3566
- },
3567
- {
3568
- label: "Updated",
3569
- value: metadata?.updatedAt
3570
- }
3571
- ]) {
3572
- if (fact.value == null || fact.value === "") continue;
3573
- pills.push({
3574
- label: fact.label,
3575
- value: fact.label === "Created" || fact.label === "Updated" ? this.fmtTime(fact.value) : fact.value
3576
- });
3577
- }
3578
- return lit.html`
3579
- <div
3580
- class="cpk-td__metadata-strip"
3581
- role="group"
3582
- aria-label="Thread metadata"
3583
- >
3584
- <div class="cpk-td__metadata-pills">
3585
- ${pills.map((pill) => lit.html`
3586
- <span
3587
- class="cpk-td__metadata-pill ${pill.wrap ? "cpk-td__metadata-pill--wrap" : ""}"
3588
- role="group"
3589
- title=${pill.value}
3590
- aria-label=${`${pill.label}: ${pill.value}`}
3591
- >
3592
- <span class="cpk-td__metadata-label">${pill.label}</span>
3593
- <span
3594
- class="cpk-td__metadata-value ${pill.wrap ? "cpk-td__metadata-value--wrap" : ""}"
3595
- >${pill.value}</span
3596
- >
3597
- </span>
3598
- `)}
3599
- </div>
3600
- </div>
3601
3635
  `;
3602
3636
  }
3603
3637
  renderViewInAppAction() {
@@ -3654,57 +3688,33 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3654
3688
  >${this.tryFromHereError}</span
3655
3689
  >` : lit.nothing}
3656
3690
  `;
3657
- }
3658
- renderTimelineBulkControls() {
3659
- const bulk = this.renderTimelineBulkButtons();
3660
- const tryFromHere = this.renderTryFromHereControl();
3661
- if (bulk === lit.nothing && tryFromHere === lit.nothing) return lit.nothing;
3662
- return lit.html`<div class="cpk-td__timeline-toolbar">
3663
- ${bulk}${tryFromHere}
3664
- </div>`;
3665
3691
  }
3666
3692
  renderTimelineBulkButtons() {
3667
3693
  if (this._eventsNotAvailable) return lit.nothing;
3668
3694
  const detailIds = this.timelineItemsForEvents(this.activeEvents).filter((item) => item.details).map((item) => item.id);
3669
3695
  if (detailIds.length <= 1) return lit.nothing;
3696
+ const allExpanded = detailIds.every((id) => this._expandedTimelineDetails.has(id));
3670
3697
  return lit.html`
3671
3698
  <button
3672
3699
  type="button"
3673
3700
  class="cpk-td__timeline-bulk-toggle"
3674
- ?disabled=${detailIds.every((id) => this._expandedTimelineDetails.has(id))}
3675
- @click=${() => this.expandTimelineDetails(detailIds)}
3676
- >
3677
- Expand all
3678
- </button>
3679
- <button
3680
- type="button"
3681
- class="cpk-td__timeline-bulk-toggle"
3682
- ?disabled=${detailIds.every((id) => !this._expandedTimelineDetails.has(id))}
3683
- @click=${() => this.collapseTimelineDetails(detailIds)}
3701
+ @click=${() => allExpanded ? this.collapseTimelineDetails(detailIds) : this.expandTimelineDetails(detailIds)}
3684
3702
  >
3685
- Collapse all
3703
+ ${allExpanded ? "Collapse all" : "Expand all"}
3686
3704
  </button>
3687
3705
  `;
3688
3706
  }
3689
3707
  renderRawEventBulkControls() {
3690
3708
  const eventIds = this.activeEvents.map((event) => this.rawEventId(event));
3691
3709
  if (eventIds.length <= 1) return lit.nothing;
3710
+ const allExpanded = eventIds.every((id) => this._expandedRawEvents.has(id));
3692
3711
  return lit.html`<div class="cpk-td__timeline-toolbar">
3693
3712
  <button
3694
3713
  type="button"
3695
3714
  class="cpk-td__timeline-bulk-toggle"
3696
- ?disabled=${eventIds.every((id) => this._expandedRawEvents.has(id))}
3697
- @click=${() => this.expandRawEventDetails(eventIds)}
3698
- >
3699
- Expand all
3700
- </button>
3701
- <button
3702
- type="button"
3703
- class="cpk-td__timeline-bulk-toggle"
3704
- ?disabled=${eventIds.every((id) => !this._expandedRawEvents.has(id))}
3705
- @click=${() => this.collapseRawEventDetails(eventIds)}
3715
+ @click=${() => allExpanded ? this.collapseRawEventDetails(eventIds) : this.expandRawEventDetails(eventIds)}
3706
3716
  >
3707
- Collapse all
3717
+ ${allExpanded ? "Collapse all" : "Expand all"}
3708
3718
  </button>
3709
3719
  </div>`;
3710
3720
  }
@@ -3716,9 +3726,6 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3716
3726
  (this.shadowRoot?.querySelector(`[data-source-index="${sourceIndex}"]`))?.scrollIntoView?.({ block: "center" });
3717
3727
  });
3718
3728
  }
3719
- withMessagesToolbar(content) {
3720
- return lit.html`${this.renderTimelineBulkControls()}${content}`;
3721
- }
3722
3729
  renderTimeline() {
3723
3730
  if (this._loadingEvents) return lit.html`
3724
3731
  <div class="cpk-td__status">Loading timeline…</div>
@@ -3923,11 +3930,13 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3923
3930
  <div
3924
3931
  class="cpk-td__bubble ${isUser ? "cpk-td__bubble--user" : "cpk-td__bubble--assistant"}"
3925
3932
  data-message-id=${item.id}
3933
+ role="group"
3934
+ aria-label=${isUser ? "User message" : "Assistant message"}
3926
3935
  >
3927
3936
  <div
3928
3937
  class="cpk-td__bubble-inner ${isUser ? "cpk-td__bubble-inner--user" : "cpk-td__bubble-inner--assistant"}"
3929
3938
  >
3930
- ${shown}
3939
+ <div style="white-space:pre-wrap">${shown}</div>
3931
3940
  ${tooLong ? lit.html`<span
3932
3941
  class="cpk-td__show-more"
3933
3942
  @click=${() => this.toggleMessageExpand(item.id)}
@@ -3948,7 +3957,7 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3948
3957
  <svg width="10" height="10" viewBox="0 0 10 10" fill="none">
3949
3958
  <path
3950
3959
  d="M1 9C1 9 2 7 5 7C8 7 9 9 9 9M5 1C5 1 7 2.5 7 4.5C7 6.5 5 7 5 7C5 7 3 6.5 3 4.5C3 2.5 5 1 5 1Z"
3951
- stroke="#087653"
3960
+ stroke="currentColor"
3952
3961
  stroke-width="1.2"
3953
3962
  stroke-linecap="round"
3954
3963
  stroke-linejoin="round"
@@ -3956,9 +3965,9 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3956
3965
  </svg>
3957
3966
  <span class="cpk-td__tool-name">${item.toolName}</span>
3958
3967
  ${item.result || Object.keys(item.arguments).length > 0 ? lit.html`
3959
- <span class="cpk-td__tool-status">DONE</span>
3968
+ <span class="cpk-td__tool-status">Complete</span>
3960
3969
  ` : lit.html`
3961
- <span class="cpk-td__tool-status cpk-td__tool-status--pending">PENDING</span>
3970
+ <span class="cpk-td__tool-status cpk-td__tool-status--pending">Pending</span>
3962
3971
  `}
3963
3972
  <span class="cpk-td__tool-chevron">${expanded ? "▾" : "▸"}</span>
3964
3973
  </div>
@@ -3997,10 +4006,8 @@ var CpkThreadInspector = class CpkThreadInspector extends PortableLitElement {
3997
4006
  <svg width="9" height="9" viewBox="0 0 24 24" fill="currentColor">
3998
4007
  <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" />
3999
4008
  </svg>
4000
- Generative UI
4001
- </div>
4002
- <div class="cpk-td__genui-placeholder">
4003
- ${item.activityType} — rendered in chat
4009
+ <span>Generative UI</span>
4010
+ <code class="cpk-td__genui-component">${item.activityType}</code>
4004
4011
  </div>
4005
4012
  </div>
4006
4013
  `;
@@ -4994,7 +5001,8 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
4994
5001
  this.requestedThreadId = null;
4995
5002
  this.focusedThreadMessageId = null;
4996
5003
  this.threadFocusRequestId = 0;
4997
- this.threadListWidth = 290;
5004
+ this.threadListWidth = 240;
5005
+ this.threadListCollapsed = false;
4998
5006
  this.threadDividerResizing = false;
4999
5007
  this.threadDividerPointerId = -1;
5000
5008
  this.threadDividerStartX = 0;
@@ -6128,7 +6136,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
6128
6136
  },
6129
6137
  {
6130
6138
  key: "threads",
6131
- label: "Threads",
6139
+ label: "Rich Threads",
6132
6140
  icon: "MessageSquare"
6133
6141
  },
6134
6142
  {
@@ -10257,7 +10265,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
10257
10265
  const renewing = action?.kind === "renew";
10258
10266
  if (!connected && action) {
10259
10267
  const stateLabel = renewing ? "Intelligence plan expired" : "Intelligence is off";
10260
- const setupLabel = renewing ? "Renew to restore access" : "Set up Threads and Memory";
10268
+ const setupLabel = renewing ? "Renew to restore access" : "Connect Intelligence";
10261
10269
  return lit.html`
10262
10270
  <a
10263
10271
  class="inspector-sidebar-status-card inspector-sidebar-intelligence inspector-sidebar-intelligence-setup"
@@ -10267,7 +10275,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
10267
10275
  href=${action.url}
10268
10276
  target="_blank"
10269
10277
  rel="noopener noreferrer"
10270
- aria-label="${action.label} to enable Threads and Memory (opens in a new tab)"
10278
+ aria-label="${action.label} to enable Rich Threads and Automatic Learning (opens in a new tab)"
10271
10279
  title=${action.label}
10272
10280
  style=${INTERACTIVE_FOCUS_BASE_STYLE}
10273
10281
  @click=${() => this.handleHomeHeroCta(action)}
@@ -10283,10 +10291,10 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
10283
10291
  `;
10284
10292
  }
10285
10293
  const primaryLabel = connected ? organizationName ?? "Intelligence" : "Intelligence unavailable";
10286
- const secondaryLabel = connected ? planLabel ? `${planLabel} plan` : "Connected" : "Threads and Memory are off";
10294
+ const secondaryLabel = connected ? planLabel ? `${planLabel} plan` : "Connected" : "Rich Threads and Automatic Learning are off";
10287
10295
  const label = connected ? `${primaryLabel}, ${secondaryLabel}, Intelligence connected` : "Connect Intelligence";
10288
10296
  const actionLabel = action?.label;
10289
- const description = connected ? `${secondaryLabel} · Intelligence connected` : "Threads and Memory need Intelligence.";
10297
+ const description = connected ? `${secondaryLabel} · Intelligence connected` : "Rich Threads and Automatic Learning need Intelligence.";
10290
10298
  return lit.html`
10291
10299
  <section
10292
10300
  class="inspector-sidebar-status-card inspector-sidebar-intelligence"
@@ -10350,15 +10358,17 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
10350
10358
  }
10351
10359
  renderHomeView() {
10352
10360
  const model = this.getHomeModel();
10361
+ const connected = model.hero.connection === "connected";
10353
10362
  return lit.html`
10354
10363
  <div
10355
10364
  class="inspector-home"
10356
10365
  data-inspector-home
10357
- data-inspector-home-state=${model.hero.connection === "connected" ? "connected" : "disconnected"}
10366
+ data-inspector-home-state=${connected ? "connected" : "disconnected"}
10358
10367
  >
10359
10368
  ${this.renderHomeWhatsNewPreview(model.news)}
10360
- ${this.renderHomeSystemHealth(model)}
10361
- ${this.renderHomeIntelligenceHud(model)}
10369
+ <header class="inspector-home-heading"><div><h1>${connected ? model.project?.projectName ?? "Your agent workspace" : "Welcome to Intelligence"}</h1><p>${connected ? "Inspect conversations and see what your agent is learning." : "Connect your agent. Intelligence learns from experience."}</p></div></header>
10370
+ ${connected ? this.renderHomeSystemHealth(model) : this.renderHomeIntelligenceHud(model)}
10371
+ ${connected ? this.renderHomeIntelligenceHud(model) : this.renderHomeSystemHealth(model)}
10362
10372
  ${this.renderHomeFeatures(model)}
10363
10373
  </div>
10364
10374
  `;
@@ -10639,7 +10649,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
10639
10649
  class="inspector-home-section-header inspector-system-health-header"
10640
10650
  >
10641
10651
  <div class="inspector-system-health-heading">
10642
- <h1 class="inspector-home-section-title">System Health</h1>
10652
+ <h2 class="inspector-home-section-title">System Health</h2>
10643
10653
  </div>
10644
10654
  <span
10645
10655
  class="inspector-system-health-state"
@@ -13561,7 +13571,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
13561
13571
  setupActive: this.isLearningSetupActive()
13562
13572
  }) === "landing") return this.renderLockedFeatureOverview({
13563
13573
  serviceId: "memory",
13564
- featureName: "Learning",
13574
+ featureName: "Automatic Learning",
13565
13575
  heading: "Turn every interaction into reusable context.",
13566
13576
  description: "Learning captures durable information from agent interactions and brings it back when it matters, so your product gets more useful over time.",
13567
13577
  videoUrl: LEARNING_LOCKED_VIDEO_URL,
@@ -13607,7 +13617,7 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
13607
13617
  renderLegacyMemoriesView() {
13608
13618
  if (!this.getHomeModel().services.some((service) => service.id === "memory" && service.enabled)) return this.renderLockedFeatureOverview({
13609
13619
  serviceId: "memory",
13610
- featureName: "Learning",
13620
+ featureName: "Automatic Learning",
13611
13621
  heading: this._memoryStoreUnsupported ? "Upgrade to enable Learning" : "Turn every interaction into reusable context.",
13612
13622
  description: this._memoryStoreUnsupported ? "Learning requires a newer version of @copilotkit/core and @copilotkit/react. Copy the setup prompt to upgrade and add long-term memory." : "Learning captures durable information from agent interactions and brings it back when it matters, so your product gets more useful over time.",
13613
13623
  videoUrl: LEARNING_LOCKED_VIDEO_URL,
@@ -13865,10 +13875,14 @@ var WebInspectorElement = class WebInspectorElement extends lit.LitElement {
13865
13875
  <div
13866
13876
  style="display:flex;height:100%;overflow:hidden;flex-direction:column;"
13867
13877
  >
13878
+ <div class="inspector-thread-heading"><strong>Rich Threads</strong><button type="button" class="inspector-text-button" aria-expanded=${!this.threadListCollapsed} @click=${() => {
13879
+ this.threadListCollapsed = !this.threadListCollapsed;
13880
+ this.requestUpdate();
13881
+ }}>${this.threadListCollapsed ? "Show thread list" : "Hide thread list"}</button></div>
13868
13882
  <div style="display:flex;min-height:0;flex:1;overflow:hidden;">
13869
13883
  <!-- Left sidebar: thread list -->
13870
13884
  <div
13871
- style="width:${this.threadListWidth}px;flex-shrink:0;overflow:hidden;display:flex;flex-direction:column;border-right:1px solid #DBDBE5;"
13885
+ style="display:${this.threadListCollapsed ? "none" : "flex"};width:${this.threadListWidth}px;flex-shrink:0;overflow:hidden;flex-direction:column;border-right:1px solid #DBDBE5;"
13872
13886
  >
13873
13887
  ${ephemeral ? lit.html`
13874
13888
  <button type="button" class="cpk-ephemeral-threads-banner"