@agent-native/core 0.120.1 → 0.120.2

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 (170) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +9 -0
  3. package/corpus/core/docs/content/extensions.mdx +23 -4
  4. package/corpus/core/package.json +1 -1
  5. package/corpus/core/src/agent/production-agent.ts +4 -0
  6. package/corpus/core/src/agent/run-manager.ts +36 -10
  7. package/corpus/core/src/agent/types.ts +2 -0
  8. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +16 -3
  9. package/corpus/core/src/client/settings/ExtensionsSettingsContent.tsx +24 -0
  10. package/corpus/core/src/client/settings/SettingsPanel.tsx +10 -0
  11. package/corpus/core/src/deploy/build.ts +3 -0
  12. package/corpus/core/src/server/analytics.ts +154 -25
  13. package/corpus/core/src/templates/chat/app/components/layout/Sidebar.tsx +35 -6
  14. package/corpus/core/src/templates/chat/app/routes/extensions._index.tsx +2 -2
  15. package/corpus/core/src/templates/chat/netlify.toml +1 -0
  16. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  17. package/corpus/core/src/vite/client.ts +6 -0
  18. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +27 -43
  19. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +19 -8
  20. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +2 -2
  21. package/corpus/templates/analytics/AGENTS.md +20 -8
  22. package/corpus/templates/analytics/actions/get-explorer-dashboard.ts +3 -0
  23. package/corpus/templates/analytics/actions/list-dashboard-usage-stats.ts +140 -46
  24. package/corpus/templates/analytics/actions/migrate-analytics-artifacts.ts +48 -0
  25. package/corpus/templates/analytics/actions/save-analysis.ts +2 -3
  26. package/corpus/templates/analytics/actions/view-screen.ts +1 -1
  27. package/corpus/templates/analytics/app/components/dashboard/DashboardMetadata.tsx +77 -0
  28. package/corpus/templates/analytics/app/components/dashboard/DashboardPanelSkeleton.tsx +7 -1
  29. package/corpus/templates/analytics/app/components/layout/NewDashboardDialog.tsx +1 -0
  30. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +103 -502
  31. package/corpus/templates/analytics/app/global.css +30 -0
  32. package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +2 -2
  33. package/corpus/templates/analytics/app/i18n-data.ts +80 -0
  34. package/corpus/templates/analytics/app/pages/Agents.tsx +49 -2
  35. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +54 -11
  36. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +3 -53
  37. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +23 -25
  38. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  39. package/corpus/templates/analytics/app/routes/analyses._index.tsx +3 -2
  40. package/corpus/templates/analytics/app/routes/extensions._index.tsx +2 -2
  41. package/corpus/templates/analytics/changelog/2026-07-23-analytics-now-groups-saved-analyses-and-embedded-extensions-.md +6 -0
  42. package/corpus/templates/analytics/changelog/2026-07-23-dashboard-menus-show-who-created-and-last-updated-each-dashb.md +6 -0
  43. package/corpus/templates/analytics/changelog/2026-07-23-dashboard-usage-now-loads-reliably-for-organizations-with-ma.md +6 -0
  44. package/corpus/templates/analytics/changelog/2026-07-23-long-dashboard-building-requests-now-continue-without-stoppi.md +6 -0
  45. package/corpus/templates/analytics/netlify.toml +4 -0
  46. package/corpus/templates/analytics/server/db/schema.ts +4 -0
  47. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -1
  48. package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +1 -0
  49. package/corpus/templates/analytics/server/lib/migrate-analytics-artifacts.ts +1062 -0
  50. package/corpus/templates/analytics/server/plugins/agent-chat.ts +6 -52
  51. package/corpus/templates/analytics/server/plugins/core-routes.ts +1 -1
  52. package/corpus/templates/analytics/server/plugins/db.ts +10 -0
  53. package/corpus/templates/assets/actions/generate-image-batch.ts +36 -1
  54. package/corpus/templates/assets/actions/generate-image.ts +28 -1
  55. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +46 -8
  56. package/corpus/templates/assets/app/routes/extensions._index.tsx +2 -2
  57. package/corpus/templates/assets/changelog/2026-07-23-assets-image-generation-now-recovers-after-a-completed-tool-.md +6 -0
  58. package/corpus/templates/assets/netlify.toml +1 -0
  59. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +38 -8
  60. package/corpus/templates/brain/app/routes/extensions._index.tsx +2 -2
  61. package/corpus/templates/brain/netlify.toml +1 -0
  62. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +43 -5
  63. package/corpus/templates/calendar/app/routes/_app.extensions._index.tsx +2 -16
  64. package/corpus/templates/calendar/netlify.toml +1 -0
  65. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +35 -6
  66. package/corpus/templates/chat/app/routes/extensions._index.tsx +2 -2
  67. package/corpus/templates/chat/netlify.toml +1 -0
  68. package/corpus/templates/clips/app/components/library/library-layout.tsx +52 -6
  69. package/corpus/templates/clips/app/routes/_app.extensions._index.tsx +2 -16
  70. package/corpus/templates/clips/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  71. package/corpus/templates/clips/changelog/2026-07-23-meeting-recording-meters-and-dismissed-prompts.md +6 -0
  72. package/corpus/templates/clips/desktop/src/hooks/useMicMeter.ts +1 -1
  73. package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +2 -0
  74. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +1 -3
  75. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +86 -0
  76. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +24 -0
  77. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +5 -69
  78. package/corpus/templates/clips/desktop/src/styles.css +35 -3
  79. package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +13 -44
  80. package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +119 -17
  81. package/corpus/templates/clips/netlify.toml +1 -0
  82. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -7
  83. package/corpus/templates/content/app/routes/_app.extensions._index.tsx +2 -2
  84. package/corpus/templates/content/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  85. package/corpus/templates/content/netlify.toml +1 -0
  86. package/corpus/templates/design/app/components/layout/Sidebar.tsx +55 -17
  87. package/corpus/templates/design/app/routes/extensions._index.tsx +2 -2
  88. package/corpus/templates/design/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  89. package/corpus/templates/design/netlify.toml +1 -0
  90. package/corpus/templates/dispatch/app/dispatch-extensions.tsx +1 -1
  91. package/corpus/templates/dispatch/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  92. package/corpus/templates/dispatch/netlify.toml +1 -0
  93. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +41 -45
  94. package/corpus/templates/forms/app/routes/_app.extensions._index.tsx +2 -2
  95. package/corpus/templates/forms/changelog/2026-07-23-agent-settings-are-clearly-labeled-manage-agent-in-the-sideb.md +6 -0
  96. package/corpus/templates/forms/netlify.toml +1 -0
  97. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +36 -5
  98. package/corpus/templates/macros/app/routes/extensions._index.tsx +2 -2
  99. package/corpus/templates/macros/netlify.toml +1 -0
  100. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +0 -9
  101. package/corpus/templates/mail/app/routes/extensions._index.tsx +2 -2
  102. package/corpus/templates/mail/netlify.toml +1 -0
  103. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +38 -5
  104. package/corpus/templates/plan/app/routes/extensions._index.tsx +2 -2
  105. package/corpus/templates/plan/netlify.toml +1 -0
  106. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +47 -4
  107. package/corpus/templates/slides/app/routes/extensions._index.tsx +2 -2
  108. package/corpus/templates/slides/netlify.toml +1 -0
  109. package/corpus/templates/tasks/app/components/layout/Sidebar.tsx +37 -6
  110. package/corpus/templates/tasks/app/routes/extensions._index.tsx +2 -2
  111. package/corpus/templates/tasks/app/routes/settings.tsx +31 -0
  112. package/corpus/templates/tasks/netlify.toml +1 -0
  113. package/dist/agent/production-agent.d.ts.map +1 -1
  114. package/dist/agent/production-agent.js +4 -0
  115. package/dist/agent/production-agent.js.map +1 -1
  116. package/dist/agent/run-manager.d.ts +9 -0
  117. package/dist/agent/run-manager.d.ts.map +1 -1
  118. package/dist/agent/run-manager.js +25 -10
  119. package/dist/agent/run-manager.js.map +1 -1
  120. package/dist/agent/types.d.ts +2 -2
  121. package/dist/agent/types.d.ts.map +1 -1
  122. package/dist/agent/types.js.map +1 -1
  123. package/dist/client/extensions/ExtensionsListPage.d.ts +5 -1
  124. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  125. package/dist/client/extensions/ExtensionsListPage.js +5 -3
  126. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  127. package/dist/client/settings/ExtensionsSettingsContent.d.ts +2 -0
  128. package/dist/client/settings/ExtensionsSettingsContent.d.ts.map +1 -0
  129. package/dist/client/settings/ExtensionsSettingsContent.js +10 -0
  130. package/dist/client/settings/ExtensionsSettingsContent.js.map +1 -0
  131. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  132. package/dist/client/settings/SettingsPanel.js +10 -1
  133. package/dist/client/settings/SettingsPanel.js.map +1 -1
  134. package/dist/collab/awareness.d.ts +2 -2
  135. package/dist/collab/awareness.d.ts.map +1 -1
  136. package/dist/deploy/build.js +1 -0
  137. package/dist/deploy/build.js.map +1 -1
  138. package/dist/observability/routes.d.ts +3 -3
  139. package/dist/progress/routes.d.ts +1 -1
  140. package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
  141. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  142. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  143. package/dist/server/analytics.d.ts +9 -4
  144. package/dist/server/analytics.d.ts.map +1 -1
  145. package/dist/server/analytics.js +111 -22
  146. package/dist/server/analytics.js.map +1 -1
  147. package/dist/templates/chat/app/components/layout/Sidebar.tsx +35 -6
  148. package/dist/templates/chat/app/routes/extensions._index.tsx +2 -2
  149. package/dist/templates/chat/netlify.toml +1 -0
  150. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  151. package/dist/vite/client.d.ts.map +1 -1
  152. package/dist/vite/client.js +2 -0
  153. package/dist/vite/client.js.map +1 -1
  154. package/docs/content/extensions.mdx +23 -4
  155. package/package.json +1 -1
  156. package/src/agent/production-agent.ts +4 -0
  157. package/src/agent/run-manager.ts +36 -10
  158. package/src/agent/types.ts +2 -0
  159. package/src/client/extensions/ExtensionsListPage.tsx +16 -3
  160. package/src/client/settings/ExtensionsSettingsContent.tsx +24 -0
  161. package/src/client/settings/SettingsPanel.tsx +10 -0
  162. package/src/deploy/build.ts +3 -0
  163. package/src/server/analytics.ts +154 -25
  164. package/src/templates/chat/app/components/layout/Sidebar.tsx +35 -6
  165. package/src/templates/chat/app/routes/extensions._index.tsx +2 -2
  166. package/src/templates/chat/netlify.toml +1 -0
  167. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +16 -0
  168. package/src/vite/client.ts +6 -0
  169. package/corpus/templates/analytics/app/components/layout/NewAnalysisDialog.tsx +0 -165
  170. package/corpus/templates/analytics/app/pages/analyses/AnalysesList.tsx +0 -175
