meridian_chat
The conversation / agent-chat renderer of the meridian design language — renders a modality-neutral meridian.ui.v1 Conversation stream (the neutral promotion of botnoc chat.v1) over SSE+POST. Vanilla <m-assistant-panel> web component + React <Conversation>. Private.
| Latest | 0.1.0 |
|---|---|
| Versions | 1 |
| Category | Modules & tooling |
| Maintainers | Matt Marshall |
| Registry | https://registry.tbzl.dev/modules/meridian_chat/ |
| Source | github.com/meridian-ux/meridian-chat |
bazel_dep(name = "meridian_chat", version = "0.1.0")
View source & releases on GitHub ↗
The conversation / agent-chat renderer of the meridian
renderer family. It renders a modality-neutral meridian.ui.v1.Conversation
stream (conversation.proto in meridian-schemas — the neutral promotion of
botnoc’s chat.v1): a turn-based transcript of composable blocks (a
meridian-native block kit) + a transient status, over SSE + POST.
Two renderer tiers, one wire:
| tier | entry | deps | consumer |
|---|---|---|---|
vanilla <m-assistant-panel> | @savvifi/meridian-chat/web + the Bazel //:browser_bundle | none (framework-free, ~11 KB) | botnoc’s static frontend |
React <Conversation> | @savvifi/meridian-chat | react (optional peer) | aion/web + React hosts |
The wire types (src/wire.ts) are structural (the proto3-JSON of
ConversationEvent), so the runtime has no protobuf-es dependency and the
bundle stays tiny; a conformance test feeds real toJson(ConversationEventSchema,…)
frames through the model to keep them aligned to the canonical proto.
Transport
sse-url(default/api/noc-agent/view) — SSE ofConversationEventframes, deduped byseq, blocks upserted byblockId(atoolblock flips running→ok in place).turn-url(default/api/noc-agent/turn) — POST{ message }.
React usage
import { Conversation, CONVERSATION_CSS } from "@savvifi/meridian-chat";
<style>{CONVERSATION_CSS}</style>
<Conversation sseUrl="/api/noc-agent/view" turnUrl="/api/noc-agent/turn" />
Vanilla usage (bundler-free host)
<m-assistant-panel sse-url="/api/noc-agent/view" turn-url="/api/noc-agent/turn"></m-assistant-panel>
<script type="module">
import { registerAssistantPanel, ASSISTANT_PANEL_CSS } from "/meridian/meridian_chat.bundle.js";
document.head.append(Object.assign(document.createElement("style"), { textContent: ASSISTANT_PANEL_CSS }));
registerAssistantPanel();
</script>
The DOM (form.asst-input / input.asst-text) is preserved so a host driving
the composer externally (e.g. botnoc’s voice layer) keeps working; a cleaner
imperative panel.submit(text?) is also provided.
Development
pnpm install
pnpm test # vitest: model + renderers + proto conformance
bazel build //:pkg //:browser_bundleConformance#
1 finding across 1 invariant. 17 contested atoms. See how gating works or the full report.
| repo | extension |
|---|---|
npm | @aspect_rules_js//npm:extensions.bzl |
Contested atoms
Third-party modules where this module resolves a different version than others do. Not a violation of anything this module did — it is the actionable form of a registry-level convergence finding, and the sentence a maintainer can act on.
| Atom | Resolved here | Elsewhere |
|---|---|---|
apple_support | 1.24.2 | 2.2.0 ×1 |
aspect_bazel_lib | 2.22.5 | 2.8.1 ×1 |
aspect_rules_js | 3.1.2 | 2.1.3 ×1 |
bazel_lib | 3.2.2 | 3.0.0 ×12 |
bazel_skylib | 1.8.2 | 1.9.0 ×2 |
gawk | 5.3.2.bcr.3 | 5.3.2.bcr.1 ×12 |
jq.bzl | 0.4.0 | 0.1.0 ×12 |
nlohmann_json | 3.6.1 | 3.12.0.bcr.1 ×1 |
package_metadata | 0.0.2 | 0.0.5 ×3 |
protobuf | 33.4 | 34.0.bcr.1 ×2 |
rules_jvm_external | 6.7 | 6.8 ×4 |
rules_nodejs | 6.7.4 | 6.3.0 ×16.7.3 ×1 |
rules_python | 1.7.0 | 2.0.1 ×1 |
rules_swift | 3.1.2 | 3.6.1 ×1 |
tar.bzl | 0.10.4 | 0.5.1 ×110.6.0 ×1 |
upb | 0.0.0-20220923-a547704 | 0.0.0-20230516-61a97ef ×1 |
yq.bzl | 0.3.4 | 0.1.1 ×12 |
Dependencies#
Depends on
Versions#
1 published version, newest first. Each resolves to an immutable, integrity-checked archive.
| Version | Integrity (sha256) | Source archive |
|---|---|---|
0.1.0 latest | KKwhTNO/5lTLud/v… | tag archive ↗ |