@agent-native/core 0.133.3 → 0.134.0
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/core/CHANGELOG.md +56 -0
- package/corpus/core/docs/content/observability.mdx +41 -1
- package/corpus/core/docs/content/tracking.mdx +25 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/run-manager.ts +7 -0
- package/corpus/core/src/client/agent-chat-adapter.ts +10 -0
- package/corpus/core/src/client/analytics.ts +105 -1
- package/corpus/core/src/deploy/build.ts +38 -1
- package/corpus/core/src/observability/posthog-ai.ts +294 -0
- package/corpus/core/src/observability/routes.ts +29 -6
- package/corpus/core/src/observability/traces.ts +287 -12
- package/corpus/core/src/observability/types.ts +11 -0
- package/corpus/core/src/secrets/register-framework-secrets.ts +16 -0
- package/corpus/core/src/server/agent-run-context.ts +21 -0
- package/corpus/core/src/server/capture-error.ts +8 -0
- package/corpus/core/src/server/core-routes-plugin.ts +75 -4
- package/corpus/core/src/server/deploy-environment.ts +57 -0
- package/corpus/core/src/server/error-noise-filter.ts +268 -0
- package/corpus/core/src/server/posthog-config.ts +75 -0
- package/corpus/core/src/server/request-context.ts +6 -0
- package/corpus/core/src/server/sentry-config.ts +4 -8
- package/corpus/core/src/server/sentry-plugin.ts +13 -29
- package/corpus/core/src/server/sentry.ts +13 -156
- package/corpus/core/src/server/ssr-handler.ts +6 -1
- package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +36 -10
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +55 -1
- package/corpus/core/src/tracking/error-capture.ts +44 -109
- package/corpus/core/src/tracking/index.ts +11 -0
- package/corpus/core/src/tracking/posthog-exception.ts +305 -0
- package/corpus/core/src/tracking/providers.ts +91 -14
- package/corpus/core/src/tracking/redaction.ts +105 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +7 -0
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +12 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +8 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +95 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +38 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/posthog-ai.d.ts +126 -0
- package/dist/observability/posthog-ai.d.ts.map +1 -0
- package/dist/observability/posthog-ai.js +190 -0
- package/dist/observability/posthog-ai.js.map +1 -0
- package/dist/observability/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +26 -6
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/traces.d.ts +9 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +219 -10
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/types.d.ts +10 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +1 -0
- package/dist/observability/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +14 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-run-context.d.ts +8 -0
- package/dist/server/agent-run-context.d.ts.map +1 -1
- package/dist/server/agent-run-context.js +18 -0
- package/dist/server/agent-run-context.js.map +1 -1
- package/dist/server/capture-error.d.ts +8 -0
- package/dist/server/capture-error.d.ts.map +1 -1
- package/dist/server/capture-error.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +0 -23
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +71 -7
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/deploy-environment.d.ts +17 -0
- package/dist/server/deploy-environment.d.ts.map +1 -0
- package/dist/server/deploy-environment.js +47 -0
- package/dist/server/deploy-environment.js.map +1 -0
- package/dist/server/error-noise-filter.d.ts +80 -0
- package/dist/server/error-noise-filter.d.ts.map +1 -0
- package/dist/server/error-noise-filter.js +173 -0
- package/dist/server/error-noise-filter.js.map +1 -0
- package/dist/server/posthog-config.d.ts +28 -0
- package/dist/server/posthog-config.d.ts.map +1 -0
- package/dist/server/posthog-config.js +53 -0
- package/dist/server/posthog-config.js.map +1 -0
- package/dist/server/request-context.d.ts +6 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/sentry-config.d.ts +1 -0
- package/dist/server/sentry-config.d.ts.map +1 -1
- package/dist/server/sentry-config.js +3 -1
- package/dist/server/sentry-config.js.map +1 -1
- package/dist/server/sentry-plugin.d.ts.map +1 -1
- package/dist/server/sentry-plugin.js +12 -27
- package/dist/server/sentry-plugin.js.map +1 -1
- package/dist/server/sentry.d.ts.map +1 -1
- package/dist/server/sentry.js +8 -124
- package/dist/server/sentry.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +6 -1
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/shared/mcp-embed-headers.d.ts +1 -1
- package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
- package/dist/shared/mcp-embed-headers.js +1 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +36 -10
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +55 -1
- package/dist/tracking/error-capture.d.ts +7 -0
- package/dist/tracking/error-capture.d.ts.map +1 -1
- package/dist/tracking/error-capture.js +10 -73
- package/dist/tracking/error-capture.js.map +1 -1
- package/dist/tracking/index.d.ts +1 -0
- package/dist/tracking/index.d.ts.map +1 -1
- package/dist/tracking/index.js +1 -0
- package/dist/tracking/index.js.map +1 -1
- package/dist/tracking/posthog-exception.d.ts +103 -0
- package/dist/tracking/posthog-exception.d.ts.map +1 -0
- package/dist/tracking/posthog-exception.js +181 -0
- package/dist/tracking/posthog-exception.js.map +1 -0
- package/dist/tracking/providers.d.ts +14 -0
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +63 -11
- package/dist/tracking/providers.js.map +1 -1
- package/dist/tracking/redaction.d.ts +25 -0
- package/dist/tracking/redaction.d.ts.map +1 -0
- package/dist/tracking/redaction.js +85 -0
- package/dist/tracking/redaction.js.map +1 -0
- package/docs/content/observability.mdx +41 -1
- package/docs/content/tracking.mdx +25 -0
- package/package.json +1 -1
- package/src/agent/run-manager.ts +7 -0
- package/src/client/agent-chat-adapter.ts +10 -0
- package/src/client/analytics.ts +105 -1
- package/src/deploy/build.ts +38 -1
- package/src/observability/posthog-ai.ts +294 -0
- package/src/observability/routes.ts +29 -6
- package/src/observability/traces.ts +287 -12
- package/src/observability/types.ts +11 -0
- package/src/secrets/register-framework-secrets.ts +16 -0
- package/src/server/agent-run-context.ts +21 -0
- package/src/server/capture-error.ts +8 -0
- package/src/server/core-routes-plugin.ts +75 -4
- package/src/server/deploy-environment.ts +57 -0
- package/src/server/error-noise-filter.ts +268 -0
- package/src/server/posthog-config.ts +75 -0
- package/src/server/request-context.ts +6 -0
- package/src/server/sentry-config.ts +4 -8
- package/src/server/sentry-plugin.ts +13 -29
- package/src/server/sentry.ts +13 -156
- package/src/server/ssr-handler.ts +6 -1
- package/src/shared/mcp-embed-headers.ts +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +36 -10
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +55 -1
- package/src/tracking/error-capture.ts +44 -109
- package/src/tracking/index.ts +11 -0
- package/src/tracking/posthog-exception.ts +305 -0
- package/src/tracking/providers.ts +91 -14
- package/src/tracking/redaction.ts +105 -0
|
@@ -9,6 +9,14 @@ declare global {
|
|
|
9
9
|
__AGENT_NATIVE_CONFIG__?: {
|
|
10
10
|
sentryDsn?: string;
|
|
11
11
|
sentryEnvironment?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Public PostHog project key + host. Publishable and identical for every
|
|
14
|
+
* visitor, so it ships inside the CDN-cached SSR shell alongside the
|
|
15
|
+
* Sentry DSN. Absent when no public key is configured.
|
|
16
|
+
*/
|
|
17
|
+
posthogKey?: string;
|
|
18
|
+
posthogHost?: string;
|
|
19
|
+
posthogErrorTracking?: boolean;
|
|
12
20
|
/**
|
|
13
21
|
* Hosted Realtime Gateway config. Impersonal (same for every visitor),
|
|
14
22
|
* so it is safe inside the CDN-cached SSR shell — unlike the per-user
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"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"}
|
package/dist/client/analytics.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { llmConnectionTrackingProperties, } from "../shared/llm-connection.js";
|
|
2
|
+
import { toPostHogExceptionProperties } from "../tracking/posthog-exception.js";
|
|
2
3
|
import { getOrCreateAnalyticsAnonymousId, getOrCreateAnalyticsSessionId, } from "./analytics-session.js";
|
|
3
4
|
import { fetchAgentEngineStatus, fetchAuthSessionStatus, } from "./client-status-requests.js";
|
|
4
5
|
import { installErrorCapture, } from "./error-capture.js";
|
|
@@ -260,6 +261,14 @@ function applyTrackingIdentity(properties, identity = _trackingIdentity) {
|
|
|
260
261
|
assign("orgId", identity.orgId);
|
|
261
262
|
return next;
|
|
262
263
|
}
|
|
264
|
+
/**
|
|
265
|
+
* The signed-in user id used to attribute browser events, or `undefined` when
|
|
266
|
+
* signed out. Same value the server attributes its events to (email, falling
|
|
267
|
+
* back to the auth user id), so a person is one person across both.
|
|
268
|
+
*/
|
|
269
|
+
function getTrackingUserId() {
|
|
270
|
+
return _trackingIdentity?.userId;
|
|
271
|
+
}
|
|
263
272
|
function getOrCreateAnonymousId() {
|
|
264
273
|
return getOrCreateAnalyticsAnonymousId();
|
|
265
274
|
}
|
|
@@ -1020,12 +1029,95 @@ function exceptionEventProperties(event) {
|
|
|
1020
1029
|
...(event.extra ? { exceptionExtra: event.extra } : {}),
|
|
1021
1030
|
};
|
|
1022
1031
|
}
|
|
1032
|
+
/**
|
|
1033
|
+
* Resolve browser PostHog config, or `undefined` when error capture should not
|
|
1034
|
+
* reach PostHog. Reads the SSR-injected shell config first, then Vite env for
|
|
1035
|
+
* static/SPA builds that never render through the SSR handler.
|
|
1036
|
+
*/
|
|
1037
|
+
function posthogErrorConfig() {
|
|
1038
|
+
const shell = window.__AGENT_NATIVE_CONFIG__;
|
|
1039
|
+
if (shell?.posthogErrorTracking === false)
|
|
1040
|
+
return undefined;
|
|
1041
|
+
const env = import.meta.env;
|
|
1042
|
+
// Static/SPA builds never render through the SSR handler, so they never see
|
|
1043
|
+
// the shell config that carries the server-side opt-out. Without this a
|
|
1044
|
+
// Vite-only deployment could not honour `POSTHOG_ERROR_TRACKING=false`
|
|
1045
|
+
// short of deleting the public key.
|
|
1046
|
+
if (env?.VITE_POSTHOG_ERROR_TRACKING?.trim().toLowerCase() === "false") {
|
|
1047
|
+
return undefined;
|
|
1048
|
+
}
|
|
1049
|
+
const key = shell?.posthogKey || env?.VITE_POSTHOG_KEY;
|
|
1050
|
+
if (!key)
|
|
1051
|
+
return undefined;
|
|
1052
|
+
const host = (shell?.posthogHost ||
|
|
1053
|
+
env?.VITE_POSTHOG_HOST ||
|
|
1054
|
+
"https://us.i.posthog.com").replace(/\/+$/, "");
|
|
1055
|
+
return { key, host };
|
|
1056
|
+
}
|
|
1057
|
+
/**
|
|
1058
|
+
* Send the exception straight to PostHog's event endpoint.
|
|
1059
|
+
*
|
|
1060
|
+
* Not relayed through `/_agent-native/track`: that route requires a resolved
|
|
1061
|
+
* session, so every signed-out crash would be dropped without a trace.
|
|
1062
|
+
*
|
|
1063
|
+
* `distinct_id` uses the signed-in user id when we have one so browser events
|
|
1064
|
+
* join the server's events for the same person; otherwise the stable anonymous
|
|
1065
|
+
* id, which `$identify` later aliases on login.
|
|
1066
|
+
*/
|
|
1067
|
+
function sendPostHogExceptionEvent(event) {
|
|
1068
|
+
const config = posthogErrorConfig();
|
|
1069
|
+
if (!config)
|
|
1070
|
+
return;
|
|
1071
|
+
try {
|
|
1072
|
+
const session = errorCaptureSessionContext();
|
|
1073
|
+
const body = JSON.stringify({
|
|
1074
|
+
api_key: config.key,
|
|
1075
|
+
event: AGENT_NATIVE_EXCEPTION_EVENT_NAME,
|
|
1076
|
+
properties: {
|
|
1077
|
+
distinct_id: getTrackingUserId() || session.anonymousId || "anonymous",
|
|
1078
|
+
...toPostHogExceptionProperties({
|
|
1079
|
+
type: event.type,
|
|
1080
|
+
value: event.message,
|
|
1081
|
+
stack: event.stack,
|
|
1082
|
+
handled: event.handled,
|
|
1083
|
+
level: event.level,
|
|
1084
|
+
}),
|
|
1085
|
+
$current_url: event.url,
|
|
1086
|
+
$session_id: session.sessionId,
|
|
1087
|
+
...(session.replayId ? { $replay_id: session.replayId } : {}),
|
|
1088
|
+
...(event.release ? { release: event.release } : {}),
|
|
1089
|
+
...(event.environment ? { environment: event.environment } : {}),
|
|
1090
|
+
...(event.tags ? { exceptionTags: event.tags } : {}),
|
|
1091
|
+
source: "browser",
|
|
1092
|
+
},
|
|
1093
|
+
timestamp: event.occurredAt,
|
|
1094
|
+
});
|
|
1095
|
+
const endpoint = `${config.host}/i/v0/e/`;
|
|
1096
|
+
if (navigator.sendBeacon) {
|
|
1097
|
+
// text/plain avoids a CORS preflight the page may not survive.
|
|
1098
|
+
const blob = new Blob([body], { type: "text/plain;charset=UTF-8" });
|
|
1099
|
+
if (navigator.sendBeacon(endpoint, blob))
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
fetch(endpoint, {
|
|
1103
|
+
method: "POST",
|
|
1104
|
+
body,
|
|
1105
|
+
keepalive: true,
|
|
1106
|
+
headers: { "Content-Type": "text/plain;charset=UTF-8" },
|
|
1107
|
+
}).catch(() => { });
|
|
1108
|
+
// coercion-ok: throwing would replace the page's real error
|
|
1109
|
+
}
|
|
1110
|
+
catch {
|
|
1111
|
+
// Error reporting must never mask the original failure.
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1023
1114
|
function sendExceptionEvent(event) {
|
|
1024
1115
|
// Route through the existing first-party analytics ingest as a dedicated
|
|
1025
1116
|
// `$exception` event. This reuses the public-key auth + sendBeacon/keepalive
|
|
1026
1117
|
// transport; the server forks it into error_issues/error_events and still
|
|
1027
1118
|
// records it in analytics_events for alerting.
|
|
1028
1119
|
trackEvent(AGENT_NATIVE_EXCEPTION_EVENT_NAME, exceptionEventProperties(event));
|
|
1120
|
+
sendPostHogExceptionEvent(event);
|
|
1029
1121
|
}
|
|
1030
1122
|
function emitExceptionToReplay(event) {
|
|
1031
1123
|
_sessionReplayModuleForCapture?.emitSessionReplayException?.({
|
|
@@ -1040,7 +1132,9 @@ function errorCaptureAutoEnabled() {
|
|
|
1040
1132
|
const publicKey = _agentNativeAnalyticsPublicKey ||
|
|
1041
1133
|
import.meta.env
|
|
1042
1134
|
?.VITE_AGENT_NATIVE_ANALYTICS_PUBLIC_KEY;
|
|
1043
|
-
|
|
1135
|
+
// A PostHog public key is an equally explicit opt-in — an app running
|
|
1136
|
+
// PostHog and no Agent Native Analytics should still report browser crashes.
|
|
1137
|
+
return !!publicKey || !!posthogErrorConfig();
|
|
1044
1138
|
}
|
|
1045
1139
|
function maybeInstallErrorCapture(config) {
|
|
1046
1140
|
if (typeof window === "undefined")
|