HalfPint Command Center

Enterprise operator console — traces, sessions, inbox, and governance in one secured surface.

Overview

Live SQLite counts and shortcuts for this HalfPint agent process only (not LangGraph or Postgres).

Health at a glance. Chips reflect the running service; stat cards count rows in the local trace database. Use the sidebar for deep inspection.

API base

Use for curl, MCP, or reverse-proxy checks. JWT + cookie accepted on /v1/admin/*.

SQLite path:

Chat embed & design

Tune appearance and embed options, preview the floating widget in real time, copy integration snippets for common stacks, and record where the script is live on your properties. Bookmark this tab (?tab=embed).

Endpoints

The widget loads from your API host. Public pages use credentials: 'omit' unless you add cookies or bearer headers yourself.

Appearance

Theme tokens (optional) — cfg.theme sets CSS variables on the chat panel.

Advanced & identity

Saved presets & Flutter bridge

Presets live in this host’s trace SQLite. Anyone can GET /v1/embed/designer-preset/{id_or_slug} (credentials/Headers stripped). Static /embed/bridge.html loads a preset and mounts the widget — point a WebView at that URL (no inline HTML).

Reverse-proxy: if this HTML is not served from the API host, add &api_base=https%3A%2F%2Fyour-api to the bridge URL so it can fetch the preset JSON.

Where the widget is live

Track marketing sites, apps, or environments (stored in this browser). Use your runbooks — there is no server-side domain registry yet.

Live preview

Live preview reloads on edit (short debounce). The panel opens automatically so you can see chrome and chips. Uses credentials: 'omit' — same as a typical public embed. (Preview runs in an iframe without sandbox flags so the browser does not warn about allow-scripts + allow-same-origin; only trusted admins can open this page.)

Embed code

Plain HTML plus Vue 3, React, Laravel Blade, and Flutter (web / WebView) patterns. Paste your real userId / businessId from your auth layer.


          

Traces

Agent turns. Filters stack with AND. Bookmark this tab.

Browse traces. First page loads when you open this tab. Use pagination for older rows. Click a row for full JSON.

Conversations

Messages load as a chat transcript (like the main chat UI). Newest page of rows shown; use pagination for older turns. Bookmark. Clearing a session removes all stored messages for that id.

Transcript view. Exact match on ids and role except “content contains”. Newest page first; scroll to read chronologically.
Destructive

Feedback inbox

Thumbs and notes from chat. Select a row to view the thread and reply as staff (users see replies in the embed).

Review + reply. Use q for broad search. The right panel loads the conversation thread; staff replies are visible to the end user in the widget.

User improvements

Ideas and suggestions submitted from the embed. Staff can reply in-thread; status moves to answered when you send a reply.

Inbox. Filter by business, user, or status. Select a row to message the user.

Tool lessons

Self-improvement snippets learned from tool failures and repairs.

Rows appear only when a tool fails and the same chat turn retries that tool with different arguments and succeeds. The chat ↺ Retry (new request) does not create a lesson. The request needs a business_id (Biz ID in chat). On Overview, the Tool lessons count is the same SQLite file as this table—if it shows 0, nothing has been persisted yet (or this server uses a fresh/ephemeral trace DB).

Exact vs fuzzy. tool_name and agent_name are exact filters. Use q to search lesson text (LIKE).

Agent rules

Configured rule rows (global or business-scoped) that steer tool and reply behavior.

Substring fields. Agent and tool filters use LIKE. q matches rule text content.

Uploads

Chat file upload registry (local temp paths and S3 references).

Search uploads. q matches file_id, filename, public URL, or S3 key. Toggle deleted to include soft-deleted registry rows.

GPT image jobs

Queued Beergram GPT generations: business, prompt, pipeline status, and planned MCP attach tools (beergram_mcp_domain). Row click opens full detail JSON.

Statuses. pending = worker queue · running = POST /generate · await_callback = webhook expected · succeeded / failed = finished. Operator-cancelled rows show phase “Cancelled by operator”. Cancel stops queued/in-flight jobs. Retry requeues (disabled while already pending).

Entity tags

Attach labels to traces (or other entities) for triage and bookkeeping.

List vs create. Use filters to find tags. entity_type and entity_id narrow the list; tag (exact) matches one label; q searches tag text, ids, and types.
New tag

Audit log

Immutable log of superadmin mutations and sensitive API actions.

Filter semantics. action is exact match. actor and q use substring search on actor string and JSON payload.

Reports

Rollups over trace activity for the selected window. Export the full trace table as CSV for spreadsheets or BI.

Summaries are computed on demand. Pick a day window (1–90), load the summary, then download CSV if you need raw rows offline.
Download traces CSV