@agent-native/core 0.84.67 → 0.85.1
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 +2 -2
- package/corpus/core/CHANGELOG.md +20 -0
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +55 -0
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +55 -0
- package/corpus/core/docs/content/tracking.mdx +2 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/action-continuation-guidance.ts +1 -1
- package/corpus/core/src/agent/production-agent.ts +222 -38
- package/corpus/core/src/agent/run-manager.ts +79 -0
- package/corpus/core/src/agent/run-store.ts +122 -8
- package/corpus/core/src/agent/types.ts +13 -0
- package/corpus/core/src/client/RunStuckBanner.tsx +14 -0
- package/corpus/core/src/client/agent-chat-adapter.ts +475 -0
- package/corpus/core/src/client/analytics.ts +2 -0
- package/corpus/core/src/client/error-format.ts +4 -0
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +1 -1
- package/corpus/core/src/client/session-replay.ts +774 -2
- package/corpus/core/src/client/sse-event-processor.ts +65 -9
- package/corpus/core/src/client/use-run-stuck-detection.ts +31 -7
- package/corpus/core/src/db/runtime-diagnostics.ts +331 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +115 -2
- package/corpus/core/src/server/core-routes-plugin.ts +91 -4
- package/corpus/core/src/server/http-response-telemetry.ts +189 -0
- package/corpus/core/src/server/self-dispatch.ts +29 -0
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +53 -1
- package/corpus/templates/analytics/AGENTS.md +13 -0
- package/corpus/templates/analytics/actions/view-screen.ts +25 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +20 -0
- package/corpus/templates/analytics/app/global.css +55 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +100 -1
- package/corpus/templates/analytics/app/i18n-data.ts +1226 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +3 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/EmailReportDialog.tsx +182 -144
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +11 -18
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +11 -18
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +49 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +557 -0
- package/corpus/templates/analytics/app/pages/sessions/session-replay-devtools.ts +274 -0
- package/corpus/templates/analytics/app/pages/settings/AlertRulesSettingsCard.tsx +974 -0
- package/corpus/templates/analytics/changelog/2026-07-02-alert-rules-can-now-be-viewed-and-managed-from-settings.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-recent-ask-chats-show-a-loading-placeholder-while-your-chat-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-session-replays-now-capture-console-logs-and-network-request.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-sharing-status-labels-use-neutral-icons-instead-of-colored-d.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-02-the-session-replay-viewer-has-a-dev-tools-panel-with-console.md +6 -0
- package/corpus/templates/analytics/server/db/schema.ts +3 -0
- package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +4 -0
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +142 -1
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +369 -8
- package/corpus/templates/analytics/server/lib/session-replay.ts +76 -2
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts +101 -0
- package/corpus/templates/analytics/shared/session-replay-diagnostics.ts +78 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +24 -12
- package/corpus/templates/design/changelog/2026-07-02-the-temporary-code-tab-is-hidden-from-the-design-editor-side.md +6 -0
- package/corpus/templates/plan/actions/create-visual-recap.ts +1 -1
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +3 -1
- package/corpus/templates/plan/actions/update-visual-plan.ts +1 -1
- package/corpus/templates/plan/changelog/2026-07-02-trying-to-edit-a-recap-or-plan-you-can-only-view-now-explain.md +6 -0
- package/corpus/templates/plan/server/plans.ts +26 -9
- package/dist/agent/action-continuation-guidance.js +1 -1
- package/dist/agent/action-continuation-guidance.js.map +1 -1
- package/dist/agent/production-agent.d.ts +9 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +168 -34
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +29 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +73 -0
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +41 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +105 -7
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/types.d.ts +13 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +13 -0
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +410 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +2 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/session-replay.d.ts +36 -0
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +579 -1
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +20 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +42 -11
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts +14 -4
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +18 -4
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +2 -2
- package/dist/db/runtime-diagnostics.d.ts +52 -0
- package/dist/db/runtime-diagnostics.d.ts.map +1 -0
- package/dist/db/runtime-diagnostics.js +250 -0
- package/dist/db/runtime-diagnostics.js.map +1 -0
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +101 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +17 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +65 -5
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/http-response-telemetry.d.ts +4 -0
- package/dist/server/http-response-telemetry.d.ts.map +1 -0
- package/dist/server/http-response-telemetry.js +174 -0
- package/dist/server/http-response-telemetry.js.map +1 -0
- package/dist/server/self-dispatch.d.ts +17 -0
- package/dist/server/self-dispatch.d.ts.map +1 -1
- package/dist/server/self-dispatch.js +11 -0
- package/dist/server/self-dispatch.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/docs/content/locales/ar-SA/tracking.mdx +55 -0
- package/docs/content/locales/de-DE/tracking.mdx +55 -0
- package/docs/content/locales/es-ES/tracking.mdx +55 -0
- package/docs/content/locales/fr-FR/tracking.mdx +55 -0
- package/docs/content/locales/hi-IN/tracking.mdx +55 -0
- package/docs/content/locales/ja-JP/tracking.mdx +55 -0
- package/docs/content/locales/ko-KR/tracking.mdx +55 -0
- package/docs/content/locales/pt-BR/tracking.mdx +55 -0
- package/docs/content/locales/zh-CN/tracking.mdx +55 -0
- package/docs/content/locales/zh-TW/tracking.mdx +55 -0
- package/docs/content/tracking.mdx +2 -0
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { H3Event } from "h3";
|
|
2
|
+
import { type DatabaseSchemaHealthResult } from "../db/runtime-diagnostics.js";
|
|
2
3
|
import { type AuthSession } from "./auth.js";
|
|
3
4
|
import type { EnvKeyConfig } from "./create-server.js";
|
|
4
5
|
/**
|
|
@@ -14,10 +15,24 @@ export declare function getFrameworkEnvKeys(): EnvKeyConfig[];
|
|
|
14
15
|
export interface DbHealthProbeResult {
|
|
15
16
|
/** The serverless function is live and served the request. */
|
|
16
17
|
ok: true;
|
|
18
|
+
/** Database + optional schema readiness for stricter production monitors. */
|
|
19
|
+
ready: boolean;
|
|
17
20
|
/** A trivial `SELECT 1` reached the database (false = no DB or unreachable). */
|
|
18
21
|
db: boolean;
|
|
19
22
|
/** Round-trip time of the probe in milliseconds. */
|
|
20
23
|
ms: number;
|
|
24
|
+
/** Redacted database routing details useful for deploy/runtime checks. */
|
|
25
|
+
database: {
|
|
26
|
+
configured: boolean;
|
|
27
|
+
source: string;
|
|
28
|
+
dialect: string;
|
|
29
|
+
urlHash?: string;
|
|
30
|
+
appName?: string;
|
|
31
|
+
authTokenConfigured: boolean;
|
|
32
|
+
netlifyDatabaseUrlConfigured: boolean;
|
|
33
|
+
};
|
|
34
|
+
/** Optional metadata-only schema compatibility check. */
|
|
35
|
+
schema?: DatabaseSchemaHealthResult;
|
|
21
36
|
}
|
|
22
37
|
/**
|
|
23
38
|
* Run a trivial `SELECT 1` to confirm the database is reachable and, as a side
|
|
@@ -31,6 +46,8 @@ export interface DbHealthProbeResult {
|
|
|
31
46
|
*/
|
|
32
47
|
export declare function runDbHealthProbe(exec?: () => {
|
|
33
48
|
execute: (sql: string) => Promise<unknown>;
|
|
49
|
+
}, options?: {
|
|
50
|
+
schema?: boolean;
|
|
34
51
|
}): Promise<DbHealthProbeResult>;
|
|
35
52
|
interface BuilderWaitlistFormTarget {
|
|
36
53
|
formId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-routes-plugin.d.ts","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"core-routes-plugin.d.ts","sourceRoot":"","sources":["../../src/server/core-routes-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { getState, putState, deleteState, listComposeDrafts, getComposeDraft, pu
|
|
|
9
9
|
import { mountBrowserSessionRoutes } from "../browser-sessions/routes.js";
|
|
10
10
|
import { mountDbAdminRoutes } from "../db-admin/routes.js";
|
|
11
11
|
import { getDbExec } from "../db/client.js";
|
|
12
|
+
import { getDatabaseRuntimeFingerprint, getRuntimeDebugFingerprint, runDatabaseSchemaHealthCheck, } from "../db/runtime-diagnostics.js";
|
|
12
13
|
import { uploadFile, getActiveFileUploadProviderForRequest, listFileUploadProviders, } from "../file-upload/index.js";
|
|
13
14
|
import { handleMcpConnect } from "../mcp/connect-route.js";
|
|
14
15
|
import { handleMcpOAuth, handleMcpOAuthAuthorizationServerMetadata, handleMcpOAuthProtectedResourceMetadata, } from "../mcp/oauth-route.js";
|
|
@@ -41,6 +42,7 @@ import { getH3App, awaitBootstrap, markDefaultPluginProvided, trackPluginInit, }
|
|
|
41
42
|
import { getAppBasePath, getOrigin } from "./google-oauth.js";
|
|
42
43
|
import { createGoogleRealtimeSessionHandler } from "./google-realtime-session.js";
|
|
43
44
|
import { readBody, DEFAULT_UPLOAD_MAX_FILE_BYTES, isAllowedUploadMimeType, } from "./h3-helpers.js";
|
|
45
|
+
import { createHttpResponseTelemetryMiddleware } from "./http-response-telemetry.js";
|
|
44
46
|
import { isIdentitySsoEnabled } from "./identity-sso-store.js";
|
|
45
47
|
import { handleIdentitySso } from "./identity-sso.js";
|
|
46
48
|
import { createOpenRouteHandler } from "./open-route.js";
|
|
@@ -96,17 +98,40 @@ export function getFrameworkEnvKeys() {
|
|
|
96
98
|
* is still live, so the probe reports `db: false` rather than throwing. The
|
|
97
99
|
* `exec` parameter is injectable purely for tests.
|
|
98
100
|
*/
|
|
99
|
-
export async function runDbHealthProbe(exec = getDbExec) {
|
|
101
|
+
export async function runDbHealthProbe(exec = getDbExec, options = {}) {
|
|
100
102
|
const startedAt = Date.now();
|
|
101
103
|
let db = false;
|
|
104
|
+
let schema;
|
|
105
|
+
const dbExec = exec();
|
|
102
106
|
try {
|
|
103
|
-
await
|
|
107
|
+
await dbExec.execute("SELECT 1");
|
|
104
108
|
db = true;
|
|
105
109
|
}
|
|
106
110
|
catch {
|
|
107
111
|
// Live even when the DB is unreachable or the app has no database.
|
|
108
112
|
}
|
|
109
|
-
|
|
113
|
+
if (db && options.schema) {
|
|
114
|
+
schema = await runDatabaseSchemaHealthCheck({
|
|
115
|
+
exec: dbExec,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const database = getDatabaseRuntimeFingerprint();
|
|
119
|
+
return {
|
|
120
|
+
ok: true,
|
|
121
|
+
ready: db && (!schema || schema.ok),
|
|
122
|
+
db,
|
|
123
|
+
ms: Date.now() - startedAt,
|
|
124
|
+
database: {
|
|
125
|
+
configured: database.configured,
|
|
126
|
+
source: database.source,
|
|
127
|
+
dialect: database.dialect,
|
|
128
|
+
urlHash: database.urlHash,
|
|
129
|
+
appName: database.appName,
|
|
130
|
+
authTokenConfigured: database.authTokenConfigured,
|
|
131
|
+
netlifyDatabaseUrlConfigured: database.netlifyDatabaseUrlConfigured,
|
|
132
|
+
},
|
|
133
|
+
...(schema ? { schema } : {}),
|
|
134
|
+
};
|
|
110
135
|
}
|
|
111
136
|
const DEFAULT_BUILDER_WAITLIST_FORM_ID = "DYTHuM0jlV";
|
|
112
137
|
const DEFAULT_BUILDER_WAITLIST_FORMS_ORIGIN = "https://forms.agent-native.com";
|
|
@@ -534,6 +559,7 @@ export function createCoreRoutesPlugin(options = {}) {
|
|
|
534
559
|
// Audit module not available — skip
|
|
535
560
|
}
|
|
536
561
|
const P = FRAMEWORK_ROUTE_PREFIX;
|
|
562
|
+
getH3App(nitroApp).use(createHttpResponseTelemetryMiddleware());
|
|
537
563
|
// Security response headers — emitted on every framework response.
|
|
538
564
|
// Mounted before route handlers so 4xx/5xx error pages also carry the
|
|
539
565
|
// headers. Routes that need to tighten a specific header override via
|
|
@@ -686,13 +712,47 @@ export function createCoreRoutesPlugin(options = {}) {
|
|
|
686
712
|
// Health + DB warmup — liveness probe that touches the database so
|
|
687
713
|
// uptime monitors and the keep-warm cron prevent a scale-to-zero
|
|
688
714
|
// serverless DB (e.g. Neon) from cold-starting on the next real
|
|
689
|
-
// request. Public, side-effect free, and never cached.
|
|
715
|
+
// request. Public, side-effect free, and never cached. Add ?schema=1
|
|
716
|
+
// for metadata-only schema checks, and ?strict=1 to turn a not-ready
|
|
717
|
+
// DB/schema probe into a failing HTTP status for monitors.
|
|
690
718
|
if (!options.disableHealth) {
|
|
691
719
|
getH3App(nitroApp).use(`${P}/health`, defineEventHandler(async (event) => {
|
|
692
720
|
setResponseHeader(event, "cache-control", "no-store");
|
|
693
|
-
|
|
721
|
+
const schema = event.url?.searchParams.get("schema") === "1" ||
|
|
722
|
+
event.url?.searchParams.get("schema") === "true";
|
|
723
|
+
const strict = event.url?.searchParams.get("strict") === "1" ||
|
|
724
|
+
event.url?.searchParams.get("strict") === "true" ||
|
|
725
|
+
process.env.AGENT_NATIVE_HEALTH_STRICT_SCHEMA === "true";
|
|
726
|
+
const result = await runDbHealthProbe(getDbExec, { schema });
|
|
727
|
+
if (strict && !result.ready)
|
|
728
|
+
setResponseStatus(event, 503);
|
|
729
|
+
return result;
|
|
694
730
|
}));
|
|
695
731
|
}
|
|
732
|
+
getH3App(nitroApp).use(`${P}/debug/runtime`, defineEventHandler(async (event) => {
|
|
733
|
+
setResponseHeader(event, "cache-control", "no-store");
|
|
734
|
+
const session = await getSession(event).catch(() => null);
|
|
735
|
+
const productionLike = process.env.NODE_ENV === "production" ||
|
|
736
|
+
process.env.NETLIFY === "true" ||
|
|
737
|
+
process.env.VERCEL === "1";
|
|
738
|
+
if (!session?.email && productionLike) {
|
|
739
|
+
setResponseStatus(event, 401);
|
|
740
|
+
return { error: "Authentication required" };
|
|
741
|
+
}
|
|
742
|
+
const schema = await runDatabaseSchemaHealthCheck().catch((err) => ({
|
|
743
|
+
ok: false,
|
|
744
|
+
checked: false,
|
|
745
|
+
dialect: getDatabaseRuntimeFingerprint().dialect,
|
|
746
|
+
missingTables: [],
|
|
747
|
+
missingColumns: [],
|
|
748
|
+
error: err instanceof Error ? err.message : String(err),
|
|
749
|
+
}));
|
|
750
|
+
return {
|
|
751
|
+
ok: true,
|
|
752
|
+
runtime: getRuntimeDebugFingerprint(),
|
|
753
|
+
schema,
|
|
754
|
+
};
|
|
755
|
+
}));
|
|
696
756
|
getH3App(nitroApp).use(`${P}/speculation-rules.json`, defineEventHandler((event) => {
|
|
697
757
|
// `createH3SSRHandler` points the Speculation-Rules response header
|
|
698
758
|
// here to prevent Cloudflare Speed Brain from injecting its own
|