Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ slow-timeout = { period = "10s", terminate-after = 36 }
final-status-level = "slow"

[[profile.ci.overrides]]
filter = 'binary_id(tracedecay::mcp_handler_test)'
filter = 'all()'
platform = { host = 'cfg(windows)' }
retries = 2
flaky-result = 'pass'
1 change: 1 addition & 0 deletions dashboard/build.shared.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ export async function buildPlugin(
export async function buildHolographicPlugin() {
await buildPlugin("holographic", "holographic-memory", {
tailwind: true,
primitives: true,
});
}

Expand Down
27 changes: 17 additions & 10 deletions dashboard/graph/src/OverviewPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,23 @@ import {
} from "./types";
import type { GraphNode, GraphOverview } from "./types";

// Language → design token (with the historical dark hex as fallback), mirroring
// KIND_FAMILY_COLORS in ./types so the bar swatches re-theme with the shell's
// light palette instead of pinning dark-only hex. Each language rides a
// matching --ts-* accent token (javascript shares --ts-amber by hue family).
const LANGUAGE_COLORS: Record<string, string> = {
rust: "#f7c76a",
typescript: "#7aa7ff",
javascript: "#ffd97a",
python: "#67e8a9",
markdown: "#a8c8c0",
json: "#6f9189",
toml: "#6f9189",
shell: "#75f4d2",
web: "#ff7ab6",
rust: "var(--ts-amber, #f7c76a)",
typescript: "var(--ts-blue, #7aa7ff)",
// Reuse the warm amber token (same hue family as the historical JS yellow)
// with the original dark hex as fallback, so the swatch re-themes in light
// mode instead of pinning a dark-only literal. See ./types KIND_FAMILY_COLORS.
javascript: "var(--ts-amber, #ffd97a)",
python: "var(--ts-green, #67e8a9)",
markdown: "var(--ts-text-2, #a8c8c0)",
json: "var(--ts-text-3, #6f9189)",
toml: "var(--ts-text-3, #6f9189)",
shell: "var(--ts-cyan, #75f4d2)",
web: "var(--ts-pink, #ff7ab6)",
};

export default function OverviewPanel({
Expand Down Expand Up @@ -84,7 +91,7 @@ export default function OverviewPanel({
keyName="label"
rows={overview.files_by_language.slice(0, 9).map((row) => ({
label: row.language,
color: LANGUAGE_COLORS[row.language] || "#6f9189",
color: LANGUAGE_COLORS[row.language] || "var(--ts-text-3, #6f9189)",
value: fmt(row.count),
}))}
onPick={(row) => onFilterLanguage(String(row.label))}
Expand Down
20 changes: 20 additions & 0 deletions dashboard/hermes-wrapper/plugin_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
``/lcm/*`` -> upstream ``/api/plugins/hermes-lcm/*``,
``/graph/*`` -> upstream ``/api/plugins/graph/*``, and
``/savings/*`` -> upstream ``/api/plugins/savings/*``,
``/analytics/*`` -> upstream ``/api/plugins/analytics/*``,
``/automation/*`` -> upstream ``/api/automation/*``,
- exposes upstream ``/api/capabilities`` at ``/capabilities`` so the UI (and
future Hermes-specific extensions) can feature-detect the backend.

Expand Down Expand Up @@ -586,6 +588,24 @@ async def post_savings(path: str, request: Request) -> JSONResponse:
)


@router.get("/analytics/{path:path}")
def get_analytics(path: str, request: Request) -> JSONResponse:
return _proxy("GET", f"/api/plugins/analytics/{path}", request, None)


@router.get("/automation/{path:path}")
def get_automation(path: str, request: Request) -> JSONResponse:
return _proxy("GET", f"/api/automation/{path}", request, None)


@router.post("/automation/{path:path}")
async def post_automation(path: str, request: Request) -> JSONResponse:
body = await request.body()
return await run_in_threadpool(
_proxy, "POST", f"/api/automation/{path}", request, body
)


# ---------------------------------------------------------------------------
# LLM curation (Hermes-only layer)
#
Expand Down
5 changes: 4 additions & 1 deletion dashboard/hermes-wrapper/src/entry.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
* 1. evaluates each child bundle against a window Proxy whose
* `__HERMES_PLUGIN_SDK__.fetchJSON` rewrites the child's API base
* (`/api/plugins/holographic`, `/api/plugins/hermes-lcm`,
* `/api/plugins/graph`, `/api/plugins/savings`) onto this plugin's API
* `/api/plugins/graph`, `/api/plugins/savings`, `/api/automation`,
* `/api/plugins/analytics`) onto this plugin's API
* prefix (`/api/plugins/tracedecay/...`), which plugin_api.py
* reverse-proxies to a local `tracedecay dashboard` server;
* 2. captures the components the child bundles register (without touching
Expand All @@ -36,6 +37,8 @@
["/api/plugins/hermes-lcm", "/api/plugins/" + PLUGIN + "/lcm"],
["/api/plugins/graph", "/api/plugins/" + PLUGIN + "/graph"],
["/api/plugins/savings", "/api/plugins/" + PLUGIN + "/savings"],
["/api/automation", "/api/plugins/" + PLUGIN + "/automation"],
["/api/plugins/analytics", "/api/plugins/" + PLUGIN + "/analytics"],
];

function rewriteUrl(url) {
Expand Down
4 changes: 4 additions & 0 deletions dashboard/hermes-wrapper/src/wrapper.css
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@
--color-muted: rgba(117, 244, 210, 0.1);
--color-muted-foreground: var(--ts-text-3);
--color-secondary: rgba(122, 167, 255, 0.1);
/* Gotcha: --color-secondary is a 10%-opacity blue TINT, not a readable text
color, so the Tailwind `text-secondary` utility is near-invisible as
foreground. Use `text-text-secondary` (maps to --ts-text-2) for copy;
reserve `bg-secondary`/`border-secondary` for surfaces. */
--color-destructive: var(--ts-red);
--color-warning: var(--ts-amber);
--color-success: var(--ts-green);
Expand Down
Loading
Loading