@elizaos/plugin-trajectory-logger 2.0.3-beta.6 → 2.0.3-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +88 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +68 -0
- package/dist/api-client.js.map +1 -0
- package/dist/components/PhaseChip.d.ts +13 -0
- package/dist/components/PhaseChip.d.ts.map +1 -0
- package/dist/components/PhaseChip.js +100 -0
- package/dist/components/PhaseChip.js.map +1 -0
- package/dist/components/PhaseDrilldown.d.ts +5 -0
- package/dist/components/PhaseDrilldown.d.ts.map +1 -0
- package/dist/components/PhaseDrilldown.js +118 -0
- package/dist/components/PhaseDrilldown.js.map +1 -0
- package/dist/components/TrajectoryLoggerAppView.d.ts +14 -0
- package/dist/components/TrajectoryLoggerAppView.d.ts.map +1 -0
- package/dist/components/TrajectoryLoggerAppView.js +184 -0
- package/dist/components/TrajectoryLoggerAppView.js.map +1 -0
- package/dist/components/TrajectoryLoggerSpatialView.d.ts +53 -0
- package/dist/components/TrajectoryLoggerSpatialView.d.ts.map +1 -0
- package/dist/components/TrajectoryLoggerSpatialView.js +293 -0
- package/dist/components/TrajectoryLoggerSpatialView.js.map +1 -0
- package/dist/components/TrajectoryLoggerView.d.ts +23 -0
- package/dist/components/TrajectoryLoggerView.d.ts.map +1 -0
- package/dist/components/TrajectoryLoggerView.interact.d.ts +2 -0
- package/dist/components/TrajectoryLoggerView.interact.d.ts.map +1 -0
- package/dist/components/TrajectoryLoggerView.interact.js +35 -0
- package/dist/components/TrajectoryLoggerView.interact.js.map +1 -0
- package/dist/components/TrajectoryLoggerView.js +64 -0
- package/dist/components/TrajectoryLoggerView.js.map +1 -0
- package/dist/components/trajectory-logger-app.d.ts +8 -0
- package/dist/components/trajectory-logger-app.d.ts.map +1 -0
- package/dist/components/trajectory-logger-app.js +24 -0
- package/dist/components/trajectory-logger-app.js.map +1 -0
- package/dist/components/trajectory-logger-view-bundle.d.ts +3 -0
- package/dist/components/trajectory-logger-view-bundle.d.ts.map +1 -0
- package/dist/components/trajectory-logger-view-bundle.js +7 -0
- package/dist/components/trajectory-logger-view-bundle.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/phases.d.ts +21 -0
- package/dist/phases.d.ts.map +1 -0
- package/dist/phases.js +154 -0
- package/dist/phases.js.map +1 -0
- package/dist/plugin.d.ts +14 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +51 -0
- package/dist/plugin.js.map +1 -0
- package/dist/register-terminal-view.d.ts +16 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +21 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/register.d.ts +7 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +18 -0
- package/dist/register.js.map +1 -0
- package/dist/ui.d.ts +4 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +15 -0
- package/dist/ui.js.map +1 -0
- package/dist/usePollingTrajectories.d.ts +18 -0
- package/dist/usePollingTrajectories.d.ts.map +1 -0
- package/dist/usePollingTrajectories.js +87 -0
- package/dist/usePollingTrajectories.js.map +1 -0
- package/dist/views/bundle.js +646 -0
- package/dist/views/bundle.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","names":[],"sources":["../../src/api-client.ts","../../src/components/TrajectoryLoggerView.interact.ts","../../src/phases.ts","../../src/usePollingTrajectories.ts","../../src/components/TrajectoryLoggerSpatialView.tsx","../../src/components/TrajectoryLoggerView.tsx"],"sourcesContent":["// Wire shapes for /api/trajectories[?/...] (served by @elizaos/plugin-training).\n// Only the fields the widget reads are typed — extra fields the route returns\n// are tolerated, just untyped.\n\nexport interface TrajectoryListItem {\n id: string;\n status: \"active\" | \"completed\" | \"error\";\n llmCallCount: number;\n}\n\nexport interface TrajectoryListResult {\n trajectories: TrajectoryListItem[];\n total: number;\n}\n\nexport interface UILlmCall {\n id: string;\n model: string;\n response: string;\n purpose: string;\n actionType: string;\n stepType: string;\n}\n\nexport interface UIProviderAccess {\n id: string;\n providerName: string;\n purpose: string;\n}\n\nexport interface UIToolEvent {\n id: string;\n type: \"tool_call\" | \"tool_result\" | \"tool_error\";\n actionName?: string;\n toolName?: string;\n name?: string;\n args?: Record<string, unknown>;\n input?: Record<string, unknown>;\n result?: unknown;\n output?: unknown;\n status?: \"queued\" | \"running\" | \"completed\" | \"skipped\" | \"failed\";\n success?: boolean;\n durationMs?: number;\n error?: string;\n}\n\nexport interface UIEvaluationEvent {\n id: string;\n evaluatorName?: string;\n name?: string;\n status?: \"queued\" | \"running\" | \"completed\" | \"skipped\" | \"failed\";\n success?: boolean;\n decision?: string;\n thought?: string;\n error?: string;\n}\n\nexport interface TrajectoryDetail {\n trajectory: TrajectoryListItem;\n llmCalls: UILlmCall[];\n providerAccesses: UIProviderAccess[];\n toolEvents?: UIToolEvent[];\n evaluationEvents?: UIEvaluationEvent[];\n}\n\n/**\n * HTTP error from a trajectory route, carrying the response status so callers\n * can distinguish a \"service not mounted\" surface (404/503 — the training\n * plugin that serves `/api/trajectories*` is absent) from a genuine failure.\n */\nexport class TrajectoryHttpError extends Error {\n readonly status: number;\n\n constructor(status: number, statusText: string, body: string) {\n super(\n `[trajectory-logger] ${status} ${statusText}${body ? `: ${body.slice(0, 200)}` : \"\"}`,\n );\n this.name = \"TrajectoryHttpError\";\n this.status = status;\n }\n\n /**\n * True when the status means the trajectory routes are not available on this\n * surface (the provider plugin is not loaded) rather than a request failure.\n */\n get isUnavailable(): boolean {\n return this.status === 404 || this.status === 503;\n }\n}\n\nasync function readJson<T>(res: Response): Promise<T> {\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new TrajectoryHttpError(res.status, res.statusText, body);\n }\n return (await res.json()) as T;\n}\n\nexport async function fetchTrajectoryList(\n options: { limit?: number; signal?: AbortSignal } = {},\n): Promise<TrajectoryListResult> {\n const limit = options.limit ?? 10;\n const res = await fetch(`/api/trajectories?limit=${limit}`, {\n headers: { Accept: \"application/json\" },\n signal: options.signal,\n });\n return readJson<TrajectoryListResult>(res);\n}\n\nexport async function fetchTrajectoryDetail(\n id: string,\n options: { signal?: AbortSignal } = {},\n): Promise<TrajectoryDetail> {\n const res = await fetch(`/api/trajectories/${encodeURIComponent(id)}`, {\n headers: { Accept: \"application/json\" },\n signal: options.signal,\n });\n return readJson<TrajectoryDetail>(res);\n}\n\n/**\n * Soft-purge a single trajectory. The server route is wired by the training\n * plugin; if it returns 404 the caller surfaces \"not available\" rather than\n * silently failing.\n */\nexport async function purgeTrajectory(id: string): Promise<void> {\n const res = await fetch(`/api/trajectories/${encodeURIComponent(id)}`, {\n method: \"DELETE\",\n headers: { Accept: \"application/json\" },\n });\n if (!res.ok) {\n throw new Error(`purgeTrajectory failed: ${res.status} ${res.statusText}`);\n }\n}\n\n/**\n * Export a trajectory as a signed zip bundle. The server route returns the\n * archive as `application/zip` (with a `X-Eliza-Signature` header carrying the\n * detached signature). Caller is responsible for streaming the blob.\n */\nexport async function fetchTrajectoryExport(id: string): Promise<Blob> {\n const res = await fetch(\n `/api/trajectories/${encodeURIComponent(id)}/export`,\n { headers: { Accept: \"application/zip\" } },\n );\n if (!res.ok) {\n throw new Error(\n `fetchTrajectoryExport failed: ${res.status} ${res.statusText}`,\n );\n }\n return res.blob();\n}\n","// View-bundle `interact` capability handler, split out of TrajectoryLoggerView.tsx\n// so that file exports only React components and stays Fast-Refresh-compatible\n// (Vite would full-reload a component file that also exports a plain function).\n// The view bundle re-exports `interact` via ./trajectory-logger-view-bundle.ts.\nimport { fetchTrajectoryDetail, fetchTrajectoryList } from \"../api-client\";\n\nexport async function interact(\n capability: string,\n params?: Record<string, unknown>,\n): Promise<unknown> {\n if (capability === \"list-trajectories\" || capability === \"refresh\") {\n return fetchTrajectoryList({\n limit: typeof params?.limit === \"number\" ? params.limit : 10,\n });\n }\n\n if (capability === \"open-latest\") {\n const list = await fetchTrajectoryList({ limit: 1 });\n const latest = list.trajectories[0];\n return latest ? fetchTrajectoryDetail(latest.id) : null;\n }\n\n if (capability === \"filter-phase\") {\n const requestedPhase =\n typeof params?.phase === \"string\" ? params.phase.toUpperCase() : \"HANDLE\";\n const list = await fetchTrajectoryList({ limit: 10 });\n const details = await Promise.all(\n list.trajectories\n .slice(0, 5)\n .map((trajectory) => fetchTrajectoryDetail(trajectory.id)),\n );\n return details.map((detail) => ({\n id: detail.trajectory.id,\n status: detail.trajectory.status,\n phase: requestedPhase,\n llmCalls: detail.llmCalls.filter((call) =>\n [call.purpose, call.stepType, call.actionType]\n .filter(Boolean)\n .some((value) => value.toUpperCase().includes(requestedPhase)),\n ).length,\n toolEvents: detail.toolEvents?.length ?? 0,\n evaluationEvents: detail.evaluationEvents?.length ?? 0,\n }));\n }\n\n throw new Error(`Trajectory Logger TUI does not support \"${capability}\".`);\n}\n","import type {\n TrajectoryDetail,\n UIEvaluationEvent,\n UILlmCall,\n UIProviderAccess,\n UIToolEvent,\n} from \"./api-client\";\n\nexport type PhaseName = \"HANDLE\" | \"PLAN\" | \"ACTION\" | \"EVALUATE\";\nexport type PhaseStatus = \"idle\" | \"active\" | \"done\" | \"skipped\" | \"error\";\n\nexport const PHASES: readonly PhaseName[] = [\n \"HANDLE\",\n \"PLAN\",\n \"ACTION\",\n \"EVALUATE\",\n] as const;\n\nexport interface PhaseSummary {\n phase: PhaseName;\n status: PhaseStatus;\n summary: string | null;\n llmCalls: UILlmCall[];\n providerAccesses: UIProviderAccess[];\n toolEvents: UIToolEvent[];\n evaluationEvents: UIEvaluationEvent[];\n}\n\nconst HANDLE_TYPES = new Set([\"should_respond\", \"compose_state\"]);\nconst PLAN_TYPES = new Set([\"reasoning\", \"response\", \"action\"]);\nconst EVALUATE_TYPES = new Set([\n \"evaluation\",\n \"evaluator\",\n \"observation_extraction\",\n \"turn_complete\",\n]);\n\nfunction phaseOf(call: UILlmCall): PhaseName | null {\n const t = (call.stepType || call.purpose || \"\").toLowerCase();\n if (HANDLE_TYPES.has(t)) return \"HANDLE\";\n if (PLAN_TYPES.has(t)) return \"PLAN\";\n if (EVALUATE_TYPES.has(t)) return \"EVALUATE\";\n return null;\n}\n\nexport function extractShouldRespondDecision(\n call: UILlmCall,\n): { decision: string; reasoning?: string } | null {\n const text = call.response.trim();\n if (!text) return null;\n const m = text.match(/\\{[\\s\\S]*\\}/);\n if (m) {\n try {\n const obj = JSON.parse(m[0]) as Record<string, unknown>;\n const a = obj.action ?? obj.decision ?? obj.shouldRespond;\n if (typeof a === \"string\" && a.length > 0) {\n const r = obj.reasoning ?? obj.rationale;\n return typeof r === \"string\"\n ? { decision: a.toUpperCase(), reasoning: r }\n : { decision: a.toUpperCase() };\n }\n } catch {\n /* fall through */\n }\n }\n const word = text.match(/\\b(RESPOND|REPLY|ANSWER|IGNORE|STOP|SKIP)\\b/i);\n return word ? { decision: word[0].toUpperCase() } : null;\n}\n\nexport function summarizePhases(\n detail: TrajectoryDetail | null,\n options: { trajectoryActive?: boolean } = {},\n): PhaseSummary[] {\n const llmCalls = detail?.llmCalls ?? [];\n const providerAccesses = detail?.providerAccesses ?? [];\n const toolEvents = detail?.toolEvents ?? [];\n const evaluationEvents = detail?.evaluationEvents ?? [];\n\n const handleCalls = llmCalls.filter((c) => phaseOf(c) === \"HANDLE\");\n const planCalls = llmCalls.filter((c) => phaseOf(c) === \"PLAN\");\n const evalCalls = llmCalls.filter((c) => phaseOf(c) === \"EVALUATE\");\n\n const handle = summarizeHandle(handleCalls, providerAccesses);\n const plan = summarizePlan(planCalls);\n const action = summarizeAction(toolEvents);\n const evaluate = summarizeEvaluate(evalCalls, evaluationEvents);\n\n const out: PhaseSummary[] = [\n {\n phase: \"HANDLE\",\n ...handle,\n llmCalls: handleCalls,\n providerAccesses,\n toolEvents: [],\n evaluationEvents: [],\n },\n {\n phase: \"PLAN\",\n ...plan,\n llmCalls: planCalls,\n providerAccesses: [],\n toolEvents: [],\n evaluationEvents: [],\n },\n {\n phase: \"ACTION\",\n ...action,\n llmCalls: [],\n providerAccesses: [],\n toolEvents,\n evaluationEvents: [],\n },\n {\n phase: \"EVALUATE\",\n ...evaluate,\n llmCalls: evalCalls,\n providerAccesses: [],\n toolEvents: [],\n evaluationEvents,\n },\n ];\n\n // For an in-flight trajectory: the latest non-idle phase is the one\n // currently running. Promote its status to `active` so the dot pulses.\n if (options.trajectoryActive) {\n let last = -1;\n for (let i = 0; i < out.length; i++) {\n if (out[i].status !== \"idle\") last = i;\n }\n if (\n last >= 0 &&\n last < out.length - 1 &&\n out[last].status === \"done\" &&\n out.slice(last + 1).every((p) => p.status === \"idle\")\n ) {\n out[last] = { ...out[last], status: \"active\" };\n }\n }\n return out;\n}\n\nfunction summarizeHandle(\n llmCalls: UILlmCall[],\n providerAccesses: UIProviderAccess[],\n): { status: PhaseStatus; summary: string | null } {\n const respond = llmCalls.find(\n (c) => (c.stepType || c.purpose || \"\").toLowerCase() === \"should_respond\",\n );\n if (respond) {\n const parsed = extractShouldRespondDecision(respond);\n if (parsed) {\n const skip = /IGNORE|STOP|SKIP/i.test(parsed.decision);\n return {\n status: skip ? \"skipped\" : \"done\",\n summary: parsed.decision.toLowerCase(),\n };\n }\n return { status: \"done\", summary: null };\n }\n if (llmCalls.length > 0 || providerAccesses.length > 0) {\n return { status: \"done\", summary: `${providerAccesses.length} ctx` };\n }\n return { status: \"idle\", summary: null };\n}\n\nfunction summarizePlan(llmCalls: UILlmCall[]): {\n status: PhaseStatus;\n summary: string | null;\n} {\n const last = llmCalls[llmCalls.length - 1];\n if (!last) return { status: \"idle\", summary: null };\n return { status: \"done\", summary: last.actionType || null };\n}\n\nfunction summarizeAction(events: UIToolEvent[]): {\n status: PhaseStatus;\n summary: string | null;\n} {\n if (events.length === 0) return { status: \"idle\", summary: null };\n const e = events[events.length - 1];\n const name = e.actionName || e.toolName || e.name || \"action\";\n if (e.type === \"tool_error\" || e.error || e.success === false) {\n return { status: \"error\", summary: name };\n }\n if (\n e.type === \"tool_result\" ||\n e.status === \"completed\" ||\n e.success === true\n ) {\n return { status: \"done\", summary: name };\n }\n if (e.status === \"skipped\") return { status: \"skipped\", summary: name };\n return { status: \"active\", summary: name };\n}\n\nfunction summarizeEvaluate(\n llmCalls: UILlmCall[],\n events: UIEvaluationEvent[],\n): { status: PhaseStatus; summary: string | null } {\n if (events.length > 0) {\n const e = events[events.length - 1];\n const name = e.evaluatorName || e.name || \"evaluator\";\n if (e.error || e.success === false) {\n return { status: \"error\", summary: name };\n }\n if (e.decision)\n return { status: \"done\", summary: `${name}: ${e.decision}` };\n return { status: \"done\", summary: name };\n }\n if (llmCalls.length > 0) return { status: \"done\", summary: null };\n return { status: \"idle\", summary: null };\n}\n","import { useEffect, useState } from \"react\";\nimport {\n fetchTrajectoryDetail,\n fetchTrajectoryList,\n type TrajectoryDetail,\n TrajectoryHttpError,\n type TrajectoryListItem,\n} from \"./api-client\";\n\nconst POLL_MS = 700;\n\nexport interface PollingTrajectoryState {\n active: TrajectoryListItem | null;\n activeDetail: TrajectoryDetail | null;\n last: TrajectoryListItem | null;\n lastDetail: TrajectoryDetail | null;\n error: string | null;\n /**\n * True when the trajectory routes are not mounted on this surface (the\n * provider plugin is absent → 404/503). Distinct from `error`, which is for\n * genuine request failures. When set, the view shows a calm unavailable\n * state instead of leaking the raw HTTP error string.\n */\n unavailable: boolean;\n ready: boolean;\n}\n\nconst INITIAL: PollingTrajectoryState = {\n active: null,\n activeDetail: null,\n last: null,\n lastDetail: null,\n error: null,\n unavailable: false,\n ready: false,\n};\n\nexport function usePollingTrajectories(\n enabled: boolean,\n): PollingTrajectoryState {\n const [state, setState] = useState<PollingTrajectoryState>(INITIAL);\n\n useEffect(() => {\n if (!enabled) {\n setState(INITIAL);\n return;\n }\n let cancelled = false;\n const ctrl = new AbortController();\n\n const tick = async (): Promise<void> => {\n try {\n const list = await fetchTrajectoryList({\n limit: 10,\n signal: ctrl.signal,\n });\n if (cancelled) return;\n const trajectories = Array.isArray(list.trajectories)\n ? list.trajectories\n : [];\n const active = trajectories.find((t) => t.status === \"active\") ?? null;\n const last = trajectories.find((t) => t.status !== \"active\") ?? null;\n\n const [activeDetail, lastDetail] = await Promise.all([\n active\n ? fetchTrajectoryDetail(active.id, { signal: ctrl.signal }).catch(\n () => null,\n )\n : Promise.resolve(null),\n last\n ? fetchTrajectoryDetail(last.id, { signal: ctrl.signal }).catch(\n () => null,\n )\n : Promise.resolve(null),\n ]);\n if (cancelled) return;\n setState({\n active,\n activeDetail,\n last,\n lastDetail,\n error: null,\n unavailable: false,\n ready: true,\n });\n } catch (err) {\n if (cancelled) return;\n if (err instanceof DOMException && err.name === \"AbortError\") return;\n if (err instanceof TrajectoryHttpError && err.isUnavailable) {\n setState((prev) => ({\n ...prev,\n ready: true,\n error: null,\n unavailable: true,\n }));\n return;\n }\n setState((prev) => ({\n ...prev,\n ready: true,\n unavailable: false,\n error: err instanceof Error ? err.message : String(err),\n }));\n } finally {\n if (!cancelled) setTimeout(tick, POLL_MS);\n }\n };\n\n void tick();\n return () => {\n cancelled = true;\n ctrl.abort();\n };\n }, [enabled]);\n\n return state;\n}\n","/**\n * TrajectoryLoggerSpatialView — the trajectory inspector authored once with the\n * spatial vocabulary, so it renders correctly wherever it is displayed:\n *\n * - GUI / XR - mounted in `<SpatialSurface>` (DOM; XR scales up).\n * - TUI - rendered to real terminal lines by the agent terminal, via\n * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).\n *\n * It is purely presentational (a snapshot + an action callback in, primitives\n * out) and imports only the cross-modality primitives plus type-only views of\n * the trajectory wire shapes, so it is safe to render in the Node agent process\n * where the terminal lives (no browser/runtime import, no polling hook).\n */\n\nimport {\n Button,\n Card,\n Divider,\n HStack,\n List,\n type SpatialTone,\n Text,\n VStack,\n} from \"@elizaos/ui/spatial\";\nimport type {\n UIEvaluationEvent,\n UILlmCall,\n UIProviderAccess,\n UIToolEvent,\n} from \"../api-client.ts\";\nimport type { PhaseName, PhaseStatus, PhaseSummary } from \"../phases.ts\";\nimport { extractShouldRespondDecision, PHASES } from \"../phases.ts\";\n\nexport type Slot = \"now\" | \"last\";\n\n/** One trajectory track: its phase tabs plus a recording/empty indicator. */\nexport interface TrajectoryTrack {\n /** True once the agent has captured at least one turn for this slot. */\n hasTrajectory: boolean;\n /** Phase summaries in canonical order (HANDLE / PLAN / ACTION / EVALUATE). */\n phases: PhaseSummary[];\n}\n\nexport interface TrajectorySnapshot {\n /** False while the first poll is still in flight. */\n ready: boolean;\n /** Whether the active (\"now\") trajectory is currently recording. */\n recording: boolean;\n /**\n * True when the trajectory routes are not mounted on this surface (the\n * provider plugin is absent). Distinct from `error`: the view shows a calm\n * \"unavailable on this surface\" message instead of the strips.\n */\n unavailable?: boolean;\n /** Fetch error from the trajectories endpoint, if any. */\n error?: string | null;\n /** In-flight trajectory track. */\n now: TrajectoryTrack;\n /** Last completed trajectory track. */\n last: TrajectoryTrack;\n /** Which phase tab (if any) is expanded into its drilldown body. */\n selected?: { slot: Slot; phase: PhaseName } | null;\n}\n\nexport interface TrajectoryLoggerSpatialViewProps {\n snapshot: TrajectorySnapshot;\n /** Dispatch by agent id: `back`, `select:<slot>:<phase>`, `refresh`. */\n onAction?: (action: string) => void;\n}\n\nconst EMPTY_TRACK: TrajectoryTrack = {\n hasTrajectory: false,\n phases: PHASES.map((phase) => ({\n phase,\n status: \"idle\",\n summary: null,\n llmCalls: [],\n providerAccesses: [],\n toolEvents: [],\n evaluationEvents: [],\n })),\n};\n\nexport const EMPTY_TRAJECTORY_SNAPSHOT: TrajectorySnapshot = {\n ready: false,\n recording: false,\n unavailable: false,\n error: null,\n now: EMPTY_TRACK,\n last: EMPTY_TRACK,\n selected: null,\n};\n\nfunction statusTone(status: PhaseStatus): SpatialTone {\n switch (status) {\n case \"active\":\n return \"primary\";\n case \"done\":\n return \"success\";\n case \"error\":\n return \"danger\";\n case \"skipped\":\n return \"warning\";\n default:\n return \"muted\";\n }\n}\n\n/** ASCII status marker (avoid East-Asian ambiguous glyphs in the terminal). */\nfunction statusMark(status: PhaseStatus): string {\n switch (status) {\n case \"active\":\n return \"*\";\n case \"done\":\n return \"+\";\n case \"error\":\n return \"x\";\n case \"skipped\":\n return \"-\";\n default:\n return \".\";\n }\n}\n\nexport function TrajectoryLoggerSpatialView({\n snapshot,\n onAction,\n}: TrajectoryLoggerSpatialViewProps) {\n const selected = resolveSelected(snapshot);\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\">\n <Button\n variant=\"ghost\"\n tone=\"default\"\n agent=\"back\"\n onPress={() => onAction?.(\"back\")}\n >\n Back\n </Button>\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n route\n </Text>\n {snapshot.unavailable ? null : !snapshot.ready ? (\n <Text style=\"caption\" tone=\"muted\">\n loading\n </Text>\n ) : (\n <Text\n style=\"caption\"\n tone={snapshot.recording ? \"danger\" : \"muted\"}\n bold={snapshot.recording}\n >\n {snapshot.recording ? \"[*] recording\" : \"[ ] idle\"}\n </Text>\n )}\n </HStack>\n\n {snapshot.unavailable ? (\n <Text tone=\"muted\" style=\"caption\" dim>\n Trajectory logging unavailable on this surface\n </Text>\n ) : (\n <>\n {snapshot.error ? (\n <Text tone=\"danger\" style=\"caption\">\n {snapshot.error}\n </Text>\n ) : null}\n\n <PhaseStrip\n live\n slot=\"now\"\n track={snapshot.now}\n selectedPhase={selected?.slot === \"now\" ? selected.phase : null}\n onSelect={(phase) => onAction?.(`select:now:${phase}`)}\n />\n <PhaseStrip\n live={false}\n slot=\"last\"\n track={snapshot.last}\n selectedPhase={selected?.slot === \"last\" ? selected.phase : null}\n onSelect={(phase) => onAction?.(`select:last:${phase}`)}\n />\n\n {selected.summary ? (\n <VStack gap={1}>\n <Divider\n label={`${selected.slot === \"now\" ? \"now\" : \"last\"} / ${selected.summary.phase}`}\n />\n <PhaseDrilldownBody phase={selected.summary} />\n </VStack>\n ) : null}\n </>\n )}\n </Card>\n );\n}\n\nfunction resolveSelected(snapshot: TrajectorySnapshot): {\n slot: Slot;\n phase: PhaseName;\n summary: PhaseSummary | null;\n} {\n const sel = snapshot.selected ?? null;\n if (!sel) return { slot: \"now\", phase: \"HANDLE\", summary: null };\n const track = sel.slot === \"now\" ? snapshot.now : snapshot.last;\n const summary = track.phases.find((p) => p.phase === sel.phase) ?? null;\n return { slot: sel.slot, phase: sel.phase, summary };\n}\n\nfunction PhaseStrip({\n live,\n slot,\n track,\n selectedPhase,\n onSelect,\n}: {\n live: boolean;\n slot: Slot;\n track: TrajectoryTrack;\n selectedPhase: PhaseName | null;\n onSelect: (phase: PhaseName) => void;\n}) {\n const recording = live && track.hasTrajectory;\n const lastDone = track.phases.reduce(\n (acc, p, i) => (p.status !== \"idle\" ? i : acc),\n -1,\n );\n const total = track.phases.length;\n // Borderless labeled section (no nested box). The divider carries the\n // now/last label; recording state shows through the phase statuses.\n return (\n <VStack gap={1} agent={`strip-${slot}`}>\n <Divider label={live ? \"now\" : \"last\"} />\n <Text\n style=\"caption\"\n tone={recording ? \"primary\" : \"muted\"}\n align=\"center\"\n >\n {!track.hasTrajectory ? \"no turn yet\" : progressBar(lastDone, total)}\n </Text>\n <List gap={0}>\n {track.phases.map((p) => (\n <HStack\n key={p.phase}\n gap={1}\n align=\"center\"\n agent={`phase-${slot}-${p.phase}`}\n >\n <Text tone={statusTone(p.status)} bold>\n {statusMark(p.status)}\n </Text>\n <Text bold={selectedPhase === p.phase} width=\"30%\" wrap={false}>\n {p.phase}\n </Text>\n <Text style=\"caption\" tone=\"muted\" grow={1} wrap={false}>\n {p.summary ?? p.status}\n </Text>\n <Button\n variant={selectedPhase === p.phase ? \"solid\" : \"ghost\"}\n tone={statusTone(p.status)}\n agent={`select-${slot}-${p.phase}`}\n onPress={() => onSelect(p.phase)}\n >\n {phaseCount(p) || \"open\"}\n </Button>\n </HStack>\n ))}\n </List>\n </VStack>\n );\n}\n\nfunction progressBar(lastDone: number, total: number): string {\n if (total <= 0) return \"\";\n const filled = Math.max(0, lastDone + 1);\n return `[${\"=\".repeat(filled)}${\"-\".repeat(Math.max(0, total - filled))}]`;\n}\n\nfunction phaseCount(phase: PhaseSummary): string {\n const n =\n phase.llmCalls.length +\n phase.toolEvents.length +\n phase.evaluationEvents.length;\n return n > 0 ? String(n) : \"\";\n}\n\nfunction PhaseDrilldownBody({ phase }: { phase: PhaseSummary }) {\n switch (phase.phase) {\n case \"HANDLE\":\n return <HandleBody calls={phase.llmCalls} ctx={phase.providerAccesses} />;\n case \"PLAN\":\n return <PlanBody calls={phase.llmCalls} />;\n case \"ACTION\":\n return <ActionBody events={phase.toolEvents} />;\n case \"EVALUATE\":\n return (\n <EvaluateBody calls={phase.llmCalls} events={phase.evaluationEvents} />\n );\n }\n}\n\nfunction preview(text: string, max = 160): string {\n const trimmed = text.trim();\n if (trimmed.length <= max) return trimmed;\n return `${trimmed.slice(0, max)}...`;\n}\n\nfunction HandleBody({\n calls,\n ctx,\n}: {\n calls: UILlmCall[];\n ctx: UIProviderAccess[];\n}) {\n const respond = calls.find(\n (c) => (c.stepType || c.purpose || \"\").toLowerCase() === \"should_respond\",\n );\n const decision = respond ? extractShouldRespondDecision(respond) : null;\n const providers = [\n ...new Set(ctx.map((p) => p.providerName).filter(Boolean)),\n ];\n if (!decision && providers.length === 0) {\n return (\n <Text style=\"caption\" tone=\"muted\" dim>\n no handle activity\n </Text>\n );\n }\n return (\n <VStack gap={1}>\n {decision ? (\n <HStack gap={1} align=\"center\">\n <Text bold>{decision.decision}</Text>\n {decision.reasoning ? (\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n {preview(decision.reasoning)}\n </Text>\n ) : null}\n </HStack>\n ) : null}\n {providers.length > 0 ? (\n <Text style=\"caption\" tone=\"muted\">\n {`ctx: ${providers.join(\", \")}`}\n </Text>\n ) : null}\n </VStack>\n );\n}\n\nfunction PlanBody({ calls }: { calls: UILlmCall[] }) {\n const last = calls[calls.length - 1];\n if (!last) {\n return (\n <Text style=\"caption\" tone=\"muted\" dim>\n no plan yet\n </Text>\n );\n }\n const text = preview(last.response);\n return (\n <VStack gap={1}>\n {last.actionType ? <Text bold>{last.actionType}</Text> : null}\n {text ? (\n <Text style=\"caption\" tone=\"muted\">\n {text}\n </Text>\n ) : null}\n </VStack>\n );\n}\n\nfunction ActionBody({ events }: { events: UIToolEvent[] }) {\n if (events.length === 0) {\n return (\n <Text style=\"caption\" tone=\"muted\" dim>\n no actions\n </Text>\n );\n }\n return (\n <List gap={1}>\n {events.map((e) => {\n const name = e.actionName || e.toolName || e.name || \"action\";\n const tone = toolTone(e);\n return (\n <HStack key={e.id} gap={1} align=\"center\" agent={`tool-${e.id}`}>\n <Text tone={tone} bold>\n {toolMark(e)}\n </Text>\n <Text grow={1} wrap={false}>\n {name}\n </Text>\n {typeof e.durationMs === \"number\" ? (\n <Text style=\"caption\" tone=\"muted\">\n {`${e.durationMs}ms`}\n </Text>\n ) : null}\n {e.error ? (\n <Text style=\"caption\" tone=\"danger\" wrap={false}>\n {preview(e.error, 40)}\n </Text>\n ) : null}\n </HStack>\n );\n })}\n </List>\n );\n}\n\nfunction toolTone(e: UIToolEvent): SpatialTone {\n if (e.type === \"tool_error\" || e.error || e.success === false)\n return \"danger\";\n if (\n e.type === \"tool_result\" ||\n e.status === \"completed\" ||\n e.success === true\n )\n return \"success\";\n if (e.status === \"skipped\") return \"warning\";\n return \"primary\";\n}\n\nfunction toolMark(e: UIToolEvent): string {\n if (e.type === \"tool_error\" || e.error || e.success === false) return \"x\";\n if (\n e.type === \"tool_result\" ||\n e.status === \"completed\" ||\n e.success === true\n )\n return \"+\";\n if (e.status === \"skipped\") return \"-\";\n return \"*\";\n}\n\nfunction EvaluateBody({\n calls,\n events,\n}: {\n calls: UILlmCall[];\n events: UIEvaluationEvent[];\n}) {\n if (events.length === 0 && calls.length === 0) {\n return (\n <Text style=\"caption\" tone=\"muted\" dim>\n no evaluation\n </Text>\n );\n }\n return (\n <List gap={1}>\n {events.map((e) => {\n const name = e.evaluatorName || e.name || \"evaluator\";\n const tone =\n e.error || e.success === false\n ? \"danger\"\n : e.success === true || e.status === \"completed\"\n ? \"success\"\n : e.status === \"skipped\"\n ? \"warning\"\n : \"primary\";\n return (\n <VStack key={e.id} gap={0} agent={`eval-${e.id}`}>\n <HStack gap={1} align=\"center\">\n <Text tone={tone as SpatialTone} grow={1} wrap={false}>\n {name}\n </Text>\n {e.decision ? (\n <Text style=\"caption\" tone=\"muted\">\n {e.decision}\n </Text>\n ) : null}\n </HStack>\n {e.thought ? (\n <Text style=\"caption\" tone=\"muted\">\n {preview(e.thought)}\n </Text>\n ) : null}\n {e.error ? (\n <Text style=\"caption\" tone=\"danger\">\n {preview(e.error, 80)}\n </Text>\n ) : null}\n </VStack>\n );\n })}\n </List>\n );\n}\n","/**\n * TrajectoryLoggerView - the single GUI/XR data wrapper for the Trajectory\n * Logger surface.\n *\n * It owns the live trajectory data (the 700ms polling hook + the selected-phase\n * drilldown state) and renders the one presentational\n * {@link TrajectoryLoggerSpatialView} inside a {@link SpatialSurface}. Omitting\n * the `modality` prop lets `SpatialSurface` auto-detect GUI vs XR via\n * `window.__elizaXRContext`, so the SAME component serves both surfaces. The TUI\n * surface renders the same `TrajectoryLoggerSpatialView` through the terminal\n * registry (see `register-terminal-view.tsx`).\n */\n\nimport type { OverlayAppContext } from \"@elizaos/ui\";\nimport { SpatialSurface } from \"@elizaos/ui/spatial\";\nimport { useCallback, useState } from \"react\";\nimport type { PhaseName } from \"../phases\";\nimport { summarizePhases } from \"../phases\";\nimport { usePollingTrajectories } from \"../usePollingTrajectories\";\nimport {\n type Slot,\n TrajectoryLoggerSpatialView,\n type TrajectorySnapshot,\n} from \"./TrajectoryLoggerSpatialView.tsx\";\n\ntype Selection = { slot: Slot; phase: PhaseName } | null;\n\n/** Navigate back to the apps grid via the shared navigation bus. */\nfunction navigateToApps(): void {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"eliza:navigate:view\", {\n detail: { viewId: \"apps\", viewPath: \"/apps\" },\n }),\n );\n}\n\nexport interface TrajectoryLoggerViewProps {\n /**\n * Optional host-supplied \"back\" handler. When the view is mounted as a\n * full-screen overlay the host passes its `exitToApps`; the bundle/manifest\n * mount renders it without props and Back falls back to the navigation bus.\n */\n exitToApps?: OverlayAppContext[\"exitToApps\"];\n}\n\nexport function TrajectoryLoggerView({\n exitToApps,\n}: TrajectoryLoggerViewProps = {}) {\n const state = usePollingTrajectories(true);\n const [selected, setSelected] = useState<Selection>(null);\n\n const onAction = useCallback(\n (action: string) => {\n if (action === \"back\") {\n if (exitToApps) exitToApps();\n else navigateToApps();\n return;\n }\n if (action === \"refresh\") {\n // The hook polls continuously; a manual refresh is a no-op beyond the\n // in-flight tick. Kept for action-contract parity with the TUI surface.\n return;\n }\n if (action.startsWith(\"select:\")) {\n const [, slot, phase] = action.split(\":\");\n if ((slot === \"now\" || slot === \"last\") && phase) {\n const next: Selection = { slot, phase: phase as PhaseName };\n setSelected((prev) =>\n prev && prev.slot === next.slot && prev.phase === next.phase\n ? null\n : next,\n );\n }\n }\n },\n [exitToApps],\n );\n\n const snapshot: TrajectorySnapshot = {\n ready: state.ready,\n recording: !!state.active,\n unavailable: state.unavailable,\n error: state.error,\n now: {\n hasTrajectory: !!state.active,\n phases: summarizePhases(state.activeDetail, { trajectoryActive: true }),\n },\n last: {\n hasTrajectory: !!state.last,\n phases: summarizePhases(state.lastDetail, { trajectoryActive: false }),\n },\n selected,\n };\n\n return (\n <SpatialSurface>\n <TrajectoryLoggerSpatialView snapshot={snapshot} onAction={onAction} />\n </SpatialSurface>\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-trajectory-logger",
|
|
3
|
-
"version": "2.0.3-beta.
|
|
3
|
+
"version": "2.0.3-beta.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Realtime trajectory inspector overlay app — surfaces the last completed and the in-flight trajectory with HANDLE / PLAN / ACTION / EVALUATE phase drilldowns.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"build:types": "tsc --noCheck -p tsconfig.build.json"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@elizaos/app-core": "2.0.3-beta.
|
|
48
|
-
"@elizaos/core": "2.0.3-beta.
|
|
49
|
-
"@elizaos/ui": "2.0.3-beta.
|
|
47
|
+
"@elizaos/app-core": "2.0.3-beta.7",
|
|
48
|
+
"@elizaos/core": "2.0.3-beta.7",
|
|
49
|
+
"@elizaos/ui": "2.0.3-beta.7",
|
|
50
50
|
"lucide-react": "^1.0.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
"tsup": "^8.5.1",
|
|
75
75
|
"vite": "^8.0.0"
|
|
76
76
|
},
|
|
77
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
|
|
78
78
|
}
|