@@ -33,7 +33,6 @@ import {
33
33
  } from "@dnd-kit/core";
34
34
  import {
35
35
  IconArchive,
36
- IconClock,
37
36
  IconDotsVertical,
38
37
  IconEye,
39
38
  IconEyeOff,
@@ -45,7 +44,6 @@ import {
45
44
  IconPencil,
46
45
  IconPlus,
47
46
  IconTrash,
48
- IconUser,
49
47
  IconUsersGroup,
50
48
  IconWorld,
51
49
  IconX,
@@ -64,6 +62,7 @@ import { useSearchParams, useParams, useNavigate } from "react-router";
64
62
  import { toast } from "sonner";
65
63
 
66
64
  import { DashboardHistoryPanel } from "@/components/dashboard/DashboardHistoryPanel";
65
+ import { DashboardMetadata } from "@/components/dashboard/DashboardMetadata";
67
66
  import {
68
67
  DashboardTitleSkeleton,
69
68
  useSetPageTitle,
@@ -386,7 +385,9 @@ type FetchedDashboard = {
386
385
  hiddenBy: string | null;
387
386
  visibility: "private" | "org" | "public";
388
387
  ownerEmail: string | null;
388
+ createdAt: string | null;
389
389
  updatedAt: string | null;
390
+ updatedBy: string | null;
390
391
  } & ResourceAccess;
391
392
 
392
393
  function parseDashboardDemoMetadata(
@@ -454,7 +455,9 @@ async function fetchDashboard(id: string): Promise<FetchedDashboard | null> {
454
455
  ? data.visibility
455
456
  : "private",
456
457
  ownerEmail: typeof data.ownerEmail === "string" ? data.ownerEmail : null,
458
+ createdAt: typeof data.createdAt === "string" ? data.createdAt : null,
457
459
  updatedAt: typeof data.updatedAt === "string" ? data.updatedAt : null,
460
+ updatedBy: typeof data.updatedBy === "string" ? data.updatedBy : null,
458
461
  role: typeof data.role === "string" ? data.role : undefined,
459
462
  canEdit: typeof data.canEdit === "boolean" ? data.canEdit : undefined,
460
463
  canManage:
@@ -503,9 +506,15 @@ export default function SqlDashboardPage() {
503
506
  "private" | "org" | "public" | null
504
507
  >(null);
505
508
  const [dashboardOwner, setDashboardOwner] = useState<string | null>(null);
509
+ const [dashboardCreatedAt, setDashboardCreatedAt] = useState<string | null>(
510
+ null,
511
+ );
506
512
  const [dashboardUpdatedAt, setDashboardUpdatedAt] = useState<string | null>(
507
513
  null,
508
514
  );
515
+ const [dashboardUpdatedBy, setDashboardUpdatedBy] = useState<string | null>(
516
+ null,
517
+ );
509
518
  const [resourceAccess, setResourceAccess] = useState<ResourceAccess | null>(
510
519
  null,
511
520
  );
@@ -723,7 +732,9 @@ export default function SqlDashboardPage() {
723
732
  setHiddenAt(null);
724
733
  setDashboardVisibility(null);
725
734
  setDashboardOwner(null);
735
+ setDashboardCreatedAt(null);
726
736
  setDashboardUpdatedAt(null);
737
+ setDashboardUpdatedBy(null);
727
738
  setResourceAccess(null);
728
739
  if (!dashboardId) setLoaded(true);
729
740
  }, [dashboardId]);
@@ -756,7 +767,9 @@ export default function SqlDashboardPage() {
756
767
  setHiddenAt(fetched?.hiddenAt ?? null);
757
768
  setDashboardVisibility(fetchedVisibility);
758
769
  setDashboardOwner(fetched?.ownerEmail ?? null);
770
+ setDashboardCreatedAt(fetched?.createdAt ?? null);
759
771
  setDashboardUpdatedAt(fetched?.updatedAt ?? null);
772
+ setDashboardUpdatedBy(fetched?.updatedBy ?? null);
760
773
  setResourceAccess(
761
774
  fetched
762
775
  ? {
@@ -1502,30 +1515,15 @@ export default function SqlDashboardPage() {
1502
1515
  </TooltipTrigger>
1503
1516
  <TooltipContent>{t("sqlDashboard.details")}</TooltipContent>
1504
1517
  </Tooltip>
1505
- <DropdownMenuContent align="end" className="w-56">
1518
+ <DropdownMenuContent align="end" className="w-72">
1506
1519
  <DropdownMenuLabel className="font-normal">
1507
- <div className="flex flex-col gap-1.5 text-xs text-muted-foreground">
1508
- {dashboardUpdatedAt && (
1509
- <span className="flex items-center gap-1.5">
1510
- <IconClock className="h-3 w-3" />
1511
- {t("sqlDashboard.updated", {
1512
- date: new Date(dashboardUpdatedAt).toLocaleDateString(
1513
- "en-US",
1514
- {
1515
- year: "numeric",
1516
- month: "short",
1517
- day: "numeric",
1518
- },
1519
- ),
1520
- })}
1521
- </span>
1522
- )}
1523
- {dashboardOwner && (
1524
- <span className="flex items-center gap-1.5">
1525
- <IconUser className="h-3 w-3" />
1526
- {dashboardOwner.split("@")[0]}
1527
- </span>
1528
- )}
1520
+ <DashboardMetadata
1521
+ createdAt={dashboardCreatedAt}
1522
+ createdBy={dashboardOwner}
1523
+ updatedAt={dashboardUpdatedAt}
1524
+ updatedBy={dashboardUpdatedBy}
1525
+ />
1526
+ <div className="mt-2 flex flex-col gap-1.5 text-xs text-muted-foreground">
1529
1527
  {dashboardVisibility ? (
1530
1528
  <span className="flex items-center gap-1.5">
1531
1529
  {dashboardVisibility === "public" ? (
@@ -151,12 +151,12 @@ export default function AnalysisDetail() {
151
151
  send({
152
152
  message: t("analyses.rerunMessage", { name: analysis.name }),
153
153
  context:
154
- `This is a re-run of a saved ad-hoc analysis. REAL_DATA_REQUIRED: run at least one real data-source query action before saving or answering; data-source-status, generate-chart, and save-analysis do not count as data queries. If no source can answer, report the exact unavailable/error result instead of saving guessed results.\n\n` +
154
+ `This is a re-run of a legacy saved ad-hoc analysis. Treat the refreshed result as a dashboard artifact: REAL_DATA_REQUIRED: run at least one real data-source query action before saving or answering; data-source-status and generate-chart do not count as data queries. If no source can answer, report the exact unavailable/error result instead of saving guessed results. If the report needs bespoke UI, create an extension and immediately embed it in a dashboard panel with config.extensionId. Only call save-analysis when the user explicitly asks to preserve this legacy analysis record.\n\n` +
155
155
  `Use these instructions to reproduce it:\n\n` +
156
156
  `Analysis ID: ${analysis.id}\n` +
157
157
  `Original question: ${analysis.question}\n\n` +
158
158
  `Instructions:\n${analysis.instructions}\n\n` +
159
- `After gathering the data, call save-analysis with id="${analysis.id}" to update the results.`,
159
+ `After gathering the data, call update-dashboard with a new dashboardId to save the refreshed artifact. If the user explicitly asked to update this legacy record instead, call save-analysis with id="${analysis.id}".`,
160
160
  submit: true,
161
161
  });
162
162
  };
@@ -1,10 +1,11 @@
1
+ import { Navigate } from "react-router";
2
+
1
3
  import { messagesByLocale } from "@/i18n-data";
2
- import AnalysesList from "@/pages/analyses/AnalysesList";
3
4
 
4
5
  export function meta() {
5
6
  return [{ title: messagesByLocale["en-US"].routeTitles.analyses }];
6
7
  }
7
8
 
8
9
  export default function AnalysesRoute() {
9
- return <AnalysesList />;
10
+ return <Navigate to="/dashboards" replace />;
10
11
  }
@@ -1,4 +1,4 @@
1
- import { ExtensionsListPage } from "@agent-native/core/client/extensions";
1
+ import { Navigate } from "react-router";
2
2
 
3
3
  import { messagesByLocale } from "@/i18n-data";
4
4
 
@@ -7,5 +7,5 @@ export function meta() {
7
7
  }
8
8
 
9
9
  export default function ExtensionsRoute() {
10
- return <ExtensionsListPage />;
10
+ return <Navigate to="/settings#extensions" replace />;
11
11
  }
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: changed
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Analytics now groups saved analyses and embedded extensions under dashboards
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: improved
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Dashboard menus show who created and last updated each dashboard, with admin usage sorting by views or edits.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Dashboard usage now loads reliably for organizations with many tracked events
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-07-23
4
+ ---
5
+
6
+ Long dashboard-building requests now continue without stopping mid-run
@@ -10,9 +10,13 @@ functions = "templates/analytics/.netlify/functions-internal"
10
10
 
11
11
  [build.environment]
12
12
  GA_MEASUREMENT_ID = "G-ESF7FYXGN9"
13
+ GTM_CONTAINER_ID = "GTM-N3WSTXZ"
13
14
  NITRO_PRESET = "netlify"
14
15
  NPM_CONFIG_PRODUCTION = "false"
15
16
  AGENT_PROD_CODE_EXECUTION = "sandboxed"
17
+ # Analytics dashboard creation can span multiple model/tool rounds; keep those
18
+ # turns on the durable background worker instead of the short foreground wall.
19
+ AGENT_CHAT_DURABLE_BACKGROUND = "true"
16
20
 
17
21
  # A2A delegation calls run a full agent loop (LLM + tool calls + DB queries).
18
22
  # Hosted agent chat uses a soft timeout before this function timeout so the
@@ -67,6 +67,10 @@ export const dashboardRevisions = table(
67
67
  t.dashboardId,
68
68
  t.createdAt,
69
69
  ),
70
+ orgDashboardIdx: index("dashboard_revisions_org_dashboard_idx").on(
71
+ t.orgId,
72
+ t.dashboardId,
73
+ ),
70
74
  }),
71
75
  );
72
76
 
@@ -15,7 +15,6 @@ export const INITIAL_TOOL_NAMES = [
15
15
  "list-session-recordings",
16
16
  "list-analyses",
17
17
  "get-analysis",
18
- "save-analysis",
19
18
  // Dashboard/extension INSPECTION stays on the initial surface so a
20
19
  // template-clone request can resolve and inspect the source on the first
21
20
  // turn. The MUTATING writers (update-dashboard, mutate-dashboard,
@@ -105,6 +105,7 @@ export function buildDashboardAgentContext(
105
105
  hiddenBy: dashboard.hiddenBy,
106
106
  createdAt: dashboard.createdAt,
107
107
  updatedAt: dashboard.updatedAt,
108
+ updatedBy: dashboard.updatedBy,
108
109
  url: `/dashboards/${dashboard.id}`,
109
110
  };
110
111
  return options.includeConfig === false ? base : { ...base, ...config };