@agent-native/core-corpus 0.205.0 → 0.206.0-nightly-20261009011246
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/data-querying/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/onboarding-journeys/SKILL.md +30 -13
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +10 -0
- package/corpus/templates/analytics/actions/get-onboarding-journey.ts +1 -1
- package/corpus/templates/analytics/app/i18n/en-US.ts +2 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +1 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +50 -46
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +15 -3
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +83 -220
- package/corpus/templates/analytics/changelog/2026-10-08-chart-time-ranges-move-to-chart-options.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-fix-bigquery-onboarding-journey.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-fix-session-replay-agent-links.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-new-ask-chat-starts-without-waiting-for-history.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-onboarding-journey-screenshots-include-dialogs-at-the-record.md +7 -0
- package/corpus/templates/analytics/changelog/2026-10-08-onboarding-journey-screenshots-now-align-with-the-selected-s.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-onboarding-journeys-preserve-each-skipped-setup-step.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-08-onboarding-journeys-use-the-current-builder-setup-label.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +1 -1
- package/corpus/templates/analytics/package.json +1 -1
- package/corpus/templates/analytics/scripts/journey-capture-plan.ts +2 -0
- package/corpus/templates/analytics/scripts/journey-capture.ts +819 -83
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +2 -2
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +10 -0
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +7 -5
- package/corpus/templates/analytics/server/lib/journey-steps.ts +74 -16
- package/corpus/templates/analytics/server/lib/journey-tree.ts +1 -1
- package/corpus/templates/analytics/server/lib/onboarding-journey.ts +12 -0
- package/corpus/templates/analytics/server/plugins/auth.ts +2 -0
- package/corpus/templates/analytics/shared/replay-playback.ts +277 -0
- package/corpus/templates/assets/changelog/2026-10-08-new-chat-home-shows-before-chat-history-loads.md +6 -0
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +8 -0
- package/corpus/templates/calendar/AGENTS.md +1 -0
- package/corpus/templates/calendar/CHANGELOG.md +9 -0
- package/corpus/templates/calendar/actions/update-calendar-visual-preferences.ts +13 -1
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +62 -8
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +103 -3
- package/corpus/templates/calendar/app/components/calendar/all-day-resize.ts +32 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +3 -5
- package/corpus/templates/calendar/app/components/layout/HeaderActions.tsx +16 -0
- package/corpus/templates/calendar/app/i18n/en-US.ts +3 -0
- package/corpus/templates/calendar/app/lib/rsvp-status.tsx +16 -4
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +22 -7
- package/corpus/templates/calendar/app/routes/_app.extensions.$id.tsx +2 -1
- package/corpus/templates/calendar/changelog/2026-10-05-notifications-sent-by-the-agent-or-an-automation-show-up-aga.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-05-on-phones-the-calendar-header-shows-the-full-date-range-agai.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-08-calendar-highlights-proposed-times-and-links-to-google-calen.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-08-the-week-view-s-all-day-section-can-be-resized.md +6 -0
- package/corpus/templates/calendar/shared/calendar-view-preferences.ts +13 -0
- package/corpus/templates/clips/.agents/skills/video-editing/SKILL.md +17 -18
- package/corpus/templates/clips/actions/consume-ai-request.ts +47 -0
- package/corpus/templates/clips/actions/finalize-recording.ts +66 -2
- package/corpus/templates/clips/actions/lib/ai-request-status.ts +69 -27
- package/corpus/templates/clips/actions/lib/silence-trim-ranges.ts +89 -0
- package/corpus/templates/clips/actions/list-ai-requests.ts +85 -14
- package/corpus/templates/clips/actions/remove-filler-words.ts +2 -2
- package/corpus/templates/clips/actions/remove-silences.ts +187 -43
- package/corpus/templates/clips/actions/update-ai-request-status.ts +33 -2
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +24 -4
- package/corpus/templates/clips/app/hooks/use-auto-title.ts +507 -15
- package/corpus/templates/clips/app/i18n/en-US.ts +2 -0
- package/corpus/templates/clips/app/lib/upload-request.ts +5 -0
- package/corpus/templates/clips/app/routes/_app.home.tsx +0 -20
- package/corpus/templates/clips/app/routes/_app.r.$recordingId.tsx +42 -1
- package/corpus/templates/clips/changelog/2026-10-08-clip-uploads-recover-more-reliably-from-temporary-server-int.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-clips-marks-recordings-as-failed-when-storage-setup-is-missi.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-clips-respects-skip-after-storage-connects-and-gives-accurat.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-root-opens-directly-to-recordings.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-skip-setup-to-start-recording-storage-setup-remains-availabl.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-the-clips-agent-can-add-split-markers-at-timestamps-so-segme.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-08-transcript-cleanup-applies-silence-cuts-consistently-and-off.md +6 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +641 -56
- package/corpus/templates/clips/server/lib/initial-tool-names.ts +25 -0
- package/corpus/templates/clips/server/lib/recording-failures.ts +14 -4
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +101 -0
- package/corpus/templates/clips/server/plugins/agent-chat.ts +1 -25
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +552 -97
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +22 -12
- package/corpus/templates/clips/shared/ai-request-status.ts +11 -1
- package/corpus/templates/content/app/hooks/use-documents.ts +41 -28
- package/corpus/templates/content/app/lib/content-landing.ts +47 -1
- package/corpus/templates/content/app/lib/page-open-reads.ts +27 -2
- package/corpus/templates/content/app/root.tsx +3 -20
- package/corpus/templates/content/changelog/2026-10-05-a-page-opened-from-a-link-or-a-refresh-starts-loading-sooner.md +6 -0
- package/corpus/templates/content/package.json +4 -0
- package/corpus/templates/content/shared/import/finalize.ts +296 -0
- package/corpus/templates/content/shared/import/html-fragment.ts +169 -0
- package/corpus/templates/content/shared/import/markdown-import.fixtures.ts +123 -0
- package/corpus/templates/content/shared/import/markdown.ts +1950 -0
- package/corpus/templates/content/shared/import/notes.ts +58 -0
- package/corpus/templates/content/shared/import/paths.ts +98 -0
- package/corpus/templates/content/shared/import/types.ts +117 -0
- package/corpus/templates/content/shared/nfm.ts +9 -2
- package/corpus/templates/crm/changelog/2026-10-08-new-ask-chat-starts-without-waiting-for-history.md +6 -0
- package/corpus/templates/design/.agents/skills/journey-storyboards/SKILL.md +20 -9
- package/corpus/templates/design/AGENTS.md +1 -1
- package/corpus/templates/design/actions/add-session-replay-screenshots-to-board.ts +17 -24
- package/corpus/templates/design/actions/create-file.ts +14 -0
- package/corpus/templates/design/actions/create-journey-canvas.ts +15 -12
- package/corpus/templates/design/actions/generate-home-suggestions.ts +41 -32
- package/corpus/templates/design/app/pages/Index.tsx +1 -1
- package/corpus/templates/design/changelog/2026-10-08-fix-onboarding-storyboard-context.md +6 -0
- package/corpus/templates/design/changelog/2026-10-08-replay-screenshots-use-the-encrypted-upload-fallback-only-wh.md +6 -0
- package/corpus/templates/design/server/lib/replay-screenshot-blobs.ts +36 -9
- package/corpus/templates/design/server/lib/replay-screenshot-private-blob.ts +29 -0
- package/corpus/templates/design/server/routes/api/design-board-replay-screenshots/[screenshotId].get.ts +3 -27
- package/corpus/templates/design/shared/journey-canvas.ts +63 -15
- package/corpus/templates/design/shared/journey-layout.ts +7 -3
- package/corpus/templates/forms/.agents/skills/form-responses/SKILL.md +15 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/actions/create-form.ts +2 -0
- package/corpus/templates/forms/actions/delete-form.ts +2 -0
- package/corpus/templates/forms/actions/export-responses.ts +2 -0
- package/corpus/templates/forms/actions/list-responses.ts +2 -0
- package/corpus/templates/forms/actions/patch-form-fields.ts +2 -0
- package/corpus/templates/forms/actions/promote-community-submission.ts +2 -0
- package/corpus/templates/forms/actions/response-insights.ts +2 -0
- package/corpus/templates/forms/actions/restore-form.ts +2 -0
- package/corpus/templates/forms/actions/retry-response-deliveries.ts +2 -0
- package/corpus/templates/forms/actions/show-response-insight.ts +3 -0
- package/corpus/templates/forms/actions/update-form.ts +2 -0
- package/corpus/templates/forms/actions/view-screen.ts +38 -13
- package/corpus/templates/forms/app/routes/_app.home.tsx +0 -5
- package/corpus/templates/forms/changelog/2026-10-05-reviewer-roles-protect-form-edits.md +6 -0
- package/corpus/templates/forms/server/db/index.ts +12 -1
- package/corpus/templates/forms/server/lib/app-roles.ts +112 -1
- package/corpus/templates/forms/shared/app-roles.ts +1 -1
- package/corpus/templates/plan/app/pages/PlanChatPage.tsx +7 -15
- package/corpus/templates/plan/app/routes/chat.tsx +2 -2
- package/corpus/templates/slides/.agents/skills/apply-slide-comments/SKILL.md +55 -0
- package/corpus/templates/slides/.agents/skills/create-deck/SKILL.md +49 -141
- package/corpus/templates/slides/.agents/skills/create-deck/references/reference-inputs.md +72 -0
- package/corpus/templates/slides/.agents/skills/create-deck/references/slide-templates.md +93 -0
- package/corpus/templates/slides/.agents/skills/create-deck/references/source-material.md +16 -0
- package/corpus/templates/slides/.agents/skills/slide-design/SKILL.md +10 -5
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +60 -153
- package/corpus/templates/slides/.agents/skills/slide-editing/references/animations.md +28 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/references/freeform-objects.md +22 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/references/style-only-edits.md +74 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/references/video.md +23 -0
- package/corpus/templates/slides/AGENTS.md +3 -2
- package/corpus/templates/slides/actions/add-slide.ts +12 -2
- package/corpus/templates/slides/actions/create-deck.ts +28 -9
- package/corpus/templates/slides/actions/export-html.ts +9 -2
- package/corpus/templates/slides/actions/export-pptx.ts +14 -6
- package/corpus/templates/slides/actions/generate-home-suggestions.ts +41 -32
- package/corpus/templates/slides/actions/patch-deck.ts +15 -1
- package/corpus/templates/slides/actions/update-slide.ts +15 -1
- package/corpus/templates/slides/agent-native.app-skill.json +5 -0
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +5 -0
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +18 -0
- package/corpus/templates/slides/app/components/editor/AlignmentGuides.tsx +11 -4
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +4 -0
- package/corpus/templates/slides/app/components/editor/FollowingSlideStack.tsx +4 -0
- package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +4 -0
- package/corpus/templates/slides/app/components/editor/ImageCropOverlay.tsx +11 -25
- package/corpus/templates/slides/app/components/editor/SlideContextToolbar.tsx +6 -7
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1441 -1124
- package/corpus/templates/slides/app/components/editor/canvas-interactions/index.ts +2 -4
- package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +38 -77
- package/corpus/templates/slides/app/components/editor/fit-text-object.ts +31 -0
- package/corpus/templates/slides/app/components/editor/in-place-text-session.ts +45 -0
- package/corpus/templates/slides/app/components/editor/list-editing.ts +3 -0
- package/corpus/templates/slides/app/components/editor/rich-text-selection.ts +3 -0
- package/corpus/templates/slides/app/components/editor/selection-overlay-measurement.ts +56 -0
- package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +1473 -194
- package/corpus/templates/slides/app/components/editor/slide-object-transform.browser-host.ts +10 -0
- package/corpus/templates/slides/app/components/editor/slide-pointer-target.ts +432 -0
- package/corpus/templates/slides/app/components/editor/slide-style.ts +4 -6
- package/corpus/templates/slides/app/components/editor/slide-text-targets.ts +74 -14
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +7 -1
- package/corpus/templates/slides/app/components/presentation/PresenterView.tsx +5 -0
- package/corpus/templates/slides/app/context/DeckContext.tsx +52 -10
- package/corpus/templates/slides/app/global.css +118 -24
- package/corpus/templates/slides/app/hooks/use-undo-selection.ts +66 -0
- package/corpus/templates/slides/app/lib/contrast-audit.ts +24 -1
- package/corpus/templates/slides/app/lib/export-pdf-client.ts +8 -0
- package/corpus/templates/slides/app/lib/export-pptx-client.ts +183 -20
- package/corpus/templates/slides/app/lib/sanitize-slide-html.ts +9 -1
- package/corpus/templates/slides/app/lib/slide-animation-elements.ts +1 -1
- package/corpus/templates/slides/app/lib/undo-reveal.ts +312 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +15 -0
- package/corpus/templates/slides/app/pages/Index.tsx +1 -1
- package/corpus/templates/slides/app/routes/slide.tsx +7 -0
- package/corpus/templates/slides/changelog/2026-10-07-clicking-dragging-and-selecting-in-the-slide-editor-now-work.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-07-footers-can-use-slide-number-tokens-so-page-numbers-like-04-.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-07-text-boxes-grow-with-their-text-and-the-selection-outline-fo.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-07-the-ai-can-now-plan-slide-height-before-writing-and-apply-co.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-alt-dragging-several-selected-objects-now-duplicates-them-in.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-clicking-just-outside-a-text-box-inside-a-group-now-selects-.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-css-animations-written-in-a-slide-s-style-block-now-play-in-.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-objects-rotated-scaled-or-moved-with-the-css-rotate-scale-an.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-powerpoint-and-google-slides-export-now-keeps-radial-gradien.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-snap-guides-span-the-objects-they-align-and-show-equal-spaci.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-the-ai-now-gets-a-warning-when-a-slide-has-typed-page-number.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-08-undo-and-redo-select-the-objects-they-changed.md +6 -0
- package/corpus/templates/slides/interaction-oracle.md +258 -0
- package/corpus/templates/slides/interaction-parity.md +104 -22
- package/corpus/templates/slides/server/lib/generation-completion.ts +10 -1
- package/corpus/templates/slides/server/lib/slide-hygiene.ts +731 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/slides/shared/slide-number.ts +124 -0
- package/package.json +1 -1
package/corpus/README.md
CHANGED
|
@@ -85,7 +85,7 @@ Useful `properties`:
|
|
|
85
85
|
- Time: `duration_ms` is the full run in milliseconds; `$ai_latency` is model time in seconds (run minus tool time).
|
|
86
86
|
- Tools: `tool_calls`, `successful_tools`, `failed_tools`, `tools`, `tools_truncated`. The bounded `tools` array holds names, relative start times, durations, statuses, and coarse error classes, never args or results; failed runs and interrupted tools stay queryable.
|
|
87
87
|
- Delegation: `delegated`, `delegation_protocol`, `caller_app`, `delegation_task_id`, `a2a_task_id`, `parent_run_id`, `parent_turn_id`. Agent Teams child runs use `delegation_protocol = 'agent-team'`, keep their own `run_id`, and link to the launching run through `parent_run_id`.
|
|
88
|
-
- Errors: `status`, `
|
|
88
|
+
- Errors: `status`, `$ai_error` (terminal code, cause, retryable, and a fixed code-derived message), `$ai_error_type`. Run failure messages are omitted from telemetry.
|
|
89
89
|
|
|
90
90
|
## Inline Charts In Chat
|
|
91
91
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
name: onboarding-journeys
|
|
3
3
|
description: >-
|
|
4
4
|
Build the onboarding journey tree (signup to first output, with % splits,
|
|
5
|
-
|
|
6
|
-
when asked for an onboarding storyboard, where
|
|
7
|
-
for each onboarding step.
|
|
5
|
+
last-observed-step counts, and example replays) and render a screenshot per
|
|
6
|
+
step. Use when asked for an onboarding storyboard, where users stop being
|
|
7
|
+
observed, or frames for each onboarding step.
|
|
8
8
|
scope: dev
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -38,7 +38,9 @@ type JourneyTree = { window: { from: string; to: string }; app: string; rootN: n
|
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
- Nodes come parents first. `key` is the path of step keys joined with ` > `;
|
|
41
|
-
`pctOf*` are percents (0-100).
|
|
41
|
+
`pctOf*` are percents (0-100). `dropoffN` / `dropoffPct` count sessions
|
|
42
|
+
whose last observed step is this node; they do not establish that a user
|
|
43
|
+
exited.
|
|
42
44
|
- `dropoffN` is sessions whose last observed step is that node. It is not a
|
|
43
45
|
confirmed exit: a blocked tracker or an event outside the window reads the
|
|
44
46
|
same. A node at `maxDepth` where `n - dropoffN - sum(children n)` is above
|
|
@@ -51,18 +53,30 @@ type JourneyTree = { window: { from: string; to: string }; app: string; rootN: n
|
|
|
51
53
|
- An example with `recordingId: null` has no replay the caller can open, and
|
|
52
54
|
`viewportReason` says why the viewport is unknown (`no_recording`,
|
|
53
55
|
`not_captured` for recordings before viewport capture, `unreadable`).
|
|
56
|
+
- `offsetMs` is milliseconds from the recording's `startedAt`, not the first
|
|
57
|
+
rrweb event.
|
|
58
|
+
- `replayUrl` uses that same offset in `atMs`; the session page converts it to
|
|
59
|
+
the first-event-relative player clock after replay events load.
|
|
54
60
|
- Test identities are always excluded; `emailFilter` defaults to
|
|
55
61
|
`exclude_builder`, as in the onboarding metrics. A session with any excluded
|
|
56
62
|
identity is dropped whole.
|
|
57
63
|
|
|
58
64
|
## Capture
|
|
59
65
|
|
|
60
|
-
The CLI mints a two-hour
|
|
61
|
-
`create-session-replay-agent-link`,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
`
|
|
65
|
-
|
|
66
|
+
The CLI mints a two-hour recording-scoped replay link with
|
|
67
|
+
`create-session-replay-agent-link`, reads the token-gated manifest and every
|
|
68
|
+
chunk, then renders each recording once with the local `@rrweb/replay` player
|
|
69
|
+
in headless Chromium. Each JourneyTree `offsetMs` is relative to the recording's
|
|
70
|
+
`startedAt`; the CLI maps `startedAt + offsetMs` to rrweb's first-event-relative
|
|
71
|
+
playhead for seeking, viewport, and route evaluation while preserving the
|
|
72
|
+
original offset in frame metadata. If the target precedes the first replay
|
|
73
|
+
event, report a frame failure instead of clamping the seek to zero. The CLI
|
|
74
|
+
uses a native browser screenshot so dialogs and other top-layer content remain
|
|
75
|
+
visible. The token and replay events stay in memory; the CLI writes only PNGs
|
|
76
|
+
and `manifest.json` with `frames`, `failures` (explicit, with a reason), and
|
|
77
|
+
`skipped`. Manifest chunk counts and ordering must be complete; the CLI reads
|
|
78
|
+
bounded batches only through the requested offsets and validates every fetched
|
|
79
|
+
chunk. Fix failures or report them; do not paint over a missing frame.
|
|
66
80
|
|
|
67
81
|
Authenticate to the deployed app, never a local database: run
|
|
68
82
|
`npx -y @agent-native/core@latest connect https://analytics.agent-native.com --client codex`
|
|
@@ -70,9 +84,12 @@ Authenticate to the deployed app, never a local database: run
|
|
|
70
84
|
`--token` / set `AGENT_NATIVE_TOKEN`. `--app-url` overrides the app. Frame mode
|
|
71
85
|
needs a deployment that includes `/sessions/:id?frame=1`.
|
|
72
86
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
Replay fetches use the recording-scoped token without app cookies or a referrer.
|
|
88
|
+
The capture browser stays offline while rendering untrusted replay DOM, so
|
|
89
|
+
remote images and fonts are not fetched. The output manifest marks this as
|
|
90
|
+
`remoteAssets: "not-fetched"`. Keep recorded URLs and CSS intact for rrweb
|
|
91
|
+
playback; network controls belong at the capture boundary. `--upload` stores
|
|
92
|
+
PNGs through the private upload action, which checks recording access again.
|
|
76
93
|
|
|
77
94
|
Viewport comes from the recording's first rrweb Meta event, stored by replay
|
|
78
95
|
ingest in `session_recordings.metadata.viewport` (`first` and `last`). Older
|
|
@@ -447,6 +447,16 @@ agent answers about browser recordings in the Analytics template.
|
|
|
447
447
|
Vite/Netlify env vars on the recorded site.
|
|
448
448
|
- Inputs are masked by default. Page text is visible unless marked with
|
|
449
449
|
`.an-mask` or `data-an-mask`.
|
|
450
|
+
- UI rendering a run failure message or diagnostic details spreads
|
|
451
|
+
`SESSION_REPLAY_MASK_PROPS` from `@agent-native/core/client/session-replay-privacy` on
|
|
452
|
+
the message element, including expanded details and failed tool rows. Keep
|
|
453
|
+
headlines and recovery controls outside the mask. The `data-an-mask` marker
|
|
454
|
+
remains active when an app supplies its own `maskTextSelector`; selectors
|
|
455
|
+
extend this privacy baseline. Do not rely on name redaction for run errors.
|
|
456
|
+
Masking covers text only; the recorder keeps attributes, so leave `title` off
|
|
457
|
+
masked failure text. Wrap failed content that can render links or embedded
|
|
458
|
+
frames, such as an MCP App or a failed activity summary, in
|
|
459
|
+
`SESSION_REPLAY_BLOCK_PROPS`.
|
|
450
460
|
- Use `.an-block`, `.an-ignore`, `data-an-block`, or `data-an-ignore` for
|
|
451
461
|
sensitive zones that should not be captured.
|
|
452
462
|
- A definitive upload `409` abandons only the conflicted replay identity and
|
|
@@ -33,7 +33,7 @@ const isoDate = z
|
|
|
33
33
|
|
|
34
34
|
export default defineAction({
|
|
35
35
|
description:
|
|
36
|
-
'Build the onboarding journey tree for a date window: per-session step sequences (signup, onboarding questions, setup method, app entry, first action, first output) folded into a prefix tree. format "tree" returns { window, app, rootN, coverage, nodes }: each node has n, pctOfRoot, pctOfParent, dropoffN/dropoffPct (sessions whose last observed step is that node, not a confirmed exit) and example sessions with recordingId, offsetMs to seek to, and the recording\'s viewport. format "summary" returns the same counts as an indented text outline with no examples. Check coverage.truncated first: true means counts are a partial sample or the node list was cut (see notes). Use it to plan onboarding storyboards or find where new users stop; feed the tree to the journey:capture CLI to render frames.',
|
|
36
|
+
'Build the onboarding journey tree for a date window: per-session step sequences (signup, onboarding questions, setup method, app entry, first action, first output) folded into a prefix tree. format "tree" returns { window, app, rootN, coverage, nodes }: each node has n, pctOfRoot, pctOfParent, dropoffN/dropoffPct (sessions whose last observed step is that node, not a confirmed exit) and example sessions with recordingId, a recording-start-relative offsetMs to seek to, and the recording\'s viewport. format "summary" returns the same counts as an indented text outline with no examples. Check coverage.truncated first: true means counts are a partial sample or the node list was cut (see notes). Use it to plan onboarding storyboards or find where new users stop; feed the tree to the journey:capture CLI to render frames.',
|
|
37
37
|
schema: z.object({
|
|
38
38
|
dateFrom: isoDate.describe(
|
|
39
39
|
"Inclusive UTC start date, YYYY-MM-DD. Sessions that began earlier appear mid-journey, so start a day before the period you care about.",
|
|
@@ -1568,6 +1568,8 @@ export default {
|
|
|
1568
1568
|
replayPlayer: "Replay player",
|
|
1569
1569
|
replayLoading: "Loading replay...",
|
|
1570
1570
|
replayLoadingProgress: "{{loaded}} of {{total}} replay chunks loaded",
|
|
1571
|
+
replayTargetFallback:
|
|
1572
|
+
"Requested recording offset {{requested}} is unavailable; showing the nearest replay frame at {{available}}.",
|
|
1571
1573
|
replayUnavailable: "No playable replay for this session",
|
|
1572
1574
|
replayUnavailableDescription:
|
|
1573
1575
|
"This recording has metadata, but no playable replay events were found.",
|
|
@@ -149,7 +149,7 @@ export function DashboardChartCard({
|
|
|
149
149
|
if (
|
|
150
150
|
target instanceof Element &&
|
|
151
151
|
target.closest(
|
|
152
|
-
"button, a, input, textarea, select, [role='menuitem'], [data-no-panel-chat-select]",
|
|
152
|
+
"button, a, input, textarea, select, [role='menuitem'], [role='menuitemradio'], [data-no-panel-chat-select]",
|
|
153
153
|
)
|
|
154
154
|
) {
|
|
155
155
|
return;
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
AlertDialogHeader,
|
|
31
31
|
AlertDialogTitle,
|
|
32
32
|
} from "@/components/ui/alert-dialog";
|
|
33
|
+
import { Badge } from "@/components/ui/badge";
|
|
33
34
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
|
34
35
|
import {
|
|
35
36
|
Dialog,
|
|
@@ -42,16 +43,14 @@ import {
|
|
|
42
43
|
DropdownMenuContent,
|
|
43
44
|
DropdownMenuItem,
|
|
44
45
|
DropdownMenuLabel,
|
|
46
|
+
DropdownMenuRadioGroup,
|
|
47
|
+
DropdownMenuRadioItem,
|
|
45
48
|
DropdownMenuSeparator,
|
|
49
|
+
DropdownMenuSub,
|
|
50
|
+
DropdownMenuSubContent,
|
|
51
|
+
DropdownMenuSubTrigger,
|
|
46
52
|
DropdownMenuTrigger,
|
|
47
53
|
} from "@/components/ui/dropdown-menu";
|
|
48
|
-
import {
|
|
49
|
-
Select,
|
|
50
|
-
SelectContent,
|
|
51
|
-
SelectItem,
|
|
52
|
-
SelectTrigger,
|
|
53
|
-
SelectValue,
|
|
54
|
-
} from "@/components/ui/select";
|
|
55
54
|
import {
|
|
56
55
|
Tooltip,
|
|
57
56
|
TooltipContent,
|
|
@@ -150,6 +149,9 @@ export function SqlChartCard({
|
|
|
150
149
|
}: SqlChartCardProps) {
|
|
151
150
|
const t = useT();
|
|
152
151
|
const timeRange = timeRangeDays(filters?.timeRange);
|
|
152
|
+
const timeRangeOverrideLabel = timeRangeFilter?.options?.find(
|
|
153
|
+
(option) => option.value === timeRangeOverride,
|
|
154
|
+
)?.label;
|
|
153
155
|
const exportToGoogleSheets = useActionMutation(
|
|
154
156
|
"export-dashboard-panel-to-google-sheet",
|
|
155
157
|
);
|
|
@@ -263,7 +265,7 @@ export function SqlChartCard({
|
|
|
263
265
|
if (
|
|
264
266
|
target instanceof Element &&
|
|
265
267
|
target.closest(
|
|
266
|
-
"button, a, input, textarea, select, [role='menuitem'], [data-no-panel-chat-select]",
|
|
268
|
+
"button, a, input, textarea, select, [role='menuitem'], [role='menuitemradio'], [data-no-panel-chat-select]",
|
|
267
269
|
)
|
|
268
270
|
) {
|
|
269
271
|
return;
|
|
@@ -606,44 +608,17 @@ export function SqlChartCard({
|
|
|
606
608
|
<CardTitle className="text-sm font-medium flex-1 truncate">
|
|
607
609
|
{panel.title}
|
|
608
610
|
</CardTitle>
|
|
609
|
-
{
|
|
610
|
-
<
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
<SelectTrigger
|
|
621
|
-
size="sm"
|
|
622
|
-
className="h-6 w-[100px] text-xs"
|
|
623
|
-
aria-label={t("sqlDashboard.chartTimeRangeOverride")}
|
|
624
|
-
>
|
|
625
|
-
<SelectValue />
|
|
626
|
-
</SelectTrigger>
|
|
627
|
-
<SelectContent align="end">
|
|
628
|
-
<SelectItem value={INHERIT_TIME_RANGE} className="text-xs">
|
|
629
|
-
{t("sqlDashboard.chartTimeRangeInherit")}
|
|
630
|
-
</SelectItem>
|
|
631
|
-
{timeRangeFilter.options.map((opt) => (
|
|
632
|
-
<SelectItem
|
|
633
|
-
key={opt.value}
|
|
634
|
-
value={opt.value}
|
|
635
|
-
className="text-xs"
|
|
636
|
-
>
|
|
637
|
-
{opt.label}
|
|
638
|
-
</SelectItem>
|
|
639
|
-
))}
|
|
640
|
-
</SelectContent>
|
|
641
|
-
</Select>
|
|
642
|
-
</TooltipTrigger>
|
|
643
|
-
<TooltipContent>
|
|
644
|
-
{t("sqlDashboard.chartTimeRangeOverride")}
|
|
645
|
-
</TooltipContent>
|
|
646
|
-
</Tooltip>
|
|
611
|
+
{timeRangeOverrideLabel ? (
|
|
612
|
+
<Badge
|
|
613
|
+
variant="secondary"
|
|
614
|
+
className="max-w-32 shrink-0 truncate px-1.5 py-0 text-[10px] font-normal"
|
|
615
|
+
title={timeRangeOverrideLabel}
|
|
616
|
+
>
|
|
617
|
+
<span className="sr-only">
|
|
618
|
+
{t("sqlDashboard.chartTimeRangeOverride")}{" "}
|
|
619
|
+
</span>
|
|
620
|
+
{timeRangeOverrideLabel}
|
|
621
|
+
</Badge>
|
|
647
622
|
) : null}
|
|
648
623
|
<div className="flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100">
|
|
649
624
|
{!editable || onSaveSql ? (
|
|
@@ -689,6 +664,35 @@ export function SqlChartCard({
|
|
|
689
664
|
{t("sqlDashboard.chatWithPanel")}
|
|
690
665
|
</DropdownMenuItem>
|
|
691
666
|
<DropdownMenuSeparator />
|
|
667
|
+
{timeRangeFilter?.options?.length ? (
|
|
668
|
+
<DropdownMenuSub>
|
|
669
|
+
<DropdownMenuSubTrigger>
|
|
670
|
+
{timeRangeFilter.label}
|
|
671
|
+
</DropdownMenuSubTrigger>
|
|
672
|
+
<DropdownMenuSubContent className="w-52">
|
|
673
|
+
<DropdownMenuRadioGroup
|
|
674
|
+
value={timeRangeOverride ?? INHERIT_TIME_RANGE}
|
|
675
|
+
onValueChange={(value) =>
|
|
676
|
+
onTimeRangeOverrideChange?.(
|
|
677
|
+
value === INHERIT_TIME_RANGE ? null : value,
|
|
678
|
+
)
|
|
679
|
+
}
|
|
680
|
+
>
|
|
681
|
+
<DropdownMenuRadioItem value={INHERIT_TIME_RANGE}>
|
|
682
|
+
{t("sqlDashboard.chartTimeRangeInherit")}
|
|
683
|
+
</DropdownMenuRadioItem>
|
|
684
|
+
{timeRangeFilter.options.map((opt) => (
|
|
685
|
+
<DropdownMenuRadioItem
|
|
686
|
+
key={opt.value}
|
|
687
|
+
value={opt.value}
|
|
688
|
+
>
|
|
689
|
+
{opt.label}
|
|
690
|
+
</DropdownMenuRadioItem>
|
|
691
|
+
))}
|
|
692
|
+
</DropdownMenuRadioGroup>
|
|
693
|
+
</DropdownMenuSubContent>
|
|
694
|
+
</DropdownMenuSub>
|
|
695
|
+
) : null}
|
|
692
696
|
<DropdownMenuItem onSelect={() => setExpanded(true)}>
|
|
693
697
|
<IconMaximize className="h-4 w-4 mr-2" />
|
|
694
698
|
{t("sqlDashboard.fullScreen")}
|
|
@@ -301,10 +301,22 @@ const PanelCell = memo(function PanelCell({
|
|
|
301
301
|
const [timeRangeOverride, setTimeRangeOverride] = useState<string | null>(
|
|
302
302
|
null,
|
|
303
303
|
);
|
|
304
|
+
const validTimeRangeOverride = timeRangeFilter?.options?.some(
|
|
305
|
+
(option) => option.value === timeRangeOverride,
|
|
306
|
+
)
|
|
307
|
+
? timeRangeOverride
|
|
308
|
+
: null;
|
|
309
|
+
useEffect(() => {
|
|
310
|
+
if (timeRangeOverride !== null && validTimeRangeOverride === null) {
|
|
311
|
+
setTimeRangeOverride(null);
|
|
312
|
+
}
|
|
313
|
+
}, [timeRangeOverride, validTimeRangeOverride]);
|
|
304
314
|
const effectiveVars = useMemo(
|
|
305
315
|
() =>
|
|
306
|
-
|
|
307
|
-
|
|
316
|
+
validTimeRangeOverride
|
|
317
|
+
? { ...vars, timeRange: validTimeRangeOverride }
|
|
318
|
+
: vars,
|
|
319
|
+
[vars, validTimeRangeOverride],
|
|
308
320
|
);
|
|
309
321
|
const resolved = useMemo(
|
|
310
322
|
() =>
|
|
@@ -395,7 +407,7 @@ const PanelCell = memo(function PanelCell({
|
|
|
395
407
|
}
|
|
396
408
|
filters={effectiveVars}
|
|
397
409
|
timeRangeFilter={timeRangeFilter}
|
|
398
|
-
timeRangeOverride={
|
|
410
|
+
timeRangeOverride={validTimeRangeOverride}
|
|
399
411
|
onTimeRangeOverrideChange={setTimeRangeOverride}
|
|
400
412
|
extensionContext={
|
|
401
413
|
panel.chartType === "extension"
|