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