Commit Graph
2989 Commits
Author SHA1 Message Date
Abhay Padamani db1da2f096 fix: MetricCardChart to use PanelSchemaRenderer (#13380)
- Replaced ChartRenderer with PanelSchemaRenderer in MetricCardChart.vue
for consistent rendering.
- Updated MetricCardChart.spec.ts to assert the panel schema and
injected data correctly.
- Introduced applyMeasuredYAxisLeftInset utility to adjust y-axis label
spacing based on content width.
- Enhanced convertPromQLData to call applyMeasuredYAxisLeftInset before
returning options.
- Added tests for applyMeasuredYAxisLeftInset to ensure correct behavior
with various configurations.
- Implemented compact preview adjustments in heatmap charts to optimize
rendering in metrics explorer cards.
2026-07-22 14:24:46 +00:00
Loakesh Indiran 9d70e0e905 feat(synthetics): private locations — check-form picker, agent identity, install flow (#13308)
Design at: https://github.com/openobserve/designs/tree/main/synthetics
2026-07-22 12:30:31 +00:00
d6c4c073d5 fix: UX for o2-ai (#13192)
resolves https://github.com/openobserve/o2-ai/issues/134

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-07-22 12:01:59 +00:00
cbaf6042fb fix(navbar): prevent left-rail selection jumping to wrong tile on load (#13332)
Config APIs resolve after mount and insert/remove menu tiles in
linksList, shifting the active tile. The selection pill's ResizeObserver
never fires because the flex-constrained list doesn't resize, leaving
the pill over the wrong tile (e.g. Dashboards while on Streams).

- Gate the rail behind menuReady so it paints once its item list is
settled, avoiding config-driven pop-in and layout shift.
- Re-measure the selection pill when the rail's items change.

---------

Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
2026-07-22 11:45:24 +00:00
Ashish Kolhe f5114e5646 fix: agent-signals repopulate signals reliably; scope UI to LLM streams (#13348)
Companion to the o2-enterprise change. On a live instance the Agent
Behavior/Graph views were empty because the rollup never re-processed
the agent trace streams, and the stream pickers offered non-LLM streams.

service_graph/processor.rs — discovery gap: the rollup discovered
streams from a usage-windowed query, falling back to the schema cache
only when usage was ENTIRELY empty. So any stream that dropped out of
the current window's usage (producer paused, bursty ingest) was silently
skipped forever on a busy instance — exactly how the agent streams went
dark. Replace the all-or-nothing fallback with a union: usage-active
streams ∪ every schema-cache trace stream (deduped). Idle windows are
cheap no-ops, so this doesn't widen the worst case.

agent_signals/processor.rs — always-on + stream-level LLM gate: drop the
removed O2_AGENT_SIGNALS_ENABLED check, and add an early return that
skips streams whose schema has no gen_ai_operation_name (mirrors the
service-graph has_gen_ai gate) so non-LLM streams cost nothing. Thread
has_agent_id into the SQL builders for the schema-gated agent-id
predicate.

AgentGraphPage/AgentBehaviorPage.vue — filter the stream picker to LLM
streams (settings.is_llm_stream !== false), matching LLM Insights /
Sessions. A plain service trace stream has no agents or signals to show
here.
2026-07-22 11:43:44 +00:00
Bhargav e0fe62a9a0 fix: traces page default flame graph and drag-drop option added (#13347) 2026-07-22 11:37:24 +00:00
ktx-vaidehi f1ffc974d7 fix: stream page refresh, loading when delete and org dropdown update when new org added (#13369) 2026-07-22 11:12:00 +00:00
udevandsai nikhil kethe 4b4598074f feat: trace/session evals (#13206)
- **add session and travel level evals fix quality page to show scoped
scores improve quality page to allow drill down of scores improve the
quality page UI to make it more indicative of health of agents.**
- **Fix Quality dashboard runs, show agent ids**
- **nats at least once delivery semantics + quality runs page changes**
- **feat(evaluations): improve online evaluation workflows**

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2026-07-22 09:14:48 +00:00
dependabot[bot] f22b9c8a2d chore(deps): bump dompurify from 3.4.11 to 3.4.12 in /web (#13357)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.11 to
3.4.12.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/cure53/DOMPurify/releases">dompurify's
releases</a>.</em></p>
<blockquote>
<h2>DOMPurify 3.4.12</h2>
<ul>
<li>Fixed an issue where a hook would not get called for custom
elements, thanks <a
href="https://github.com/Rikuxx0"><code>@​Rikuxx0</code></a></li>
<li>Hardened the handling of hooks removing elements, <a
href="https://github.com/mkrause-bee360"><code>@​mkrause-bee360</code></a></li>
<li>Added support for a few new SVG attributes, thanks <a
href="https://github.com/cbn-falias"><code>@​cbn-falias</code></a> &amp;
<a
href="https://github.com/Develop-KIM"><code>@​Develop-KIM</code></a></li>
<li>Hardened the handling of declarative partial updates</li>
<li>Updated the documentation is several spots, README, wiki, etc.</li>
<li>Bumped several dependencies where possible</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/cure53/DOMPurify/commit/a9ca1e537422319a557a9a2aa61f003b23b4a197"><code>a9ca1e5</code></a>
release: 3.4.12 (<a
href="https://redirect.github.com/cure53/DOMPurify/issues/1537">#1537</a>)</li>
<li>See full diff in <a
href="https://github.com/cure53/DOMPurify/compare/3.4.11...3.4.12">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dompurify&package-manager=npm_and_yarn&previous-version=3.4.11&new-version=3.4.12)](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>
2026-07-22 08:27:03 +00:00
dependabot[bot] 587089a01c chore(deps-dev): bump immutable from 5.1.5 to 5.1.9 in /web (#13359)
Bumps [immutable](https://github.com/immutable-js/immutable-js) from
5.1.5 to 5.1.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/releases">immutable's
releases</a>.</em></p>
<blockquote>
<h2>v5.1.9</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(List): preserve undefined values when grown past 32 elements by
<a href="https://github.com/spokodev"><code>@​spokodev</code></a> / <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2235">immutable-js/immutable-js#2235</a>
(originated from <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2230">immutable-js/immutable-js#2230</a>
)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.8...v5.1.9">https://github.com/immutable-js/immutable-js/compare/v5.1.8...v5.1.9</a></p>
<h2>v5.1.8</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.7...v5.1.8">https://github.com/immutable-js/immutable-js/compare/v5.1.7...v5.1.8</a></p>
<h2>v5.1.7</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(Repeat): lastIndexOf returned size instead of size - 1 by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a></li>
</ul>
<h2>internal</h2>
<ul>
<li>Backport tests from 6.x branch by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2199">immutable-js/immutable-js#2199</a></li>
<li>fix(IndexedCollection): <code>has(index)</code> on a lazy
<code>Seq</code> of unknown size now checks index existence instead of
searching for a value equal to the index by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2203">immutable-js/immutable-js#2203</a></li>
<li>Better type for reduce if not ininitial value is given by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2205">immutable-js/immutable-js#2205</a></li>
<li>Backport test from <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2193">#2193</a>
by <a href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2207">immutable-js/immutable-js#2207</a></li>
<li>backport tests from 6.x by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2213">immutable-js/immutable-js#2213</a></li>
<li>Firefox link to non-French page by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2219">immutable-js/immutable-js#2219</a></li>
<li>Bump esbuild and <code>@​size-limit/preset-small-lib</code> by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2217">immutable-js/immutable-js#2217</a></li>
<li>backport tests from <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2210">#2210</a>
by <a href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2214">immutable-js/immutable-js#2214</a></li>
<li>Bump shell-quote from 1.8.2 to 1.8.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2211">immutable-js/immutable-js#2211</a></li>
<li>Bump <code>@​tootallnate/once</code> from 2.0.0 to 2.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2190">immutable-js/immutable-js#2190</a></li>
<li>Bump minimatch from 9.0.5 to 9.0.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2189">immutable-js/immutable-js#2189</a></li>
<li>Bump <code>@​codemirror/theme-one-dark</code> from 6.1.2 to 6.1.3 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2168">immutable-js/immutable-js#2168</a></li>
<li>Bump form-data from 4.0.5 to 4.0.6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2220">immutable-js/immutable-js#2220</a></li>
<li>Bump typescript-eslint from 8.33.0 to 8.61.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2222">immutable-js/immutable-js#2222</a></li>
<li>Bump <code>@​rollup/plugin-commonjs</code> from 28.0.2 to 29.0.3 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2224">immutable-js/immutable-js#2224</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
made their first contribution in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.6...v5.1.7">https://github.com/immutable-js/immutable-js/compare/v5.1.6...v5.1.7</a></p>
<h2>v5.1.6</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(reverseFactory): read reversedSequence.size in __iterator
instead of this by <a
href="https://github.com/jdeniau"><code>@​jdeniau</code></a> in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2196">immutable-js/immutable-js#2196</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md">immutable's
changelog</a>.</em></p>
<blockquote>
<h2>5.1.9</h2>
<ul>
<li>fix(List): a <code>List</code> grown past 32 elements while all its
values are <code>undefined</code> no longer reads those values back as
<code>null</code> (affected <code>get</code>, iteration,
<code>toArray</code>, <code>equals</code> and
<code>hashCode</code>)</li>
</ul>
<h2>5.1.8</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<h2>4.3.9</h2>
<ul>
<li>fix(List): guard oversized bounds in setListBounds. Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-v56q-mh7h-f735</a></li>
<li>perf(Map): index large hash-collision buckets for faster lookups.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r">https://github.com/immutable-js/immutable-js/security/advisories/GHSA-xvcm-6775-5m9r</a></li>
</ul>
<h2>5.1.7</h2>
<ul>
<li>fix(Repeat): lastIndexOf returned size instead of size - 1 by <a
href="https://github.com/chatman-media"><code>@​chatman-media</code></a>
in <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2227">immutable-js/immutable-js#2227</a>.
Fixes CVE <a
href="https://github.com/immutable-js/immutable-js/security/advisories/GHSA-wf6x-7x77-mvgw">CVE-2026-29063
</a></li>
<li>fix(IndexedCollection): <code>has(index)</code> on a lazy
<code>Seq</code> of unknown size now checks index existence instead of
searching for a value equal to the index <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2203">#2203</a></li>
<li>[TypeScript]: <code>reduce</code>/<code>reduceRight</code> without
an initial value now infer the result type from the collection's values
when the reducer returns a value (e.g. <code>list.reduce((a, b) =&gt; a
+ b)</code> infers <code>number</code>), matching
<code>Array#reduce</code>. Previously an explicit type argument was
required. <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2205">#2205</a></li>
</ul>
<h2>5.1.6</h2>
<ul>
<li>fix(reverseFactory): read <code>reversedSequence.size</code> in
<code>__iterator</code> instead of this <a
href="https://redirect.github.com/immutable-js/immutable-js/pull/2196">#2196</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/329f7a680efa262c310b938a343295880eefe4fc"><code>329f7a6</code></a>
5.1.9</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/21fabd92bc6cd6771918fc966004034fc10a06e0"><code>21fabd9</code></a>
changelog</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/009164facb3c69870c6ad4c6472b1baeb02fcdf7"><code>009164f</code></a>
Merge pull request <a
href="https://redirect.github.com/immutable-js/immutable-js/issues/2235">#2235</a>
from immutable-js/fix/avoid-null-when-setsize33</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/5b65bfbd583472eaa9686137a61db2a29d63cd36"><code>5b65bfb</code></a>
fix(List): preserve undefined values when grown past 32 elements</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/50bf39e94105f83f1132cce02b9ee6c45cc7d9ca"><code>50bf39e</code></a>
Update CHANGELOG.md for versions 5.1.8 and 4.3.9</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/6496539bd1e9dfa75ce11b053e7d70d79e9ac6f7"><code>6496539</code></a>
5.1.8</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/808a83a071c9e22b8199ac256dc7e6e764198aac"><code>808a83a</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/e51d49fc612ded5ec4dfb94ff294d22074269b0f"><code>e51d49f</code></a>
perf(Map): index large hash-collision buckets for faster lookups</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/25c58b094f112dc32e9b0bca79c84f448d0d2a38"><code>25c58b0</code></a>
fix typescript in tests</li>
<li><a
href="https://github.com/immutable-js/immutable-js/commit/a1a1ee412dcaa380ab325196283d06594ffe4b84"><code>a1a1ee4</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/immutable-js/immutable-js/compare/v5.1.5...v5.1.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=immutable&package-manager=npm_and_yarn&previous-version=5.1.5&new-version=5.1.9)](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>
2026-07-22 08:22:08 +00:00
ktx-vaidehi 2475602928 fix: UI issues of missing imports and config spacing (#13331) 2026-07-22 07:14:44 +00:00
Shrinath RaoandClaude Opus 4.8 e8f6c6846d fix(pipelines): make Pipeline Destinations search null-safe (#13345)
## What
Fixes broken search on the **Pipeline Destinations** page (Management >
Pipeline Destinations — "External targets for pipeline output"). Typing
any query left the full list visible; search filtered nothing.

## Root cause
Destinations without a type/URL/method render as **"—"** in the list and
have those fields as `null`. `filterData()` called `.toLowerCase()` on
them directly:

```js
rows[i]["destination_type_name"].toLowerCase()  // null → TypeError
```

Any search term that didn't match such a row's name reached this line
mid-iteration and threw a `TypeError`. The exception aborted the
`visibleRows` computed, which then kept its last value — the **full
unfiltered list** — so search appeared to do nothing regardless of the
query. A random non-matching string (the common case) triggers it every
time, since it forces evaluation past every null-type row.

## Fix
Guard each field with a `|| ""` fallback before `toLowerCase()` in
`filterData()`.

## Test
Added a regression test covering a **non-matching** query over a row
with null `type`/`url`/`method` (this is what reproduces the crash — a
matching-name term short-circuits the `||` before touching the null
field). Verified it **fails without the source fix** and **passes with
it**. Full spec: 36/36 passing.

Fixes openobserve/o2-enterprise#2234

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

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 06:41:26 +00:00
be31b47172 chore: update translations from en-US.json (#13154)
Auto-generated translation updates from the English source file
(`web/src/locales/languages/en-US.json`).

🤖 Generated with automated translation workflow

Co-authored-by: github-merge-queue[bot] <118344674+github-merge-queue[bot]@users.noreply.github.com>
Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-07-22 04:44:29 +00:00
IluckySi d015f1c748 feat(web): add loongcollector option in custom log ingestion (#13258)
This PR adds LoongCollector, **Alibaba’s self-developed log collector**,
as a explicit custom log ingestion choice in the user interface.

The LoongCollector log collection configuration as follows:
ilucky@ubuntu:/.../loongcollector-3.3.5$ cat
conf/continuous_pipeline_config/local/collector.yaml

> enable: true
inputs:
  &nbsp;&nbsp;\- Type: input_file
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilePaths:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- /tmp/*.log
processors:
  &nbsp;&nbsp;\- Type: processor_json
  &nbsp;&nbsp;&nbsp;&nbsp; SourceKey: content
flushers:
  &nbsp;&nbsp; \- Type: flusher_http
&nbsp;&nbsp; &nbsp;&nbsp; RemoteURL:
http://192.168.139.3:5080/api/default/default/_json
    &nbsp;&nbsp; &nbsp;&nbsp; Method: POST
    &nbsp;&nbsp; &nbsp;&nbsp; Headers:
&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; Authorization: Basic
cm9vdEBleGFtcGxlLmNvbTpvMm9pX1hVcHBBeUdVd0J4VHZHbmpYY2c1eWJGblZFNFduak9D
    Compress: gzip

<img width="2926" height="1194" alt="image"
src="https://github.com/user-attachments/assets/ae2a5af6-ea03-4a41-833a-c53e7f692f9d"
/>
<img width="2932" height="990" alt="image"
src="https://github.com/user-attachments/assets/1bed13bb-ec40-4200-a71a-1229a6884af6"
/>
<img width="2932" height="1196" alt="image"
src="https://github.com/user-attachments/assets/79e54f4c-1c67-46c5-8fac-97506907da5e"
/>
2026-07-22 03:43:12 +00:00
udev 010f572256 feat(cloud): manage organization AI credits (#13282)
## Summary

- add shared lifetime AI credit limits and persisted per-organization
usage tracking
- expose used and total AI credits in organization management with an
editable limit dialog
- keep router quota caches synchronized and delegate billing and
contract exhaustion policy to enterprise
- clean up the redundant quota table only in non-cloud builds while
preserving cloud credit data

## Companion PR

- https://github.com/openobserve/o2-enterprise/pull/2208

## Testing

- cargo check --features cloud
- cargo test -p openobserve-core --features cloud trial_quota::tests
--lib
- cargo test -p infra --features cloud
m20260717_000001_drop_trial_quota_usage_for_non_cloud::tests --lib
- cargo test -p infra
m20260717_000001_drop_trial_quota_usage_for_non_cloud::tests --lib
- cargo fmt checks for changed Rust packages
- npm run type-check
- 200 focused frontend unit tests covering organization management,
billing usage, organization services, and required numeric input
- live organization-management verification with per-org 0 used / 1,000
total values
2026-07-21 16:57:33 +00:00
Prabhat Sharma 21d0907342 fix(logs): redesign log patterns UI (#13337)
## What

Redesign of the log patterns UI.

- **`PatternCard`** reworked: template tokens, a badges row (trend /
rarity / anomaly), and inline frequency + percentage replace the old
fixed count and action columns.
- **`PatternVolumeCell`** (new) + **`usePatternVolume`** (new) render
per-pattern volume sparklines.
- **`PatternDetailsDialog`** now owns the include / exclude /
create-alert actions that previously lived on each card.
- **`patternUtils`** / **`usePatternActions`** extended to back the
above.

## Test plan

- `web` unit tests for the touched areas: 356 passing, 0 failing
(`plugins/logs/patterns`, `plugins/logs/data-table`, `SearchResult`,
`FieldValuesPanel`).
- New spec coverage for `PatternVolumeCell`, `usePatternVolume`, and
`patternUtils`.
- `npm run type-check` clean.
- `lint:design`, `lint:tokens`, `lint:token-purity` all clean.

## Notes

Rebased onto latest `main`. Five conflicts came from main's repo-wide
type-check pass (#13174), which made `OIcon`'s `name` prop required.
Main's fix (`name=""` + slot) was kept in `CodeQueryEditor.vue`,
`FieldValuesPanel.vue`, and `CellActions.vue`; in `PatternCard.vue` the
surrounding block was removed by this redesign, so the deletion stands.
2026-07-21 15:46:12 +00:00
Abhay Padamani 4d58a1efe4 build: add UI code quality checks and enhance linting processe (#13174)
chore: update package.json scripts for improved type-checking
fix: adjust frontmatter regex to handle BOM characters
refactor: streamline error handling in dashboard data conversion
style: clean up comments and formatting in various files
2026-07-21 12:47:06 +00:00
2abb10e54a fix(dashboards): repair delete from the Favorites view (#13327)
Deleting a favorited dashboard failed or left ghost rows behind:

1. Bulk delete sent activeFolderId as the `?folder=` param. In the
Favorites view that is the `__favorites__` pseudo-folder id, which the
backend 404s on — so bulk delete never worked there for any dashboard.
Favorites can also span folders, which one folder-scoped call could not
cover. Group the selection by each row's real folder_id and issue one
call per folder; a normal folder view collapses to the single request it
always was.

2. Nothing pruned the favorites setting when a dashboard was deleted, so
the Favorites view kept rendering the row from its stored label. Add
removeFavorites() and call it after single and bulk delete, plus a
self-heal on entering Favorites for deletions made elsewhere (another
tab, the dashboard view). It deliberately does not revert on a failed
write — the dashboard is already gone, so restoring the row would
recreate the ghost the cleanup exists to remove.

3. Folder navigation is cache-first, and bulk delete never touched the
store, so the deleted rows reappeared in their source folder until a
manual refresh. Add evictDashboardsFromCache(), mirroring what
deleteDashboardById already does for the single-delete path. Only ids
the backend did not report as unsuccessful are evicted, so a partial
failure keeps the surviving rows visible.

Also snapshot the selection before reading the `dashboards` computed in
bulk delete — that computed resets selectedIds as a side effect, so the
new folder-grouping could otherwise have deleted nothing.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
2026-07-21 11:50:43 +00:00
Omkar KesarkhaneandClaude Opus 4.8 c7871126c5 fix: In traces 'status' field was getting added as 'Span Status' in spans mode (#13294)
## What changed

Removes the automatic migration of the `status` field to `span_status`
in spans search mode, and passes the current `searchMode` to column
definition generation so `status` is treated as a generic data column in
spans mode instead of getting traces-mode special column rendering.
Alongside this, the TenstackTable header actions area gets a
hover-visibility fix and the old `.logs-table` CSS block for column
actions is deleted in favour of the generic `group-hover:visible`
approach.

## Why

The previous code was conflating the `status` data field (a legitimate
user-configurable column in spans mode) with the "Span Status" column
definition that is meaningful only in traces mode. This meant any user
who had `status` saved in their spans column preferences would have it
silently renamed to `span_status`, which either broke the column or
showed incorrect data.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 11:49:11 +00:00
Omkar KesarkhaneandClaude 4ebf1616ee fix: hide browser and device insights for non-browser tests in MonitorRuns (#13292)
## What changed

Hides browser/device-related UI elements in `MonitorRuns.vue` for
non-browser synthetic tests (http, tcp, tls, ssh) and adds a "Duration
by Location (Avg)" breakdown card as a protocol-appropriate replacement.
The steps tab, browser/device filter dropdowns, browser/device table
columns, and the Pass Rate by Browser/Device breakdown cards are now
gated behind an `isBrowser` check.

## Why

Non-browser protocol tests (http, tcp, tls, ssh) do not produce browser
engine or device data. Showing empty or meaningless browser/device
columns, filters, and insight cards for these tests was confusing. The
monitor type is resolved on first data refresh via
`syntheticsService.get()`, defaulting to `isBrowser = true` as a safe
fallback.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-21 11:23:13 +00:00
ktx-vaidehi 784459fcf4 fix: login form migration (#13334) 2026-07-21 10:51:09 +00:00
9ede45bbf7 fix: Agent Behavior signals (loop/failure taxonomy) + Agent Graph fixes (#13279)
## What

Adds **Agent Behavior signals** — a PB-safe rollup that surfaces two
behavioural questions the platform couldn't answer before: *is an agent
stuck in a loop?* and *why is it failing?* Plus a batch of Agent Graph /
AI Observability UX and correctness fixes found while building it.

Companion changes land in **o2-enterprise**
(`feat/agent-signals-enterprise-split`): the SQL builders, mappers,
config-driven failure taxonomy, the service-graph agent-classification
fix, and the RBAC route entry.

## Backend (agent-signals)
- Bounded-key rollup co-located in the service-graph job
(alert-manager-only, reuses its watermark + self-ingest). Groups only on
agent/tool/class — never trace_id — so it stays PB-safe.
- Config-driven **failure taxonomy** (rules as data, evolvable without
code) + config-driven error-detail columns; ancestor-agent resolution so
error spans attribute to the owning agent.
- Read API `GET /{org}/traces/agent_signals` (dual `#[cfg]`, reads the
derived `_agent_signals` stream) + RBAC route entry (enterprise
`route_permissions`) mapping it to `traces` read.
- OSS/enterprise split respected: pure SQL/mapping in enterprise, thin
gated I/O in OSS.
- Fix: `traces/latest` only narrows to a UUIDv7 trace_id's embedded time
when that time is inside the caller's window (fixes "trace not found"
for time-shifted/re-ingested traces).

## Frontend (AI Observability)
- New **Agent Behavior** page under Monitor: looping-agents +
failure-taxonomy tables, each row opening an actionable detail drawer
(real grouped error messages / worst-repeat traces), click-through to
Trace Details in a new tab.
- Agent-node **Behavior tab** on the Agent Graph node drawer (reuses the
same signals).
- Nav rename: LLM Insights → **Insights**, LLM Sessions → **Sessions**.
- **Agent** is the default scope across the AI pages, with the
Agent|Stream toggle placed consistently (left scope bar); explicit
URL/localStorage choices still win.
- Removed the duplicate in-table refresh on Sessions.

## Agent Graph fixes
- **Agent classification**: agents that also call tools now correctly
classify as `service_type: "agent"` (they glow), fixing a latent
precedence bug where the tool/model client-role overrode the agent role
and `is_real_service` forced agents to plain services. Rust
`classify_entity` brought in line with the (already-correct) TS twin.
- **Drag-to-pan restored**: the shared ChartRenderer armed
`dataZoomSelect` cursor unconditionally, hijacking drag away from roam
pan. Disabled for this graph (no dataZoom).
- **Nodes scale on zoom** (`nodeScaleRatio: 1`) so zooming enlarges
nodes/labels, not just spacing.

## Testing
- Enterprise unit tests: agent-signals SQL/mappers/config,
classification precedence, RBAC route resolution — all pass.
- FE: type-check + lint clean.
- Verified end-to-end on real re-ingested introspection data: taxonomy
unclassified rate ~100% → ~1–3%, agents resolved, both agents
classify/glow, trace-open works.

## Notes
- `Cargo.toml`/`Cargo.lock` and unrelated Slack-bot files were
intentionally excluded from the commits (local build-config drift).

---------

Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
2026-07-21 10:45:05 +00:00
Sai NikhilandYashodhan Joshi 36518e49c1 fix: workflows add on (#13323)
Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-07-21 10:31:52 +00:00
IluckySiandHengfei Yang 2be4fc627c feat(web): add nightingale option in custom metric ingestion (#13264)
This PR adds nightingale as a explicit custom metric ingestion.
github: https://github.com/ccfos/nightingale

The configuration as follows:

> [[Pushgw.Writers]]
> Url = "http://localhost:5080/api/default/prometheus/api/v1/write"
> BasicAuthUser = "root@example.com"
> BasicAuthPass = "o2oi_XUppAyGUwBxTvGnjXcg5ybFnVE4WnjOC"

<img width="2940" height="1004" alt="image"
src="https://github.com/user-attachments/assets/1683255f-1591-4a40-bfe0-ea52c9484746"
/>
<img width="2926" height="1614" alt="image"
src="https://github.com/user-attachments/assets/c3c3b181-5b6a-4104-b7e4-8857597dfd8e"
/>

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-07-21 08:39:52 +00:00
dependabot[bot]andHengfei Yang 424c64564e chore(deps): bump webpack-dev-server from 5.2.5 to 5.2.6 in /web (#13311)
Bumps
[webpack-dev-server](https://github.com/webpack/webpack-dev-server) from
5.2.5 to 5.2.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpack/webpack-dev-server/releases">webpack-dev-server's
releases</a>.</em></p>
<blockquote>
<h2>v5.2.6</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: allow <code>undefined</code> as the <code>Server</code>
constructor <code>options</code> argument again (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5695">#5695</a>)</p>
<p>Restores accepting <code>undefined</code> (defaulting it to
<code>{}</code>) for the <code>options</code>
argument, so passing a webpack config's optional <code>devServer</code>
field type-checks and works as before.</p>
</li>
<li>
<p>Protect the built-in state-changing routes
(<code>/webpack-dev-server/invalidate</code> and
<code>/webpack-dev-server/open-editor</code>) against cross-site request
forgery. Requests are now checked with <code>Sec-Fetch-Site</code>
(falling back to an <code>Origin</code>/<code>Host</code> comparison
when it is absent), so a cross-site page can no longer trigger a rebuild
or open a file in the editor. Same-origin requests, user-initiated
navigations, and non-browser clients (e.g. curl) are unaffected. (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5698">#5698</a>)</p>
</li>
<li>
<p>Handle malformed <code>Host</code> and <code>Origin</code> header
values gracefully when validating requests. (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5699">#5699</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/webpack/webpack-dev-server/blob/v5.2.6/CHANGELOG.md">webpack-dev-server's
changelog</a>.</em></p>
<blockquote>
<h2>5.2.6</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>fix: allow <code>undefined</code> as the <code>Server</code>
constructor <code>options</code> argument again (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5695">#5695</a>)</p>
<p>Restores accepting <code>undefined</code> (defaulting it to
<code>{}</code>) for the <code>options</code>
argument, so passing a webpack config's optional <code>devServer</code>
field type-checks and works as before.</p>
</li>
<li>
<p>Protect the built-in state-changing routes
(<code>/webpack-dev-server/invalidate</code> and
<code>/webpack-dev-server/open-editor</code>) against cross-site request
forgery. Requests are now checked with <code>Sec-Fetch-Site</code>
(falling back to an <code>Origin</code>/<code>Host</code> comparison
when it is absent), so a cross-site page can no longer trigger a rebuild
or open a file in the editor. Same-origin requests, user-initiated
navigations, and non-browser clients (e.g. curl) are unaffected. (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5698">#5698</a>)</p>
</li>
<li>
<p>Handle malformed <code>Host</code> and <code>Origin</code> header
values gracefully when validating requests. (by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/webpack/webpack-dev-server/pull/5699">#5699</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/8a37b0ed89d07ca81532188fe19f080a2ee51475"><code>8a37b0e</code></a>
chore(release): new release (<a
href="https://redirect.github.com/webpack/webpack-dev-server/issues/5697">#5697</a>)</li>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/f21ed0f44aceb6132abb591ee8b60d770b6e489f"><code>f21ed0f</code></a>
fix: handle malformed Host and Origin headers (<a
href="https://redirect.github.com/webpack/webpack-dev-server/issues/5699">#5699</a>)</li>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/80cd9eea54975fe632a518d8bd902a260f374e7c"><code>80cd9ee</code></a>
fix: reject cross-site requests to open-editor and invalidate endpoints
(<a
href="https://redirect.github.com/webpack/webpack-dev-server/issues/5698">#5698</a>)</li>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/308e853808fc8f5d0722276e1a87aa73c91859a5"><code>308e853</code></a>
fix: handle undefined options in Server constructor (<a
href="https://redirect.github.com/webpack/webpack-dev-server/issues/5695">#5695</a>)</li>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/8b2b9151f41e0d6157c8bd051cf5f16bce5dba17"><code>8b2b915</code></a>
chore: update branch references from v4 to v5 in workflow
configuration</li>
<li><a
href="https://github.com/webpack/webpack-dev-server/commit/870ed2258dda612c8feeaf8d971afd08233696ad"><code>870ed22</code></a>
chore: add v5 branch to release workflow triggers</li>
<li>See full diff in <a
href="https://github.com/webpack/webpack-dev-server/compare/v5.2.5...v5.2.6">compare
view</a></li>
</ul>
</details>
<br />

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>
2026-07-21 08:32:06 +00:00
ktx-vaidehi d3ee4342dc fix: frontend unit test in main (#13328) 2026-07-21 17:35:46 +08:00
dependabot[bot]andHengfei Yang ed3c4081ca chore(deps): bump shell-quote from 1.8.4 to 1.10.0 in /web (#13310)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.4 to
1.10.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md">shell-quote's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/ljharb/shell-quote/compare/v1.9.0...v1.10.0">v1.10.0</a>
- 2026-07-10</h2>
<h3>Merged</h3>
<ul>
<li>[New] <code>parse</code>: add opt-in <code>splitUnquoted</code>
option for shell field-splitting of unquoted expansions <a
href="https://redirect.github.com/ljharb/shell-quote/pull/1"><code>[#1](https://github.com/ljharb/shell-quote/issues/1)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[Fix] <code>parse</code>: match nested <code>${...}</code> braces so
nested parameter expansion is consumed as one substitution <a
href="https://github.com/ljharb/shell-quote/commit/c0842c8a7a034066da2496a75e91cbe500ff736c"><code>c0842c8</code></a></li>
<li>[Tests] <code>parse</code>: pin single-quote literalness and
unmatched-quote handling <a
href="https://github.com/ljharb/shell-quote/commit/a0d03e35c8ede24016502c4433b8f5d6b3100a62"><code>a0d03e3</code></a></li>
<li>[readme] remove the space in js code fences so evalmd evaluates them
<a
href="https://github.com/ljharb/shell-quote/commit/2116fa36aeea77fe8d561b0db46b1f9b26b8cf1b"><code>2116fa3</code></a></li>
<li>[Tests] <code>quote</code>: pin conservative escaping of
<code>=</code>, <code>@</code>, <code>^</code>, <code>,</code>,
<code>:</code>, <code>!</code> (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/11">#11</a>)
<a
href="https://github.com/ljharb/shell-quote/commit/1c36f3ff77d26d200620c1027e5c271050120b8e"><code>1c36f3f</code></a></li>
<li>[readme] document that <code>quote</code> outputs POSIX quoting, not
<code>cmd.exe</code>/PowerShell <a
href="https://github.com/ljharb/shell-quote/commit/100e96e0ffadcca97d63dda15651c70b9f83507c"><code>100e96e</code></a></li>
<li>[readme] document <code>parse</code>'s supported parameter-expansion
subset <a
href="https://github.com/ljharb/shell-quote/commit/e1c75cd6e4a3c60003792c7f2802587d328622cb"><code>e1c75cd</code></a></li>
<li>[Fix] <code>parse</code>: a backslash inside single quotes must not
escape the closing quote <a
href="https://github.com/ljharb/shell-quote/commit/5d460a332b54b83153297fe7d1964330b28fa491"><code>5d460a3</code></a></li>
<li>[readme] fix stale example outputs <a
href="https://github.com/ljharb/shell-quote/commit/2de86f5d44f44d3ac9df36413d8a05f3534cdec6"><code>2de86f5</code></a></li>
<li>[Tests] <code>quote</code>: pin that a backslash with whitespace is
not doubled in single quotes (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/14">#14</a>)
<a
href="https://github.com/ljharb/shell-quote/commit/190e236bcf1d81caa8e40e8ea3bb11998575be71"><code>190e236</code></a></li>
<li>[readme] <code>quote</code>: use output verbatim; do not re-quote it
(<a
href="https://redirect.github.com/ljharb/shell-quote/issues/11">#11</a>)
<a
href="https://github.com/ljharb/shell-quote/commit/1b364683b1e9e8d078fd3017cde82cf10c9c04a5"><code>1b36468</code></a></li>
<li>[Refactor] <code>parse</code>: fix swapped
<code>SINGLE_QUOTE</code>/<code>DOUBLE_QUOTE</code> variable names <a
href="https://github.com/ljharb/shell-quote/commit/801af5c935b27d6dcda63b3975d5e92a7b6f887f"><code>801af5c</code></a></li>
<li>[types] fix an error TS v6 ignores but v7 fails on <a
href="https://github.com/ljharb/shell-quote/commit/59bbf8b81bf3236842deb72805744d489f650eba"><code>59bbf8b</code></a></li>
<li>[Dev Deps] update <code>@arethetypeswrong/cli</code>,
<code>evalmd</code> <a
href="https://github.com/ljharb/shell-quote/commit/a04d47516e1cd5b1b4d3f720ddf97561ed0082fc"><code>a04d475</code></a></li>
<li>[Dev Deps] update <code>@arethetypeswrong/ci</code>,
<code>eslint</code> <a
href="https://github.com/ljharb/shell-quote/commit/d390f9a92b97a04b1f799298634e90dc581021e6"><code>d390f9a</code></a></li>
<li>[Tests] <code>quote</code>: the tilde test escapes every
<code>~</code>, not just a leading one (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/9">#9</a>)
<a
href="https://github.com/ljharb/shell-quote/commit/617d119795c7b44d6e49a4d41f80195c4aa5735c"><code>617d119</code></a></li>
</ul>
<h2><a
href="https://github.com/ljharb/shell-quote/compare/v1.8.4...v1.9.0">v1.9.0</a>
- 2026-06-24</h2>
<h3>Commits</h3>
<ul>
<li>[New] add types <a
href="https://github.com/ljharb/shell-quote/commit/dca6e21a02df4cc1a83ed1b5baa4d82df134170a"><code>dca6e21</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="https://github.com/ljharb/shell-quote/commit/9aa9e8f60991f8c4053a29e476795d891ff851ad"><code>9aa9e8f</code></a></li>
<li>[Fix] <code>parse</code>: finalize tokens in linear time
(GHSA-395f-4hp3-45gv) <a
href="https://github.com/ljharb/shell-quote/commit/7ff5488599d01c323514f02f5efb74088dd134ec"><code>7ff5488</code></a></li>
<li>[actions] update workflows <a
href="https://github.com/ljharb/shell-quote/commit/75e849741ffaf2d3aa53ae0e18ef6bf9929ef478"><code>75e8497</code></a></li>
<li>[actions] Windows + node 4/6/7: pin eslint to 9 before install,
since npm 2/3 cannot stage eslint 10<code>@types/esrecurse</code> <a
href="https://github.com/ljharb/shell-quote/commit/3fb739de44b81c69431947d54fbfc18998dd6d72"><code>3fb739d</code></a></li>
<li>[actions] retry <code>npm install</code> on Windows to survive npm
2/3 staging-rename flake <a
href="https://github.com/ljharb/shell-quote/commit/abe0163293c82963fa8a16cfaa87181846d5aced"><code>abe0163</code></a></li>
<li>[actions] Windows + node 5/7: install deps with a modern node <a
href="https://github.com/ljharb/shell-quote/commit/b4bafa2e7e58d53d9839b1c24976f61e54b43326"><code>b4bafa2</code></a></li>
<li>[Fix] <code>quote</code>: escape leading <code>~</code> to prevent
shell tilde-expansion <a
href="https://github.com/ljharb/shell-quote/commit/7a76c1a12d8461c2234a1c655b943cee84cbff91"><code>7a76c1a</code></a></li>
<li>[Dev Deps] update <code>auto-changelog</code>, <code>tape</code> <a
href="https://github.com/ljharb/shell-quote/commit/7184b4458b65c17b931e126d8cb5f586c6717dc8"><code>7184b44</code></a></li>
<li>[Dev Deps] apparently <code>jackspeak</code> is no longer in the
graph <a
href="https://github.com/ljharb/shell-quote/commit/9ba368a4057b9f498b0fef23b5b15543ef81b98c"><code>9ba368a</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ljharb/shell-quote/commit/64988d9a0e73a2ae710488952e3614958ef289d4"><code>64988d9</code></a>
v1.10.0</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/617d119795c7b44d6e49a4d41f80195c4aa5735c"><code>617d119</code></a>
[Tests] <code>quote</code>: the tilde test escapes every <code>~</code>,
not just a leading one (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/9">#9</a>)</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/59bbf8b81bf3236842deb72805744d489f650eba"><code>59bbf8b</code></a>
[types] fix an error TS v6 ignores but v7 fails on</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/190e236bcf1d81caa8e40e8ea3bb11998575be71"><code>190e236</code></a>
[Tests] <code>quote</code>: pin that a backslash with whitespace is not
doubled in singl...</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/a04d47516e1cd5b1b4d3f720ddf97561ed0082fc"><code>a04d475</code></a>
[Dev Deps] update <code>@arethetypeswrong/cli</code>,
<code>evalmd</code></li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/b9545b39f4de17aa169410823c98acf58387e474"><code>b9545b3</code></a>
[New] <code>parse</code>: add opt-in <code>splitUnquoted</code> option
for shell field-splitting of...</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/1b364683b1e9e8d078fd3017cde82cf10c9c04a5"><code>1b36468</code></a>
[readme] <code>quote</code>: use output verbatim; do not re-quote it (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/11">#11</a>)</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/1c36f3ff77d26d200620c1027e5c271050120b8e"><code>1c36f3f</code></a>
[Tests] <code>quote</code>: pin conservative escaping of <code>=</code>,
<code>@</code>, <code>^</code>, <code>,</code>, <code>:</code>,
<code>!</code> (<a
href="https://redirect.github.com/ljharb/shell-quote/issues/11">#11</a>)</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/e1c75cd6e4a3c60003792c7f2802587d328622cb"><code>e1c75cd</code></a>
[readme] document <code>parse</code>'s supported parameter-expansion
subset</li>
<li><a
href="https://github.com/ljharb/shell-quote/commit/c0842c8a7a034066da2496a75e91cbe500ff736c"><code>c0842c8</code></a>
[Fix] <code>parse</code>: match nested <code>${...}</code> braces so
nested parameter expansion is ...</li>
<li>Additional commits viewable in <a
href="https://github.com/ljharb/shell-quote/compare/v1.8.4...v1.10.0">compare
view</a></li>
</ul>
</details>
<br />

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>
2026-07-21 08:20:36 +00:00
Chaitanya SistlaandKirtan Thakkar 05dc30b952 feat(dashboards): redesign gallery drawer and add migration links (#13313)
- Replace flat checkbox list in template gallery with grouped card grid,
organised by category (Cloud, Kubernetes, Database, Networking, etc.)
with category icon, colour coding, and item count badge per group
- Add dark mode support throughout the gallery (body--dark overrides for
all hardcoded light colours)
- Add Migrate from Datadog / Grafana / Kibana / CloudWatch options under
the Import dropdown (separated from Custom and Templates), each opening
migration.openobserve.ai in a new tab

---------

Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech>
2026-07-21 07:14:52 +00:00
fd85566742 feat: workflows version 1 (#13156)
This PR introduces workflows 

design at:
https://github.com/openobserve/designs/blob/main/infrastructure/workflows/design.md

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 05:33:46 +00:00
dependabot[bot]andHengfei Yang 209e263851 chore(deps): bump js-yaml from 4.2.0 to 4.3.0 in /web (#13312)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.2.0 to 4.3.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md">js-yaml's
changelog</a>.</em></p>
<blockquote>
<h2>4.3.0, 3.15.0 - 2026-06-27</h2>
<h3>Security</h3>
<ul>
<li>Backported <code>maxTotalMergeKeys</code> option.</li>
</ul>
<h2>[5.2.0] - 2026-06-26</h2>
<h3>Added</h3>
<ul>
<li>Added <code>maxTotalMergeKeys</code> (10000) loader option to limit
the total number of
keys processed by YAML merge (<code>&lt;&lt;</code>) across one
<code>load()</code> / <code>loadAll()</code> call.</li>
<li>Added <code>maxAliases</code> (-1) loader option to limit the number
of YAML aliases per
document.</li>
</ul>
<h3>Removed</h3>
<ul>
<li><code>maxMergeSeqLength</code> replaced with
<code>maxTotalMergeKeys</code> for limiting YAML merge
processing.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Round-trip of integers with exponential form (&gt;=
<code>1e21</code>)</li>
</ul>
<h2>[5.1.0] - 2026-06-23</h2>
<h3>Added</h3>
<ul>
<li>Collection tags can finalize an incrementally populated carrier into
a
different result value.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>[breaking] <code>quoteStyle</code> now selects the preferred quote
style; use the
restored <code>forceQuotes</code> option to force quoting non-key
strings.</li>
</ul>
<h2>[5.0.0] - 2026-06-20</h2>
<h3>Added</h3>
<ul>
<li>Added named exports for schemas, tags, parser events and AST
utilities.</li>
<li>Reworked <code>JSON_SCHEMA</code> and <code>CORE_SCHEMA</code> with
spec-compliant scalar resolution
rules, and added <code>YAML11_SCHEMA</code>.</li>
<li>Added <code>realMapTag</code> for lossless mappings with non-string
and complex keys.
Object-based mappings now reject complex keys instead of stringifying
them.</li>
<li>Added <code>dump()</code> <code>transform</code> option for changing
the generated AST before
rendering.</li>
<li>Added <code>dump()</code> options <code>seqInlineFirst</code>,
<code>flowBracketPadding</code>,
<code>flowSkipCommaSpace</code>, <code>flowSkipColonSpace</code>,
<code>quoteFlowKeys</code>, <code>quoteStyle</code> and
<code>tagBeforeAnchor</code>.</li>
<li>Added formal data layers (events and AST) for modular data
pipelines.
<ul>
<li>Added low-level parser (to events), presenter and visitor APIs.</li>
</ul>
</li>
<li>Added the <a href="https://github.com/yaml/yaml-test-suite">YAML
Test Suite</a> to the
test set.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>See the <a
href="https://github.com/nodeca/js-yaml/blob/master/docs/migrate_v4_to_v5.md">migration
guide</a> for upgrade notes.</li>
<li>Rewritten in TypeScript and reorganized the public API around flat
named
exports.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/nodeca/js-yaml/commit/33d05b5d29a8c21360f620f7e1c1706e24522eda"><code>33d05b5</code></a>
4.3.0 released</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/663bfab6db2b4a146a9366fd685f069345be4ddb"><code>663bfab</code></a>
Drop demo publish, to not override new v5 one.</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/1cb8c7b94bf75e15116869c1c0482dcb22785986"><code>1cb8c7b</code></a>
Add v4-legacy tag for publish</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/02f27afad532763263cd2b6be35c24ee8e1f6157"><code>02f27af</code></a>
Restore umd builds back to es5</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/8be84edaf15e7c394fa3b813179d1bcc280e87fb"><code>8be84ed</code></a>
Fix es5 compatibility</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/59423c6f8cdc78742ac00e25a4dd39ef16b702e4"><code>59423c6</code></a>
Replace <code>maxMergeSeqLength</code> option with
<code>maxTotalMergeKeys</code> (more robust). Ba...</li>
<li><a
href="https://github.com/nodeca/js-yaml/commit/6842ef6a02df01ca7282ea01dc3c70787710c05d"><code>6842ef6</code></a>
doc polish</li>
<li>See full diff in <a
href="https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=js-yaml&package-manager=npm_and_yarn&previous-version=4.2.0&new-version=4.3.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>
2026-07-21 05:03:52 +00:00
github-actions[bot] 8c98a219df chore: regenerate SBOMs (2026-07-20) (#13280) 2026-07-21 09:57:26 +08:00
f15e27e5fd refactor: design token migration + CI guards (#13173)
# Design System Unification — one visual language, enforced end-to-end

Establishes **one source of truth for every visual decision**, wires the
whole app to it, and **locks it in with CI** so it can't drift back.

### Foundations
- **Design-token system ("one knob per decision").** Every colour, text
size, spacing, corner radius, and shadow is a named token defined in
exactly one place — change the token, every screen updates. Collapsed
hundreds of near-duplicate definitions and removed "fake" duplicates
that pretended to be different but weren't.
- **Shared component library (O2).** Buttons, tables, dialogs, drawers,
form fields, badges, etc. already know the correct colours, spacing, and
dark-mode behaviour; new screens compose them instead of hand-styling.
Added new primitives on this branch (`OContent`, `KpiCard`) and
standardized existing ones.
- **One page structure everywhere** (`PageLayout` / `AppPageHeader` /
`AppPage` / `OContent`) — titles, breadcrumbs, spacing, and content
edges line up identically across every screen.
- **One table implementation** — all tabular data uses the same table
(sorting, density, sticky headers, empty states).
- **Styling consolidated onto Tailwind; old systems removed** —
hand-written CSS driven to the practical minimum, the legacy **Quasar**
framework fully removed, surviving stylesheets required to justify
themselves.
- **Two-tier corner radius** — a tight **4px** for controls and a soft
**12px** for surfaces (dialogs, cards, the app shell), plus a
full-circle option — replacing five radius names that all secretly meant
the same thing.

### Detailed improvements across screens
**Page structure & alignment** — unified page shell rolled across ~40+
screens (IAM, Settings, Alerts, Dashboards, Functions, Pipelines, RUM,
Metrics, Synthetics, Billing, editors, lists); one header height; one
page-edge grid driving headers, tables, rails, and tabs; unified
side-rail widths; inset rail selection/hover pills; every tab strip on
the grid line; tightened title/subtitle spacing.

**Tables (cross-screen)** — action columns consistently centered (incl.
Organizations); unified row-number column with no "#" truncation;
non-standard tables restyled to match; loading skeletons made
geometrically identical to the loaded table; symmetric edge inset; IAM
first-column grid alignment fixed.

**Traces** — flame graph + span-detail correlation panel fixes;
correlated logs/metrics placeholder fit; sticky headers; removed a
double scrollbar + a 1px sliver; aligned table fonts/badges; polished
the service detail drawer; stream-selector + correlation alignment;
aligned loading spinners; floating overlay arrows for the
disabled-services strip.

**Logs** — field-list controls aligned (focus ring no longer clipped);
detail-drawer spacing + metrics-tab overflow fixed; Run Query toolbar
tidied; listing sizing + stray border fixed.

**Metrics** — search added to the "Type" facet rail and aligned with the
other rails; proper empty states for the explorer and facet rail.

**Dashboards** — removed inconsistent card shadows; tightened
borders/resizers/field-list spacing; aligned View Dashboard chrome to
the grid; chart colours via the token helper.

**Home** — redesigned the Usage tab; added reusable KPI stat cards so
summary strips stop drifting.

**Dark mode** — new theme-switch animation; fixed a 1px content shift on
toggle and a white flash on load; fixed AI-chat text and assorted
light/dark mismatches; completed the token-driven dark migration.

**Empty states, controls & small polish** — restored 3 broken
empty-state animations; adopted the standard empty state; added the
sliding indicator to the toggle control; fixed the Quality-page inset +
drawer badge; refreshed Search History / Schedulers; fixed the
alert-history drawer scrollbar + timeline hover; removed a stray
menu-bar border.

### Dead code & cruft removal
- **Deleted the entire legacy `utilities.css`** global stylesheet (well
over a thousand lines) — evacuated in waves, roughly half of it dead
once traced.
- **Removed Quasar entirely**, including dead `.q-*` styles and ~25
phantom `--q-*` variables that were silently breaking bits of the UI.
- Stripped hundreds of **dead CSS classes and tokens that compiled to
nothing** — e.g. 46 uses of a colour class with no backing token, a
no-op shadow class on 51 elements, dead layout/utility classes, a
leftover `card-container` block, a dead table-actions token, and a
mis-registered gradient that rendered nothing.
- Cut **unused keyframe animations (19 → 3)** and removed **unused
components** + a stray build artifact.
- Net effect: a much smaller, leaner styling surface — less to maintain,
fewer dead ends to copy.

## Safety & verification
Large but low-risk: this is overwhelmingly a **styling and structure**
change, not product behaviour or data. Guarded by the
design-token/consistency/type checks above plus the existing test suite,
and reviewed screen-by-screen.

---------

Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: ktx-mihir <mihir.patel@kiara.tech>
2026-07-20 18:06:21 +00:00
d1ae0a633a chore(deps): bump echarts, @joakimono/echarts-extension-leaflet and echarts-gl in /web (#12957)
Bumps [echarts](https://github.com/apache/echarts),
[@joakimono/echarts-extension-leaflet](https://github.com/joakimono/echarts-extension-leaflet)
and [echarts-gl](https://github.com/ecomfe/echarts-gl). These
dependencies needed to be updated together.
Updates `echarts` from 5.6.0 to 6.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/echarts/releases">echarts's
releases</a>.</em></p>
<blockquote>
<h2>6.1.0</h2>
<ul>
<li>[Feature] [axis] Support <code>dataMin</code> and
<code>dataMax</code> option for calculating a nice axis extent. <a
href="https://redirect.github.com/apache/echarts/pull/20838">#20838</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Feature] [axis] Comprehensively enable all types of axis (i.e.,
<code>&quot;value&quot;</code>/<code>&quot;time&quot;</code>/<code>&quot;category&quot;</code>/<code>&quot;log&quot;</code>)
to render series (typically
<code>&quot;bar&quot;</code>/<code>&quot;pictorialBar&quot;</code>/<code>&quot;candlestick&quot;</code>/<code>&quot;boxplot&quot;</code>)
without overflow (including the case <code>&quot;category&quot;</code>
axis with <code>boundaryGap: false</code>); provide
<code>containShape</code> option; provide some corresponding
<code>clip</code> option. <a
href="https://github.com/apache/echarts/commit/dbfaf6a73">dbfaf6a73</a>
<a
href="https://github.com/apache/echarts/commit/fe932a2aa">fe932a2aa</a>
<a
href="https://github.com/apache/echarts/commit/3973b21ee">3973b21ee</a>
(<a href="https://github.com/100pah">100pah</a>) <a
href="https://redirect.github.com/apache/echarts/pull/21511">#21511</a>
(<a href="https://github.com/akashsonune">Akash Sonune</a>)</li>
<li>[Feature] [axis] Automatically exclude non-positive series data
values on <code>&quot;log&quot;</code> axis. <a
href="https://github.com/apache/echarts/commit/dedc5dc18">dedc5dc18</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Feature] [axis] Enable <code>axisLabel.formatter</code> to receive
its index for working with <code>customValues</code>. <a
href="https://redirect.github.com/apache/echarts/pull/21220">#21220</a>
<a
href="https://redirect.github.com/apache/echarts/pull/21432">#21432</a>
(<a href="https://github.com/szymonpachucki">Szymon Pachucki</a>, <a
href="https://github.com/Ovilia">Ovilia</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Feature] [line] Add <code>triggerEvent</code> option for more
control over mouse event. <a
href="https://redirect.github.com/apache/echarts/pull/21001">#21001</a>
(<a href="https://github.com/sjcobb">Steven Cobb</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Feature] [pie] Add <code>tangential-noflip</code> rotation mode to
keep labels tangential without flipping. <a
href="https://redirect.github.com/apache/echarts/pull/21258">#21258</a>
(<a href="https://github.com/MC-YCY">春秋半夏</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Feature] [gauge] <code>progress.color</code> supports
<code>'auto'</code>. <a
href="https://redirect.github.com/apache/echarts/pull/21224">#21224</a>
(<a href="https://github.com/StNimmerlein">StNimmerlein</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Feature] [radar] Add <code>clockwise</code> option. <a
href="https://redirect.github.com/apache/echarts/pull/21143">#21143</a>
(<a href="https://github.com/daidr">Dai Xuezhou</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Feature] [candlestick] [dataZoom] Add <code>cursor</code> option
for <code>candlestick</code> series and add <code>cursorGrab</code>
option &amp; <code>cursorGrabbing</code> for <code>'inside'</code>
dataZoom. <a
href="https://redirect.github.com/apache/echarts/pull/21558">#21558</a>
(<a href="https://github.com/diysimon">zuming</a>, <a
href="https://github.com/Ovilia">Ovilia</a>, <a
href="https://github.com/100pah">100pah</a>)</li>
<li>[Feature] [scatter] [effectScatter] [geo] Enable <code>clip</code>
option on
<code>&quot;scatter&quot;</code>/<code>&quot;effectScatter&quot;</code>
on <code>geo</code>. <a
href="https://github.com/apache/echarts/commit/417592289">417592289</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Feature] [visualMap] Add <code>seriesTargets</code> option for
multiple series-dimension mappings. <a
href="https://redirect.github.com/apache/echarts/pull/20703">#20703</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Feature] [matrix] Support <code>matrix.x/y.length</code> for
conveniently creating a headless matrix without composing an array. <a
href="https://redirect.github.com/apache/echarts/pull/21191">#21191</a>
(<a href="https://github.com/100pah">100pah</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Feature] [matrix] Add <code>triggerEvent</code> option to support
triggering event on matrix cells. <a
href="https://redirect.github.com/apache/echarts/pull/21390">#21390</a>
(<a href="https://github.com/natsuokawai">Natsuo Kawai</a>, <a
href="https://github.com/100pah">100pah</a>)</li>
<li>[Feature] [i18n] add Latvian(LV) translation. <a
href="https://redirect.github.com/apache/echarts/pull/21546">#21546</a>
(<a href="https://github.com/EPoikans">EPoikans</a>)</li>
<li>[Fix] [axis] Change and clarify the rounding error and
auto-precision utils and solutions. <a
href="https://github.com/apache/echarts/commit/479dcd454">479dcd454</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [axis] Fix chart does not work when using
<code>customValues</code> with <code>formatter</code> in time axis
(<code>axis.type: 'time'</code>) label. <a
href="https://redirect.github.com/apache/echarts/pull/21352">#21352</a>
(<a href="https://github.com/Srajan-Sanjay-Saxena">Srajan Sanjay
Saxena</a>, <a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [axis] Fix and clarify <code>alignTick</code> strategy, and
fix <code>LogScale</code> precision. <a
href="https://github.com/apache/echarts/commit/a6ab2458f">a6ab2458f</a>
<a
href="https://github.com/apache/echarts/commit/ffcc636fb">ffcc636fb</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [axis] Fix duplicate ticks when using time axis
(<code>axis.type: 'time'</code>) or <code>customValues</code>, which
causes jitter of <code>splitArea</code>; fix the
<code>showMin/MaxLabel</code> handling of a category axis
(<code>axis.type: 'category'</code>); enable a uniform
<code>bandWidth</code> calculation in numeric axis (<code>axis.type:
'value' | 'time' | 'log'</code>). <a
href="https://github.com/apache/echarts/commit/8de2b64fa">8de2b64fa</a>
<a
href="https://github.com/apache/echarts/commit/15af0db02">15af0db02</a>
<a
href="https://github.com/apache/echarts/commit/8ddaa5c69">8ddaa5c69</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [axis] Fix time axis (<code>axis.type: 'time'</code>) bug when
value scale is in millisecond. <a
href="https://github.com/apache/echarts/commit/40b77b464">40b77b464</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [bar] Fix wrong label position when bar series has a 0
width/height. <a
href="https://redirect.github.com/apache/echarts/pull/21218">#21218</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [scatter] Fix jitter layout does not support progressive
rendering and cause chart to be frozen and potential NPE. <a
href="https://redirect.github.com/apache/echarts/pull/21436">#21436</a>
(<a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [lines] Fix effect symbol flip on unidirectional loop end when
<code>roundTrip</code> is not enabled. <a
href="https://redirect.github.com/apache/echarts/pull/21320">#21320</a>
(<a href="https://github.com/mynk2611">Mayank Mehta</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [candlestick] Fix candlestick render error with
<code>series.encode</code> on horizontal layout. <a
href="https://redirect.github.com/apache/echarts/pull/21325">#21325</a>
(<a href="https://github.com/PPRAMANIK62">Purbayan Pramanik</a>, <a
href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [parallel] Fix incorrect axis extent when any subsequent
series has a larger value than the first. <a
href="https://redirect.github.com/apache/echarts/pull/21387">#21387</a>
(<a href="https://github.com/jackhickson">jackhickson</a>, <a
href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [pie] Support axes extent union pie center automatically when
pie is laid out on Cartesian (<code>grid</code> component). <a
href="https://github.com/apache/echarts/commit/18a23a875">18a23a875</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [treemap] Fix treemap can not be zoomed out after a zoom-in
when <code>scaleLimit</code> is specified <a
href="https://redirect.github.com/apache/echarts/pull/21427">#21427</a>
(<a href="https://github.com/liuyizhou">TateLiu</a>, <a
href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [lines] Fix potential <code>tooltip</code> XSS vulnerability
in lines series (<code>series.type: 'lines'</code>). <a
href="https://redirect.github.com/apache/echarts/pull/21608">#21608</a>
(<a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [map] [geo] Fix the failed synchronization and visual
artifacts on geo roaming and animation. <a
href="https://github.com/apache/echarts/commit/417592289">417592289</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [tooltip] Fix <code>tooltip</code> content does not refresh
when changing tooltip trigger from <code>'axis'</code> to
<code>'item'</code>. <a
href="https://redirect.github.com/apache/echarts/pull/20710">#20710</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [tooltip] <code>valueFormatter</code> callback param
<code>dataIndex</code> should be <code>rawDataIndex</code> rather than
<code>dataZoom</code> filtered <code>dataIndex</code>. <a
href="https://redirect.github.com/apache/echarts/pull/21479">#21479</a>
(<a href="https://github.com/100pah">100pah</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [axisPointer] Fix <code>axisPointer</code> shadow and enable
clipping - it is previously only applicable to
<code>&quot;category&quot;</code> axis, but is buggy in numeric axis
with <code>&quot;bar&quot;</code> series. <a
href="https://github.com/apache/echarts/commit/8de2b64fa">8de2b64fa</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [axisPointer] Fix visual artifacts caused by failed
<code>axisPointer</code> restoration. <a
href="https://github.com/apache/echarts/commit/56a32c0bb">56a32c0bb</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [hoverLayer] Fix visual artifacts arisen on hover layer. <a
href="https://redirect.github.com/ecomfe/zrender/pull/1151">zrender#1151</a>
<a
href="https://github.com/apache/echarts/commit/933585126">933585126</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [marker] Fix <code>marker</code> fails to render with
<code>dataset</code> and <code>encode</code>. <a
href="https://redirect.github.com/apache/echarts/pull/21439">#21439</a>
(<a href="https://github.com/plainheart">plainheart</a>, <a
href="https://github.com/100pah">100pah</a>).</li>
<li>[Fix] [dataZoom] Fix wrong position of the <code>dataZoom</code>
when the <code>series</code> has only one data point. <a
href="https://redirect.github.com/apache/echarts/pull/21196">#21196</a>
(<a href="https://github.com/alesmit">alesmit</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [dataZoom] Fix <code>dataZoom</code> bug that data info
disappears when dragging released; fix <code>dataZoom</code> dragging
cursor style. <a
href="https://github.com/apache/echarts/commit/64305a4b8">64305a4b8</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [dataZoom] Apply a better auto-precision method; fix
unexpected behaviors when <code>dataZoom</code> controls axes with
<code>alignTicks: true</code>. <a
href="https://github.com/apache/echarts/commit/d168bf237">d168bf237</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [dataZoom] Fix <code>AxisProxy</code> can not be cleared when
<code>dataZoom</code> option changed; fix related <code>onZero</code>
behaviors. <a
href="https://github.com/apache/echarts/commit/52ceb924a">52ceb924a</a>
<a
href="https://github.com/apache/echarts/commit/2e82d33c3">2e82d33c3</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [areaStyle] Fix <code>areaStyle</code> render error when
dimension name is empty string. <a
href="https://redirect.github.com/apache/echarts/pull/21219">#21219</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [sunburst] Fix root node label may not be centered. <a
href="https://redirect.github.com/apache/echarts/pull/21306">#21306</a>
(<a href="https://github.com/akashsonune">Akash Sonune</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [matrix] Fix matrix label formatter does not work. <a
href="https://redirect.github.com/apache/echarts/pull/21410">#21410</a>
(<a href="https://github.com/Justin-ZS">Justin-ZS</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [toolbox] Fix <code>emphasis</code> color is the same as the
default color. <a
href="https://redirect.github.com/apache/echarts/pull/21384">#21384</a>
(<a href="https://github.com/Ovilia">Ovilia</a>) <a
href="https://github.com/apache/echarts/commit/b094f987d">b094f987d</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [toolbox] Fix the <code>dataView</code> component does not fit
the dark mode. <a
href="https://redirect.github.com/apache/echarts/pull/21176">#21176</a>
(<a href="https://github.com/notthistrain">notthistrain</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
<li>[Fix] [progressive] Fix progressive rendering issues. <a
href="https://github.com/apache/echarts/commit/91a60fc76">91a60fc76</a>
(<a href="https://github.com/100pah">100pah</a>)</li>
<li>[Fix] [labelLine] Fix <code>labelLine.smooth</code> can not be
reset. <a
href="https://redirect.github.com/apache/echarts/pull/21425">#21425</a>
(<a href="https://github.com/fanwww">fanwww</a>, <a
href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [graphic] Fix stroke corner gap due to not closing path in
<code>roundRect</code> helper. <a
href="https://redirect.github.com/ecomfe/zrender/pull/1155">zrender#1155</a>
(<a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [svg] Enhance SVG <code>encodeBase64</code> compatibility to
make it available in more environments like Web Worker/NodeJS/Bun. <a
href="https://redirect.github.com/ecomfe/zrender/pull/1145">zrender#1145</a>
(<a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [core] Mark <code>echarts</code> instance object as
<code>raw</code> in <code>Vue</code>. <a
href="https://redirect.github.com/apache/echarts/pull/21293">#21293</a>
(<a href="https://github.com/plainheart">plainheart</a>)</li>
<li>[Fix] [chord] Add the missing export entry for chord chart. <a
href="https://redirect.github.com/apache/echarts/pull/21197">#21197</a>
(<a href="https://github.com/plainheart">plainheart</a>, <a
href="https://github.com/Ovilia">Ovilia</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/apache/echarts/commit/c5a48f5f97d23e5379720870b8444cd05b50ffb4"><code>c5a48f5</code></a>
Merge pull request <a
href="https://redirect.github.com/apache/echarts/issues/21612">#21612</a>
from apache/release-dev</li>
<li><a
href="https://github.com/apache/echarts/commit/77e5222d15690b539505eb7690b8ff53b52aab9c"><code>77e5222</code></a>
release 6.1.0-rc.2</li>
<li><a
href="https://github.com/apache/echarts/commit/21f17bec20d42623edcd66f91cf2344d2bced6b1"><code>21f17be</code></a>
fixRegression(map,geo): Resolve circular dependencies introduced by this
vers...</li>
<li><a
href="https://github.com/apache/echarts/commit/830e8b6ec780ff24d59577c69e3bbf69f1df315e"><code>830e8b6</code></a>
chore: Supplement package.json (for module cjs declaration) to source
release.</li>
<li><a
href="https://github.com/apache/echarts/commit/ed0e2103071744cb97887757679336cec1d8dac4"><code>ed0e210</code></a>
chore: Fix <code>addHeader</code> tool and add missing license
headers.</li>
<li><a
href="https://github.com/apache/echarts/commit/cc78ada709b6028371b24f5449ad7a4dda93f992"><code>cc78ada</code></a>
Merge pull request <a
href="https://redirect.github.com/apache/echarts/issues/21611">#21611</a>
from apache/release-dev</li>
<li><a
href="https://github.com/apache/echarts/commit/3f6e0125fdd8a485c59652cdf628144fcea1702f"><code>3f6e012</code></a>
release: Build release.</li>
<li><a
href="https://github.com/apache/echarts/commit/d69405f83fe2be367beb0ff1e08b49380d6485c6"><code>d69405f</code></a>
chore: Add missing headers.</li>
<li><a
href="https://github.com/apache/echarts/commit/6998ed02fcfe39aafcefc47f4fb4822b36b0642d"><code>6998ed0</code></a>
release: Upgrade npm version.</li>
<li><a
href="https://github.com/apache/echarts/commit/8cb374b15ca842e057812715caf73acf17649a5b"><code>8cb374b</code></a>
fix(build): Fix build commands.</li>
<li>Additional commits viewable in <a
href="https://github.com/apache/echarts/compare/5.6.0...6.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `@joakimono/echarts-extension-leaflet` from 1.0.3 to 1.1.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/joakimono/echarts-extension-leaflet/commit/1244a9f545c2668b7c643828094f2d8259a59d6e"><code>1244a9f</code></a>
Merge pull request <a
href="https://redirect.github.com/joakimono/echarts-extension-leaflet/issues/4">#4</a>
from joakimono/feature/echarts-6</li>
<li><a
href="https://github.com/joakimono/echarts-extension-leaflet/commit/4f757e4422867c7568bc22c8030e8a840b546d4b"><code>4f757e4</code></a>
Apply suggestions from code review</li>
<li><a
href="https://github.com/joakimono/echarts-extension-leaflet/commit/012c9f630b748897241879b07bf5b521e8fbdfa6"><code>012c9f6</code></a>
feat: add ECharts 6 support and fix security vulnerabilities</li>
<li>See full diff in <a
href="https://github.com/joakimono/echarts-extension-leaflet/compare/v1.0.3...v1.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `echarts-gl` from 2.0.9 to 2.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ecomfe/echarts-gl/releases">echarts-gl's
releases</a>.</em></p>
<blockquote>
<h2>2.1.0</h2>
<ul>
<li>Fix compatible issues with Apache ECharts 6</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/ecomfe/echarts-gl/commits/2.1.0">compare
view</a></li>
</ul>
</details>
<br />


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: ktx-abhay <abhay.padamani@kiara.tech>
2026-07-20 12:46:43 +00:00
Bhargav c29994ac20 fix: datasources UI fix (#13286) 2026-07-20 11:21:59 +00:00
9063b4c943 fix: add check type picker before builder (#13248)
## What changed

Adds a `CheckTypePicker` component that presents 5 check types (Browser,
HTTP, TCP, TLS, SSH) as action cards before the builder flow. Updates
`OEmptyState` with a `columns` prop and `:filtered` state for contextual
empty messaging. Adds `hideChevron` support to `EmptyStateActionCard`
for inline variants. The empty state in `MonitorTable` now passes
`:filtered` and `columns` to `OEmptyState`.

## Why

Synthetic monitoring needs a type-selection step between the listing
page and the check builder. Previously, the empty state was a static
custom inline block; now it respects active search/filter state via the
`:filtered` convention and uses the same `OEmptyStateActionCard`
component as the type picker.

---------

Co-authored-by: Claude <claude@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-07-20 10:06:46 +00:00
Abhay Padamani be7a44e512 fix: metric page share url issue (#13274)
- share url not working on metric page.
- Stacked chart support on metrics page.
- favorite page uses prefix/suffix/type filters even option is not
provided.
- older no data state
<img width="1916" height="930" alt="image"
src="https://github.com/user-attachments/assets/f44467c4-6a32-4f87-ad04-9c581f037df4"
/>
2026-07-20 08:49:16 +00:00
ktx-mihir 177afb4f3e fix: shared component migration (#13277)
- Share component migration cleanup and OFormTagInput component location
change
2026-07-20 08:44:30 +00:00
IluckySi a888f5c435 fix: stream dropdown shows no data on metrics page (#13268)
fix: stream dropdown shows no data on metrics page

before fix:
<img width="1722" height="1018" alt="image"
src="https://github.com/user-attachments/assets/66c99bcf-55b5-4e06-9fc9-22ea58c8c0a4"
/>

after fix:
<img width="2194" height="1234" alt="image"
src="https://github.com/user-attachments/assets/cc1987f6-5b88-4976-8b9a-0c5e988cb61c"
/>
2026-07-20 07:33:35 +00:00
Shrinath RaoandClaude Opus 4.8 15e1390d69 fix: clarify delete-organization description (#13273)
## What

Rewrites the Danger Zone **delete-organization** description
(`deleteOrganizationDescription`) for clearer English, and syncs the
same reword across **all 15 locales**.

**English before:**
> Schedules {name} for deletion. It becomes inaccessible to everyone —
including you — immediately, then is permanently erased once the grace
period ends. Restoring it before then requires contacting support.

**English after:**
> Everyone, including you, loses access to {name} immediately. During
the grace period only OpenObserve support can restore it; after that,
all data is permanently erased.

## Why

The old copy read like a log line ("Schedules {name} for deletion"),
leaned on an em-dash aside, and used the vague back-pointer "before
then". The new copy leads with the consequence, uses one idea per
clause, and drops the em dashes.

It also stays faithful to the actual backend behavior:

| Claim | Backing code |
|---|---|
| everyone (incl. you) loses access immediately |
`blocked_orgs_middleware` returns 403 the instant status →
`pending_deletion` (`org_blocking.rs`) |
| only OpenObserve support can restore during grace | `resurrect_org` is
`_meta`/root-only (`org_cleanup.rs`) |
| permanently erased after grace period | `promote_expired` enqueues
cleanup once the window elapses (`org_cleanup.rs`) |

The dialog is cloud-only (`canDeleteOrg` gates on `config.isCloud`), so
the grace-period wording always applies — no OSS/no-grace branch needed.

## Translations

Vue i18n serves each locale's own static string — there is no runtime
auto-translation — so the 14 non-English locales carried genuine
translations of the *old* phrasing and had to be updated by hand. Each
was re-translated in its existing voice and formality (Sie / usted / u /
вы / etc.), leading with the consequence and keeping the `{name}`
placeholder intact.

## Scope

One string per file across all 15 locale JSONs (14 insertions/deletions
+ English). No logic change. All files validated as parseable JSON.

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 06:48:50 +00:00
Prabhat Sharma eaba77fa34 fix(i18n): DeepSeek translation pipeline, BCP-47/en-US locales, +ru/pl/vi, full backfill (#13263)
## Summary

Replaces the AWS Translate i18n pipeline with a DeepSeek (LLM) backend,
standardizes locale files to BCP-47 naming with an `en-US` base, adds
new languages, and backfills **every locale to 100%**.

## What changed

### Translation engine (DeepSeek)
- Swap AWS Translate → DeepSeek via its OpenAI-compatible API
(`scripts/translations/`). Auth via the `DEEPSEEK_API_KEY` secret;
per-request 60s timeout.
- **Batched** translation (50/call) with **per-string validation**:
interpolation placeholders (`{count}`, `%s`, `@:key`), vue-i18n
**pluralization pipes** (`{n} Day \| {n} Days`), and literal escapes
(`{'@'}`, `{'{'}`, `{'\|'}`) are preserved or the string is rejected and
retried.
- Robust recovery: index-aligned batches, split-on-mismatch to isolate a
single bad string, temperature-perturbed retries, and rejection of
empty/whitespace output (never blanks a label). Removed the old
`TRANSLATION_MAX_KEYS` safety cap.

### Locale naming + base language
- All 15 locale files renamed to **BCP-47 hyphen** form (`en-US.json`,
`zh-CN.json`, `zh-TW.json`, `fr-FR.json`, …) — matching
`navigator.language` / `Intl` / HTML `lang`.
- **English base switched `en-gb` → `en-us`** (app code,
`fallbackLocale`, BCP-47 map, selector, defaults). British-Pound
currency and date-formatting `en-GB` usages left untouched. Existing
`en-gb` cookies fall back cleanly to English — no migration needed.

### New languages
- **Russian (`ru`), Polish (`pl`), Vietnamese (`vi`)** — fully generated
and wired into `localeFileMap`, `APP_LOCALE_TO_BCP47`, and the language
selector.
- **Traditional Chinese (`zh-TW`)** now maintained by the translator
alongside Simplified (`zh-CN`).
- RTL languages (`ar`, `fa`) intentionally **deferred** until the app
has `dir="rtl"` support.

### Full backfill (one-time)
- Every pre-existing locale filled from ~5.9k up to the full **8,269
keys** (~26.9k strings). `.translation_state.json` rebuilt complete, so
future runs are incremental.

### Nav i18n bug fix
- The **Dashboards** and **Data** nav group labels were hardcoded
English (bypassing i18n) and stayed English in every locale. Now
resolved via `t()` (`menu.dashboard`, new `menu.data`), localized and
re-resolving on language change.

## Verification
- Full web unit suite: **39,035 passed / 414 skipped / 0 failed** (1,167
files).
- `type-check` clean (0 TS errors).
- Locale registry sync spec green; all 15 files = 8,269 leaves.
- Translation engine verified live against `deepseek-v4-flash`.

## Notes
- Since all locales are now 100%, the post-merge `update-translations`
workflow will find nothing pending (no follow-up translation PR).
- `ar`/`fa` to be added with RTL support in a follow-up.
2026-07-19 05:29:01 +00:00
Prabhat Sharma 21cd5ca977 fix: standardize service account credential terminology in web UI (#13255)
## What

Cleans up the wording and i18n coverage around **service accounts** in
the web UI so the credential is consistently called a **token**, and
fixes a mislabeled toast.

### Changes
- **Standardized credential wording** — `en.json` service-account labels
drifted between "Service Token", "Service Account Token", and "Token".
Unified on **"Token"** (kept "Service Account Token" only as the
standalone reveal-dialog title).
- **Localized hardcoded strings** — moved all `ServiceAccountsList.vue`
toasts (create / update / delete / rotate / loading / copy /
bulk-delete) into a new `serviceAccounts.toast.*` namespace; localized
the tab labels in `EditRole.vue` / `EditGroup.vue` and the search
placeholder in `GroupServiceAccounts.vue` (added `iam.permissions`).
- **Fixed a mislabeled toast** — the org-passcode flow in
`Ingestion.vue` showed `"API Key not found."`; it's the org **passcode**
(sibling button is "Update Passcode"), so it now reads `"Passcode not
found."` (spec updated to match).

### Notes
- `en.json` is updated as the source of truth; the other locale files
sync via the normal translation flow.
- Dead `apikeyLabel` / `copyapikey` / `deleteAPIKeyMessage` keys (no
component references) were left untouched — out of scope for this
change.

## Testing
- `vitest` unit suite for the touched files passes (134/134, incl.
updated `Ingestion.spec.ts` assertions).

## Related
- Docs counterpart (new Service Accounts page + credential comparison):
openobserve/openobserve-docs PR.
2026-07-19 00:57:11 +00:00
Prabhat Sharma 7123cb2384 fix(web): migrate hardcoded UI strings to i18n; RUM & MCP UX fixes (#13261)
## Summary

Three pieces of frontend work from one session, all verified green.

### 1. i18n migration (the bulk)
Replaced **~1,250 hardcoded user-facing strings** across **157
components** with `vue-i18n` `t()` calls and added **1,373 English
keys** to `web/src/locales/languages/en.json`. Other languages are
populated by CI.

Coverage by area: dashboards (36), traces (26), logs (24), settings
(23), IAM (21), metrics/promql (10), RUM error tracking (8).

- Parameterized messages use named interpolation (`t('key', { n })` →
`"Deleted {n} item(s)"`).
- Keys are namespaced by area + component to avoid collisions.
- Deliberately **not** translated: copy/paste code/config snippets,
query-syntax examples (Syntax Guides), technical enum tokens (OTEL
statuses, metric types), config-default fallbacks, and download
filenames.

### 2. RUM Error Tracking UX
- **Auto-size the Issue column** so Trend / Events / Users /
First-Last-seen / Status stay visible at any screen width; long messages
and file paths truncate with tooltips instead of pushing columns
off-screen.
- **Removed the redundant refresh button** (it called the same
`runQuery` as Run query); folded its loading state and keyboard shortcut
into the Run query button.

### 3. MCP Server (IAM)
- Added **Codex** to the supported MCP clients (TOML config for
`~/.codex/config.toml`).
- Added **one-click "Add to …" install buttons** for **Cursor**, **VS
Code**, and **Claude Desktop** via editor deep links (respecting the
selected OAuth / access-token auth mode).

### Tests
Components that newly call `useI18n()` broke specs that mounted them
without an i18n provider (or with an inline message subset / a
key-returning mock). Fixed **33 spec files** by providing the real app
i18n — via `config.global` plugin, a full-locale `createI18n`, or a
key-resolving `vue-i18n` mock — **without weakening any assertion or
deleting any test**.

## Verification
- ✅ Full frontend unit suite: **39,007 passed**, 414 skipped, **0
failed** (`vitest run`).
- ✅ Type-check clean: **0 errors** (`vue-tsc`).
- ✅ `en.json` valid, canonical, and every `t()` key referenced by
changed files resolves (only 3 pre-existing dangling keys remain,
unrelated to this change).

## Notes
- 3 **pre-existing** broken key refs surfaced during validation but
predate this work and were left alone: `common.loading` (AiToolsets),
`search.vrlOnlyForTable` (SearchBar),
`settings.correlation.identityConfigNoSets` (ServiceIdentitySetup).
- An unrelated pre-existing local change to `OIcon.icons.ts` was
intentionally excluded from this PR.
2026-07-18 23:15:05 +00:00
Ashish Kolhe 84f8cbf13c fix: Agent Graph — agents, tools & models as first-class service-graph nodes (#13260)
## What

Adds an **Agent Graph** to AI Observability that renders AI agents,
tools, and models as first-class nodes in the service graph — unified
with the real downstream services an agent talks to. It answers "what
does my agent actually interact with?" (tools, models, services,
datastores) instead of showing GenAI spans in isolation.

## Why

LLM Insights shows plenty of per-call data but no picture of the flow —
where a request starts, where the agent sits, and everything it fans out
to. This surfaces the full agent topology, works across every framework
OpenObserve documents, and correctly attributes tools/models to the
owning agent even when the instrumentation nests them several spans
deep.

## Backend (`src/core`)

- **Agent/tool/model edge families in the service-graph processor**
(`traces/service_graph/processor.rs`): derives `service → agent`, `agent
→ model`, `agent → tool` edges from the canonical `gen_ai_*` columns,
keyed on column presence (open operation-name vocabulary), schema-gated
so streams missing a column don't error.
- **Multi-level agent inheritance.** The owning agent name usually lives
on an *ancestor* span (real Google ADK nests `generate_content(agent) →
chat → execute_tool`), not on the tool/LLM span. The `from` climbs the
parent chain up to `AGENT_INHERIT_DEPTH` (4) levels —
`COALESCE(child.agent, p1…pN, service_name)` + chained ancestor `LEFT
JOIN`s — taking the nearest ancestor with an agent name. Extracted
`build_agent_or_service` / `build_ancestor_joins` as pure, unit-tested
helpers. (Recursive CTE was tried first but panics in the search engine;
a bounded chained join is supported and shallow-tree-cheap.)
- **Extractor coverage** for the framework conventions OpenObserve
documents (gen_ai semconv, OpenInference, traceloop, CrewAI, Google ADK,
LangChain, Langfuse): `is_llm_trace` gate now admits
OpenInference/framework agent+tool spans; `extract_tool_name` reads
`tool.name` / `langchain.tool.name` / `crewai.task.tools` / Langfuse
metadata; new attribute constants. All normalize into the canonical
`gen_ai.*` columns at ingest, so the query layer reads one column set
regardless of vendor.

## Frontend (`web/src`)

- **Standalone Agent Graph page** under AI Observability
(`AgentGraphPage.vue`) with Stream/Agent selectors and a DateTime
picker, matching the LLM Insights UX; route + rail item + i18n.
- **Graph rendering** (`convertTraceData.ts`, `ServiceGraph.vue`):
agent/tool/model node kinds, vendor brand logos on model nodes (reusing
the AI-integrations catalog logos), an animated "radar-ping" halo baked
into the agent symbol SVG so it stays centered and pans/zooms with the
node, and a layered-layout depth fix so `service < agent < model/tool`
renders correctly. Agent highlighting is gated to the Agent Graph page
(the Service Graph tab is unchanged).
- **Side-panel caller consistency** (`ServiceGraphNodeSidePanel.vue`):
the Operations table now resolves a tool/model node's caller with the
*same* ancestor-agent climb the graph edge uses, so the panel and graph
agree (previously the panel showed the host app as the caller).
Refactored the identity-field builder to emit aliased columns directly
(no fragile regex post-processing).
- **Design tokens** (`theme.ts`): added `cssToken(name, fallback)` to
resolve `--color-*` tokens at runtime for chart/SVG contexts (where
`var(--x)` can't be used), and routed the agent-accent + exact-match
health colors through it instead of hardcoded hex.

## Consistency

Service classification is mirrored TS ⇄ Rust; the shared
`classification_cases.json` vector (both copies kept identical) drives
unit tests in both languages.

## Testing

- Rust: multi-level inheritance + edge-attribution unit tests; `cargo
build` clean.
- Frontend: new specs for the graph conversion, layout,
model-vendor-logo, side-panel caller climb, and `cssToken`; full traces
suite green.
- Verified end-to-end on real production traces (SRE agent) and on
synthetic fixtures for CrewAI / OpenAI-Agents / Google ADK /
genai-semconv / LangChain — every framework attributes agent →
model/tool correctly.

## Notes

- Topology is read from the pre-aggregated `_o2_service_graph` stream
(the hourly incremental job), so it scales to large trace volumes — no
per-load raw-trace scan.
- The enterprise `classify_entity` / `build_topology` changes live in
the o2-enterprise repo and are required for the enterprise build.
2026-07-18 19:40:09 +00:00
Prabhat Sharma d9d128d61c fix: Serviceaccount1 (#13257)
Improve UI for creating service accounts.
Improve UI for accessing MCP server.
2026-07-18 09:06:26 +00:00
Ashish Kolhe 262b346af1 chore: make "switch back to Logs" discoverable in stream explorer (#13256)
## Problem

Opening the Streams list → filtering to a non-logs tab
(Metrics/Traces/Enrichment) → clicking the explore icon on a row lands
the user in the **Logs explorer** with that stream type. The only way
back to Logs was an icon-only ghost button in the sidebar that:

- rendered the **current** stream type's icon (e.g. bar-chart for
metrics), so it read as a passive *label*, not an action;
- exposed its meaning only via a tooltip;
- did the *opposite* of the icon shown (icon = where you are, click =
leave).

Meanwhile the prominent, labeled **Reset** button doesn't reset stream
type, so it's a decoy. Result: users get stranded in the Logs explorer
showing a non-logs stream (this was hit during DevRel testing).

## Fix

Replace the ambiguous badge with a clear **`swap-horiz` (⇄) switcher
icon** button, separated from the stream picker by a gap, with an
action-first **"Switch back to Logs"** tooltip.

**Behavior is unchanged** — the control is still gated on `streamType
!== 'logs'`, and one click still calls `onStreamTypeChange('logs')`. No
routing, service, or store changes.

### Before / After

| | |
|---|---|
| Before | ambiguous type-icon badge, tooltip-only meaning, cramped |
| After | `⇄` switcher icon, gap before the picker, action-first tooltip
|

## Housekeeping in the same file
- Migrated the banned legacy `--o2-border` token → `border-default`
design token.
- Removed the now-unused `streamTypes` / `streamTypeIcon` /
`streamTypeLabel` helpers.

## Tests
- Added focused unit tests in `IndexList.spec.ts`: control hidden when
type is logs, shown for non-logs, uses the `swap-horiz` icon, and click
still triggers `onStreamTypeChange('logs')`.
- Full `IndexList.spec.ts` suite passes (125 passed).

## Scope
One component (`web/src/plugins/logs/IndexList.vue`) + one i18n key.
Pure OSS frontend — no backend / enterprise gating.
2026-07-18 07:29:47 +00:00
Prabhat Sharma 430de0cdb7 fix: ux improvements (#13254) 2026-07-17 23:27:52 +00:00
Ashish Kolhe 1488a238e3 fix: metrics explorer ux 2 (#13253) 2026-07-17 15:56:35 +00:00
ktx-mihirandktx-vaidehi eaebff9e57 fix: alerts module migration with zod (#13227)
- alert module migration with zod

---------

Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
2026-07-17 13:03:17 +00:00
IluckySiandHengfei Yang 5fbe938653 feat(web): add vmagent option in custom metrics ingestion (#13245)
OpenObserve already supports Prometheus remote write ingestion on the
backend.
vmagent can send metrics successfully to the existing endpoint.
This PR adds vmagent as an explicit custom metrics ingestion option in
the UI.

The test command is as follows:

> ilucky@Mac vmutils-darwin-arm64-v1.147.0 % ./vmagent-prod \
  -promscrape.config=scrape.yml \
  -remoteWrite.tmpDataPath=./vmagent-buffer \
  -remoteWrite.url=http://127.0.0.1:8428/api/v1/write \

-remoteWrite.url=http://localhost:5080/api/default/prometheus/api/v1/write
\
  -remoteWrite.basicAuth.username=root@example.com \
  -remoteWrite.basicAuth.password=o2oi_XUppAyGUwBxTvGnjXcg5ybFnVE4WnjOC

Content of scrape.yml configuration file:

> ilucky@192 vmutils-darwin-arm64-v1.147.0 % cat scrape.yml 
global:
  scrape_interval: 15s
scrape_configs:
    &nbsp;&nbsp;\- job_name: node-exporter
       &nbsp;&nbsp;&nbsp;&nbsp; static_configs:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \- targets: ["127.0.0.1:9100"]

<img width="2940" height="1386" alt="image"
src="https://github.com/user-attachments/assets/c761a2c1-c316-43a9-9745-84a5d9e8d205"
/>
<img width="2940" height="1636" alt="image"
src="https://github.com/user-attachments/assets/91cebcf2-52f6-4d89-8325-6c8331be52c3"
/>
<img width="2918" height="1344" alt="image"
src="https://github.com/user-attachments/assets/cde12e9a-5368-4ce8-a43e-683cef4ac6ac"
/>

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-07-17 11:21:26 +00:00
IluckySiandHengfei Yang bda2e1d9cc fix(web): mistranslation, replace mistranslated '直播' labels with '数据流' (#13247)
Replace all mistranslated "直播" in the project with "数据流", for example:
befor replace:
<img width="1684" height="1218" alt="image"
src="https://github.com/user-attachments/assets/6cadf24e-f31c-41c5-b981-2a2661ba5e23"
/>

after replace:
<img width="2132" height="1184" alt="image"
src="https://github.com/user-attachments/assets/056e13c0-6554-4d17-b0aa-6d52b655ff58"
/>

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2026-07-17 10:27:47 +00:00