@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.
Files changed (67) hide show
  1. package/dist/api-client.d.ts +88 -0
  2. package/dist/api-client.d.ts.map +1 -0
  3. package/dist/api-client.js +68 -0
  4. package/dist/api-client.js.map +1 -0
  5. package/dist/components/PhaseChip.d.ts +13 -0
  6. package/dist/components/PhaseChip.d.ts.map +1 -0
  7. package/dist/components/PhaseChip.js +100 -0
  8. package/dist/components/PhaseChip.js.map +1 -0
  9. package/dist/components/PhaseDrilldown.d.ts +5 -0
  10. package/dist/components/PhaseDrilldown.d.ts.map +1 -0
  11. package/dist/components/PhaseDrilldown.js +118 -0
  12. package/dist/components/PhaseDrilldown.js.map +1 -0
  13. package/dist/components/TrajectoryLoggerAppView.d.ts +14 -0
  14. package/dist/components/TrajectoryLoggerAppView.d.ts.map +1 -0
  15. package/dist/components/TrajectoryLoggerAppView.js +184 -0
  16. package/dist/components/TrajectoryLoggerAppView.js.map +1 -0
  17. package/dist/components/TrajectoryLoggerSpatialView.d.ts +53 -0
  18. package/dist/components/TrajectoryLoggerSpatialView.d.ts.map +1 -0
  19. package/dist/components/TrajectoryLoggerSpatialView.js +293 -0
  20. package/dist/components/TrajectoryLoggerSpatialView.js.map +1 -0
  21. package/dist/components/TrajectoryLoggerView.d.ts +23 -0
  22. package/dist/components/TrajectoryLoggerView.d.ts.map +1 -0
  23. package/dist/components/TrajectoryLoggerView.interact.d.ts +2 -0
  24. package/dist/components/TrajectoryLoggerView.interact.d.ts.map +1 -0
  25. package/dist/components/TrajectoryLoggerView.interact.js +35 -0
  26. package/dist/components/TrajectoryLoggerView.interact.js.map +1 -0
  27. package/dist/components/TrajectoryLoggerView.js +64 -0
  28. package/dist/components/TrajectoryLoggerView.js.map +1 -0
  29. package/dist/components/trajectory-logger-app.d.ts +8 -0
  30. package/dist/components/trajectory-logger-app.d.ts.map +1 -0
  31. package/dist/components/trajectory-logger-app.js +24 -0
  32. package/dist/components/trajectory-logger-app.js.map +1 -0
  33. package/dist/components/trajectory-logger-view-bundle.d.ts +3 -0
  34. package/dist/components/trajectory-logger-view-bundle.d.ts.map +1 -0
  35. package/dist/components/trajectory-logger-view-bundle.js +7 -0
  36. package/dist/components/trajectory-logger-view-bundle.js.map +1 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +22 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/phases.d.ts +21 -0
  42. package/dist/phases.d.ts.map +1 -0
  43. package/dist/phases.js +154 -0
  44. package/dist/phases.js.map +1 -0
  45. package/dist/plugin.d.ts +14 -0
  46. package/dist/plugin.d.ts.map +1 -0
  47. package/dist/plugin.js +51 -0
  48. package/dist/plugin.js.map +1 -0
  49. package/dist/register-terminal-view.d.ts +16 -0
  50. package/dist/register-terminal-view.d.ts.map +1 -0
  51. package/dist/register-terminal-view.js +21 -0
  52. package/dist/register-terminal-view.js.map +1 -0
  53. package/dist/register.d.ts +7 -0
  54. package/dist/register.d.ts.map +1 -0
  55. package/dist/register.js +18 -0
  56. package/dist/register.js.map +1 -0
  57. package/dist/ui.d.ts +4 -0
  58. package/dist/ui.d.ts.map +1 -0
  59. package/dist/ui.js +15 -0
  60. package/dist/ui.js.map +1 -0
  61. package/dist/usePollingTrajectories.d.ts +18 -0
  62. package/dist/usePollingTrajectories.d.ts.map +1 -0
  63. package/dist/usePollingTrajectories.js +87 -0
  64. package/dist/usePollingTrajectories.js.map +1 -0
  65. package/dist/views/bundle.js +646 -0
  66. package/dist/views/bundle.js.map +1 -0
  67. package/package.json +5 -5
