@agent-native/core 0.141.6 → 0.141.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/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +3 -14
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +11 -6
- package/corpus/templates/analytics/.agents/skills/prometheus/SKILL.md +5 -5
- package/corpus/templates/analytics/AGENTS.md +2 -2
- package/corpus/templates/analytics/actions/compose-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/migrate-first-party-analytics-to-bigquery.ts +135 -0
- package/corpus/templates/analytics/actions/navigate.ts +1 -1
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +2 -2
- package/corpus/templates/analytics/actions/update-dashboard.ts +0 -1
- package/corpus/templates/analytics/actions/view-screen.ts +0 -20
- package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +5 -5
- package/corpus/templates/analytics/app/i18n-data.ts +2 -90
- package/corpus/templates/analytics/app/pages/Agents.tsx +0 -3
- package/corpus/templates/analytics/app/pages/Settings.tsx +22 -43
- package/corpus/templates/analytics/app/pages/settings/settings-search.ts +23 -20
- package/corpus/templates/analytics/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/analytics/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/analytics/app/routes/team.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-08-05-settings-no-longer-includes-an-unnecessary-about-section.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +1 -1
- package/corpus/templates/analytics/scripts/first-party-analytics-bigquery.sql +104 -0
- package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +0 -2
- package/corpus/templates/analytics/server/lib/first-party-analytics-backend.ts +1058 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics-health.ts +34 -15
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +57 -4
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +1 -3
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +2 -4
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +8 -6
- package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +16 -1
- package/corpus/templates/assets/AGENTS.md +1 -0
- package/corpus/templates/assets/actions/_helpers.ts +12 -0
- package/corpus/templates/assets/actions/generate-image.ts +9 -3
- package/corpus/templates/assets/actions/import-style-from-url.ts +115 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +3 -1
- package/corpus/templates/assets/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/assets/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/assets/app/routes/settings.tsx +5 -0
- package/corpus/templates/assets/app/routes/team.tsx +1 -1
- package/corpus/templates/assets/changelog/2026-08-05-brand-kits-can-import-a-website-s-hydrated-visual-language-a.md +6 -0
- package/corpus/templates/assets/changelog/2026-08-05-generated-images-now-hand-off-embeddable-previews-to-other-w.md +6 -0
- package/corpus/templates/assets/server/lib/generation.ts +58 -0
- package/corpus/templates/assets/shared/api.ts +12 -0
- package/corpus/templates/brain/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/brain/app/routes/team.tsx +1 -1
- package/corpus/templates/brain/app/routes.ts +1 -1
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +3 -1
- package/corpus/templates/calendar/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/calendar/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/calendar/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/chat/app/root.tsx +1 -1
- package/corpus/templates/chat/app/routes/agent.tsx +7 -7
- package/corpus/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/chat/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/chat/app/routes/team.tsx +1 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +1 -1
- package/corpus/templates/clips/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/clips/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/content/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/content/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/content/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/content/e2e/global-setup.ts +1 -1
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +6 -1
- package/corpus/templates/design/actions/analyze-brand-assets.ts +7 -7
- package/corpus/templates/design/actions/import-from-url.ts +6 -5
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +2 -2
- package/corpus/templates/design/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/design/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/design/app/routes/team.tsx +1 -1
- package/corpus/templates/design/changelog/2026-08-05-website-url-imports-now-capture-hydrated-browser-computed-de.md +6 -0
- package/corpus/templates/design/e2e/global-setup.ts +1 -1
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/dispatch/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/dispatch/app/routes/team.tsx +1 -1
- package/corpus/templates/factory/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/factory/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/factory/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/factory/app/routes/team.tsx +1 -1
- package/corpus/templates/forms/app/routes/_app.extensions._index.tsx +1 -1
- package/corpus/templates/forms/app/routes/_app.settings.$.tsx +1 -0
- package/corpus/templates/forms/app/routes/_app.team.tsx +1 -1
- package/corpus/templates/forms/shared/navigation.ts +1 -1
- package/corpus/templates/macros/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/macros/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/macros/app/routes/team.tsx +1 -1
- package/corpus/templates/mail/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/mail/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +1 -1
- package/corpus/templates/plan/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/plan/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/plan/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +3 -1
- package/corpus/templates/slides/actions/analyze-brand-assets.ts +7 -7
- package/corpus/templates/slides/actions/import-from-url.ts +6 -6
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +3 -0
- package/corpus/templates/slides/app/components/onboarding/FirstDeckOnboardingFlow.tsx +9 -3
- package/corpus/templates/slides/app/context/DeckContext.tsx +71 -20
- package/corpus/templates/slides/app/global.css +6 -0
- package/corpus/templates/slides/app/lib/create-deck-generation.ts +9 -5
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +17 -0
- package/corpus/templates/slides/app/pages/Index.tsx +16 -5
- package/corpus/templates/slides/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/slides/app/routes/settings.$.tsx +1 -0
- package/corpus/templates/slides/app/routes/team.tsx +1 -1
- package/corpus/templates/slides/changelog/2026-08-05-failed-deck-creation-and-reference-uploads-now-recover-clean.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-05-slides-recover-completed-generation-results-after-a-sync-hic.md +6 -0
- package/corpus/templates/slides/changelog/2026-08-05-website-url-imports-now-capture-hydrated-browser-computed-st.md +6 -0
- package/corpus/templates/tasks/app/components/layout/Header.tsx +3 -1
- package/corpus/templates/tasks/app/routes/extensions._index.tsx +1 -1
- package/corpus/templates/tasks/app/routes/settings.$.tsx +1 -0
- package/dist/agent/engine/ai-sdk-engine.js +49 -3
- package/dist/agent/production-agent.d.ts +1 -0
- package/dist/agent/production-agent.js +8 -0
- package/dist/agent/types.d.ts +7 -0
- package/dist/client/agent-chat-adapter.d.ts +1 -1
- package/dist/client/agent-chat-adapter.js +30 -3
- package/dist/client/agent-page/AgentWorkspaceContent.d.ts +1 -1
- package/dist/client/agent-page/AgentWorkspaceContent.js +13 -13
- package/dist/client/chat/run-recovery.js +5 -1
- package/dist/client/embed-auth.js +6 -2
- package/dist/client/error-format.js +12 -0
- package/dist/client/integrations/IntegrationsPanel.js +40 -6
- package/dist/client/org/OrgSwitcher.js +2 -2
- package/dist/client/org/TeamPage.js +92 -72
- package/dist/client/require-session.d.ts +1 -1
- package/dist/client/require-session.js +3 -3
- package/dist/client/resources/use-mcp-servers.d.ts +5 -0
- package/dist/client/resources/use-mcp-servers.js +36 -0
- package/dist/client/settings/AccountSettingsCard.js +40 -35
- package/dist/client/settings/AutomationsSection.js +1 -1
- package/dist/client/settings/DemoModeSection.d.ts +3 -1
- package/dist/client/settings/DemoModeSection.js +4 -1
- package/dist/client/settings/ExtensionsSettingsContent.js +1 -1
- package/dist/client/settings/SchedulingTimezoneField.d.ts +3 -1
- package/dist/client/settings/SchedulingTimezoneField.js +9 -5
- package/dist/client/settings/SettingsPanel.d.ts +4 -1
- package/dist/client/settings/SettingsPanel.js +21 -21
- package/dist/client/settings/SettingsTabsPage.d.ts +2 -2
- package/dist/client/settings/SettingsTabsPage.js +98 -45
- package/dist/client/settings/VoiceTranscriptionSection.js +6 -1
- package/dist/client/settings/useSettingsPanelController.js +47 -8
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/ingestion/website.d.ts +30 -0
- package/dist/localization/default-messages.d.ts +5 -0
- package/dist/localization/default-messages.js +5 -0
- package/dist/mcp-client/oauth-routes.js +1 -1
- package/dist/mcp-client/routes.d.ts +1 -0
- package/dist/mcp-client/routes.js +49 -0
- package/dist/navigation/index.js +16 -5
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +13 -13
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/call-agent.js +11 -0
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/auth.js +9 -7
- package/dist/server/identity-sso.js +2 -1
- package/dist/server/onboarding-html.js +57 -34
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/workspace-provider-oauth.js +1 -1
- package/dist/setup-connections/onboarding.js +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/sign-in-journey.d.ts +5 -2
- package/dist/shared/sign-in-journey.js +10 -4
- package/dist/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/dist/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/dist/templates/chat/app/root.tsx +1 -1
- package/dist/templates/chat/app/routes/agent.tsx +7 -7
- package/dist/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/dist/templates/chat/app/routes/settings.$.tsx +1 -0
- package/dist/templates/chat/app/routes/team.tsx +1 -1
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +37 -6
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +4 -2
- package/docs/content/authentication.mdx +4 -5
- package/docs/content/template-analytics-developers.mdx +1 -1
- package/docs/content/template-calendar-developers.mdx +1 -1
- package/docs/content/template-chat-developers.mdx +2 -2
- package/docs/content/template-content-developers.mdx +1 -1
- package/docs/content/template-mail-developers.mdx +1 -1
- package/docs/content/template-plan-developers.mdx +1 -1
- package/docs/content/toolkit-command-navigation.mdx +6 -6
- package/docs/content/toolkit-org-team.mdx +1 -1
- package/docs/content/toolkit-settings.mdx +8 -8
- package/docs/content/toolkit-setup-connections.mdx +1 -1
- package/package.json +1 -1
- package/src/templates/chat/app/components/layout/Layout.tsx +1 -1
- package/src/templates/chat/app/hooks/use-navigation-state.ts +1 -1
- package/src/templates/chat/app/root.tsx +1 -1
- package/src/templates/chat/app/routes/agent.tsx +7 -7
- package/src/templates/chat/app/routes/extensions._index.tsx +1 -1
- package/src/templates/chat/app/routes/settings.$.tsx +1 -0
- package/src/templates/chat/app/routes/team.tsx +1 -1
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +37 -6
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +4 -2
- package/corpus/templates/analytics/.agents/skills/dashboard-management/references/template-catalog-and-demo.md +0 -62
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +0 -369
- package/corpus/templates/analytics/actions/list-dashboard-templates.ts +0 -47
- package/corpus/templates/analytics/actions/list-native-v2-dashboard-templates.ts +0 -34
- package/corpus/templates/analytics/app/routes/catalog.tsx +0 -240
- package/src/templates/default/actions/navigate.spec.ts +0 -53
|
@@ -21,20 +21,20 @@ export default function AgentRoute() {
|
|
|
21
21
|
"learnings",
|
|
22
22
|
]);
|
|
23
23
|
const destination = resourceTabs.has(legacyTab)
|
|
24
|
-
? `/settings
|
|
24
|
+
? `/settings/agent/resources/${legacyTab}`
|
|
25
25
|
: legacyTab === "remote-agents"
|
|
26
|
-
? "/settings
|
|
26
|
+
? "/settings/agent/agents"
|
|
27
27
|
: legacyTab === "connections"
|
|
28
|
-
? "/settings
|
|
28
|
+
? "/settings/integrations"
|
|
29
29
|
: legacyTab === "jobs"
|
|
30
|
-
? "/settings
|
|
30
|
+
? "/settings/agent/automations"
|
|
31
31
|
: legacyTab === "access"
|
|
32
|
-
? "/settings
|
|
32
|
+
? "/settings/agent"
|
|
33
33
|
: ["llm", "app-models", "limits", "voice", "background"].includes(
|
|
34
34
|
legacyTab,
|
|
35
35
|
)
|
|
36
|
-
? `/settings
|
|
37
|
-
: "/settings
|
|
36
|
+
? `/settings/agent/${legacyTab}`
|
|
37
|
+
: "/settings/agent";
|
|
38
38
|
|
|
39
39
|
return <Navigate to={destination} replace />;
|
|
40
40
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, meta } from "./settings.js";
|
|
@@ -38,7 +38,35 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
38
38
|
|
|
39
39
|
Use web browsing only for public URLs. Auth-gated docs usually need their matching connector. For threads, read the parent and all replies; note when there are no replies, and inspect linked files or newer follow-ups when the source refers to them.
|
|
40
40
|
|
|
41
|
-
2.
|
|
41
|
+
2. Check whether this defect has already been reported.
|
|
42
|
+
|
|
43
|
+
A feedback channel holds months of reports and nobody remembers all of them,
|
|
44
|
+
so the same defect gets filed by different people weeks apart and every
|
|
45
|
+
filing reads as new. One recorded case: the same Clips recording bug was
|
|
46
|
+
filed almost word-for-word 29 days apart by the same reporter, and neither
|
|
47
|
+
message mentions the other. Another defect was reported fifteen times by
|
|
48
|
+
nine people across three months, was announced as fixed once in the middle,
|
|
49
|
+
and was reported again two weeks later.
|
|
50
|
+
|
|
51
|
+
Search before fixing, going back at least three months: the source channel
|
|
52
|
+
in the reporter's words and in your own, Sentry, and merged PR titles. Search
|
|
53
|
+
the feature name, the error text, and the surface separately — repeat reports
|
|
54
|
+
rarely share vocabulary.
|
|
55
|
+
|
|
56
|
+
- **No prior report** — proceed normally.
|
|
57
|
+
- **Prior report, no fix landed** — say how long it has been open. The person
|
|
58
|
+
forwarding it to you is likely seeing it for the second time too.
|
|
59
|
+
- **Prior report, fix landed** — this is a regression, and the bar is now
|
|
60
|
+
different. Patching it again and reporting done is exactly how it returns a
|
|
61
|
+
third time. Find why the first fix stopped holding, and leave behind
|
|
62
|
+
something that fails when it breaks again: a test that reproduces the
|
|
63
|
+
user's path, or an assertion in the flow the report names.
|
|
64
|
+
|
|
65
|
+
Report the repeat explicitly, with dates and reporters. A defect on its third
|
|
66
|
+
report is not a bug ticket, it is a missing check — and the missing check is
|
|
67
|
+
the deliverable, not the patch.
|
|
68
|
+
|
|
69
|
+
3. Decompose and categorize every actionable item.
|
|
42
70
|
|
|
43
71
|
Build a compact checklist before changing code. For each item, record the
|
|
44
72
|
symptom, expected behavior, evidence, and owning surface: UI, action/tool,
|
|
@@ -49,7 +77,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
49
77
|
- **Question or unclear**: Missing detail, contradictory feedback, or behavior you cannot inspect. Ask or flag it.
|
|
50
78
|
- **Out of scope**: Outside this repo, already shipped, intentionally unsupported, or too low-signal. Note briefly and skip.
|
|
51
79
|
|
|
52
|
-
|
|
80
|
+
4. For data, permissions, or resource-lifecycle feedback, verify the whole capability boundary before calling it UX.
|
|
53
81
|
|
|
54
82
|
- Check the supported create/read/update/delete lifecycle, including whether the backend/action exists when a UI control is missing.
|
|
55
83
|
- Inspect both the UI and the shared action/tool surface so agent and UI behavior stay in parity.
|
|
@@ -57,7 +85,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
57
85
|
- Treat possible cross-user or cross-organization exposure as a security/correctness bug and verify it before proposing polish.
|
|
58
86
|
- Keep undefined product policy separate from implementation bugs. If supported source types or scope semantics are not defined, flag the contract question instead of inventing behavior.
|
|
59
87
|
|
|
60
|
-
|
|
88
|
+
5. Check Sentry when the feedback smells like an error.
|
|
61
89
|
|
|
62
90
|
- Use the Sentry skill/plugin if available, or the repo's Sentry scripts if documented.
|
|
63
91
|
- Search by route, stack symbol, error text, and symptom keywords.
|
|
@@ -65,7 +93,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
65
93
|
- Cite issue IDs or links when you find a match.
|
|
66
94
|
- If nothing matches, say that plainly.
|
|
67
95
|
|
|
68
|
-
|
|
96
|
+
6. Fix only the clear bugs you agree with.
|
|
69
97
|
|
|
70
98
|
- Verify before fixing: reproduce locally, read the relevant code, inspect logs, or confirm with a stack trace.
|
|
71
99
|
- Keep each fix narrow and mapped to a feedback item.
|
|
@@ -73,7 +101,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
73
101
|
- Do not switch branches, stash, reset, force-push, or open a PR unless the user asks.
|
|
74
102
|
- Add or update focused tests when the bug risk warrants it.
|
|
75
103
|
|
|
76
|
-
|
|
104
|
+
7. Treat UX feedback with restraint.
|
|
77
105
|
|
|
78
106
|
Do not solve UX problems by adding more visible controls, helper text, banners, top-level nav, or always-open panels by default. Prefer cleaner interaction models:
|
|
79
107
|
|
|
@@ -85,7 +113,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
85
113
|
|
|
86
114
|
When proposing a UX change, write it as: what to change, why it helps, and the tradeoff. Keep each proposal short.
|
|
87
115
|
|
|
88
|
-
|
|
116
|
+
8. Verify changed behavior.
|
|
89
117
|
|
|
90
118
|
- Run the smallest relevant test or typecheck command.
|
|
91
119
|
- For UI fixes, inspect the actual screen with a browser tool you already
|
|
@@ -100,6 +128,9 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
100
128
|
Keep the final report short:
|
|
101
129
|
|
|
102
130
|
```md
|
|
131
|
+
## Repeat Reports
|
|
132
|
+
- [defect] - reported [N] times since [date] by [reporters]; [what now fails if it regresses]
|
|
133
|
+
|
|
103
134
|
## Bugs Fixed
|
|
104
135
|
- [feedback item] - [what changed, file:line]
|
|
105
136
|
|
|
@@ -204,7 +204,7 @@ For public pages (share links, embeds, marketing pages) that need anonymous view
|
|
|
204
204
|
```ts
|
|
205
205
|
const ret = window.location.pathname + window.location.search;
|
|
206
206
|
window.location.href =
|
|
207
|
-
"/
|
|
207
|
+
"/sign-in?return=" + encodeURIComponent(ret);
|
|
208
208
|
```
|
|
209
209
|
|
|
210
210
|
After successful sign-in (token / email-password / Google OAuth), the framework redirects to `return`. The path is validated as same-origin via the URL parser — open-redirect / header-injection inputs fall back to `/`.
|
|
@@ -230,7 +230,9 @@ will be rejected.
|
|
|
230
230
|
|
|
231
231
|
`AppProviders` applies `RequireSession` automatically on its private branch. It
|
|
232
232
|
resolves the session on the client and redirects signed-out visitors to
|
|
233
|
-
`/
|
|
233
|
+
`/sign-in?return=…` before mounting the routed shell. The legacy
|
|
234
|
+
`/_agent-native/sign-in` path remains supported for older generated apps and
|
|
235
|
+
bookmarks:
|
|
234
236
|
|
|
235
237
|
```tsx
|
|
236
238
|
import { AppProviders } from "@agent-native/core/client/hooks";
|
|
@@ -384,7 +384,7 @@ function MyComponent() {
|
|
|
384
384
|
Templates with **public pages** (share links, embeds, marketing pages) often need an in-page CTA that asks anonymous viewers to sign in and brings them back to the page they were on. The framework provides a single entry point for this:
|
|
385
385
|
|
|
386
386
|
```
|
|
387
|
-
/
|
|
387
|
+
/sign-in?return=<same-origin-path>
|
|
388
388
|
```
|
|
389
389
|
|
|
390
390
|
When an anonymous viewer hits this URL, the framework's login page is served. After a successful sign-in (magic link, email/password, token, or Google OAuth), the browser returns to `return`.
|
|
@@ -399,8 +399,7 @@ import { Button } from "@/components/ui/button";
|
|
|
399
399
|
function SignInCta() {
|
|
400
400
|
const onClick = () => {
|
|
401
401
|
const ret = window.location.pathname + window.location.search;
|
|
402
|
-
window.location.href =
|
|
403
|
-
"/_agent-native/sign-in?return=" + encodeURIComponent(ret);
|
|
402
|
+
window.location.href = "/sign-in?return=" + encodeURIComponent(ret);
|
|
404
403
|
};
|
|
405
404
|
return <Button onClick={onClick}>Sign in</Button>;
|
|
406
405
|
}
|
|
@@ -408,13 +407,13 @@ function SignInCta() {
|
|
|
408
407
|
|
|
409
408
|
### Bookmarked private paths
|
|
410
409
|
|
|
411
|
-
Normal app pages use one impersonal, public-cacheable SSR shell for every visitor. `AppProviders` checks the session on the client; on a private path such as `/dashboard`, it redirects an anonymous visitor to `/
|
|
410
|
+
Normal app pages use one impersonal, public-cacheable SSR shell for every visitor. `AppProviders` checks the session on the client; on a private path such as `/dashboard`, it redirects an anonymous visitor to `/sign-in?return=%2Fdashboard` before mounting private app UI. After sign-in, the visitor returns to `/dashboard`. Pass `isPublicPath` for public/SEO routes, or `sessionBypass` for a surface that authenticates through another scoped mechanism such as an MCP embed token.
|
|
412
411
|
|
|
413
412
|
How long that shell is cached is a deployment-wide setting — see [SSR Caching](/docs/deployment#ssr-caching) for `AGENT_NATIVE_SSR_CACHE`. Shortening or disabling the cache changes duration only; SSR still renders the anonymous branch with cookies stripped.
|
|
414
413
|
|
|
415
414
|
### Behind the scenes: Google OAuth
|
|
416
415
|
|
|
417
|
-
Both flows (the explicit `/
|
|
416
|
+
Both flows (the explicit `/sign-in` entrypoint and the bookmarked-path case) thread the return URL through the OAuth state. The legacy `/_agent-native/sign-in` alias remains accepted for older links. The state is HMAC-signed, so it can't be forged in transit. On the callback, the return URL is re-validated as same-origin before the redirect — so a leaked signing key still can't be turned into an open-redirect oracle.
|
|
418
417
|
|
|
419
418
|
If your template wraps `/_agent-native/google/auth-url` directly (e.g. mail and calendar templates do, to widen scopes), accept a `?return=<path>` query and forward it via the options-object form of `encodeOAuthState`:
|
|
420
419
|
|
|
@@ -158,7 +158,7 @@ Plus the org tables (`organizations`, `org_members`, `org_invitations`) from `@a
|
|
|
158
158
|
|
|
159
159
|
Every operation is a TypeScript file in `templates/analytics/actions/`, auto-mounted at `POST /_agent-native/actions/:name`.
|
|
160
160
|
|
|
161
|
-
**Dashboards & panels** — `update-dashboard` (new/full-config saves), `mutate-dashboard` (existing-dashboard edits via a small typed script API), `compose-dashboard` (build a large first-party dashboard from a metric-key catalog in one atomic call), `get-sql-dashboard`, `list-sql-dashboards`, `archive-dashboard`, `delete-sql-dashboard` / `delete-explorer-dashboard`, `reorder-dashboard-panels
|
|
161
|
+
**Dashboards & panels** — `update-dashboard` (new/full-config saves), `mutate-dashboard` (existing-dashboard edits via a small typed script API), `compose-dashboard` (build a large first-party dashboard from a metric-key catalog in one atomic call), `get-sql-dashboard`, `list-sql-dashboards`, `archive-dashboard`, `delete-sql-dashboard` / `delete-explorer-dashboard`, and `reorder-dashboard-panels`.
|
|
162
162
|
|
|
163
163
|
**Analyses** — `save-analysis`, `get-analysis`, `list-analyses`, `rename-analysis`, `hide-analysis`, `list-analysis-revisions` / `restore-analysis-revision`.
|
|
164
164
|
|
|
@@ -340,7 +340,7 @@ Availability rules live in per-user settings under the `calendar-availability` k
|
|
|
340
340
|
]}
|
|
341
341
|
/>
|
|
342
342
|
|
|
343
|
-
Two legacy routes stay mounted for links shared before a URL scheme changed: `book.$slug.tsx` (no username segment) and `meet.$username.$slug.tsx`, both of which canonicalize to `/book/:username/:slug`. `_app.team.tsx` redirects to `/settings
|
|
343
|
+
Two legacy routes stay mounted for links shared before a URL scheme changed: `book.$slug.tsx` (no username segment) and `meet.$username.$slug.tsx`, both of which canonicalize to `/book/:username/:slug`. `_app.team.tsx` redirects to `/settings/organization` — team management lives in Settings, not a separate page.
|
|
344
344
|
|
|
345
345
|
## Customizing it
|
|
346
346
|
|
|
@@ -51,7 +51,7 @@ Three routes are mounted whether or not your app ever links to them:
|
|
|
51
51
|
],
|
|
52
52
|
[
|
|
53
53
|
"/extensions",
|
|
54
|
-
"redirects to /settings
|
|
54
|
+
"redirects to /settings/extensions",
|
|
55
55
|
"Extensions are managed from Settings, not a standalone list page",
|
|
56
56
|
],
|
|
57
57
|
[
|
|
@@ -66,7 +66,7 @@ Three routes are mounted whether or not your app ever links to them:
|
|
|
66
66
|
],
|
|
67
67
|
[
|
|
68
68
|
"/team",
|
|
69
|
-
"redirects to /settings
|
|
69
|
+
"redirects to /settings/organization",
|
|
70
70
|
"Organization membership lives under Settings",
|
|
71
71
|
],
|
|
72
72
|
]}
|
|
@@ -304,7 +304,7 @@ Every operation is a TypeScript file in `templates/content/actions/`, auto-mount
|
|
|
304
304
|
| `_app.favorites.tsx` | Redirects into the current space's Favorites Files-database document |
|
|
305
305
|
| `_app.local-files.tsx` | `/local-files` — connect, pull, check, and push local folders |
|
|
306
306
|
| `_app.settings.tsx` | Settings |
|
|
307
|
-
| `_app.team.tsx` | `/team` redirects to `/settings
|
|
307
|
+
| `_app.team.tsx` | `/team` redirects to `/settings/organization` |
|
|
308
308
|
| `_app.agent.tsx` | `/agent` — the full agent chat tab page |
|
|
309
309
|
| `_app.extensions.tsx` + `_app.extensions._index.tsx` + `_app.extensions.$id.tsx` + `_app.extensions.$id.$slug.tsx` | `/extensions` — sandboxed widget routes (the framework's Alpine.js extension system; unrelated to the Tiptap "editor extensions" used elsewhere in this doc) |
|
|
310
310
|
| `p.$id.tsx` | `/p/:id` — public, read-only document view with a read-only agent chat |
|
|
@@ -323,7 +323,7 @@ Emails flowing through the API have the shape `{ id, threadId, from, to, cc, sub
|
|
|
323
323
|
- `/draft-queue` and `/draft-queue/:id` — the draft queue list and detail view
|
|
324
324
|
- `/settings` — account connections, tracking, automations, aliases, Slack intake
|
|
325
325
|
- `/team` — redirects to `/settings?section=team`
|
|
326
|
-
- `/extensions` — installed extension widgets (redirects to `/settings
|
|
326
|
+
- `/extensions` — installed extension widgets (redirects to `/settings/extensions` when no extension id is given)
|
|
327
327
|
|
|
328
328
|
## Customizing it
|
|
329
329
|
|
|
@@ -676,7 +676,7 @@ pnpm --filter plan test -- plan-mdx plan-block-registry
|
|
|
676
676
|
/>
|
|
677
677
|
|
|
678
678
|
`app/routes/extensions.tsx` and `app/routes/team.tsx` are thin redirects to
|
|
679
|
-
`/settings
|
|
679
|
+
`/settings/extensions` and `/settings/organization` — Plan installs the same
|
|
680
680
|
framework-wide [Extensions](/docs/extensions) mini-app system and organization
|
|
681
681
|
management every other template gets, rather than a Plan-specific system.
|
|
682
682
|
Extensions are sandboxed Alpine.js mini-apps a user installs at runtime from
|
|
@@ -88,12 +88,12 @@ export const resolveOpenPath = createStandardOpenPathResolver({
|
|
|
88
88
|
|
|
89
89
|
Use a small predictable route set:
|
|
90
90
|
|
|
91
|
-
| Route
|
|
92
|
-
|
|
|
93
|
-
| `/`
|
|
94
|
-
| `/settings`
|
|
95
|
-
| `/team` or `/settings
|
|
96
|
-
| Resource routes
|
|
91
|
+
| Route | Purpose |
|
|
92
|
+
| ----------------------------------- | -------------------------------------------------------------------------- |
|
|
93
|
+
| `/` | Primary app surface. |
|
|
94
|
+
| `/settings` | Standard settings tabs. |
|
|
95
|
+
| `/team` or `/settings/organization` | Team management. |
|
|
96
|
+
| Resource routes | `/documents/:id`, `/dashboards/:id`, or equivalent focused resource pages. |
|
|
97
97
|
|
|
98
98
|
## UX Standard {#ux-standard}
|
|
99
99
|
|
|
@@ -40,7 +40,7 @@ connections, service tokens, and app switching.
|
|
|
40
40
|
## API {#api}
|
|
41
41
|
|
|
42
42
|
Render organization context wherever data scope changes. Put `OrgSwitcher` in
|
|
43
|
-
the persistent shell and make `/settings
|
|
43
|
+
the persistent shell and make `/settings/organization` or `/team` open `TeamPage`.
|
|
44
44
|
|
|
45
45
|
```tsx
|
|
46
46
|
import {
|
|
@@ -27,14 +27,14 @@ free the moment an app adopts the shared page.
|
|
|
27
27
|
|
|
28
28
|
## Pieces {#pieces}
|
|
29
29
|
|
|
30
|
-
| Piece | Purpose
|
|
31
|
-
| ------------------------ |
|
|
32
|
-
| `<SettingsTabsPage>` | Standard tabbed settings route surface with a built-in settings search box.
|
|
33
|
-
| `useAgentSettingsTabs()` | Framework-provided agent, model, key, automation, and voice tabs that apps can mount.
|
|
34
|
-
| `SettingsSearchEntry` | A deep-link target (label, keywords, tab, and hash) that makes a control findable.
|
|
35
|
-
| `<LanguagePicker>` | Standard language selector for app settings.
|
|
36
|
-
| `openAgentSettings()` | Compatibility escape hatch for opening the sidebar settings tab when needed.
|
|
37
|
-
|
|
|
30
|
+
| Piece | Purpose |
|
|
31
|
+
| ------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
32
|
+
| `<SettingsTabsPage>` | Standard tabbed settings route surface with a built-in settings search box. |
|
|
33
|
+
| `useAgentSettingsTabs()` | Framework-provided agent, model, key, automation, and voice tabs that apps can mount. |
|
|
34
|
+
| `SettingsSearchEntry` | A deep-link target (label, keywords, tab, and hash) that makes a control findable. |
|
|
35
|
+
| `<LanguagePicker>` | Standard language selector for app settings. |
|
|
36
|
+
| `openAgentSettings()` | Compatibility escape hatch for opening the sidebar settings tab when needed. |
|
|
37
|
+
| Deep links | Stable links such as `/settings/integrations/secrets/OPENAI_API_KEY` and `/settings/integrations`. |
|
|
38
38
|
|
|
39
39
|
## Page Contract {#page-contract}
|
|
40
40
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.141.
|
|
3
|
+
"version": "0.141.7",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -172,7 +172,7 @@ export function Layout({ children }: LayoutProps) {
|
|
|
172
172
|
openOnChatRunning={chatHomeHandoffActive}
|
|
173
173
|
onFullscreenRequest={openAskAgentFullscreen}
|
|
174
174
|
emptyStateText={t("chat.inspectEmptyState")}
|
|
175
|
-
agentPageHref="/settings
|
|
175
|
+
agentPageHref="/settings/agent"
|
|
176
176
|
suggestions={[
|
|
177
177
|
t("chat.inspectSuggestionCapabilities"),
|
|
178
178
|
t("chat.inspectSuggestionHello"),
|
|
@@ -21,20 +21,20 @@ export default function AgentRoute() {
|
|
|
21
21
|
"learnings",
|
|
22
22
|
]);
|
|
23
23
|
const destination = resourceTabs.has(legacyTab)
|
|
24
|
-
? `/settings
|
|
24
|
+
? `/settings/agent/resources/${legacyTab}`
|
|
25
25
|
: legacyTab === "remote-agents"
|
|
26
|
-
? "/settings
|
|
26
|
+
? "/settings/agent/agents"
|
|
27
27
|
: legacyTab === "connections"
|
|
28
|
-
? "/settings
|
|
28
|
+
? "/settings/integrations"
|
|
29
29
|
: legacyTab === "jobs"
|
|
30
|
-
? "/settings
|
|
30
|
+
? "/settings/agent/automations"
|
|
31
31
|
: legacyTab === "access"
|
|
32
|
-
? "/settings
|
|
32
|
+
? "/settings/agent"
|
|
33
33
|
: ["llm", "app-models", "limits", "voice", "background"].includes(
|
|
34
34
|
legacyTab,
|
|
35
35
|
)
|
|
36
|
-
? `/settings
|
|
37
|
-
: "/settings
|
|
36
|
+
? `/settings/agent/${legacyTab}`
|
|
37
|
+
: "/settings/agent";
|
|
38
38
|
|
|
39
39
|
return <Navigate to={destination} replace />;
|
|
40
40
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, meta } from "./settings.js";
|
|
@@ -38,7 +38,35 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
38
38
|
|
|
39
39
|
Use web browsing only for public URLs. Auth-gated docs usually need their matching connector. For threads, read the parent and all replies; note when there are no replies, and inspect linked files or newer follow-ups when the source refers to them.
|
|
40
40
|
|
|
41
|
-
2.
|
|
41
|
+
2. Check whether this defect has already been reported.
|
|
42
|
+
|
|
43
|
+
A feedback channel holds months of reports and nobody remembers all of them,
|
|
44
|
+
so the same defect gets filed by different people weeks apart and every
|
|
45
|
+
filing reads as new. One recorded case: the same Clips recording bug was
|
|
46
|
+
filed almost word-for-word 29 days apart by the same reporter, and neither
|
|
47
|
+
message mentions the other. Another defect was reported fifteen times by
|
|
48
|
+
nine people across three months, was announced as fixed once in the middle,
|
|
49
|
+
and was reported again two weeks later.
|
|
50
|
+
|
|
51
|
+
Search before fixing, going back at least three months: the source channel
|
|
52
|
+
in the reporter's words and in your own, Sentry, and merged PR titles. Search
|
|
53
|
+
the feature name, the error text, and the surface separately — repeat reports
|
|
54
|
+
rarely share vocabulary.
|
|
55
|
+
|
|
56
|
+
- **No prior report** — proceed normally.
|
|
57
|
+
- **Prior report, no fix landed** — say how long it has been open. The person
|
|
58
|
+
forwarding it to you is likely seeing it for the second time too.
|
|
59
|
+
- **Prior report, fix landed** — this is a regression, and the bar is now
|
|
60
|
+
different. Patching it again and reporting done is exactly how it returns a
|
|
61
|
+
third time. Find why the first fix stopped holding, and leave behind
|
|
62
|
+
something that fails when it breaks again: a test that reproduces the
|
|
63
|
+
user's path, or an assertion in the flow the report names.
|
|
64
|
+
|
|
65
|
+
Report the repeat explicitly, with dates and reporters. A defect on its third
|
|
66
|
+
report is not a bug ticket, it is a missing check — and the missing check is
|
|
67
|
+
the deliverable, not the patch.
|
|
68
|
+
|
|
69
|
+
3. Decompose and categorize every actionable item.
|
|
42
70
|
|
|
43
71
|
Build a compact checklist before changing code. For each item, record the
|
|
44
72
|
symptom, expected behavior, evidence, and owning surface: UI, action/tool,
|
|
@@ -49,7 +77,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
49
77
|
- **Question or unclear**: Missing detail, contradictory feedback, or behavior you cannot inspect. Ask or flag it.
|
|
50
78
|
- **Out of scope**: Outside this repo, already shipped, intentionally unsupported, or too low-signal. Note briefly and skip.
|
|
51
79
|
|
|
52
|
-
|
|
80
|
+
4. For data, permissions, or resource-lifecycle feedback, verify the whole capability boundary before calling it UX.
|
|
53
81
|
|
|
54
82
|
- Check the supported create/read/update/delete lifecycle, including whether the backend/action exists when a UI control is missing.
|
|
55
83
|
- Inspect both the UI and the shared action/tool surface so agent and UI behavior stay in parity.
|
|
@@ -57,7 +85,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
57
85
|
- Treat possible cross-user or cross-organization exposure as a security/correctness bug and verify it before proposing polish.
|
|
58
86
|
- Keep undefined product policy separate from implementation bugs. If supported source types or scope semantics are not defined, flag the contract question instead of inventing behavior.
|
|
59
87
|
|
|
60
|
-
|
|
88
|
+
5. Check Sentry when the feedback smells like an error.
|
|
61
89
|
|
|
62
90
|
- Use the Sentry skill/plugin if available, or the repo's Sentry scripts if documented.
|
|
63
91
|
- Search by route, stack symbol, error text, and symptom keywords.
|
|
@@ -65,7 +93,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
65
93
|
- Cite issue IDs or links when you find a match.
|
|
66
94
|
- If nothing matches, say that plainly.
|
|
67
95
|
|
|
68
|
-
|
|
96
|
+
6. Fix only the clear bugs you agree with.
|
|
69
97
|
|
|
70
98
|
- Verify before fixing: reproduce locally, read the relevant code, inspect logs, or confirm with a stack trace.
|
|
71
99
|
- Keep each fix narrow and mapped to a feedback item.
|
|
@@ -73,7 +101,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
73
101
|
- Do not switch branches, stash, reset, force-push, or open a PR unless the user asks.
|
|
74
102
|
- Add or update focused tests when the bug risk warrants it.
|
|
75
103
|
|
|
76
|
-
|
|
104
|
+
7. Treat UX feedback with restraint.
|
|
77
105
|
|
|
78
106
|
Do not solve UX problems by adding more visible controls, helper text, banners, top-level nav, or always-open panels by default. Prefer cleaner interaction models:
|
|
79
107
|
|
|
@@ -85,7 +113,7 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
85
113
|
|
|
86
114
|
When proposing a UX change, write it as: what to change, why it helps, and the tradeoff. Keep each proposal short.
|
|
87
115
|
|
|
88
|
-
|
|
116
|
+
8. Verify changed behavior.
|
|
89
117
|
|
|
90
118
|
- Run the smallest relevant test or typecheck command.
|
|
91
119
|
- For UI fixes, inspect the actual screen with a browser tool you already
|
|
@@ -100,6 +128,9 @@ The default posture is judgment plus action: fix clear, verified bugs you agree
|
|
|
100
128
|
Keep the final report short:
|
|
101
129
|
|
|
102
130
|
```md
|
|
131
|
+
## Repeat Reports
|
|
132
|
+
- [defect] - reported [N] times since [date] by [reporters]; [what now fails if it regresses]
|
|
133
|
+
|
|
103
134
|
## Bugs Fixed
|
|
104
135
|
- [feedback item] - [what changed, file:line]
|
|
105
136
|
|
|
@@ -204,7 +204,7 @@ For public pages (share links, embeds, marketing pages) that need anonymous view
|
|
|
204
204
|
```ts
|
|
205
205
|
const ret = window.location.pathname + window.location.search;
|
|
206
206
|
window.location.href =
|
|
207
|
-
"/
|
|
207
|
+
"/sign-in?return=" + encodeURIComponent(ret);
|
|
208
208
|
```
|
|
209
209
|
|
|
210
210
|
After successful sign-in (token / email-password / Google OAuth), the framework redirects to `return`. The path is validated as same-origin via the URL parser — open-redirect / header-injection inputs fall back to `/`.
|
|
@@ -230,7 +230,9 @@ will be rejected.
|
|
|
230
230
|
|
|
231
231
|
`AppProviders` applies `RequireSession` automatically on its private branch. It
|
|
232
232
|
resolves the session on the client and redirects signed-out visitors to
|
|
233
|
-
`/
|
|
233
|
+
`/sign-in?return=…` before mounting the routed shell. The legacy
|
|
234
|
+
`/_agent-native/sign-in` path remains supported for older generated apps and
|
|
235
|
+
bookmarks:
|
|
234
236
|
|
|
235
237
|
```tsx
|
|
236
238
|
import { AppProviders } from "@agent-native/core/client/hooks";
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# Template Catalog And Demo Dashboards
|
|
2
|
-
|
|
3
|
-
## Listing And Installing Templates
|
|
4
|
-
|
|
5
|
-
- `list-dashboard-templates` lists source-controlled dashboard templates with
|
|
6
|
-
`id`, category, data sources, panel count, and installed dashboard IDs.
|
|
7
|
-
- `install-dashboard-template` installs a catalog template into normal
|
|
8
|
-
SQL-backed dashboards. Required: `templateId`. Optional: `dashboardId`,
|
|
9
|
-
`name`, `overwrite`, `forceNew`, and `mergePanels` (see "Reliable Bulk
|
|
10
|
-
Edits" in the main skill for the `mergePanels` append behavior).
|
|
11
|
-
|
|
12
|
-
## Canonical Agent Native Dashboard
|
|
13
|
-
|
|
14
|
-
Keep the canonical Agent Native dashboard (`agent-native-templates-first-party`)
|
|
15
|
-
focused: it includes one explicit feedback-sentiment-by-model chart and one
|
|
16
|
-
optional inferred-message-sentiment chart, not the broader LLM cost, token,
|
|
17
|
-
latency, or error suite.
|
|
18
|
-
|
|
19
|
-
- Explicit feedback uses content-free `$ai_feedback` events with `sentiment`
|
|
20
|
-
(`positive` or `negative`) and model in `$ai_model` or `model`.
|
|
21
|
-
- Inferred sentiment uses `$ai_sentiment` events with `method = 'llm'` and
|
|
22
|
-
`sentiment` (`positive`, `neutral`, or `negative`).
|
|
23
|
-
|
|
24
|
-
Keep these panels in the canonical dashboard and do not recreate a separately
|
|
25
|
-
installable observability template.
|
|
26
|
-
|
|
27
|
-
## Node Exporter Templates
|
|
28
|
-
|
|
29
|
-
Node Exporter ships as `node-exporter-macos` (Darwin/Homebrew `node_exporter`
|
|
30
|
-
scrapes) and `node-exporter-full` (the Linux-focused Grafana 1860 revision 45
|
|
31
|
-
dashboard converted into native Analytics panels, plus Prometheus
|
|
32
|
-
Observability Demo app metrics — `demo_http_*`, `demo_chaos_mode`, synthetic
|
|
33
|
-
CPU/disk/memory workload metrics). See the `prometheus` skill for the full
|
|
34
|
-
panel/field breakdown and local Homebrew setup.
|
|
35
|
-
|
|
36
|
-
Keep the first-open `App / Overview` tab light: it should show the Request
|
|
37
|
-
Latency highlight plus current app state, while Traffic, Latency, and
|
|
38
|
-
Workload details stay split across their own `App / *` tabs.
|
|
39
|
-
|
|
40
|
-
## Demo Dashboard
|
|
41
|
-
|
|
42
|
-
- `ensure-demo-dashboards` installs one private per-user demo on first app
|
|
43
|
-
open: `demo-node-exporter`. The Analytics root route calls this before
|
|
44
|
-
honoring local last-opened state; when the action creates the demo, the
|
|
45
|
-
user should land directly on the Node Exporter demo's `App / Overview` tab
|
|
46
|
-
without visiting the template catalog or data-source setup.
|
|
47
|
-
- The demo dashboard is generated from the same `node-exporter-full` seed as
|
|
48
|
-
the catalog template. Its Prometheus panels keep the same PromQL
|
|
49
|
-
descriptors and use `source: "demo"` so queries route to the demo
|
|
50
|
-
Prometheus endpoint instead of the user's `PROMETHEUS_*` credential slot.
|
|
51
|
-
- The demo Prometheus endpoint defaults to the public read-only
|
|
52
|
-
`https://prometheus.agent-native.foo`, so cloud and local MPX installs work
|
|
53
|
-
without user setup. Deployments can override it with
|
|
54
|
-
`ANALYTICS_DEMO_PROMETHEUS_URL` and optional
|
|
55
|
-
`ANALYTICS_DEMO_PROMETHEUS_USERNAME`, `ANALYTICS_DEMO_PROMETHEUS_PASSWORD`,
|
|
56
|
-
or `ANALYTICS_DEMO_PROMETHEUS_BEARER_TOKEN`. Do not put credential values
|
|
57
|
-
in source, docs, fixtures, tests, prompts, or dashboard seeds.
|
|
58
|
-
- Demo dashboards are ordinary SQL dashboard rows, so rename, share, archive,
|
|
59
|
-
and delete flows apply. Deleted demo IDs are tombstoned in SQL settings and
|
|
60
|
-
are not recreated unless the user explicitly asks to reset demos.
|
|
61
|
-
- Use `ensure-demo-dashboards --reset=true` only when the user asks to
|
|
62
|
-
restore a deleted or changed demo dashboard.
|