@agent-native/core 0.22.4 → 0.22.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/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +10 -9
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/builder-gateway-headers.d.ts +10 -0
- package/dist/agent/engine/builder-gateway-headers.d.ts.map +1 -0
- package/dist/agent/engine/builder-gateway-headers.js +44 -0
- package/dist/agent/engine/builder-gateway-headers.js.map +1 -0
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +1 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +60 -1
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
- package/dist/agent/engine/translate-ai-sdk.js +3 -2
- package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
- package/dist/agent/engine/translate-anthropic.d.ts +36 -2
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
- package/dist/agent/engine/translate-anthropic.js +159 -6
- package/dist/agent/engine/translate-anthropic.js.map +1 -1
- package/dist/agent/engine/types.d.ts +4 -2
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/engine/types.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +69 -9
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/connect.d.ts +1 -1
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +5 -2
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +48 -6
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +7 -1
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +4 -3
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +1 -0
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +11 -5
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/api-path.d.ts.map +1 -1
- package/dist/client/api-path.js +2 -0
- package/dist/client/api-path.js.map +1 -1
- package/dist/client/embed-auth.d.ts +4 -0
- package/dist/client/embed-auth.d.ts.map +1 -0
- package/dist/client/embed-auth.js +102 -0
- package/dist/client/embed-auth.js.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +7 -3
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +2 -0
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-chat-models.d.ts.map +1 -1
- package/dist/client/use-chat-models.js +4 -3
- package/dist/client/use-chat-models.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +7 -7
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-chat-threads.spec.js +70 -0
- package/dist/client/use-chat-threads.spec.js.map +1 -1
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +4 -0
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/deploy/route-discovery.js +1 -1
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +49 -21
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/builtin-tools.d.ts +1 -0
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +147 -8
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +79 -51
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/embed-app.d.ts +14 -0
- package/dist/mcp/embed-app.d.ts.map +1 -0
- package/dist/mcp/embed-app.js +191 -0
- package/dist/mcp/embed-app.js.map +1 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +2 -1
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +4 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +4 -1
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +10 -1
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +9 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +7 -6
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +64 -15
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +2 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +7 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +6 -4
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +91 -12
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/embed-route.d.ts +8 -0
- package/dist/server/embed-route.d.ts.map +1 -0
- package/dist/server/embed-route.js +71 -0
- package/dist/server/embed-route.js.map +1 -0
- package/dist/server/embed-session.d.ts +65 -0
- package/dist/server/embed-session.d.ts.map +1 -0
- package/dist/server/embed-session.js +433 -0
- package/dist/server/embed-session.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +10 -0
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +4 -2
- package/dist/server/security-headers.js.map +1 -1
- package/dist/shared/embed-auth.d.ts +6 -0
- package/dist/shared/embed-auth.d.ts.map +1 -0
- package/dist/shared/embed-auth.js +6 -0
- package/dist/shared/embed-auth.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/templates/workspace-core/AGENTS.md +14 -5
- package/dist/templates/workspace-root/AGENTS.md +5 -0
- package/dist/templates/workspace-root/README.md +3 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +10 -1
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/a2a-protocol.md +5 -1
- package/docs/content/actions.md +19 -4
- package/docs/content/cli-adapters.md +5 -0
- package/docs/content/client.md +35 -1
- package/docs/content/database.md +29 -0
- package/docs/content/dispatch.md +7 -1
- package/docs/content/external-agents.md +37 -13
- package/docs/content/key-concepts.md +3 -3
- package/docs/content/messaging.md +1 -1
- package/docs/content/onboarding.md +26 -0
- package/docs/content/template-content.md +1 -1
- package/docs/content/template-dispatch.md +9 -0
- package/docs/content/template-starter.md +2 -2
- package/package.json +1 -1
- package/src/templates/workspace-core/AGENTS.md +14 -5
- package/src/templates/workspace-root/AGENTS.md +5 -0
- package/src/templates/workspace-root/README.md +3 -0
- /package/docs/content/{template-video.md → template-videos.md} +0 -0
package/dist/server/auth.d.ts
CHANGED
|
@@ -240,12 +240,13 @@ export declare function runAuthGuard(event: H3Event): Promise<Response | object
|
|
|
240
240
|
*
|
|
241
241
|
* Resolution chain:
|
|
242
242
|
* 1. ACCESS_TOKEN → check legacy cookie-based token sessions
|
|
243
|
-
* 2.
|
|
244
|
-
* 3.
|
|
245
|
-
* 4.
|
|
246
|
-
* 5.
|
|
247
|
-
* 6.
|
|
248
|
-
* 7.
|
|
243
|
+
* 2. Embed session → short-lived token minted by /_agent-native/embed/start
|
|
244
|
+
* 3. BYOA custom getSession → delegate to template callback
|
|
245
|
+
* 4. Bearer legacy session → check Authorization: Bearer against sessions
|
|
246
|
+
* 5. Better Auth → check session via Better Auth API (cookie or Bearer)
|
|
247
|
+
* 6. Legacy cookie → check an_session cookie in legacy sessions table
|
|
248
|
+
* 7. Desktop SSO broker (Electron loopback only)
|
|
249
|
+
* 8. Mobile _session query param → promote to cookie
|
|
249
250
|
*
|
|
250
251
|
* Returns `null` for unauthenticated requests. There is no dev-mode bypass:
|
|
251
252
|
* local development uses the same Better Auth signup flow as production. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/server/auth.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import { defineEventHandler, getMethod, getQuery, getRequestIP, setResponseHeader, setResponseStatus, getCookie, setCookie, deleteCookie, getHeader, } from "h3";
|
|
3
|
+
import { EMBED_START_PATH } from "../shared/embed-auth.js";
|
|
4
|
+
import { resolveEmbedSessionFromRequest } from "./embed-session.js";
|
|
3
5
|
// In h3 v2, `event.req` IS the web Request — but in Nitro's dev server (srvx
|
|
4
6
|
// runtime), event.url and event.req share the same underlying URL object.
|
|
5
7
|
// When registerMiddleware strips the mount prefix from event.url.pathname, it
|
|
@@ -901,7 +903,7 @@ function createAuthGuardFn() {
|
|
|
901
903
|
// returns to the same deep link). It must bypass the guard's blanket
|
|
902
904
|
// 401-for-/_agent-native/* so an external-agent "Open in … →" link
|
|
903
905
|
// clicked in any browser/webview lands correctly.
|
|
904
|
-
if (p === "/_agent-native/open") {
|
|
906
|
+
if (p === "/_agent-native/open" || p === EMBED_START_PATH) {
|
|
905
907
|
return;
|
|
906
908
|
}
|
|
907
909
|
// Integration webhook endpoints verify authenticity via platform-specific
|
|
@@ -1266,12 +1268,13 @@ async function backfillSessionOrg(session) {
|
|
|
1266
1268
|
*
|
|
1267
1269
|
* Resolution chain:
|
|
1268
1270
|
* 1. ACCESS_TOKEN → check legacy cookie-based token sessions
|
|
1269
|
-
* 2.
|
|
1270
|
-
* 3.
|
|
1271
|
-
* 4.
|
|
1272
|
-
* 5.
|
|
1273
|
-
* 6.
|
|
1274
|
-
* 7.
|
|
1271
|
+
* 2. Embed session → short-lived token minted by /_agent-native/embed/start
|
|
1272
|
+
* 3. BYOA custom getSession → delegate to template callback
|
|
1273
|
+
* 4. Bearer legacy session → check Authorization: Bearer against sessions
|
|
1274
|
+
* 5. Better Auth → check session via Better Auth API (cookie or Bearer)
|
|
1275
|
+
* 6. Legacy cookie → check an_session cookie in legacy sessions table
|
|
1276
|
+
* 7. Desktop SSO broker (Electron loopback only)
|
|
1277
|
+
* 8. Mobile _session query param → promote to cookie
|
|
1275
1278
|
*
|
|
1276
1279
|
* Returns `null` for unauthenticated requests. There is no dev-mode bypass:
|
|
1277
1280
|
* local development uses the same Better Auth signup flow as production. The
|
|
@@ -1297,7 +1300,19 @@ async function resolveSessionUncached(event) {
|
|
|
1297
1300
|
if (cookieSession)
|
|
1298
1301
|
return cookieSession;
|
|
1299
1302
|
}
|
|
1300
|
-
// 2.
|
|
1303
|
+
// 2. MCP App embed session. This is a short-lived browser session minted
|
|
1304
|
+
// from a one-time ticket that was scoped to the authenticated MCP caller.
|
|
1305
|
+
// It lets an inline MCP App iframe load the real app without reusing the
|
|
1306
|
+
// MCP bearer token as a browser cookie.
|
|
1307
|
+
const embedSession = await resolveEmbedSessionFromRequest(event);
|
|
1308
|
+
if (embedSession) {
|
|
1309
|
+
return {
|
|
1310
|
+
email: embedSession.email,
|
|
1311
|
+
token: embedSession.token,
|
|
1312
|
+
...(embedSession.orgId ? { orgId: embedSession.orgId } : {}),
|
|
1313
|
+
};
|
|
1314
|
+
}
|
|
1315
|
+
// 3. BYOA custom getSession
|
|
1301
1316
|
if (customGetSession) {
|
|
1302
1317
|
const session = await customGetSession(event);
|
|
1303
1318
|
if (session)
|
|
@@ -1316,12 +1331,12 @@ async function resolveSessionUncached(event) {
|
|
|
1316
1331
|
// Fall through to mobile _session check
|
|
1317
1332
|
}
|
|
1318
1333
|
else {
|
|
1319
|
-
//
|
|
1334
|
+
// 4. Bearer legacy session. Desktop/native clients can persist a session
|
|
1320
1335
|
// token outside the WebView cookie jar and attach it to all app requests.
|
|
1321
1336
|
const bearerSession = await getBearerLegacySession(event);
|
|
1322
1337
|
if (bearerSession)
|
|
1323
1338
|
return bearerSession;
|
|
1324
|
-
//
|
|
1339
|
+
// 5. Better Auth session (cookie or Bearer token)
|
|
1325
1340
|
try {
|
|
1326
1341
|
const ba = getBetterAuthSync();
|
|
1327
1342
|
if (ba) {
|
|
@@ -1336,11 +1351,11 @@ async function resolveSessionUncached(event) {
|
|
|
1336
1351
|
catch (e) {
|
|
1337
1352
|
console.error("[auth] ba.api.getSession error:", e);
|
|
1338
1353
|
}
|
|
1339
|
-
//
|
|
1354
|
+
// 6. Legacy cookie fallback (for sessions created before migration)
|
|
1340
1355
|
const cookieSession = await getLegacyCookieSession(event);
|
|
1341
1356
|
if (cookieSession)
|
|
1342
1357
|
return cookieSession;
|
|
1343
|
-
//
|
|
1358
|
+
// 7. Desktop SSO broker fallback.
|
|
1344
1359
|
// Each template in the Electron desktop app has its own database, so
|
|
1345
1360
|
// a session token created by one template doesn't resolve in another.
|
|
1346
1361
|
// When an Electron request has no resolvable session, trust the
|
|
@@ -1354,7 +1369,7 @@ async function resolveSessionUncached(event) {
|
|
|
1354
1369
|
return { email: sso.email, token: sso.token };
|
|
1355
1370
|
}
|
|
1356
1371
|
}
|
|
1357
|
-
//
|
|
1372
|
+
// 8. Mobile WebView bridge — _session query param
|
|
1358
1373
|
const querySession = await promoteQuerySession(event);
|
|
1359
1374
|
if (querySession)
|
|
1360
1375
|
return querySession;
|
|
@@ -2157,6 +2172,10 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
2157
2172
|
app.use("/_agent-native/auth/ba", defineEventHandler(async (event) => {
|
|
2158
2173
|
const reqPath = event.url?.pathname ?? event.path ?? "";
|
|
2159
2174
|
const isResetPassword = reqPath.includes("reset-password") && getMethod(event) === "POST";
|
|
2175
|
+
const isSendVerificationEmail = reqPath.includes("send-verification-email") &&
|
|
2176
|
+
getMethod(event) === "POST";
|
|
2177
|
+
const authRequest = toWebRequest(event);
|
|
2178
|
+
let requestForAuth = authRequest;
|
|
2160
2179
|
// Pre-read the body for reset-password so we can auto-verify the
|
|
2161
2180
|
// user's email after they save the new password. CRUCIAL: clone
|
|
2162
2181
|
// the Request first — h3 v2 `event.req` is the live web Request,
|
|
@@ -2168,7 +2187,7 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
2168
2187
|
let resetUserId;
|
|
2169
2188
|
if (isResetPassword) {
|
|
2170
2189
|
try {
|
|
2171
|
-
const cloned =
|
|
2190
|
+
const cloned = authRequest.clone();
|
|
2172
2191
|
const body = (await cloned.json().catch(() => undefined));
|
|
2173
2192
|
resetToken = body?.token;
|
|
2174
2193
|
}
|
|
@@ -2194,7 +2213,37 @@ async function mountBetterAuthRoutes(app, options) {
|
|
|
2194
2213
|
}
|
|
2195
2214
|
}
|
|
2196
2215
|
}
|
|
2197
|
-
|
|
2216
|
+
// The signup wrapper sanitizes callbackURL before calling Better Auth,
|
|
2217
|
+
// but the resend endpoint is exposed directly so users can request a
|
|
2218
|
+
// fresh link while unauthenticated. Keep that path equally strict:
|
|
2219
|
+
// only same-origin relative return paths survive into the email.
|
|
2220
|
+
if (isSendVerificationEmail) {
|
|
2221
|
+
try {
|
|
2222
|
+
const body = (await authRequest
|
|
2223
|
+
.clone()
|
|
2224
|
+
.json()
|
|
2225
|
+
.catch(() => undefined));
|
|
2226
|
+
if (body && typeof body.callbackURL === "string") {
|
|
2227
|
+
const callbackURL = safeReturnPath(body.callbackURL);
|
|
2228
|
+
if (callbackURL !== body.callbackURL) {
|
|
2229
|
+
const headers = new Headers(authRequest.headers);
|
|
2230
|
+
headers.delete("content-length");
|
|
2231
|
+
headers.set("content-type", "application/json");
|
|
2232
|
+
requestForAuth = new Request(authRequest.url, {
|
|
2233
|
+
method: authRequest.method,
|
|
2234
|
+
headers,
|
|
2235
|
+
body: JSON.stringify({ ...body, callbackURL }),
|
|
2236
|
+
duplex: "half",
|
|
2237
|
+
});
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
catch {
|
|
2242
|
+
// Let Better Auth handle malformed bodies and return its normal
|
|
2243
|
+
// validation error.
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2246
|
+
const response = await auth.handler(requestForAuth);
|
|
2198
2247
|
const isResponse = response != null &&
|
|
2199
2248
|
typeof response.status === "number" &&
|
|
2200
2249
|
typeof response.headers?.get === "function";
|