@@ -0,0 +1,35 @@
1
+ import { fetchTrajectoryDetail, fetchTrajectoryList } from "../api-client.js";
2
+ async function interact(capability, params) {
3
+ if (capability === "list-trajectories" || capability === "refresh") {
4
+ return fetchTrajectoryList({
5
+ limit: typeof params?.limit === "number" ? params.limit : 10
6
+ });
7
+ }
8
+ if (capability === "open-latest") {
9
+ const list = await fetchTrajectoryList({ limit: 1 });
10
+ const latest = list.trajectories[0];
11
+ return latest ? fetchTrajectoryDetail(latest.id) : null;
12
+ }
13
+ if (capability === "filter-phase") {
14
+ const requestedPhase = typeof params?.phase === "string" ? params.phase.toUpperCase() : "HANDLE";
15
+ const list = await fetchTrajectoryList({ limit: 10 });
16
+ const details = await Promise.all(
17
+ list.trajectories.slice(0, 5).map((trajectory) => fetchTrajectoryDetail(trajectory.id))
18
+ );
19
+ return details.map((detail) => ({
20
+ id: detail.trajectory.id,
21
+ status: detail.trajectory.status,
22
+ phase: requestedPhase,
23
+ llmCalls: detail.llmCalls.filter(
24
+ (call) => [call.purpose, call.stepType, call.actionType].filter(Boolean).some((value) => value.toUpperCase().includes(requestedPhase))
25
+ ).length,
26
+ toolEvents: detail.toolEvents?.length ?? 0,
27
+ evaluationEvents: detail.evaluationEvents?.length ?? 0
28
+ }));
29
+ }
30
+ throw new Error(`Trajectory Logger TUI does not support "${capability}".`);
31
+ }
32
+ export {
33
+ interact
34
+ };
35
+ //# sourceMappingURL=TrajectoryLoggerView.interact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/TrajectoryLoggerView.interact.ts"],"sourcesContent":["// 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.js\";\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"],"mappings":"AAIA,SAAS,uBAAuB,2BAA2B;AAE3D,eAAsB,SACpB,YACA,QACkB;AAClB,MAAI,eAAe,uBAAuB,eAAe,WAAW;AAClE,WAAO,oBAAoB;AAAA,MACzB,OAAO,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAQ;AAAA,IAC5D,CAAC;AAAA,EACH;AAEA,MAAI,eAAe,eAAe;AAChC,UAAM,OAAO,MAAM,oBAAoB,EAAE,OAAO,EAAE,CAAC;AACnD,UAAM,SAAS,KAAK,aAAa,CAAC;AAClC,WAAO,SAAS,sBAAsB,OAAO,EAAE,IAAI;AAAA,EACrD;AAEA,MAAI,eAAe,gBAAgB;AACjC,UAAM,iBACJ,OAAO,QAAQ,UAAU,WAAW,OAAO,MAAM,YAAY,IAAI;AACnE,UAAM,OAAO,MAAM,oBAAoB,EAAE,OAAO,GAAG,CAAC;AACpD,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,KAAK,aACF,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,eAAe,sBAAsB,WAAW,EAAE,CAAC;AAAA,IAC7D;AACA,WAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9B,IAAI,OAAO,WAAW;AAAA,MACtB,QAAQ,OAAO,WAAW;AAAA,MAC1B,OAAO;AAAA,MACP,UAAU,OAAO,SAAS;AAAA,QAAO,CAAC,SAChC,CAAC,KAAK,SAAS,KAAK,UAAU,KAAK,UAAU,EAC1C,OAAO,OAAO,EACd,KAAK,CAAC,UAAU,MAAM,YAAY,EAAE,SAAS,cAAc,CAAC;AAAA,MACjE,EAAE;AAAA,MACF,YAAY,OAAO,YAAY,UAAU;AAAA,MACzC,kBAAkB,OAAO,kBAAkB,UAAU;AAAA,IACvD,EAAE;AAAA,EACJ;AAEA,QAAM,IAAI,MAAM,2CAA2C,UAAU,IAAI;AAC3E;","names":[]}
@@ -0,0 +1,64 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { SpatialSurface } from "@elizaos/ui/spatial";
3
+ import { useCallback, useState } from "react";
4
+ import { summarizePhases } from "../phases.js";
5
+ import { usePollingTrajectories } from "../usePollingTrajectories.js";
6
+ import {
7
+ TrajectoryLoggerSpatialView
8
+ } from "./TrajectoryLoggerSpatialView.js";
9
+ function navigateToApps() {
10
+ if (typeof window === "undefined") return;
11
+ window.dispatchEvent(
12
+ new CustomEvent("eliza:navigate:view", {
13
+ detail: { viewId: "apps", viewPath: "/apps" }
14
+ })
15
+ );
16
+ }
17
+ function TrajectoryLoggerView({
18
+ exitToApps
19
+ } = {}) {
20
+ const state = usePollingTrajectories(true);
21
+ const [selected, setSelected] = useState(null);
22
+ const onAction = useCallback(
23
+ (action) => {
24
+ if (action === "back") {
25
+ if (exitToApps) exitToApps();
26
+ else navigateToApps();
27
+ return;
28
+ }
29
+ if (action === "refresh") {
30
+ return;
31
+ }
32
+ if (action.startsWith("select:")) {
33
+ const [, slot, phase] = action.split(":");
34
+ if ((slot === "now" || slot === "last") && phase) {
35
+ const next = { slot, phase };
36
+ setSelected(
37
+ (prev) => prev && prev.slot === next.slot && prev.phase === next.phase ? null : next
38
+ );
39
+ }
40
+ }
41
+ },
42
+ [exitToApps]
43
+ );
44
+ const snapshot = {
45
+ ready: state.ready,
46
+ recording: !!state.active,
47
+ unavailable: state.unavailable,
48
+ error: state.error,
49
+ now: {
50
+ hasTrajectory: !!state.active,
51
+ phases: summarizePhases(state.activeDetail, { trajectoryActive: true })
52
+ },
53
+ last: {
54
+ hasTrajectory: !!state.last,
55
+ phases: summarizePhases(state.lastDetail, { trajectoryActive: false })
56
+ },
57
+ selected
58
+ };
59
+ return /* @__PURE__ */ jsx(SpatialSurface, { children: /* @__PURE__ */ jsx(TrajectoryLoggerSpatialView, { snapshot, onAction }) });
60
+ }
61
+ export {
62
+ TrajectoryLoggerView
63
+ };
64
+ //# sourceMappingURL=TrajectoryLoggerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/TrajectoryLoggerView.tsx"],"sourcesContent":["/**\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.js\";\nimport { summarizePhases } from \"../phases.js\";\nimport { usePollingTrajectories } from \"../usePollingTrajectories.js\";\nimport {\n type Slot,\n TrajectoryLoggerSpatialView,\n type TrajectorySnapshot,\n} from \"./TrajectoryLoggerSpatialView.js\";\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":"AAiGM;AAnFN,SAAS,sBAAsB;AAC/B,SAAS,aAAa,gBAAgB;AAEtC,SAAS,uBAAuB;AAChC,SAAS,8BAA8B;AACvC;AAAA,EAEE;AAAA,OAEK;AAKP,SAAS,iBAAuB;AAC9B,MAAI,OAAO,WAAW,YAAa;AACnC,SAAO;AAAA,IACL,IAAI,YAAY,uBAAuB;AAAA,MACrC,QAAQ,EAAE,QAAQ,QAAQ,UAAU,QAAQ;AAAA,IAC9C,CAAC;AAAA,EACH;AACF;AAWO,SAAS,qBAAqB;AAAA,EACnC;AACF,IAA+B,CAAC,GAAG;AACjC,QAAM,QAAQ,uBAAuB,IAAI;AACzC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAoB,IAAI;AAExD,QAAM,WAAW;AAAA,IACf,CAAC,WAAmB;AAClB,UAAI,WAAW,QAAQ;AACrB,YAAI,WAAY,YAAW;AAAA,YACtB,gBAAe;AACpB;AAAA,MACF;AACA,UAAI,WAAW,WAAW;AAGxB;AAAA,MACF;AACA,UAAI,OAAO,WAAW,SAAS,GAAG;AAChC,cAAM,CAAC,EAAE,MAAM,KAAK,IAAI,OAAO,MAAM,GAAG;AACxC,aAAK,SAAS,SAAS,SAAS,WAAW,OAAO;AAChD,gBAAM,OAAkB,EAAE,MAAM,MAA0B;AAC1D;AAAA,YAAY,CAAC,SACX,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,UAAU,KAAK,QACnD,OACA;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,WAA+B;AAAA,IACnC,OAAO,MAAM;AAAA,IACb,WAAW,CAAC,CAAC,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,KAAK;AAAA,MACH,eAAe,CAAC,CAAC,MAAM;AAAA,MACvB,QAAQ,gBAAgB,MAAM,cAAc,EAAE,kBAAkB,KAAK,CAAC;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,MACJ,eAAe,CAAC,CAAC,MAAM;AAAA,MACvB,QAAQ,gBAAgB,MAAM,YAAY,EAAE,kBAAkB,MAAM,CAAC;AAAA,IACvE;AAAA,IACA;AAAA,EACF;AAEA,SACE,oBAAC,kBACC,8BAAC,+BAA4B,UAAoB,UAAoB,GACvE;AAEJ;","names":[]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Overlay app definition + registration for the Trajectory Logger app.
3
+ */
4
+ import { type OverlayApp } from "@elizaos/ui";
5
+ export declare const TRAJECTORY_LOGGER_APP_NAME = "@elizaos/plugin-trajectory-logger";
6
+ export declare const trajectoryLoggerApp: OverlayApp;
7
+ export declare function registerTrajectoryLoggerApp(): void;
8
+ //# sourceMappingURL=trajectory-logger-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-logger-app.d.ts","sourceRoot":"","sources":["../../src/components/trajectory-logger-app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,aAAa,CAAC;AAElE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,eAAO,MAAM,mBAAmB,EAAE,UAWjC,CAAC;AAIF,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
@@ -0,0 +1,24 @@
1
+ import { registerOverlayApp } from "@elizaos/ui";
2
+ const TRAJECTORY_LOGGER_APP_NAME = "@elizaos/plugin-trajectory-logger";
3
+ const trajectoryLoggerApp = {
4
+ name: TRAJECTORY_LOGGER_APP_NAME,
5
+ displayName: "Trajectory Logger",
6
+ description: "Realtime view of the agent's last and pending turns \u2014 HANDLE / PLAN / ACTION / EVALUATE.",
7
+ category: "developer",
8
+ icon: null,
9
+ loader: () => import("./TrajectoryLoggerAppView.js").then((m) => ({
10
+ default: m.TrajectoryLoggerAppView
11
+ }))
12
+ };
13
+ let registered = false;
14
+ function registerTrajectoryLoggerApp() {
15
+ if (registered) return;
16
+ registerOverlayApp(trajectoryLoggerApp);
17
+ registered = true;
18
+ }
19
+ export {
20
+ TRAJECTORY_LOGGER_APP_NAME,
21
+ registerTrajectoryLoggerApp,
22
+ trajectoryLoggerApp
23
+ };
24
+ //# sourceMappingURL=trajectory-logger-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trajectory-logger-app.ts"],"sourcesContent":["/**\n * Overlay app definition + registration for the Trajectory Logger app.\n */\n\nimport { type OverlayApp, registerOverlayApp } from \"@elizaos/ui\";\n\nexport const TRAJECTORY_LOGGER_APP_NAME = \"@elizaos/plugin-trajectory-logger\";\n\nexport const trajectoryLoggerApp: OverlayApp = {\n name: TRAJECTORY_LOGGER_APP_NAME,\n displayName: \"Trajectory Logger\",\n description:\n \"Realtime view of the agent's last and pending turns — HANDLE / PLAN / ACTION / EVALUATE.\",\n category: \"developer\",\n icon: null,\n loader: () =>\n import(\"./TrajectoryLoggerAppView.js\").then((m) => ({\n default: m.TrajectoryLoggerAppView,\n })),\n};\n\nlet registered = false;\n\nexport function registerTrajectoryLoggerApp(): void {\n if (registered) return;\n registerOverlayApp(trajectoryLoggerApp);\n registered = true;\n}\n"],"mappings":"AAIA,SAA0B,0BAA0B;AAE7C,MAAM,6BAA6B;AAEnC,MAAM,sBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aACE;AAAA,EACF,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ,MACN,OAAO,8BAA8B,EAAE,KAAK,CAAC,OAAO;AAAA,IAClD,SAAS,EAAE;AAAA,EACb,EAAE;AACN;AAEA,IAAI,aAAa;AAEV,SAAS,8BAAoC;AAClD,MAAI,WAAY;AAChB,qBAAmB,mBAAmB;AACtC,eAAa;AACf;","names":[]}
@@ -0,0 +1,3 @@
1
+ export { interact } from "./TrajectoryLoggerView.interact.ts";
2
+ export { TrajectoryLoggerView } from "./TrajectoryLoggerView.tsx";
3
+ //# sourceMappingURL=trajectory-logger-view-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-logger-view-bundle.d.ts","sourceRoot":"","sources":["../../src/components/trajectory-logger-view-bundle.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { interact } from "./TrajectoryLoggerView.interact.js";
2
+ import { TrajectoryLoggerView } from "./TrajectoryLoggerView.js";
3
+ export {
4
+ TrajectoryLoggerView,
5
+ interact
6
+ };
7
+ //# sourceMappingURL=trajectory-logger-view-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trajectory-logger-view-bundle.ts"],"sourcesContent":["// Vite view-bundle entry. Re-exports the unified spatial view component plus\n// the `interact` capability handler so the built bundle (dist/views/bundle.js)\n// exposes the named exports the view loader reads (`TrajectoryLoggerView`,\n// `interact`). Kept separate from TrajectoryLoggerView.tsx so that file exports\n// only React components and stays Fast-Refresh-compatible.\nexport { interact } from \"./TrajectoryLoggerView.interact.js\";\nexport { TrajectoryLoggerView } from \"./TrajectoryLoggerView.js\";\n"],"mappings":"AAKA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;","names":[]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `@elizaos/plugin-trajectory-logger` package barrel.
3
+ *
4
+ * The Plugin object (runtime contract — view declarations) lives in `./plugin`,
5
+ * free of UI imports, so the agent can register the plugin's views without
6
+ * pulling the React trajectory surface into the Node process. This barrel
7
+ * re-exports it alongside the UI and SDK surface for browser/view-bundle and
8
+ * direct consumers.
9
+ */
10
+ export type { TrajectoryDetail, TrajectoryListItem, } from "./api-client";
11
+ export type { PhaseName, PhaseStatus, PhaseSummary } from "./phases";
12
+ export { PHASES, summarizePhases } from "./phases";
13
+ export { default, trajectoryLoggerPlugin } from "./plugin.js";
14
+ export * from "./register";
15
+ export { registerTrajectoryLoggerApp, TRAJECTORY_LOGGER_APP_NAME, TrajectoryLoggerAppView, TrajectoryLoggerView, trajectoryLoggerApp, } from "./ui";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EACV,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC9D,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ import { PHASES, summarizePhases } from "./phases.js";
2
+ import { default as default2, trajectoryLoggerPlugin } from "./plugin.js";
3
+ export * from "./register.js";
4
+ import {
5
+ registerTrajectoryLoggerApp,
6
+ TRAJECTORY_LOGGER_APP_NAME,
7
+ TrajectoryLoggerAppView,
8
+ TrajectoryLoggerView,
9
+ trajectoryLoggerApp
10
+ } from "./ui.js";
11
+ export {
12
+ PHASES,
13
+ TRAJECTORY_LOGGER_APP_NAME,
14
+ TrajectoryLoggerAppView,
15
+ TrajectoryLoggerView,
16
+ default2 as default,
17
+ registerTrajectoryLoggerApp,
18
+ summarizePhases,
19
+ trajectoryLoggerApp,
20
+ trajectoryLoggerPlugin
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * `@elizaos/plugin-trajectory-logger` package barrel.\n *\n * The Plugin object (runtime contract — view declarations) lives in `./plugin`,\n * free of UI imports, so the agent can register the plugin's views without\n * pulling the React trajectory surface into the Node process. This barrel\n * re-exports it alongside the UI and SDK surface for browser/view-bundle and\n * direct consumers.\n */\n\nexport type {\n TrajectoryDetail,\n TrajectoryListItem,\n} from \"./api-client.js\";\nexport type { PhaseName, PhaseStatus, PhaseSummary } from \"./phases.js\";\nexport { PHASES, summarizePhases } from \"./phases.js\";\nexport { default, trajectoryLoggerPlugin } from \"./plugin.js\";\nexport * from \"./register.js\";\nexport {\n registerTrajectoryLoggerApp,\n TRAJECTORY_LOGGER_APP_NAME,\n TrajectoryLoggerAppView,\n TrajectoryLoggerView,\n trajectoryLoggerApp,\n} from \"./ui.js\";\n"],"mappings":"AAeA,SAAS,QAAQ,uBAAuB;AACxC,SAAS,WAAAA,UAAS,8BAA8B;AAChD,cAAc;AACd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["default"]}
@@ -0,0 +1,21 @@
1
+ import type { TrajectoryDetail, UIEvaluationEvent, UILlmCall, UIProviderAccess, UIToolEvent } from "./api-client";
2
+ export type PhaseName = "HANDLE" | "PLAN" | "ACTION" | "EVALUATE";
3
+ export type PhaseStatus = "idle" | "active" | "done" | "skipped" | "error";
4
+ export declare const PHASES: readonly PhaseName[];
5
+ export interface PhaseSummary {
6
+ phase: PhaseName;
7
+ status: PhaseStatus;
8
+ summary: string | null;
9
+ llmCalls: UILlmCall[];
10
+ providerAccesses: UIProviderAccess[];
11
+ toolEvents: UIToolEvent[];
12
+ evaluationEvents: UIEvaluationEvent[];
13
+ }
14
+ export declare function extractShouldRespondDecision(call: UILlmCall): {
15
+ decision: string;
16
+ reasoning?: string;
17
+ } | null;
18
+ export declare function summarizePhases(detail: TrajectoryDetail | null, options?: {
19
+ trajectoryActive?: boolean;
20
+ }): PhaseSummary[];
21
+ //# sourceMappingURL=phases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../src/phases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACZ,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E,eAAO,MAAM,MAAM,EAAE,SAAS,SAAS,EAK7B,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC;AAmBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBjD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,YAAY,EAAE,CAmEhB"}
package/dist/phases.js ADDED
@@ -0,0 +1,154 @@
1
+ const PHASES = [
2
+ "HANDLE",
3
+ "PLAN",
4
+ "ACTION",
5
+ "EVALUATE"
6
+ ];
7
+ const HANDLE_TYPES = /* @__PURE__ */ new Set(["should_respond", "compose_state"]);
8
+ const PLAN_TYPES = /* @__PURE__ */ new Set(["reasoning", "response", "action"]);
9
+ const EVALUATE_TYPES = /* @__PURE__ */ new Set([
10
+ "evaluation",
11
+ "evaluator",
12
+ "observation_extraction",
13
+ "turn_complete"
14
+ ]);
15
+ function phaseOf(call) {
16
+ const t = (call.stepType || call.purpose || "").toLowerCase();
17
+ if (HANDLE_TYPES.has(t)) return "HANDLE";
18
+ if (PLAN_TYPES.has(t)) return "PLAN";
19
+ if (EVALUATE_TYPES.has(t)) return "EVALUATE";
20
+ return null;
21
+ }
22
+ function extractShouldRespondDecision(call) {
23
+ const text = call.response.trim();
24
+ if (!text) return null;
25
+ const m = text.match(/\{[\s\S]*\}/);
26
+ if (m) {
27
+ try {
28
+ const obj = JSON.parse(m[0]);
29
+ const a = obj.action ?? obj.decision ?? obj.shouldRespond;
30
+ if (typeof a === "string" && a.length > 0) {
31
+ const r = obj.reasoning ?? obj.rationale;
32
+ return typeof r === "string" ? { decision: a.toUpperCase(), reasoning: r } : { decision: a.toUpperCase() };
33
+ }
34
+ } catch {
35
+ }
36
+ }
37
+ const word = text.match(/\b(RESPOND|REPLY|ANSWER|IGNORE|STOP|SKIP)\b/i);
38
+ return word ? { decision: word[0].toUpperCase() } : null;
39
+ }
40
+ function summarizePhases(detail, options = {}) {
41
+ const llmCalls = detail?.llmCalls ?? [];
42
+ const providerAccesses = detail?.providerAccesses ?? [];
43
+ const toolEvents = detail?.toolEvents ?? [];
44
+ const evaluationEvents = detail?.evaluationEvents ?? [];
45
+ const handleCalls = llmCalls.filter((c) => phaseOf(c) === "HANDLE");
46
+ const planCalls = llmCalls.filter((c) => phaseOf(c) === "PLAN");
47
+ const evalCalls = llmCalls.filter((c) => phaseOf(c) === "EVALUATE");
48
+ const handle = summarizeHandle(handleCalls, providerAccesses);
49
+ const plan = summarizePlan(planCalls);
50
+ const action = summarizeAction(toolEvents);
51
+ const evaluate = summarizeEvaluate(evalCalls, evaluationEvents);
52
+ const out = [
53
+ {
54
+ phase: "HANDLE",
55
+ ...handle,
56
+ llmCalls: handleCalls,
57
+ providerAccesses,
58
+ toolEvents: [],
59
+ evaluationEvents: []
60
+ },
61
+ {
62
+ phase: "PLAN",
63
+ ...plan,
64
+ llmCalls: planCalls,
65
+ providerAccesses: [],
66
+ toolEvents: [],
67
+ evaluationEvents: []
68
+ },
69
+ {
70
+ phase: "ACTION",
71
+ ...action,
72
+ llmCalls: [],
73
+ providerAccesses: [],
74
+ toolEvents,
75
+ evaluationEvents: []
76
+ },
77
+ {
78
+ phase: "EVALUATE",
79
+ ...evaluate,
80
+ llmCalls: evalCalls,
81
+ providerAccesses: [],
82
+ toolEvents: [],
83
+ evaluationEvents
84
+ }
85
+ ];
86
+ if (options.trajectoryActive) {
87
+ let last = -1;
88
+ for (let i = 0; i < out.length; i++) {
89
+ if (out[i].status !== "idle") last = i;
90
+ }
91
+ if (last >= 0 && last < out.length - 1 && out[last].status === "done" && out.slice(last + 1).every((p) => p.status === "idle")) {
92
+ out[last] = { ...out[last], status: "active" };
93
+ }
94
+ }
95
+ return out;
96
+ }
97
+ function summarizeHandle(llmCalls, providerAccesses) {
98
+ const respond = llmCalls.find(
99
+ (c) => (c.stepType || c.purpose || "").toLowerCase() === "should_respond"
100
+ );
101
+ if (respond) {
102
+ const parsed = extractShouldRespondDecision(respond);
103
+ if (parsed) {
104
+ const skip = /IGNORE|STOP|SKIP/i.test(parsed.decision);
105
+ return {
106
+ status: skip ? "skipped" : "done",
107
+ summary: parsed.decision.toLowerCase()
108
+ };
109
+ }
110
+ return { status: "done", summary: null };
111
+ }
112
+ if (llmCalls.length > 0 || providerAccesses.length > 0) {
113
+ return { status: "done", summary: `${providerAccesses.length} ctx` };
114
+ }
115
+ return { status: "idle", summary: null };
116
+ }
117
+ function summarizePlan(llmCalls) {
118
+ const last = llmCalls[llmCalls.length - 1];
119
+ if (!last) return { status: "idle", summary: null };
120
+ return { status: "done", summary: last.actionType || null };
121
+ }
122
+ function summarizeAction(events) {
123
+ if (events.length === 0) return { status: "idle", summary: null };
124
+ const e = events[events.length - 1];
125
+ const name = e.actionName || e.toolName || e.name || "action";
126
+ if (e.type === "tool_error" || e.error || e.success === false) {
127
+ return { status: "error", summary: name };
128
+ }
129
+ if (e.type === "tool_result" || e.status === "completed" || e.success === true) {
130
+ return { status: "done", summary: name };
131
+ }
132
+ if (e.status === "skipped") return { status: "skipped", summary: name };
133
+ return { status: "active", summary: name };
134
+ }
135
+ function summarizeEvaluate(llmCalls, events) {
136
+ if (events.length > 0) {
137
+ const e = events[events.length - 1];
138
+ const name = e.evaluatorName || e.name || "evaluator";
139
+ if (e.error || e.success === false) {
140
+ return { status: "error", summary: name };
141
+ }
142
+ if (e.decision)
143
+ return { status: "done", summary: `${name}: ${e.decision}` };
144
+ return { status: "done", summary: name };
145
+ }
146
+ if (llmCalls.length > 0) return { status: "done", summary: null };
147
+ return { status: "idle", summary: null };
148
+ }
149
+ export {
150
+ PHASES,
151
+ extractShouldRespondDecision,
152
+ summarizePhases
153
+ };
154
+ //# sourceMappingURL=phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/phases.ts"],"sourcesContent":["import type {\n TrajectoryDetail,\n UIEvaluationEvent,\n UILlmCall,\n UIProviderAccess,\n UIToolEvent,\n} from \"./api-client.js\";\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"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `@elizaos/plugin-trajectory-logger` Plugin object — the runtime contract. This
3
+ * plugin contributes only view *declarations* (string `componentExport` /
4
+ * `bundlePath`), no actions, providers, services, or routes. Kept free of any
5
+ * UI imports so the agent can import it to register the plugin's views without
6
+ * pulling the React trajectory surface into the Node process. The package
7
+ * barrel (`index.ts`) re-exports this plus the UI for browser/view-bundle
8
+ * consumers.
9
+ */
10
+ import type { Plugin } from "@elizaos/core";
11
+ declare const trajectoryLoggerPlugin: Plugin;
12
+ export { trajectoryLoggerPlugin };
13
+ export default trajectoryLoggerPlugin;
14
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,QAAA,MAAM,sBAAsB,EAAE,MA8C7B,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,eAAe,sBAAsB,CAAC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,51 @@
1
+ const trajectoryLoggerPlugin = {
2
+ name: "@elizaos/plugin-trajectory-logger",
3
+ description: "Realtime trajectory inspector for HANDLE / PLAN / ACTION / EVALUATE phase drilldowns.",
4
+ views: [
5
+ // ONE declaration → GUI + XR + TUI, all drawn from the single
6
+ // TrajectoryLoggerView spatial source. `modalities` is a plain literal here
7
+ // (plugin.ts is not in the view bundle), so no brand-new `@elizaos/core`
8
+ // runtime export reaches the bundle build.
9
+ {
10
+ id: "trajectory-logger",
11
+ label: "Trajectory Logger",
12
+ developerOnly: true,
13
+ description: "Realtime view of the agent's last and pending HANDLE / PLAN / ACTION / EVALUATE turns",
14
+ icon: "Activity",
15
+ path: "/trajectory-logger",
16
+ modalities: ["gui", "xr", "tui"],
17
+ bundlePath: "dist/views/bundle.js",
18
+ componentExport: "TrajectoryLoggerView",
19
+ capabilities: [
20
+ {
21
+ id: "list-trajectories",
22
+ description: "List recent agent trajectories",
23
+ params: {
24
+ limit: { type: "number", description: "Maximum trajectories" }
25
+ }
26
+ },
27
+ { id: "open-latest", description: "Open the latest trajectory detail" },
28
+ {
29
+ id: "filter-phase",
30
+ description: "Summarize trajectories by phase",
31
+ params: {
32
+ phase: {
33
+ type: "string",
34
+ description: "Phase name such as HANDLE, PLAN, ACTION, EVALUATE"
35
+ }
36
+ }
37
+ },
38
+ { id: "refresh", description: "Refresh trajectory logger state" }
39
+ ],
40
+ tags: ["developer", "trajectory", "debugging", "terminal"],
41
+ visibleInManager: true,
42
+ desktopTabEnabled: true
43
+ }
44
+ ]
45
+ };
46
+ var plugin_default = trajectoryLoggerPlugin;
47
+ export {
48
+ plugin_default as default,
49
+ trajectoryLoggerPlugin
50
+ };
51
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * `@elizaos/plugin-trajectory-logger` Plugin object — the runtime contract. This\n * plugin contributes only view *declarations* (string `componentExport` /\n * `bundlePath`), no actions, providers, services, or routes. Kept free of any\n * UI imports so the agent can import it to register the plugin's views without\n * pulling the React trajectory surface into the Node process. The package\n * barrel (`index.ts`) re-exports this plus the UI for browser/view-bundle\n * consumers.\n */\nimport type { Plugin } from \"@elizaos/core\";\n\nconst trajectoryLoggerPlugin: Plugin = {\n name: \"@elizaos/plugin-trajectory-logger\",\n description:\n \"Realtime trajectory inspector for HANDLE / PLAN / ACTION / EVALUATE phase drilldowns.\",\n views: [\n // ONE declaration → GUI + XR + TUI, all drawn from the single\n // TrajectoryLoggerView spatial source. `modalities` is a plain literal here\n // (plugin.ts is not in the view bundle), so no brand-new `@elizaos/core`\n // runtime export reaches the bundle build.\n {\n id: \"trajectory-logger\",\n label: \"Trajectory Logger\",\n developerOnly: true,\n description:\n \"Realtime view of the agent's last and pending HANDLE / PLAN / ACTION / EVALUATE turns\",\n icon: \"Activity\",\n path: \"/trajectory-logger\",\n modalities: [\"gui\", \"xr\", \"tui\"],\n bundlePath: \"dist/views/bundle.js\",\n componentExport: \"TrajectoryLoggerView\",\n capabilities: [\n {\n id: \"list-trajectories\",\n description: \"List recent agent trajectories\",\n params: {\n limit: { type: \"number\", description: \"Maximum trajectories\" },\n },\n },\n { id: \"open-latest\", description: \"Open the latest trajectory detail\" },\n {\n id: \"filter-phase\",\n description: \"Summarize trajectories by phase\",\n params: {\n phase: {\n type: \"string\",\n description: \"Phase name such as HANDLE, PLAN, ACTION, EVALUATE\",\n },\n },\n },\n { id: \"refresh\", description: \"Refresh trajectory logger state\" },\n ],\n tags: [\"developer\", \"trajectory\", \"debugging\", \"terminal\"],\n visibleInManager: true,\n desktopTabEnabled: true,\n },\n ],\n};\n\nexport { trajectoryLoggerPlugin };\nexport default trajectoryLoggerPlugin;\n"],"mappings":"AAWA,MAAM,yBAAiC;AAAA,EACrC,MAAM;AAAA,EACN,aACE;AAAA,EACF,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,eAAe;AAAA,MACf,aACE;AAAA,MACF,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY,CAAC,OAAO,MAAM,KAAK;AAAA,MAC/B,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,cAAc;AAAA,QACZ;AAAA,UACE,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,OAAO,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,UAC/D;AAAA,QACF;AAAA,QACA,EAAE,IAAI,eAAe,aAAa,oCAAoC;AAAA,QACtE;AAAA,UACE,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,OAAO;AAAA,cACL,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QACA,EAAE,IAAI,WAAW,aAAa,kCAAkC;AAAA,MAClE;AAAA,MACA,MAAM,CAAC,aAAa,cAAc,aAAa,UAAU;AAAA,MACzD,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF;AAGA,IAAO,iBAAQ;","names":[]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Register the trajectory logger view for terminal rendering.
3
+ *
4
+ * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal
5
+ * registry. This makes the trajectory logger's `"tui"` modality render for real
6
+ * in the terminal (the unified {@link TrajectoryLoggerSpatialView}) rather than
7
+ * only navigating a GUI shell.
8
+ * A module-level snapshot lets a host push live trajectory data; with no host it
9
+ * defaults to the empty "no turn yet" state.
10
+ */
11
+ import { type TrajectorySnapshot } from "./components/TrajectoryLoggerSpatialView.tsx";
12
+ /** Update the snapshot the registered terminal view renders from. */
13
+ export declare function setTrajectoryLoggerTerminalSnapshot(next: TrajectorySnapshot): void;
14
+ /** Register the trajectory logger terminal view; returns an unregister function. */
15
+ export declare function registerTrajectoryLoggerTerminalView(): () => void;
16
+ //# sourceMappingURL=register-terminal-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-terminal-view.d.ts","sourceRoot":"","sources":["../src/register-terminal-view.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,8CAA8C,CAAC;AAItD,qEAAqE;AACrE,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAEN;AAED,oFAAoF;AACpF,wBAAgB,oCAAoC,IAAI,MAAM,IAAI,CAIjE"}
@@ -0,0 +1,21 @@
1
+ import { registerSpatialTerminalView } from "@elizaos/ui/spatial/tui";
2
+ import { createElement } from "react";
3
+ import {
4
+ EMPTY_TRAJECTORY_SNAPSHOT,
5
+ TrajectoryLoggerSpatialView
6
+ } from "./components/TrajectoryLoggerSpatialView.js";
7
+ let current = EMPTY_TRAJECTORY_SNAPSHOT;
8
+ function setTrajectoryLoggerTerminalSnapshot(next) {
9
+ current = next;
10
+ }
11
+ function registerTrajectoryLoggerTerminalView() {
12
+ return registerSpatialTerminalView(
13
+ "trajectory-logger",
14
+ () => createElement(TrajectoryLoggerSpatialView, { snapshot: current })
15
+ );
16
+ }
17
+ export {
18
+ registerTrajectoryLoggerTerminalView,
19
+ setTrajectoryLoggerTerminalSnapshot
20
+ };
21
+ //# sourceMappingURL=register-terminal-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register-terminal-view.tsx"],"sourcesContent":["/**\n * Register the trajectory logger view for terminal rendering.\n *\n * The agent terminal mounts plugin views by id from the `@elizaos/tui` terminal\n * registry. This makes the trajectory logger's `\"tui\"` modality render for real\n * in the terminal (the unified {@link TrajectoryLoggerSpatialView}) rather than\n * only navigating a GUI shell.\n * A module-level snapshot lets a host push live trajectory data; with no host it\n * defaults to the empty \"no turn yet\" state.\n */\n\nimport { registerSpatialTerminalView } from \"@elizaos/ui/spatial/tui\";\nimport { createElement } from \"react\";\nimport {\n EMPTY_TRAJECTORY_SNAPSHOT,\n TrajectoryLoggerSpatialView,\n type TrajectorySnapshot,\n} from \"./components/TrajectoryLoggerSpatialView.js\";\n\nlet current: TrajectorySnapshot = EMPTY_TRAJECTORY_SNAPSHOT;\n\n/** Update the snapshot the registered terminal view renders from. */\nexport function setTrajectoryLoggerTerminalSnapshot(\n next: TrajectorySnapshot,\n): void {\n current = next;\n}\n\n/** Register the trajectory logger terminal view; returns an unregister function. */\nexport function registerTrajectoryLoggerTerminalView(): () => void {\n return registerSpatialTerminalView(\"trajectory-logger\", () =>\n createElement(TrajectoryLoggerSpatialView, { snapshot: current }),\n );\n}\n"],"mappings":"AAWA,SAAS,mCAAmC;AAC5C,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,IAAI,UAA8B;AAG3B,SAAS,oCACd,MACM;AACN,YAAU;AACZ;AAGO,SAAS,uCAAmD;AACjE,SAAO;AAAA,IAA4B;AAAA,IAAqB,MACtD,cAAc,6BAA6B,EAAE,UAAU,QAAQ,CAAC;AAAA,EAClE;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Side-effect entry — registers the Trajectory Logger overlay app.
3
+ *
4
+ * Load once during app startup to register the app.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,18 @@
1
+ import { registerAppShellPage } from "@elizaos/ui/app-shell-registry";
2
+ import { registerTrajectoryLoggerApp } from "./components/trajectory-logger-app.js";
3
+ registerTrajectoryLoggerApp();
4
+ if (typeof window === "undefined") {
5
+ void import("./register-terminal-view.js").then((m) => m.registerTrajectoryLoggerTerminalView()).catch(() => {
6
+ });
7
+ }
8
+ registerAppShellPage({
9
+ id: "trajectory-logger",
10
+ pluginId: "@elizaos/plugin-trajectory-logger",
11
+ label: "Trajectory Logger",
12
+ icon: "Activity",
13
+ path: "/trajectory-logger",
14
+ loader: () => import("./ui.js").then((m) => ({
15
+ default: m.TrajectoryLoggerView
16
+ }))
17
+ });
18
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register.ts"],"sourcesContent":["/**\n * Side-effect entry — registers the Trajectory Logger overlay app.\n *\n * Load once during app startup to register the app.\n */\n\nimport { registerAppShellPage } from \"@elizaos/ui/app-shell-registry\";\nimport { registerTrajectoryLoggerApp } from \"./components/trajectory-logger-app.js\";\n\nregisterTrajectoryLoggerApp();\n\n// In a terminal host (the Node agent, no DOM), register the trajectory logger\n// view so it renders inline in the terminal. Lazy + DOM-guarded so the terminal\n// engine stays out of browser/mobile bundles.\nif (typeof window === \"undefined\") {\n void import(\"./register-terminal-view.js\")\n .then((m) => m.registerTrajectoryLoggerTerminalView())\n .catch(() => {\n // Terminal rendering is best-effort; never block plugin load.\n });\n}\n\n// iOS/Android disable DynamicViewLoader, so register this view's already-bundled\n// component as an in-process app-shell page. Web/desktop dedupe it against the\n// agent-served bundle entry (network wins -> DynamicViewLoader), so it only adds\n// the render path on native. See packages/app/src/mobile-plugin-views.ts.\nregisterAppShellPage({\n id: \"trajectory-logger\",\n pluginId: \"@elizaos/plugin-trajectory-logger\",\n label: \"Trajectory Logger\",\n icon: \"Activity\",\n path: \"/trajectory-logger\",\n loader: () =>\n import(\"./ui.js\").then((m) => ({\n default: m.TrajectoryLoggerView,\n })),\n});\n"],"mappings":"AAMA,SAAS,4BAA4B;AACrC,SAAS,mCAAmC;AAE5C,4BAA4B;AAK5B,IAAI,OAAO,WAAW,aAAa;AACjC,OAAK,OAAO,6BAA6B,EACtC,KAAK,CAAC,MAAM,EAAE,qCAAqC,CAAC,EACpD,MAAM,MAAM;AAAA,EAEb,CAAC;AACL;AAMA,qBAAqB;AAAA,EACnB,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ,MACN,OAAO,SAAS,EAAE,KAAK,CAAC,OAAO;AAAA,IAC7B,SAAS,EAAE;AAAA,EACb,EAAE;AACN,CAAC;","names":[]}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { TrajectoryLoggerAppView } from "./components/TrajectoryLoggerAppView";
2
+ export { TrajectoryLoggerView } from "./components/TrajectoryLoggerView";
3
+ export { registerTrajectoryLoggerApp, TRAJECTORY_LOGGER_APP_NAME, trajectoryLoggerApp, } from "./components/trajectory-logger-app";
4
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oCAAoC,CAAC"}