Commit Graph
2609 Commits
Author SHA1 Message Date
Bhargav c6574a81fa fix: Issue 11606 search term logs page (#11607)
## What changed

Fixed `addFieldTerm` in `SearchBar.vue` so that include/exclude search
terms are inserted at the correct position in SQL aggregation queries.
Previously the code checked for `ORDER BY` before `GROUP BY`, causing
the injected `WHERE` clause to land after `GROUP BY` (invalid SQL). The
fix scans all terminating clauses (`GROUP BY`, `HAVING`, `ORDER BY`,
`LIMIT`) and inserts `WHERE` before whichever appears earliest. The
remaining diff is Prettier-driven reformatting with no logic changes.

## Why

The old sequential `if/else if` checked `ORDER BY` first. On a query
containing both `GROUP BY` and `ORDER BY`, it would split at `ORDER BY`
and produce `… WHERE <filter> ORDER BY … GROUP BY …` — structurally
invalid SQL. The fix enforces correct SQL clause ordering (`FROM → WHERE
→ GROUP BY → HAVING → ORDER BY → LIMIT`).

## Approach

The new algorithm iterates over all four terminating clauses, records
the index of each that is present, picks the one with the smallest index
(`firstClause`), then uses the existing `queryIndexSplit` utility to
splice the `WHERE <filter>` token in before it. If no terminating clause
exists the filter is appended. The spec file was extended with 14 new
unit tests covering the core bug scenario (GROUP BY + ORDER BY
together), each individual clause in isolation, all-clauses-present,
AND-append paths, and edge cases (case-insensitive matching, column
names containing clause keywords, special characters in filter values).

## Risk

The logic change is isolated to the `else` branch of `addFieldTerm` that
handles queries with no existing `WHERE` clause. Queries that already
have a `WHERE` clause follow a separate code path and are unaffected.
Reviewers should confirm the `queryIndexSplit` utility is
case-insensitive-safe (the fix lowercases only for the index scan, then
splits the original string) and verify the preserved trailing
`afterClause` string includes the space/newline that was previously part
of the `" order by"` / `" group by"` literals.
2026-05-06 10:17:48 +00:00
Sai Nikhilandgithub-actions[bot] a447b9fb7d fix: add alert top bar changes (#11605)
Before
<img width="757" height="418" alt="image"
src="https://github.com/user-attachments/assets/d088524c-ca56-4bf6-8288-447934f4b435"
/>

After

<img width="757" height="443" alt="image"
src="https://github.com/user-attachments/assets/3c3dd849-caeb-41fb-af1c-b0dc0d090bd4"
/>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-06 05:23:53 +00:00
Omkar Kesarkhane 508ea1e220 fix: replace vue-json-pretty with CodeQueryEditor for LLM JSON rendering (#11597)
## What changed

Replaced `VueJsonPretty` (`vue-json-pretty`) with `CodeQueryEditor.vue`
(Monaco-based) for JSON rendering in `LLMContentRenderer.vue`. Inlined
the `MessageItem` sub-component directly into the template with
`CodeQueryEditor` for JSON message content. Added `showLineNumbers` and
`stickyScroll` props to `CodeQueryEditor`. Removed the unused
`vue-json-pretty` dependency from `package.json`. Passed unique editor
IDs from `TraceDetailsSidebar` via a new `instanceId` prop to prevent
Monaco editor ID collisions.

## Why

`vue-json-pretty` formats the entire JSON tree on initial render,
causing lag on long JSON payloads. Monaco (via `CodeQueryEditor`)
renders only visible viewport lines, making performance O(visible)
instead of O(total).

## Approach

- Replaced all 7 `VueJsonPretty` instances in `LLMContentRenderer.vue`
with `<CodeQueryEditor>` in read-only mode (`:read-only="true"`,
`:show-line-numbers="false"`, `:sticky-scroll="false"`)
- Inlined the `MessageItem` sub-component as a `v-for` block with
`CodeQueryEditor` for JSON message content and the existing `v-html`
markdown renderer for non-JSON content
- Converted the component to `<script setup lang="ts">` with
`defineAsyncComponent` for `CodeQueryEditor`
- Added `showLineNumbers` and `stickyScroll` props (both default `true`)
to `CodeQueryEditor.vue` to support the JSON viewer use case
- Added a `watch` on `showLineNumbers` to dynamically toggle line
numbers in Monaco
- Passed `instanceId` from `TraceDetailsSidebar` down to
`LLMContentRenderer` to generate unique editor IDs like
`trace-id-msg-json-editor-0`

## Considered & rejected

- **Render function approach with synchronous import of
CodeQueryEditor** — rejected because it forced manual editor height
computation and module-level counters for editor IDs. Inlining
`MessageItem` as a template component was cleaner and consistent with
the other 5 template `CodeQueryEditor` locations.
- **Retaining `MessageItem` as a separate component with render
function** — rejected because the render function approach was
over-engineering for what is now a simple `v-for` with conditional
`CodeQueryEditor` / markdown branching.

## Risk

Medium. Monaco editor initialization has non-trivial overhead; rendering
multiple editors on one page (e.g., many messages in a conversation)
could impact initial render time. Reviewers should check that the
`instanceId` prop is correctly wired from `TraceDetailsSidebar` to avoid
duplicate Monaco editor IDs, and that the `tw:h-full` class application
on content-wrapper divs doesn't break non-JSON (plain text / markdown)
layouts.
2026-05-05 17:19:27 +00:00
Omkar Kesarkhane 82395a9b4c fix: added combined scroll in logs for histogram and logs table (#11415)
#11404
2026-05-05 16:51:52 +00:00
Omkar Kesarkhane eaf81fe7da fix: traces important fields are not visible in field list (#11608)
## What changed

Removed the `label` property from important field entries pushed into
`selectedStreamFields` in the traces `extractFields()` function.

## Why

The `label` field was redundant — it duplicated the `name` property —
and caused display issues in the traces fields sidebar where both `name`
and `label` were shown. The data model already uses `name` as the
display key.

## Approach

Stripped the `label: rowName` assignment from the important fields
branch in `extractFields()`.

## Risk
The field removal changes the object shape pushed to
`selectedStreamFields` for important fields. Verify that no downstream
code (field grouping, semantic matching, search building) depends on
`field.label` being present.
2026-05-05 16:38:03 +00:00
Bhargav 4f881c513f fix: home page UI fix (#11585) 2026-05-04 13:08:49 +00:00
Abhay Padamani 511eccf363 fix: correct field access order for CSV download in TableRenderer (#11591)
- #11574
2026-05-04 12:22:01 +00:00
Ashish Kolhe 3ef50a23e3 fix: field grouping on logs and traces pages (#11576) 2026-05-04 11:39:07 +00:00
Sai Nikhil d6fa94ae74 fix: alert issue -11577 (#11589)
This Pr fixes the issue in #11577
2026-05-04 10:17:55 +00:00
Bhargav 53aca97ca2 fix: default query change when user create schedule pipeline (#11579) 2026-05-04 09:42:40 +00:00
Omkar Kesarkhaneandgithub-actions[bot] 58fc36fabf feat: service catalog in traces (#11555)
Design at: ui/traces
#11367

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-04 08:54:02 +00:00
Sai Nikhil 388c2b496d fix: add alert v3 issues (#11582) 2026-05-04 08:02:39 +00:00
Bhargav f5a8fc6c02 fix: removed duplicate api while view logs from traces with auto run … (#11567)
…enabled
2026-05-04 06:55:41 +00:00
Bhargavandgithub-actions[bot] 852dc329c9 feat: Datasources integration (#11564)
Design at: ui folder

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-01 10:43:47 +00:00
Sai Nikhil d662dc4b31 fix: remove actions scripts from dialog (#11553) 2026-04-30 11:00:49 +00:00
Loakesh Indiran 731a78efaa fix: correct inflated took time in streaming search (search + histogram) (#11551)
**Problem:**
Backend sent cumulative `took` per partition (monotonically increasing:
69, 130, 192...ms). Frontend summed all values → O(n²) inflation (e.g.
23s displayed vs 1.4s actual).

**Fix:**
- Backend: timer now created independently per partition → each
partition reports only its own processing time

**Result:** `took = search + histogram` sums correctly. Verified against
SSE data for both no-cache and cache flows
2026-04-30 10:39:03 +00:00
Sai Nikhil 729ff5181d fix: o2 assistant changes (#11544) 2026-04-30 09:47:54 +00:00
Sai Nikhil 2eedb3f801 fix: log table sync histogram color (#11545)
Thsi pr fixes the issue of mismatch of histogram color and search result
left border color
2026-04-30 08:23:21 +00:00
Sai Nikhil 9c07ab54ec fix: should pass is aggregation value when shifting from promql / sql… (#11548)
This Pr fixes the issue in #11549
2026-04-30 06:12:20 +00:00
Omkar Kesarkhane c46712c8d2 fix: SQL query gets corrupted when replacing [WHERE_CLAUSE] containing $ (#11542)
#11543
2026-04-29 20:38:01 +00:00
Bhargavandomkark06 5807ec112e fix: in sql mode, view logs from traces page to not prefill trace_id … (#11541)
…filter on logs page

---------

Co-authored-by: omkark06 <omkar@zinclabs.io>
2026-04-29 19:34:39 +00:00
Omkar Kesarkhane ca77ce8ef2 fix: fixed sorting by in traces for spans mode (#11538) 2026-04-29 13:41:42 +00:00
Omkar Kesarkhane 1096193a22 fix: In traces changing org should reset the trace results (#11517)
#11384 
#11392
2026-04-29 09:40:06 +00:00
Bhargav 4a36ac75d4 fix: O2 aichatbot fullscreen (#11530) 2026-04-29 09:12:26 +00:00
Bhargav b71ed9cdb6 fix: switching include exclude fix (#11521) 2026-04-29 05:26:43 +00:00
Omkar Kesarkhane 9bf4da294b fix: Show error when selected span id from traces page does not matches in trace (#11519)
#11513
2026-04-28 12:51:54 +00:00
Ashish Kolhe 5deb867f47 fix: load previously used filters (#11515)
- load filter used by users in last session for logs and traces
- we only use keys from co-relation settings
2026-04-28 12:09:52 +00:00
Bhargavandgithub-actions[bot] ee6827e7ce fix: stream page, user defined fields should not have option to Add to defined schema (#11508)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-28 11:36:48 +00:00
Bhargavandgithub-actions[bot] 384251641d fix: on stream or organization change it should load respective data (#11510)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-28 11:35:21 +00:00
4745e7cdc6 chore(deps): bump uuid from 13.0.0 to 14.0.0 in /web (#11438)
Bumps [uuid](https://github.com/uuidjs/uuid) from 13.0.0 to 14.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuidjs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v14.0.0</h2>
<h2><a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">14.0.0</a>
(2026-04-19)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li>expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>) (<a
href="https://github.com/uuidjs/uuid/commit/dc4ddb87272ed2843faccd130bcc41d492688bd3">dc4ddb8</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>) (<a
href="https://github.com/uuidjs/uuid/commit/f2c235f93059325fa43e1106e624b5291bb523c4">f2c235f</a>)</li>
<li>Use GITHUB_TOKEN for release-please and enable npm provenance (<a
href="https://redirect.github.com/uuidjs/uuid/issues/925">#925</a>) (<a
href="https://github.com/uuidjs/uuid/commit/ffa31383e8e4e1f0b4e22e504561272041b8738c">ffa3138</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md">uuid's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">14.0.0</a>
(2026-04-19)</h2>
<h3>Security</h3>
<ul>
<li>Fixes <a
href="https://github.com/uuidjs/uuid/security/advisories/GHSA-w5hq-g745-h8pq">GHSA-w5hq-g745-h8pq</a>:
<code>v3()</code>, <code>v5()</code>, and <code>v6()</code> did not
validate that writes would remain within the bounds of a caller-supplied
buffer, allowing out-of-bounds writes when an invalid
<code>offset</code> was provided. A <code>RangeError</code> is now
thrown if <code>offset &lt; 0</code> or <code>offset + 16 &gt;
buf.length</code>.</li>
</ul>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li><code>crypto</code> is now expected to be globally defined (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
<li>upgrade minimum supported TypeScript version to 5.4.3, in keeping
with the project's policy of supporting TypeScript versions released
within the last two years</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuidjs/uuid/commit/7c1ea087a8149b57380fc8bb7f68c3a215cb6e4b"><code>7c1ea08</code></a>
chore(main): release 14.0.0 (<a
href="https://redirect.github.com/uuidjs/uuid/issues/926">#926</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/3d2c5b0342f0fcb52a5ac681c3d47c13e7444b34"><code>3d2c5b0</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/f2c235f93059325fa43e1106e624b5291bb523c4"><code>f2c235f</code></a>
fix!: expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/529ef0899f5dd503d2ee90d690585d63d78bc212"><code>529ef08</code></a>
chore: upgrade TypeScript and fixup types (<a
href="https://redirect.github.com/uuidjs/uuid/issues/927">#927</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/086fd7976f11433edf9ac80be876b3ad243fe087"><code>086fd79</code></a>
chore: update dependencies (<a
href="https://redirect.github.com/uuidjs/uuid/issues/933">#933</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/dc4ddb87272ed2843faccd130bcc41d492688bd3"><code>dc4ddb8</code></a>
feat!: drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/0f1f9c9c9cedbae5a1d363d5406c5dfbabe81404"><code>0f1f9c9</code></a>
chore: switch to Biome for parsing and linting (<a
href="https://redirect.github.com/uuidjs/uuid/issues/932">#932</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/e2879e64bf125add903c1eff6e0860542c605013"><code>e2879e6</code></a>
chore: use maintained version of npm-run-all (<a
href="https://redirect.github.com/uuidjs/uuid/issues/930">#930</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/ffa31383e8e4e1f0b4e22e504561272041b8738c"><code>ffa3138</code></a>
fix: Use GITHUB_TOKEN for release-please and enable npm provenance (<a
href="https://redirect.github.com/uuidjs/uuid/issues/925">#925</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/0423d49df2dc8efc300c804731d25f4d7e0fccc4"><code>0423d49</code></a>
docs: remove obsolete v1 option notes (<a
href="https://redirect.github.com/uuidjs/uuid/issues/915">#915</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new
releaser for uuid since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=npm_and_yarn&previous-version=13.0.0&new-version=14.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/openobserve/openobserve/network/alerts).

</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
Co-authored-by: udev <uddhav@openobserve.ai>
2026-04-28 11:16:34 +00:00
Sai Nikhilandgithub-actions[bot] 1639a35c31 fix: minor isues (#11502)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-28 08:52:07 +00:00
udev 0dd60a8986 fix(cloud): billing page (#11487) 2026-04-28 08:24:21 +00:00
Bhargav 619ee18a5c fix: when switching between organization and toggle sql mode if field… (#11506)
…s not found it should append *
2026-04-28 07:20:14 +00:00
dependabot[bot] 06b82839ea chore(deps-dev): bump postcss from 8.5.6 to 8.5.10 in /web (#11456) 2026-04-28 15:35:20 +08:00
Sai Nikhil 3ae377a3cf fix: issues over autosuggestion value suggestions on query editor (#11403)
This pr fixes the issues on #11400
2026-04-27 11:29:38 +00:00
Abhay Padamani 3cff28ce45 fix: dashboard shows no data while chart is in rendering state #11205 (#11332) 2026-04-27 11:23:05 +00:00
20ed7ee5de fix: add usage reporting to license (#11192)
Add support for license v2 and usage reporting

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-04-27 09:09:31 +00:00
Omkar KesarkhaneandAshish Kolhe 860062faa7 fix: correct Parsing of start_time and end_time Nanosecond Values (#11485)
Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
2026-04-27 08:56:38 +00:00
ktx-kirtan a29c7dd9b7 fix: add tooltips for stream and group names in FieldList component (#11466) 2026-04-27 06:05:14 +00:00
b7bc228e49 feat(cloud): support contract subscription (#11336)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: udev <undefined@users.noreply.github.com>
2026-04-27 03:49:50 +00:00
c929075bb8 fix: traces UI fixes (#11473)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <undefined@users.noreply.github.com>
2026-04-26 20:11:26 +00:00
Bhargav c5e49f445a fix: Auto run localstorage persist (#11472) 2026-04-26 13:13:03 +00:00
Bhargav da20b53633 fix: applied debounce for absolute time range (#11465)
Fixes: https://github.com/openobserve/o2-enterprise/issues/1566
2026-04-26 07:30:32 +00:00
cc466132a7 chore: new home page (#11458)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Ashish Kolhe <undefined@users.noreply.github.com>
2026-04-25 19:18:21 +00:00
Sai NikhilandBhargav a7333fe546 fix: show include or exlcude fro timestamp field (#11460)
This pr fixes the issue #11450 

We observed that during auto UDF execution, the _timestamp field was
being included both in the schema and the user-defined schema. The UI
was not designed to handle this duplication. This issue does not occur
when users manually add fields through the Stream page, as _timestamp is
not added to the user-defined schema in that flow. We have now handled
this scenario.

---------

Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2026-04-25 16:55:29 +00:00
Omkar Kesarkhane 87272a86f9 fix: In traced duration field added max option (#11464)
#11452 
#11453
2026-04-25 14:43:03 +00:00
Omkar Kesarkhane ea38de99a0 fix: Incorrect duration values were displayed in logs-details correlation traces tab (#11462)
#11446 
Traces in the Logs correlation panel were showing wrong durations
because they were read from /latest (cached summaries). Using
/latest_stream delivers the actual trace records with correct duration
data.

#11463 
Updated FlameGraphView.vue so that spans with a computed width below
0.1% of the total trace duration are rendered with a minimum 0.1% width
instead of being dropped — ensuring all spans remain visible regardless
of how short they are.
2026-04-25 14:19:01 +00:00
Hengfei YangandClaude Opus 4.7 f897aa2cb2 feat(o2ai): render CLI tool_result summary and command (#11449)
## Summary
- Render `summary.return_code`, `stdout_lines`, `stderr_lines`, and
`truncated` in the chat tool-call details panel so CLI tool results show
parsed info like MCP tools do.
- Whitelist `command` in `getToolCallDisplayData` and add a "Command"
row with a copy button so the actual CLI command the agent ran is
visible.

## Context
The o2-ai server already emits a uniform `tool_result` shape for CLI
tools (see openobserve/o2-ai#96 — wait for that to merge):
```json
{
  "type": "tool_result",
  "tool": "cli_kubectl",
  "success": true,
  "message": "Exited 0 (12 lines stdout)",
  "summary": { "return_code": 0, "stdout_lines": 12, "stderr_lines": 0 },
  "call_args": { "command": "get pods -n default" },
  "call_id": "call-uuid-v7"
}
```
`ContentBlock.summary` was already being captured from the event — the
template just had no conditionals for the CLI fields. This PR adds them.

## What this does NOT do
- Does not show raw `stdout`/`stderr` text (server currently only sends
line counts). If we want inline output, that's a separate backend
change.
- Does not add a custom header format for CLI — the default
`block.message` ("Exited 0 (12 lines stdout)") renders fine as plain
text.

## Test plan
- [x] `npm run type-check` — clean
- [ ] Manually verify in dev chat that a CLI tool call (`kubectl get
pods`) shows the Exit code / Stdout / Stderr rows and the Command row
with copy button
- [ ] MCP tools (SearchSQL, StreamList) still render the existing
Results / Duration rows unchanged

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:32:07 +00:00
Sai Nikhil abac6d95db fix: should convert non strings to strings for histogram stack (#11440) 2026-04-24 14:21:33 +00:00
Bhargav 15d695200e feat: Issue 11352 persist stream (#11445)
Design at: designs/ui

`ZO_PERSIST_STREAM_SELECTION`, default `false`
2026-04-24 14:06:26 +00:00