You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(dashboard): rename vis → dashboard and add agent-tracing dashboard (#137)
* feat(dashboard): add the agent-tracing dashboard (web UI, CLI, API, packaging)
Introduce `pythinker dashboard` — a local web UI for inspecting agent
sessions: wire events, context messages, state, sub-agents, a dual view,
tool statistics, and usage over time. Served by a FastAPI backend
(`pythinker_code.dashboard`) under `/api/dashboard`, with the React/Vite
frontend bundled at build time (`make build-dashboard`, wired into the
wheel, PyInstaller binaries, and the Linux/Windows installers). Reachable
from the interactive shell via `/reports` (alias `/dashboard`).
Also fixes correctness issues found in review: attach the session auth
header to the import and delete calls; log previously-swallowed
exceptions in the session/statistics APIs and the build script; group
sub-agent events by a stable key; and gate the number-key tab shortcuts
to the in-session view.
* docs(dashboard): document the agent-tracing dashboard
Add the dashboard reference page, wire up navigation and cross-links,
refresh the architecture and configuration docs, and add a CHANGELOG
entry introducing `pythinker dashboard`.
* fix(dashboard): sync lockfile and address review findings
- Regenerate dashboard/package-lock.json to restore the nested @emnapi
deps so the onefile build's `npm ci` succeeds (was failing on every
platform in PR #137 CI).
- Open the browser at localhost for `::` binds, not just `0.0.0.0`, so the
URL stays within the allowed origins (loopback_browser_host helper + test).
- use-theme: fall back to the legacy "vis-theme" key for upgraders.
- Help overlay: move the session-gated 1-5 tab shortcuts out of "Global"
into a "Session Views" group.
- AGENTS.md: drop stale "visualization" wording for the dashboard targets.
- Assert the dashboard missing-assets 503 names the expected static path.
* fix(dashboard): center the Daily Usage chart instead of full-width
The Daily Usage line chart stretched to the full 1400px content width,
leaving the sparse 30-day series looking over-extended. Cap the card at
max-w-3xl and center it (matching loading skeleton) so it stays centered
and readable on wide screens.
* fix(dashboard): resolve CodeRabbit findings and fix lockfile @emnapi sync
- Add -> None return type to SwitchToDashboard.__init__ (ANN204)
- Rename unused args to _args in reports() slash command (ARG001)
- Add IPv6 :: host to allowed_origins in dashboard app
- Add @emnapi/core@1.11.1 and @emnapi/runtime@1.11.1 to dashboard lockfile
The build was failing on all platforms because npm ci could not find
@emnapi/core@1.11.1 and @emnapi/runtime@1.11.1 in the lockfile. These
are needed by @tailwindcss/oxide-wasm32-wasi which pins ^1.10.0 (now
resolved to 1.11.1 on the registry). Added the missing top-level entries.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,8 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
16
16
## Unreleased
17
17
18
+
-**Agent-tracing dashboard.** Added `pythinker dashboard` — a local web UI for inspecting sessions, wire events, context messages, tool statistics, and usage over time. It is also reachable from the interactive shell via the `/reports` slash command (aliased `/dashboard`).
19
+
18
20
## 0.44.0 (2026-06-13)
19
21
20
22
-**Toggle auto-update from the CLI.** Running `/update` now opens a menu — *Check for updates now* (the default, so a bare `/update` + Enter still checks immediately) or *Auto-update on startup* with its current state — so the toggle is discoverable without knowing a subcommand. `/update auto on|off` still sets it directly, and `/update auto` with no value opens an interactive On/Off picker (cursor defaulted to the current setting). The same toggle appears in the interactive `/settings` panel, and `pythinker info` reports the auto-update status. All surfaces show the *effective* state — an external override (`PYTHINKER_CLI_NO_AUTO_UPDATE` or a source checkout) is surfaced as the reason, renders the `/settings` row read-only, and makes `/update auto` report the read-only state rather than popping a no-op picker, so the toggle is never a silent no-op.
0 commit comments